--测试环境: OS:Redhat linux(64) Primary: IP:192.168.94.198 SID:dgdb1 Hostname:dg1 DB_UNIQUE_NAME:dgdb1 Database:10.2.0.1(64) Standby: IP:192.168.94.199 SID:dgdb1 Hostname:dg2 DB_UNIQUE_NAME:dgdb1_s Database:10.2.0.1(64)
--实施DG前的准备工作 --开启数据库logging及数据库archivelog --开启数据库logging SQL> alter database force logging; --检查数据库是否开启archivelog SQL> archive log list; --如果数据库未开启archivelog,欧博官网则要开启archivelog SQL> shutdown immediate; SQL> startup mount; SQL> alter database archivelog; --检查数据库是否开启archivelog SQL> archive log list;
--创建相应目录(根据具体情况,primary和standby端要一致) --Standby: mkdir –p /export/home/oracle/product/10.2.0/oradata/dgdb1 mkdir –p /export/home/oracle/product/10.2.0/admin/dgdb1/adump mkdir –p /export/home/oracle/product/10.2.0/admin/dgdb1/bdump mkdir –p /export/home/oracle/product/10.2.0/admin/dgdb1/cdump mkdir –p /export/home/oracle/product/10.2.0/admin/dgdb1/udump mkdir –p /export/home/oracle/product/10.2.0/admin/dgdb1/dpdump mkdir –p /export/home/oracle/product/10.2.0/admin/dgdb1/pfile mkdir –p /export/home/oracle/archive mkdir -p /export/home/oracle/bak --primary: mkdir –p /export/home/oracle/archive mkdir -p /export/home/oracle/bak
--修改或新增listener.ora 和tnsnames.ora(或者用GUI工具配置) --注意:listener.ora 中新增的部分在括号内而非括号外 --primary端: --listener.ora: SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (SID_NAME = PLSExtProc) (ORACLE_HOME = /export/home/oracle/product/10.2.0) (PROGRAM = extproc) ) (SID_DESC = (GLOBAL_DBNAME = dgdb1) (ORACLE_HOME = /export/home/oracle/product/10.2.0) (SID_NAME = dgdb1) ) ) LISTENER = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = dg1)(PORT = 1521)) (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0)) ) )
--tnsnames.ora dgdb1 = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.94.198)(PORT = 1521)) ) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = dgdb1) ) ) dgdb1_s = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.94.199)(PORT = 1521)) ) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = dgdb1) ) )
--standby端: --listener.ora: SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (SID_NAME = PLSExtProc) (ORACLE_HOME = /export/home/oracle/product/10.2.0) (PROGRAM = extproc) ) (SID_DESC = (GLOBAL_DBNAME = dgdb1) (ORACLE_HOME = /export/home/oracle/product/10.2.0) (SID_NAME = dgdb1) ) ) LISTENER = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = dg2)(PORT = 1521)) (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0)) ) ) --tnsnames.ora dgdb1 = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.94.198)(PORT = 1521)) ) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = dgdb1) ) ) dgdb1_s = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.94.199)(PORT = 1521)) ) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = dgdb1) ) )
--具体实施DG的步骤: --在primary上生成pfile,并修改添加相应参数,欧博生成standby需要的pfile --primary端: oracle$>sqlplus / as sysdba SQL> CREATE PFILE='/export/home/oracle/standby.ora' FROM SPFILE; --编辑生成的pfile文件('/export/home/oracle/standby.ora'),添加如下参数: *.db_unique_name='dgdb_s' *.fal_server='dgdb1' *.fal_client='dgdb_s' *.LOG_ARCHIVE_CONFIG='DG_CONFIG=(dgdb1,dgdb_s)' *.log_archive_dest_1='LOCATION=/export/home/oracle/archive VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=dgdb_s' *.LOG_ARCHIVE_DEST_2='SERVICE=dgdb1 LGWR ASYNC=40960 VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=dgdb1' *.LOG_ARCHIVE_DEST_STATE_1='ENABLE' *.LOG_ARCHIVE_DEST_STATE_2='ENABLE' *.standby_archive_dest='/export/home/oracle/archive' *.standby_file_management='AUTO' --修改完后拷贝到standby端 Oracle$Scp /export/home/oracle/standby.ora oracle@192.168.94.199:/export/home/oracle/ --在standby端使用pfile启动实例 --在primary端用命令创建数据库密码文件,并接拷贝至standby端相同路径下(如已存在,可直接拷贝) --primary端手工创建数据库密码文件 Oracle$orapwd file=... password=... --primary端拷贝数据库密码文件至standby端 Oracle$Scp /export/home/oracle/product/10.2.0/database/PWDdgdb1.ora oracle@192.168.94.199:/export/home/oracle/product/10.2.0/database --standby端: Oracle$set oracle_sid=dgdb1 Oracle$sqlplus / as sysdba SQL> startup nomount pfile=’/export/home/oracle/standby.ora’ SQL> CREATE SPFILE FROM PFILE='/export/home/oracle/standby.ora'; --在primary端修改相应参数 --primary端: Oracle$sqlplus / as sysdba SQL> ALTER SYSTEM SET STANDBY_FILE_MANAGEMENT = AUTO scope=both; SQL> ALTER SYSTEM SET fal_server='dgdb1_s' scope=both; SQL> ALTER SYSTEM SET fal_client='dgdb1' scope=both; SQL> ALTER SYSTEM SET LOG_ARCHIVE_CONFIG='DG_CONFIG=(dgdb1_s,dgdb1)' scope=both; SQL> ALTER SYSTEM SET log_archive_dest_1='LOCATION=/export/home/oracle/archive VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=dgdb1' scope=both; SQL> ALTER SYSTEM SET LOG_ARCHIVE_DEST_2='SERVICE=dgdb1_s LGWR ASYNC=40960 VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=dgdb1_s' scope=both; SQL> ALTER SYSTEM SET LOG_ARCHIVE_DEST_STATE_1='ENABLE' scope=both; SQL> ALTER SYSTEM SET LOG_ARCHIVE_DEST_STATE_2='ENABLE' scope=both; SQL> ALTER SYSTEM SET standby_archive_dest='/export/home/oracle/archive' scope=both;
--在primary端开始使用rman备份数据库 --primary端: Oracle$rman target / RMAN>backup full format='/u01/app/oracle/bak/ora10g_%d_%T_%s' database include current controlfile for standby plus archivelog format='/u01/app/oracle/bak/arch_%d_%T_%s';
--备份完毕后,把相应备份文件拷贝到丛库的相应目录(目录必须一致) Oracle$Scp /export/home/oracle/bak/* oracle@192.168.94.199:/export/home/oracle/bak/
--使用duplicate 还原standby数据库 --primary端: Oracle$rman target / auxiliary sys/system@dgdb1_s RMAN> duplicate target database for standby nofilenamecheck dorecover;
--收尾工作及开启dg --standby端建立standby log(至少比redo多一组): Oracle$sqlplus / as sysdba SQL> ALTER DATABASE ADD STANDBY LOGFILE GROUP 4 ('/export/home/oracle/product/10.2.0/oradata/dgdb1/redo04.log') size 50M; SQL> ALTER DATABASE ADD STANDBY LOGFILE GROUP 5 ('/export/home/oracle/product/10.2.0/oradata/dgdb1/redo05.log') size 50M; SQL> ALTER DATABASE ADD STANDBY LOGFILE GROUP 6 ('/export/home/oracle/product/10.2.0/oradata/dgdb1/redo06.log') size 50M; SQL> ALTER DATABASE ADD STANDBY LOGFILE GROUP 7 ('/export/home/oracle/product/10.2.0/oradata/dgdb1/redo07.log') size 50M; --开启服务(standby端): SQL> alter database recover managed standby database disconnect from session;
--测试服务是否正常 --standby端(看归档日志号): SQL> SELECT SEQUENCE#, FIRST_TIME, NEXT_TIME FROM V$ARCHIVED_LOG ORDER BY SEQUENCE#; --primary端(强制一个日志切换): SQL> alter system switch logfile; --standby端(看归档日志号): SQL> SELECT SEQUENCE#, FIRST_TIME, NEXT_TIME FROM V$ARCHIVED_LOG ORDER BY SEQUENCE#; --standby端(看应用归档日志的号): SQL> SELECT SEQUENCE#,APPLIED FROM V$ARCHIVED_LOG ORDER BY SEQUENCE#;
--实现primary、standby的切换: --primary端: SQL> SELECT SWITCHOVER_STATUS FROM V$DATABASE; --primary端(上一步的结果必须是”TO STANDBY”才可以) SQL> ALTER DATABASE COMMIT TO SWITCHOVER TO PHYSICAL STANDBY; --OR(上一步结果为”SESSIONS ACTIVE”,且解决不掉) SQL>ALTER DATABASE COMMIT TO SWITCHOVER TO PHYSICAL STANDBY WITH SESSION SHUTDOWN; --Primary端: SQL> SHUTDOWN IMMEDIATE; SQL> STARTUP MOUNT; --standby端: SQL> SELECT SWITCHOVER_STATUS FROM V$DATABASE; --standby端(上一步的结果必须是”TO STANDBY”才可以): SQL> ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY; --OR(上一步结果为”SESSIONS ACTIVE”,且解决不掉) SQL>ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY WITH SESSION SHUTDOWN; --打开新的primary: SQL>ALTER DATABASE OPEN; --OR(最后一次启动后以read only模式打开过) SQL> SHUTDOWN IMMEDIATE; SQL> STARTUP;
--在新standby上重新启动log apply services(如果必要): SQL>ALTER DATABASE RECOVER MANAGED STANDBY DATABASE; --OR(后台模式 ) SQL>ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT; --OR(实时应用redo) SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE; --新primary端(开始发送redo 数据到新standby端): SQL> ALTER SYSTEM SWITCH LOGFILE; (责任编辑:)
|