一直以来都没有正儿八经的记录oracle 11g dataguard物理备库的创建步骤,11g的logical standby还没有去测试,不过个人认为随着11g adg特性的推出,logical standby其实已经没有什么吸引力了!本文介绍了11g active dataguard的详细配置步骤和数据保护模式的修改!
一:环境介绍
主库
IP地址:192.168.1.61/24
操作系统版本:rhel5.4 64bit
数据库版本:11.2.0.3 64bit
数据库sid名:dg
数据库名:dg
数据库db_unique_name:dg1
备库1 物理备库 (只安装oracle数据库软件,无需建库)
IP地址:192.168.1.62/24
操作系统版本:rhel5.4 64bit
数据库版本:11.2.0.3 64bit
数据库sid名:dg
数据库名:dg
数据库db_unique_name:dg2
二:修改主备库listener.ora,tnsnames.ora文件如下,备库根据自身情况修改
- [oracle@dg1 ~]$ cat $TNS_ADMIN/listener.ora
- SID_LIST_LISTENER =
- (SID_LIST =
- (SID_DESC =
- (GLOBAL_DBNAME = dg1.yang.com)
- (ORACLE_HOME = /u01/app/oracle/product/11.2.0/db1)
- (SID_NAME = dg)
- )
- )
-
- LISTENER =
- (DESCRIPTION_LIST =
- (DESCRIPTION =
- (ADDRESS_LIST =
- (ADDRESS = (PROTOCOL = TCP)(HOST = dg1.yang.com)(PORT = 1521))
- )
- )
- )
-
- [oracle@dg1 ~]$ cat $TNS_ADMIN/tnsnames.ora
- dg1 =
- (DESCRIPTION =
- (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.61)(PORT = 1521))
- (CONNECT_DATA =
- (SERVER = DEDICATED)
- (SERVICE_NAME = dg1.yang.com)
- )
- )
-
- dg2 =
- (DESCRIPTION =
- (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.62)(PORT = 1521))
- (CONNECT_DATA =
- (SERVER = DEDICATED)
- (SERVICE_NAME = dg2.yang.com)
- )
- )
-
- for_db =
- (DESCRIPTION =
- (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.61)(PORT = 1521))
- )
三:在主库上修改dataguard配置相关的各个参数,各参数的具体含义可以参考oracle在线文档
- SQL> alter database force logging;
- Database altered.
-
- SQL> alter system set db_unique_name='dg1' scope=spfile;
- System altered.
-
- SQL> alter system set log_archive_config='DG_CONFIG=(dg1,dg2)';
- System altered.
-
- SQL> alter system set log_archive_dest_1='LOCATION=/u01/app/oracle/archivelog valid_for=
-
- (all_logfiles,primary_role) db_unique_name=dg1' scope=spfile;
- System altered.
-
- SQL> alter system set log_archive_dest_2='SERVICE=dg2 lgwr sync valid_for=(online_logfile,primary_role)
-
- db_unique_name=dg2';
- System altered.
-
- SQL> alter system set log_archive_dest_3='LOCATION=/u01/app/oracle/standbylog valid_for=
-
- (standby_logfile,standby_role) db_unique_name=dg1' scope=spfile;
- System altered.
-
- SQL> alter system set fal_client='dg1';
- System altered.
-
- SQL> alter system set fal_server='dg2';
- System altered.
-
- SQL> alter system set standby_file_management=auto;
- System altered.
-
- SQL> alter database add standby logfile group 4 '/u01/app/oracle/oradata/dg/standby04.log' size 50M;
- Database altered.
-
- SQL> alter database add standby logfile group 5 '/u01/app/oracle/oradata/dg/standby05.log' size 50M;
- Database altered.
-
- SQL> alter database add standby logfile group 6 '/u01/app/oracle/oradata/dg/standby06.log' size 50M;
- Database altered.
-
- SQL> alter database add standby logfile group 7 '/u01/app/oracle/oradata/dg/standby07.log' size 50M;
- Database altered.
-
- SQL> shutdown immediate
- Database closed.
- Database dismounted.
- ORACLE instance shut down.
-
- SQL> startup
- ORACLE instance started.
-
- Total System Global Area 417546240 bytes
- Fixed Size 2228944 bytes
- Variable Size 285216048 bytes
- Database Buffers 121634816 bytes
- Redo Buffers 8466432 bytes
- Database mounted.
- Database opened.
-
- SQL> alter system set local_listener='for_db';
- System altered.
-
- SQL> create pfile='/home/oracle/initdg.ora' from spfile;
- File created.
三:将生成的pfile文件修改后传递到备库,注意红色字体部分
[oracle@dg1 ~]$ cat /home/oracle/initdg.ora dg.__db_cache_size=121634816 dg.__java_pool_size=4194304 dg.__large_pool_size=4194304 dg.__oracle_base='/u01/app/oracle'#ORACLE_BASE set from environment dg.__pga_aggregate_target=167772160 dg.__sga_target=251658240 dg.__shared_io_pool_size=0 dg.__shared_pool_size=109051904 dg.__streams_pool_size=0 *.audit_file_dest='/u01/app/oracle/admin/dg/adump' *.audit_trail='db' *.compatible='11.2.0.0.0' *.control_files='/u01/app/oracle/oradata/dg/control01.ctl','/u01/app/oracle/fast_recovery_area/dg/control02.ctl' *.db_block_size=8192 *.db_domain='yang.com' *.db_name='dg' *.db_recovery_file_dest='/u01/app/oracle/fast_recovery_area' *.db_recovery_file_dest_size=4322230272 *.db_unique_name='dg2' *.diagnostic_dest='/u01/app/oracle' *.dispatchers='(PROTOCOL=TCP) (SERVICE=dgXDB)' *.fal_client='dg2' *.fal_server='dg1' *.local_listener='for_db' *.log_archive_config='DG_CONFIG=(dg1,dg2)' *.log_archive_dest_1='LOCATION=/u01/app/oracle/archivelog valid_for=(all_logfiles,primary_role)db_unique_name=dg2' *.log_archive_dest_2='SERVICE=dg1 lgwr sync valid_for=(online_logfile,primary_role) db_unique_name=dg1' *.log_archive_dest_3='LOCATION=/u01/app/oracle/standbylog valid_for=(standby_logfile,standby_role)db_unique_name=dg2' *.log_archive_format='%t_%s_%r.dbf' *.memory_target=419430400 *.open_cursors=300 *.processes=150 *.remote_login_passwordfile='EXCLUSIVE' *.standby_file_management='AUTO' *.undo_tablespace='UNDOTBS1' [oracle@dg1 ~]$ scp initdg.ora 192.168.1.62:/home/oracle/ |
四:将备库启动到nomount状态,然后连接主库进行duplicate操作
- [oracle@dg2 ~]$ lsnrctl start
- [oracle@dg2 ~]$ orapwd file=$ORACLE_HOME/dbs/orapwdg password=123456 entries=5
- [oracle@dg2 ~]$ sqlplus /nolog
- SQL*Plus: Release 11.2.0.3.0 Production on Sun Apr 22 13:36:53 2012
- Copyright (c) 1982, 2011, Oracle. All rights reserved.
-
- SQL> conn /as sysdba
- Connected to an idle instance.
- SQL> create spfile from pfile='/home/oracle/initdg.ora';
- File created.
-
- SQL> startup nomount
- ORACLE instance started.
-
- Total System Global Area 417546240 bytes
- Fixed Size 2228944 bytes
- Variable Size 285216048 bytes
- Database Buffers 121634816 bytes
- Redo Buffers 8466432 bytes
[oracle@dg2 ~]$ rman target sys/123456@dg1 auxiliary sys/123456@dg2 Recovery Manager: Release 11.2.0.3.0 - Production on Sun Apr 22 13:38:33 2012 Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved. connected to target database: DG (DBID=1694605607) connected to auxiliary database: DG (not mounted) RMAN> duplicate target database for standby nofilenamecheck from active database; Starting Duplicate Db at 2012-04-22-13:39:25 using target database control file instead of recovery catalog allocated channel: ORA_AUX_DISK_1 channel ORA_AUX_DISK_1: SID=134 device type=DISK contents of Memory Script: { backup as copy reuse targetfile '/u01/app/oracle/product/11.2.0/db1/dbs/orapwdg' auxiliary format '/u01/app/oracle/product/11.2.0/db1/dbs/orapwdg' ; } executing Memory Script Starting backup at 2012-04-22-13:39:26 allocated channel: ORA_DISK_1 channel ORA_DISK_1: SID=19 device type=DISK Finished backup at 2012-04-22-13:39:28 contents of Memory Script: { backup as copy current controlfile for standby auxiliary format '/u01/app/oracle/oradata/dg/control01.ctl'; restore clone controlfile to '/u01/app/oracle/fast_recovery_area/dg/control02.ctl' from '/u01/app/oracle/oradata/dg/control01.ctl'; } executing Memory Script Starting backup at 2012-04-22-13:39:29 using channel ORA_DISK_1 channel ORA_DISK_1: starting datafile copy copying standby control file output file name=/u01/app/oracle/product/11.2.0/db1/dbs/snapcf_dg.f tag=TAG20120422T133929 RECID=1 STAMP=781277970 channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:03 Finished backup at 2012-04-22-13:39:32 Starting restore at 2012-04-22-13:39:32 using channel ORA_AUX_DISK_1 channel ORA_AUX_DISK_1: copied control file copy Finished restore at 2012-04-22-13:39:34 contents of Memory Script: { sql clone 'alter database mount standby database'; } executing Memory Script sql statement: alter database mount standby database contents of Memory Script: { set newname for tempfile 1 to "/u01/app/oracle/oradata/dg/temp01.dbf"; switch clone tempfile all; set newname for datafile 1 to "/u01/app/oracle/oradata/dg/system01.dbf"; set newname for datafile 2 to "/u01/app/oracle/oradata/dg/sysaux01.dbf"; set newname for datafile 3 to "/u01/app/oracle/oradata/dg/undotbs01.dbf"; set newname for datafile 4 to "/u01/app/oracle/oradata/dg/users01.dbf"; backup as copy reuse datafile 1 auxiliary format "/u01/app/oracle/oradata/dg/system01.dbf" datafile 2 auxiliary format "/u01/app/oracle/oradata/dg/sysaux01.dbf" datafile 3 auxiliary format "/u01/app/oracle/oradata/dg/undotbs01.dbf" datafile 4 auxiliary format "/u01/app/oracle/oradata/dg/users01.dbf" ; sql 'alter system archive log current'; } executing Memory Script executing command: SET NEWNAME renamed tempfile 1 to /u01/app/oracle/oradata/dg/temp01.dbf in control file executing command: SET NEWNAME executing command: SET NEWNAME executing command: SET NEWNAME executing command: SET NEWNAME Starting backup at 2012-04-22-13:39:42 using channel ORA_DISK_1 channel ORA_DISK_1: starting datafile copy input datafile file number=00001 name=/u01/app/oracle/oradata/dg/system01.dbf output file name=/u01/app/oracle/oradata/dg/system01.dbf tag=TAG20120422T133943 channel ORA_DISK_1: datafile copy complete, elapsed time: 00:03:06 channel ORA_DISK_1: starting datafile copy input datafile file number=00002 name=/u01/app/oracle/oradata/dg/sysaux01.dbf output file name=/u01/app/oracle/oradata/dg/sysaux01.dbf tag=TAG20120422T133943 channel ORA_DISK_1: datafile copy complete, elapsed time: 00:01:55 channel ORA_DISK_1: starting datafile copy input datafile file number=00003 name=/u01/app/oracle/oradata/dg/undotbs01.dbf output file name=/u01/app/oracle/oradata/dg/undotbs01.dbf tag=TAG20120422T133943 channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:15 channel ORA_DISK_1: starting datafile copy input datafile file number=00004 name=/u01/app/oracle/oradata/dg/users01.dbf output file name=/u01/app/oracle/oradata/dg/users01.dbf tag=TAG20120422T133943 channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:03 Finished backup at 2012-04-22-13:45:05 sql statement: alter system archive log current contents of Memory Script: { switch clone datafile all; } executing Memory Script datafile 1 switched to datafile copy input datafile copy RECID=1 STAMP=781278308 file name=/u01/app/oracle/oradata/dg/system01.dbf datafile 2 switched to datafile copy input datafile copy RECID=2 STAMP=781278308 file name=/u01/app/oracle/oradata/dg/sysaux01.dbf datafile 3 switched to datafile copy input datafile copy RECID=3 STAMP=781278308 file name=/u01/app/oracle/oradata/dg/undotbs01.dbf datafile 4 switched to datafile copy input datafile copy RECID=4 STAMP=781278308 file name=/u01/app/oracle/oradata/dg/users01.dbf Finished Duplicate Db at 2012-04-22-13:45:29 RMAN> exit Recovery Manager complete. |
五:将备库置于active dataguard模式下
- [oracle@dg2 ~]$ sqlplus /nolog
- SQL*Plus: Release 11.2.0.3.0 Production on Sun Apr 22 13:47:17 2012
- Copyright (c) 1982, 2011, Oracle. All rights reserved.
-
- SQL> conn /as sysdba
- Connected.
- SQL> select open_mode,database_role,db_unique_name from v$database;
-
- OPEN_MODE DATABASE_ROLE DB_UNIQUE_NAME
- -------------------- ---------------- ------------------------------
- MOUNTED PHYSICAL STANDBY dg2
-
- SQL> alter database open;
- Database altered.
-
- SQL> alter database recover managed standby database using current logfile disconnect from session;
- Database altered.
-
- SQL> select open_mode,database_role,db_unique_name from v$database;
-
- OPEN_MODE DATABASE_ROLE DB_UNIQUE_NAME
- -------------------- ---------------- ------------------------------
- READ ONLY WITH APPLY PHYSICAL STANDBY dg2
-
- SQL> select status from v$standby_log;
-
- STATUS
- ----------
- ACTIVE
- UNASSIGNED
- UNASSIGNED
- UNASSIGNED
-
- SQL> select member from v$logfile;
-
- MEMBER
- --------------------------------------------------------------------------------
- /u01/app/oracle/fast_recovery_area/DG2/onlinelog/o1_mf_3_7s76qbhq_.log
- /u01/app/oracle/fast_recovery_area/DG2/onlinelog/o1_mf_2_7s76q94s_.log
- /u01/app/oracle/fast_recovery_area/DG2/onlinelog/o1_mf_1_7s76q5w1_.log
- /u01/app/oracle/fast_recovery_area/DG2/onlinelog/o1_mf_4_7s76qdpk_.log
- /u01/app/oracle/fast_recovery_area/DG2/onlinelog/o1_mf_5_7s76qhmy_.log
- /u01/app/oracle/fast_recovery_area/DG2/onlinelog/o1_mf_6_7s76qlhz_.log
- /u01/app/oracle/fast_recovery_area/DG2/onlinelog/o1_mf_7_7s76qp99_.log
- 7 rows selected.
六:修改dataguard的数据保护模式为最高可用性模式,根据oracle文档的解释,最高可用性数据保护模式需要先满足以下几个条件
- SQL> select db_unique_name,protection_mode,protection_level from v$database;
-
- DB_UNIQUE_NAME PROTECTION_MODE PROTECTION_LEVEL
- ------------------------------ -------------------- --------------------
- dg2 MAXIMUM PERFORMANCE MAXIMUM PERFORMANCE
-
-
-
- SQL> select db_unique_name,protection_mode,protection_level from v$database;
-
- DB_UNIQUE_NAME PROTECTION_MODE PROTECTION_LEVEL
- ------------------------------ -------------------- --------------------
- dg1 MAXIMUM PERFORMANCE MAXIMUM PERFORMANCE
-
-
- SQL> alter database set standby database to maximize availability;
- Database altered.
-
- SQL> select db_unique_name,protection_mode,protection_level from v$database;
-
- DB_UNIQUE_NAME PROTECTION_MODE PROTECTION_LEVEL
- ------------------------------ -------------------- --------------------
- dg1 MAXIMUM AVAILABILITY MAXIMUM AVAILABILITY
-
-
- SQL> select db_unique_name,protection_mode,protection_level from v$database;
-
- DB_UNIQUE_NAME PROTECTION_MODE PROTECTION_LEVEL
- ------------------------------ -------------------- --------------------
- dg2 MAXIMUM AVAILABILITY MAXIMUM AVAILABILITY
-
-
- 将备库shutdown后,主库的PROTECTION_LEVEL将变为RESYNCHRONIZATION
- SQL> select db_unique_name,protection_mode,protection_level from v$database;
-
- DB_UNIQUE_NAME PROTECTION_MODE PROTECTION_LEVEL
- ------------------------------ -------------------- --------------------
- dg2 MAXIMUM AVAILABILITY MAXIMUM AVAILABILITY
-
- SQL> alter database recover managed standby database cancel;
- Database altered.
-
- SQL> shutdown immediate
- Database closed.
- Database dismounted.
- ORACLE instance shut down.
-
- SQL> select db_unique_name,protection_mode,protection_level from v$database;
-
- DB_UNIQUE_NAME PROTECTION_MODE PROTECTION_LEVEL
- ------------------------------ -------------------- --------------------
- dg1 MAXIMUM AVAILABILITY RESYNCHRONIZATION