Oracle DataGuard主备架构三种搭建方法

Oracle DataGuard主备架构三种搭建方法

DG的环境介绍和DG搭建前的准备工作,请参考文章《Oracle 11g DataGuard主备架构搭建(单库对单库)》

一、from active database方式搭建物理备库

11G及以上版本的才可以使用这种方式

主备库上执行都可以,类似如下

复制代码
su - oracle
rman target sys/oracle@orcl auxiliary sys/oracle@orcl_st nocatalog
duplicate target database for standby  from active database nofilenamecheck;

注意事项:

1)需要加上nocatalog关键字,否则报错

2)主备库的连接,都必须通过sys用户名/密码的方式指定,否则报错

3)如果主库很大,可以通过并发方式,加快主备的搭建过程,类似如下

rman target sys/oracle@orcl auxiliary sys/oracle@orcl_st nocatalog

run{

allocate channel ch1 type disk;

allocate channel ch2 type disk;

allocate auxiliary channel ch3 type disk;

allocate auxiliary channel ch4 type disk;

duplicate target database for standby from active database nofilenamecheck;

release channel ch1;

release channel ch2;

}

4)整个方式也可以在备库上执行 ,类似如下

su - oracle

rman target sys/oracle@orcl auxiliary sys/oracle@orcl_st nocatalog

duplicate target database for standby from active database nofilenamecheck;

5)主备搭建命令执行完毕后,备库默认会启动到mount(挂载状态)

二、rman备份集方式搭建物理备库

1、创建备份目录(主备库上都创建)
复制代码
su - oracle
mkdir /oradata/backup
2、主库上完成rman全库备份
复制代码
rman  target /
sql 'alter system archive log current';
backup database format '/oradata/backup/full_db_%U'; 
sql 'alter system archive log current';
sql 'alter system archive log current';
exit
3、主库上创建备库控制文件
复制代码
sqlplus "/as sysdba"
alter database create standby controlfile as '/oradata/backup/st1.ctl';
备注:名字不重要,主要是创建用于搭建备库的控制文件,后续在备库上会重命名正确的控制文件名称
4、将主库上的rman全库备份文件、归档日志文件、备库控制文件传输至备库服务器
复制代码
主库上执行
su - oracle
1)查看待传输的文件
[oracle@host31 ~]$ ls -ltr  /oradata/backup/*
-rw-r----- 1 oracle oinstall 1061969920 Jun 23 15:04 /oradata/backup/full_db_0h4rd0c4_1_1
-rw-r----- 1 oracle oinstall    9830400 Jun 23 15:04 /oradata/backup/full_db_0i4rd0cj_1_1
-rw-r----- 1 oracle oinstall    9748480 Jun 23 15:05 /oradata/st1.ctl

[oracle@host31 arch]$ ls -ltr  /oradata/arch/*
total 256
-rw-r----- 1 oracle oinstall  77312 Jun 23 16:13 1_18_1236681669.dbf
-rw-r----- 1 oracle oinstall  73216 Jun 23 16:15 1_19_1236681669.dbf
-rw-r----- 1 oracle oinstall 110592 Jun 23 16:19 1_20_1236681669.dbf

2)传输至备库服务器
scp  /oradata/backup/*   oracle@host32:/oradata/backup/
scp  /oradata/arch/*     oracle@host32:/oradata/arch/

具体如下:
[oracle@host31 backup]$ scp /oradata/backup/*   oracle@host32:/oradata/backup/
oracle@host32's password: 
full_db_0k4rd4d7_1_1                                                              100% 1014MB 202.7MB/s   00:05    
full_db_0l4rd4da_1_1                                                              100% 9888KB 158.3MB/s   00:00    
st1.ctl                                                                                100% 9808KB 201.1MB/s   00:00    
 

[oracle@host31 arch]$ scp 1_*.dbf   oracle@host32:/oradata/arch/
oracle@host32's password: 
1_18_1236681669.dbf                                                               100%   76KB  44.1MB/s   00:00    
1_19_1236681669.dbf                                                               100%   76KB  44.1MB/s   00:00 
1_20_1236681669.dbf                                                               100%   76KB  44.1MB/s   00:00 
5、备库上重命名备库控制文件
复制代码
备库上执行
su - oracle
cp /oradata/backup/st1.ctl /oradata/orcl/control01.ctl
cp /oradata/backup/st1.ctl /oradata/orcl/control02.ctl
6、备库使用备库控制文件启动至mount状态
复制代码
备库上执行
su - oracle
sqlplus "/as sysdba"
startup nomount;
alter database mount standby database;
7、备库上执行主库数据库还原和简单恢复
复制代码
rman target /
restore database;
recover database until sequence 20;
数据库还原后,恢复全量备份期间的主库产生的归档日志文件,保持数据库的一致性,否则alter database open打开时可能提示数据库不一致,无法打开的错误!!
8、备库上启动同步(应用主库的redo日志)
复制代码
备库上执行
su  - oracle
select open_mode,database_role,protection_level,protection_mode,switchover_status,force_logging from v$database;
alter database open;
alter database recover managed standby database using current logfile disconnect from session;

验证:
1)select open_mode,database_role,protection_level,protection_mode,switchover_status,force_logging from v$database;
2)也可以在主库上随意创建一张临时表,如下:
create table t2 (id number);
然后备库上检查是否同步过来
备库上查询
select * from t2;

三、duplicate target database for standby方式搭建物理备库

备注:后台本质上也是利用rman备份来搭建
1、创建备份目录(主备库上都创建)
复制代码
su - oracle
mkdir /oradata/backup
2、主库上完成rman全库备份
复制代码
rman  target /
sql 'alter system archive log current';
backup database format '/oradata/backup/full_db_%U'; 
sql 'alter system archive log current';
sql 'alter system archive log current';
exit
3、主库上创建备库控制文件
复制代码
rman  target /
backup current controlfile for standby format '/oradata/backup/stcontrol.ctl';
备注:名字不重要,后续搭建主备的命令会自动根据这个控制文件生成正确的控制文件名称
4、将主库上的rman全库备份文件、归档日志文件、备库控制文件传输至备库服务器
复制代码
主库上执行
su - oracle
1)查看待传输的文件
[oracle@host31 ~]$ ls -ltr  /oradata/backup/*
-rw-r----- 1 oracle oinstall 1061969920 Jun 23 15:04 /oradata/backup/full_db_0h4rd0c4_1_1
-rw-r----- 1 oracle oinstall    9830400 Jun 23 15:04 /oradata/backup/full_db_0i4rd0cj_1_1
-rw-r----- 1 oracle oinstall    9748480 Jun 23 15:07  stcontrol.ctl

[oracle@host31 arch]$ ls -ltr  /oradata/arch/*
total 256
-rw-r----- 1 oracle oinstall  77312 Jun 23 16:13 1_18_1236681669.dbf
-rw-r----- 1 oracle oinstall  73216 Jun 23 16:15 1_19_1236681669.dbf
-rw-r----- 1 oracle oinstall 110592 Jun 23 16:19 1_20_1236681669.dbf

2)传输至备库服务器
scp  /oradata/backup/*   oracle@host32:/oradata/backup/
scp  /oradata/arch/*     oracle@host32:/oradata/arch/

具体如下:
[oracle@host31 backup]$ scp /oradata/backup/*   oracle@host32:/oradata/backup/
oracle@host32's password: 
full_db_0k4rd4d7_1_1                                                              100% 1014MB 202.7MB/s   00:05    
full_db_0l4rd4da_1_1                                                              100% 9888KB 158.3MB/s   00:00      
stcontrol.ctl                                                                     100% 9856KB 217.5MB/s   00:00    

[oracle@host31 arch]$ scp 1_*.dbf   oracle@host32:/oradata/arch/
oracle@host32's password: 
1_18_1236681669.dbf                                                               100%   76KB  44.1MB/s   00:00    
1_19_1236681669.dbf                                                               100%   76KB  44.1MB/s   00:00 
1_20_1236681669.dbf                                                               100%   76KB  44.1MB/s   00:00 
5、备库启动至nomount状态
复制代码
备库上执行
su - oracle
sqlplus "/as sysdba"
startup nomount;
6、正是搭建主备
复制代码
两种搭建方式,主库上执行,或者备库上执行都行,具体如下:
方式一:主库上执行
su - oracle
rman target / auxiliary sys/oracle@orcl_st
duplicate target database for standby nofilenamecheck;

方式二:备库上执行
su - oracle
rman target sys/oracle@orcl auxiliary / nocatalog
duplicate target database for standby nofilenamecheck dorecover;
两种方式随选一种,建议选择方式二,在备库上执行,尽量小的影响生成库

上述命令会在备库上
1)自动生产正确的两个控制文件;2在备库上,还原主库全量备份;3)应用数据库简单恢复;

上面的命令,如果主备库的所有文件目录完全一样,需要加上nofilenamecheck选项才行,否则报错,如下:
RMAN-05001: auxiliary file name /oradata/jxkh/system01.dbf conflicts with a file used by the target database

并发方式搭建,类似如下

复制代码
run {
allocate channel ch1 type disk;
allocate channel ch2 type disk;
allocate channel ch3 type disk;
allocate channel ch4 type disk;
allocate auxiliary channel sch1 type disk;
allocate auxiliary channel sch2 type disk;
allocate auxiliary channel sch3 type disk;
allocate auxiliary channel sch4 type disk;
duplicate target database for standby  nofilenamecheck;
release channel ch1;
release channel ch2;
release channel ch3;
release channel ch4;
release auxiliary channel sch1;
release auxiliary channel sch2;
release auxiliary channel sch3;
release auxiliary channel sch4;
};
7、备库上启动同步(应用主库的redo日志)
复制代码
备库上执行
su  - oracle
select open_mode,database_role,protection_level,protection_mode,switchover_status,force_logging from v$database;
alter database open;
alter database recover managed standby database using current logfile disconnect from session;

验证:
1)select open_mode,database_role,protection_level,protection_mode,switchover_status,force_logging from v$database;
2)也可以在主库上随意创建一张临时表,如下:
create table t2 (id number);
然后备库上检查是否同步过来
备库上查询
select * from t2;