免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2819 | 回复: 1
打印 上一主题 下一主题

Oracle 11g DataGuard物理standby配置1 [复制链接]

论坛徽章:
59
2015七夕节徽章
日期:2015-08-24 11:17:25ChinaUnix专家徽章
日期:2015-07-20 09:19:30每周论坛发贴之星
日期:2015-07-20 09:19:42ChinaUnix元老
日期:2015-07-20 11:04:38荣誉版主
日期:2015-07-20 11:05:19巳蛇
日期:2015-07-20 11:05:26CU十二周年纪念徽章
日期:2015-07-20 11:05:27IT运维版块每日发帖之星
日期:2015-07-20 11:05:34操作系统版块每日发帖之星
日期:2015-07-20 11:05:36程序设计版块每日发帖之星
日期:2015-07-20 11:05:40数据库技术版块每日发帖之星
日期:2015-07-20 11:05:432015年辞旧岁徽章
日期:2015-07-20 11:05:44
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-11-06 22:51 |只看该作者 |倒序浏览
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://wiliiwin.blog.51cto.com/928128/344276
看到oracle官方文档说oracle 11g dataguard在物理standby机器上出于open状态也可以应用redo,所以就在本地试验了下,确实如此,这样既可以应用redo也可以进行数据查询和数据库的备份.既解决了数据的容灾也解决了主数据库的压力.
Oracle dataguard 简介Dataguard分为2:

  物理standby:
此类型分为redo应用、read-only模式、read-write模式,当处于redo应用
的时候,不能进行相关的查询操作,当处于read-only,不能应用redo,但是oracle 11G版本之后,read-only下可以应用redo,当处于read-write, 暂停从primary接受redo数据.

逻辑 standby:
此类型可以在read-write模式下,可以从primary接受redo数据,并且可以应
redo.

关于2者的区别和特点,大家可以自己在网上进行搜索,我这里就不一一说了.

2种类型的相关进程:


物理standby相关进程
_ Remote file server (RFS)
负责从主数据库上接收归档文件
_ Archiver (ARCn)
将日志进行归档
Managed recovery process (MRP)
将归档文件应用到备用机上


逻辑standby相关进程
_ Remote file server (RFS)
负责从主数据库上接收归档文件
_ Archiver (ARCn)
将日志进行归档
Logical standby process (LSP)
将归档文件应用到备用机上
实验环境:
本次试验使用vmware server 1.6虚拟机,相关的IP规划如下:



192.168.137.93
primary
数据库


192.168.137.94
standby
数据库



在2个服务器上执行如下操作:


# vi /etc/hosts




192.168.137.93

node1


192.168.137.94
node2

软件环境   数据库:
oracle
11G

Dataguard 配置:primary服务器上执行如下操作

SQL> ALTER DATABASE FORCE LOGGING;

//
将primary数据库设置

                                        FORCE LOGGING模式


SQL> create pfile from spfile;
//
创建一个pfile,可以方便编辑,我这里把spfile放到另外一个路径,让oracle读取pfile.


pfile文件添加如下内容:

*.DB_UNIQUE_NAME=uqn_node1

//
自定义一个

                                          unique_name名字
*.LOG_ARCHIVE_CONFIG='DG_CONFIG=(uqn_node1,uqn_node2)'
//
此处为主备服务器unique_name

*.LOG_ARCHIVE_DEST_2='SERVICE=node2 ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=uqn_node2'
*.LOG_ARCHIVE_DEST_STATE_1=ENABLE
*.LOG_ARCHIVE_DEST_STATE_2=ENABLE
*.LOG_ARCHIVE_MAX_PROCESSES=30
*.FAL_SERVER=node2

//
这里为net

                                            service name
*.FAL_CLIENT=node1
*.STANDBY_FILE_MANAGEMENT=AUTO

假如数据库处在非归档模式下执行下面的sql(此步骤因是否处于归档模式而定)

SQL> SHUTDOWN IMMEDIATE;
SQL> STARTUP MOUNT;
SQL> ALTER DATABASE ARCHIVELOG;
SQL> ALTER DATABASE OPEN;

为STANDBY数据创建控制文件

SQL> SHUTDOWN IMMEDIATE;
SQL> STARTUP MOUNT;
SQL> ALTER DATABASE CREATE STANDBY CONTROLFILE AS '/home/oradata/wiliiwin.ctl';
SQL> ALTER DATABASE OPEN;

复制primary服务器的文件(数据文件、密码文件、pfile文件、控制文件)到STANDBY服务器上

# cd /home/oracle/dbs
# cp initora10.ora orapwora10 /home/oradata/
# cd /home/
$ scp -r admin/ oradata/ oracle@node2:/home/oradata

到STANDBY服务器上执行下面的操作

$ cd /home/oradata/ora10
$ rm -rf control0*
$ mv ../wiliiwin.ctl control01.ctl
$ cp control01.ctl control02.ctl
$ cp control01.ctl control03.ctl
$ cd /home/oracle/dbs
$ mv /home/oradata/initora10.ora .
$ mv /home/oradata/orapwora10 .
$ vi initora10.ora

//
需要把里面的内

                                            容稍微修改下



*.DB_UNIQUE_NAME=uqn_node2

//
自定义一个

                                            unique_name名字
*.LOG_ARCHIVE_CONFIG='DG_CONFIG=(uqn_node1,uqn_node2)'
//
此处为主备服务器的unique_name

*.LOG_ARCHIVE_DEST_2='SERVICE=node1 ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=uqn_node1'
*.LOG_ARCHIVE_DEST_STATE_1=ENABLE
*.LOG_ARCHIVE_DEST_STATE_2=ENABLE
*.LOG_ARCHIVE_MAX_PROCESSES=30
*.FAL_SERVER=node1

//
这里为net

                                            service name
*.FAL_CLIENT=node2
*.STANDBY_FILE_MANAGEMENT=AUTO

$ lsnrctl start

//
在primary和

                                      STANDBY服务器上都执行

在主服务器上启动数据库实例
SQL> startup;
$ sqlplus system/oracle@node1

//
在primary和STANDBY服务器上都进行测试下看时候能正常连接


在STANDBY服务器上启动数据库实例

//创建4个stanby redo 大小最好与主服务器大小相同,并且多一个文件,最好在Primary服务器上也做如下操作,方便之后的角色切换.

SQL> startup mount;
SQL> alter database add standby logfile group 4 '/home/oradata/ora10/stdREDO01.LOG' size 50m;

SQL> alter database add standby logfile group 5 '/home/oradata/ora10/stdREDO02LOG' size 50m;
SQL> alter database add standby logfile group 6 '/home/oradata/ora10/stdREDO03LOG' size 50m;
SQL> alter database add standby logfile group 7 '/home/oradata/ora10/stdREDO04LOG' size 50m;
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT FROM SESSION;

//
启动实时应用

测试dataguard数据是否同步测试同步是否正常方法1

在STANDBY服务器:

SQL> SELECT SEQUENCE#, FIRST_TIME, NEXT_TIME FROM V$ARCHIVED_LOG ORDER BY SEQUENCE#;

SEQUENCE# FIRST_TIM NEXT_TIME
---------- --------- ---------

4 04-MAY-10 04-MAY-10


5 04-MAY-10 04-MAY-10


在Primary服务器:

SQL> ALTER SYSTEM SWITCH LOGFILE;
//
触发归档


现在再回到STANDBY服务器上:

SQL> SELECT SEQUENCE#, FIRST_TIME, NEXT_TIME FROM V$ARCHIVED_LOG ORDER BY SEQUENCE#;


SEQUENCE# FIRST_TIM NEXT_TIME

---------- --------- ---------

4 04-MAY-10 04-MAY-10


5 04-MAY-10 04-MAY-10


6 04-MAY-10 04-MAY-10


SQL> SELECT SEQUENCE#,APPLIED FROM V$ARCHIVED_LOG ORDER BY SEQUENCE#;


SEQUENCE# APP

---------- ---

4 YES


5 YES


6 YES


发现有一条新的记录,说明同步是正常的.

测试同步是否正常方法2

在Primary服务器上创建一个表

SQL> create table wiliiwin(id integer, name char(10));
SQL> insert into wiliiwin values(1,'wiliiwin');
SQL> insert into wiliiwin values(2,'wiliiwiner');
SQL> insert into wiliiwin values(3,'wiliiwinsi');
SQL> ALTER SYSTEM SWITCH LOGFILE;

在STANDBY服务器上

SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;
//
取消执行redo




//
报错ORA-16136: Managed Standby Recovery not active


是由于MRP0服务没有启动,如下是查看各服务状态sql语句



SQL>select process,status,sequence# from v$managed_standby;



SQL>RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION; //
启动MRP0服务




SQL> ALTER DATABASE OPEN;
//
打开数据库,由于使用

                                       的oracle 11g 所以现
                                       在也可以应用redo.
SQL> select * from wiliiwin;


ID NAME

---------- ----------

1 wiliiwin


2 wiliiwiner


3 wiliiwinsi
//
可以看到数据已经同步过来了,由

                             于oracle 11G 在open状态下也可
                             以执行redo,所以现在在primary做
                             相关的操作,STANDBY也照样可以同
                             步过来

SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT;
//
使STANDBY恢复到mount状态

论坛徽章:
59
2015七夕节徽章
日期:2015-08-24 11:17:25ChinaUnix专家徽章
日期:2015-07-20 09:19:30每周论坛发贴之星
日期:2015-07-20 09:19:42ChinaUnix元老
日期:2015-07-20 11:04:38荣誉版主
日期:2015-07-20 11:05:19巳蛇
日期:2015-07-20 11:05:26CU十二周年纪念徽章
日期:2015-07-20 11:05:27IT运维版块每日发帖之星
日期:2015-07-20 11:05:34操作系统版块每日发帖之星
日期:2015-07-20 11:05:36程序设计版块每日发帖之星
日期:2015-07-20 11:05:40数据库技术版块每日发帖之星
日期:2015-07-20 11:05:432015年辞旧岁徽章
日期:2015-07-20 11:05:44
2 [报告]
发表于 2010-11-06 22:52 |只看该作者

Oracle 11g DataGuard物理standby配置2

原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://wiliiwin.blog.51cto.com/928128/344280
主从切换分为2种切换:

Switchover:

无损切换,通常是用户手动触发或者有计划的让其自动触发,不会导致数据丢失


Failover:

不可预知的原因导致Primary数据库故障并且短期内不能恢复就需要failover,可能会导


致数据的丢失.



在执行failover之前,尽可能将原Primary数据库的可用redo都复制到standby数据库.


如果要转换角色的standby处于maximum protection模式,需要你首先将其切换到


Maximum Performance
模式,操作如下:


SQL> ALTER DATABASE SET STANDBY DATABASE MAXIMUM

       PERFORMANCE;

Switchover切换步骤


在primary数据库检查是否支持switchover操作



SQL> select switchover_status from v$database;


SWITCHOVER_STATUS


-----------------


TO
STANDBY



如果该列值为”TO STANDBY”则表示primary数据库支持转换为STANDBY角色


注意:如果是第一次做Switchover的话,这里应该是SESSIONS ACTIVE状态,不用理会他,
继续下面的操作.


在primary数据库启动switchover



先把primary转换为standby的角色


SQL> alter database commit to switchover to physical standby;



在primary数据库重启动到mount




SQL> shutdown immediate;


SQL> startup mount;



在STANDBY数据库上检查是否支持switchover操作



SQL> select switchover_status from v$database;


SWITCHOVER_STATUS


-----------------


TO PRIMARY




值为”TO PRIMARY”,说明支持转换.


注意:第一次转换这里可能为 not allow,不用理会,继续下面的操作.




在STANDBY数据库转换角色到Primary



SQL> alter database commit to switchover to primary;


SQL> alter database open;
//如果处于read-only状态,需要先

                               shutdown再startup;



验证数据是否可以同步,按照以前的测试方法进行测试


在新的primary数据库上执行

SQL> insert into wiliiwin values(4,’wiliansi’);

然后在新的STANDBY数据库上执行

SQL> select * from wiliiwin;

Failover切换


检查归档文件是否连续




在STANDBY数据库上查询V$ARCHIVE_GAP视图,看归档文件是否连续



SQL> SELECT THREAD#,LOW_SEQUENCE#,HIGH_SEQUENCE# FROM V$ARCHIVE_GAP;



如果返回的有记录,按照列出的记录号复制对应的归档文件到待转换的STANDBY服务器.


必须确保所有已生成的归档文件均已存在于STANDBY服务器,不然可能会数据不一致造成


转换时的报错.文件复制之后,将其加入数据字典




SQL> ALTER DATABASE REGISTER PHYSICAL LOGFILE ‘filespecl
‘;



检查归档文件是否完整




SQL> select distinct thread#,max(sequence#)over(partition by thread#) a from


v$archived_log;



取得当前数据库各线程已归档文件最大序列,如果primary和standby最大序号不相同,
必须将多出的序号对应到归档文件复制到待转换的STANDBY服务器.要是primary完全不可用了,此时可能会丢失一些数据.


启动failover



SQL> alter database recover managed standby database finish force;




切换物理STANDBY角色到primary



SQL> alter database commit to switchover to primar;



启动新的primary数据库



SQL> alter database
open;


  关于测试大家自己试验下,可以查询、插入、删除等操作应该就说明切换正常了.

本文出自 “linux学习者” 博客,请务必保留此出处http://wiliiwin.blog.51cto.com/928128/344280
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP