标签:
1、修改监听 主库: 修改tnsnames.ora: primary1 = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 10.143.53.31)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = primary1) ) ) standsty1 = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 10.143.53.33)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = standsty1) ) ) 修改listener.ora: SID_LIST_LISTENER= (SID_LIST = (SID_DESC = (GLOBAL_DBNAME= primary1) (ORACLE_HOME=/oracle/app/oracle/product/11.2.0/db) (SID_NAME=primary1) ) ) LISTENER = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = IPC)(KEY =EXTPROC1521)) (ADDRESS = (PROTOCOL = TCP)(HOST = 10.143.53.31)(PORT = 1521)) ) ) 备库: 修改tnsnames.ora: primary1 = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 10.143.53.31)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = primary1) ) ) standsty1 = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 10.143.53.33)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = standsty1) ) ) 修改listener.ora: SID_LIST_LISTENER= (SID_LIST = (SID_DESC = (GLOBAL_DBNAME= primary1) (ORACLE_HOME=/oracle/app/oracle/product/11.2.0/db) (SID_NAME=standsty1) ) ) LISTENER = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = IPC)(KEY =EXTPROC1521)) (ADDRESS = (PROTOCOL = TCP)(HOST = 10.143.53.33)(PORT = 1521)) ) ) 2、主库设置归档: 开启归档 SQL> alter database archivelog; Database altered. 设置归档路径 SQL> alter system set log_archive_dest_1='location=+DG_ARCH' scope=both; System altered. 切换日志 SQL> alter system archive log current; System altered. 查询归档日志 ASMCMD> ls -l Type Redund Striped Time Sys Name ARCHIVELOG UNPROT COARSE JUN 20 20:00:00 Y thread_1_seq_1.256.915051109 ARCHIVELOG UNPROT COARSE JUN 20 20:00:00 Y thread_1_seq_2.257.915051111 ARCHIVELOG UNPROT COARSE JUN 20 20:00:00 Y thread_1_seq_3.258.915051231 3、主库设置force logging模式 SQL> alter database force logging; Database altered. 4、主库修改参数文件 SQL> create pfile='/oracle/app/oracle/product/11.2.0/db/dbs/initprimary1.ora' from spfile; File created. 修改pfile文件 /oracle/app/oracle/product/11.2.0/db/dbs/initprimary1.ora,增加以下内容 *.db_name=primary1 *.db_unique_name=primary1 *.dispatchers='(PROTOCOL=TCP) (SERVICE=primary1XDB)' *.fal_client='primary1' *.fal_server='standsty1' *.log_archive_config='DG_CONFIG=(primary1,standsty1)' *.log_archive_dest_1='LOCATION=+DG_ARCH VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=primary1' *.log_archive_dest_2='SERVICE=standsty1 OPTIONAL LGWR SYNC AFFIRM VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=standsty1' *.log_archive_dest_state_1='ENABLE' *.log_archive_dest_state_2='ENABLE' *.log_archive_format='%t_%s_%r.arc' *.standby_file_management=auto *.log_archive_max_processes=30 *.db_file_name_convert='standsty1','primary1' *.log_file_name_convert='standsty1','primary1' 以spfile启动数据库 SQL> shutdown immediate Database closed. Database dismounted. ORACLE instance shut down. SQL> startup pfile='/oracle/app/oracle/product/11.2.0/db/dbs/initprimary1.ora' ORACLE instance started. Total System Global Area 3.6081E+10 bytes Fixed Size 2253536 bytes Variable Size 1.3959E+10 bytes Database Buffers 2.1475E+10 bytes Redo Buffers 644853760 bytes Database mounted. Database opened. SQL> create spfile='+DG_DATA1/primary1/spfileprimary1.ora' from pfile='/oracle/app/oracle/product/11.2.0/db/dbs/initprimary1.ora'; File created. SQL> shutdown immediate; Database closed. Database dismounted. ORACLE instance shut down. SQL> startup ORACLE instance started. Total System Global Area 3.6081E+10 bytes Fixed Size 2253536 bytes Variable Size 1.3959E+10 bytes Database Buffers 2.1475E+10 bytes Redo Buffers 644853760 bytes Database mounted. Database opened. SQL> show parameter spfile; NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ spfile string +DG_DATA1/primary1/spfileprimary1.ora 5、拷贝主库的pfile和密码文件到备库上 [ythisbilldbn1] cd /oracle/app/oracle/product/11.2.0/db/dbs/ [ythisbilldbn1] scp initprimary1.ora 10.143.53.33:/oracle/app/oracle/product/11.2.0/db/dbs [ythisbilldbn1] scp orapwprimary1 10.143.53.33:/oracle/app/oracle/product/11.2.0/db/dbs 6、备库修改参数文件 修改从主库拷贝过来的pfile文件 /oracle/app/oracle/product/11.2.0/db/dbs/initprimary1.ora,替换以下内容 *.audit_file_dest='/oracle/app/oracle/admin/standsty1/adump' *.db_name=primary1 *.db_unique_name=standsty1 *.dispatchers='(PROTOCOL=TCP) (SERVICE=standsty1XDB)' *.fal_client='standsty1' *.fal_server='primary1' *.log_archive_config='DG_CONFIG=(standsty1,primary1)' *.log_archive_dest_1='LOCATION=+DG_ARCH VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=standsty1' *.log_archive_dest_2='SERVICE=primary1 OPTIONAL LGWR SYNC AFFIRM VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=primary1' *.log_archive_dest_state_1='ENABLE' *.log_archive_dest_state_2='ENABLE' *.log_archive_format='%t_%s_%r.arc' *.standby_file_management=auto *.log_archive_max_processes=30 *.db_file_name_convert='primary1','standsty1' *.log_file_name_convert='primary1','standsty1' 7、在主库通过Rman Duplicate创建备库,主库执行 [ythisbilldbn1:oracle:/home/oracle]rman target sys/xxxxxx@primary1 auxiliary sys/xxxxxx@standsty1 nocatalog Recovery Manager: Release 11.2.0.4.0 - Production on Tue Jun 21 09:44:29 2016 Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved. connected to target database: primary1 (DBID=32832276) using target database control file instead of recovery catalog connected to auxiliary database: primary1 (not mounted) #duplicate到备库中# RMAN> duplicate target database for standby from active database nofilenamecheck; Starting Duplicate Db at 2016-06-21 11:49:06 allocated channel: ORA_AUX_DISK_1 channel ORA_AUX_DISK_1: SID=9391 device type=DISK contents of Memory Script: { backup as copy reuse targetfile '/oracle/app/oracle/product/11.2.0/db/dbs/orapwprimary1' auxiliary format '/oracle/app/oracle/product/11.2.0/db/dbs/orapwstandsty1' ; } executing Memory Script Starting backup at 2016-06-21 11:49:07 allocated channel: ORA_DISK_1 channel ORA_DISK_1: SID=4037 device type=DISK Finished backup at 2016-06-21 11:49:08 contents of Memory Script: { backup as copy current controlfile for standby auxiliary format '+DG_DATA1/standsty1/controlfile/current.256.915104949'; sql clone "create spfile from memory"; shutdown clone immediate; startup clone nomount; sql clone "alter system set control_files = ''+DG_DATA1/standsty1/controlfile/current.256.915104949'' comment= ''Set by RMAN'' scope=spfile"; shutdown clone immediate; startup clone nomount; } executing Memory Script Starting backup at 2016-06-21 11:49:08 using channel ORA_DISK_1 channel ORA_DISK_1: starting datafile copy copying standby control file output file name=/oracle/app/oracle/product/11.2.0/db/dbs/snapcf_primary1.f tag=TAG20160621T114908 RECID=1 STAMP=915104949 channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:03 Finished backup at 2016-06-21 11:49:12 sql statement: create spfile from memory Oracle instance shut down connected to auxiliary database (not started) Oracle instance started Total System Global Area 42757922816 bytes Fixed Size 2255784 bytes Variable Size 20669531224 bytes Database Buffers 21474836480 bytes Redo Buffers 611299328 bytes sql statement: alter system set control_files = ''+DG_DATA1/standsty1/controlfile/current.256.915104949'' comment= ''Set by RMAN'' scope=spfile Oracle instance shut down connected to auxiliary database (not started) Oracle instance started Total System Global Area 42757922816 bytes Fixed Size 2255784 bytes Variable Size 20669531224 bytes Database Buffers 21474836480 bytes Redo Buffers 611299328 bytes contents of Memory Script: { sql clone 'alter database mount standby database'; } executing Memory Script sql statement: alter database mount standby database RMAN-05529: WARNING: DB_FILE_NAME_CONVERT resulted in invalid ASM names; names changed to disk group only. contents of Memory Script: { set newname for tempfile 1 to "+dg_data1"; switch clone tempfile all; set newname for datafile 1 to "+dg_data1"; set newname for datafile 2 to "+dg_data1"; set newname for datafile 3 to "+dg_data1"; set newname for datafile 4 to "+dg_data1"; backup as copy reuse datafile 1 auxiliary format "+dg_data1" datafile 2 auxiliary format "+dg_data1" datafile 3 auxiliary format "+dg_data1" datafile 4 auxiliary format "+dg_data1" ; sql 'alter system archive log current'; } executing Memory Script executing command: SET NEWNAME renamed tempfile 1 to +dg_data1 in control file executing command: SET NEWNAME executing command: SET NEWNAME executing command: SET NEWNAME executing command: SET NEWNAME Starting backup at 2016-06-21 11:49:48 using channel ORA_DISK_1 channel ORA_DISK_1: starting datafile copy input datafile file number=00001 name=+DG_DATA1/primary1/datafile/system.261.915031245 output file name=+DG_DATA1/standsty1/datafile/system.257.915104989 tag=TAG20160621T114948 channel ORA_DISK_1: datafile copy complete, elapsed time: 00:05:35 channel ORA_DISK_1: starting datafile copy input datafile file number=00003 name=+DG_DATA1/primary1/datafile/undotbs1.263.915031305 output file name=+DG_DATA1/standsty1/datafile/undotbs1.258.915105325 tag=TAG20160621T114948 channel ORA_DISK_1: datafile copy complete, elapsed time: 00:05:25 channel ORA_DISK_1: starting datafile copy input datafile file number=00002 name=+DG_DATA1/primary1/datafile/sysaux.262.915031285 output file name=+DG_DATA1/standsty1/datafile/sysaux.259.915105649 tag=TAG20160621T114948 channel ORA_DISK_1: datafile copy complete, elapsed time: 00:02:45 channel ORA_DISK_1: starting datafile copy input datafile file number=00004 name=+DG_DATA1/primary1/datafile/users.265.915031353 output file name=+DG_DATA1/standsty1/datafile/users.260.915105815 tag=TAG20160621T114948 channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:01 Finished backup at 2016-06-21 12:03:35 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=915105815 file name=+DG_DATA1/standsty1/datafile/system.257.915104989 datafile 2 switched to datafile copy input datafile copy RECID=2 STAMP=915105815 file name=+DG_DATA1/standsty1/datafile/sysaux.259.915105649 datafile 3 switched to datafile copy input datafile copy RECID=3 STAMP=915105815 file name=+DG_DATA1/standsty1/datafile/undotbs1.258.915105325 datafile 4 switched to datafile copy input datafile copy RECID=4 STAMP=915105815 file name=+DG_DATA1/standsty1/datafile/users.260.915105815 Finished Duplicate Db at 2016-06-21 12:04:21 8、备库增加4组备用日志 SQL> alter database add standby logfile group 5 size 5G, group 6 size 5G, group 7 size 5G, group 8 size 5G; #因每组两个成员,增加备用日志的成员# SQL> alter database add standby logfile member '+DG_DATA1' to group 5; SQL> alter database add standby logfile member '+DG_DATA1' to group 6; SQL> alter database add standby logfile member '+DG_DATA1' to group 7; SQL> alter database add standby logfile member '+DG_DATA1' to group 8; #查看日志文件是否添加成功# SQL> select group#, member from v$logfile; 9、在备库开启到read only状态 #查看当前备库状态为MOUNTED# SQL> select open_mode,database_role,db_unique_name from v$database; OPEN_MODE DATABASE_ROLE DB_UNIQUE_NAME -------------------- ---------------- ------------------------------ MOUNTED PHYSICAL STANDBY standsty1 #关闭数据库# SQL> shutdown immediate ORA-01109: database not open Database dismounted. ORACLE instance shut down. #启动数据库# SQL> startup ORACLE instance started. Total System Global Area 4.2758E+10 bytes Fixed Size 2255784 bytes Variable Size 2.0670E+10 bytes Database Buffers 2.1475E+10 bytes Redo Buffers 611299328 bytes Database mounted. Database opened. #查看数据库状态,为read only只读模式# SQL> select open_mode,database_role,db_unique_name from v$database; OPEN_MODE DATABASE_ROLE DB_UNIQUE_NAME -------------------- ---------------- ------------------------------ READ ONLY PHYSICAL STANDBY standsty1 10、在备库开启实时日志应用 SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION; Database altered. #取消实时日志应用的语句# --ALTER DATABASE RECOVER MANAGED STANDBY DATABASE cancel; #查看备库是否应用redo,主备库查命令# select sequence#,applied from v$archived_log where DEST_ID=2 order by sequence#; -------------------至此 ADG已基本搭建完毕 11、主库、备库 的删除归档日志策略,用rman配置 CONFIGURE ARCHIVELOG DELETION POLICY 参数 #NONE :设置为该值时,则不启用归档文件的删除策略。默认情况下就是NONE# #主库设置 SHIPPED TO ALL STANDBY :设置为该值时,当归档传送到备库就可以删除# RMAN> CONFIGURE ARCHIVELOG DELETION POLICY TO SHIPPED TO ALL STANDBY; new RMAN configuration parameters: CONFIGURE ARCHIVELOG DELETION POLICY TO SHIPPED TO ALL STANDBY; new RMAN configuration parameters are successfully stored #备库设置 APPLIED ON STANDBY :设置为该值时,会强制检查待删除的log 是否已经在备库apply,只有apply后的log才能删除# RMAN> CONFIGURE ARCHIVELOG DELETION POLICY TO APPLIED ON STANDBY; new RMAN configuration parameters: CONFIGURE ARCHIVELOG DELETION POLICY TO APPLIED ON STANDBY; new RMAN configuration parameters are successfully stored #删归档日志# RMAN> delete archivelog all /*设置自动删除归档日志 crontab #设置删除归档日志脚本 [ythisbilldbn1:oracle:/oracle/script]vi del_arch.sh export ORACLE_SID=primary1 export ORACLE_BASE=/oracle/app/oracle export ORACLE_HOME=$ORACLE_BASE/product/11.2.0/db export NAME=`date +%Y%m%d%T` $ORACLE_HOME/bin/rman target / nocatalog log=/oracle/script/delete_archivelog_log/del_arch_$NAME.log<<EO F run { delete noprompt archivelog all completed before 'sysdate - 1'; } exit EOF #设置crontab 每小时0分 删除 [ythisbilldbn1:oracle:/oracle/script]crontab -e 0 * * * * /oracle/script/del_arch.sh */ -------------------------------------------------测试1:建立用户 建立表空间 数据文件- 开始--------------------------------------------------------------- 主库:建立用户 建立表空间 数据文件 SQL> create tablespace TBS_DPUB datafile '+DG_DATA1' size 1M autoextend on maxsize 62G; Tablespace created. SQL>alter tablespace TBS_DPUB add datafile '+DG_DATA2' size 1M autoextend on maxsize 62G; Tablespace altered. SQL> create user cy identified by cy; SQL> alter user cy default tablespace TBS_DPUB; User altered. SQL> alter system switch logfile; System altered. 备库:检查 是否同步 建立用户 建立表空间 数据文件 SQL> select name from v$tablespace; NAME ------------------------------ SYSTEM SYSAUX UNDOTBS1 TEMP USERS TBS_DPUB 6 rows selected. SQL> select DEFAULT_TABLESPACE,username from dba_users; DEFAULT_TABLESPACE USERNAME ------------------------------ ------------------------------ SYSTEM SYS SYSTEM SYSTEM TBS_DPUB CY SYSTEM OUTLN SYSAUX APPQOSSYS SYSAUX DBSNMP SYSAUX WMSYS USERS DIP USERS ORACLE_OCM -------------------------------------------------测试1:建立用户 建立表空间 数据文件- 结束--------------------------------------------------------------- -------------------------------------------------测试2:主备库切换-开始--------------------------------------------------------------- --测试目的:主备库切换,测试是否成功 --当前主备库信息: 主库:primary1 备库:standsty1 --切换后主备库信息: 主库:standsty1 备库:primary1 --主库:primary1 #切换到standby备库模式# SQL> alter database commit to switchover to physical standby; Database altered. #重启数据库# SQL> shutdown immediate ORA-01012: not logged on SQL> startup ORACLE instance started. Total System Global Area 4.2758E+10 bytes Fixed Size 2255784 bytes Variable Size 2.0670E+10 bytes Database Buffers 2.1475E+10 bytes Redo Buffers 611299328 bytes Database mounted. Database opened. #查看状态为备库# SQL> select open_mode,database_role,db_unique_name from v$database; OPEN_MODE DATABASE_ROLE DB_UNIQUE_NAME -------------------- ---------------- ------------------------------ READ ONLY PHYSICAL STANDBY primary1 #开启实时日志应用# SQL> alter database recover managed standby database disconnect from session; Database altered. --备库:standsty1 #切换到primary主库模式# SQL> alter database commit to switchover to primary; Database altered. /* 遭遇的问题 在物理DG主备库切换时遇到ORA-16139: media recovery required错误 SQL> ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY; ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY * ERROR at line 1: ORA-16139: media recovery required 解决办法: --如果报ORA-16139: media recovery required,可能是由于未应用日志引起,可先执行 ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION; 然后再执行该命令 */ #重启数据库# SQL> shutdown immediate ORA-01109: database not open Database dismounted. startupORACLE instance shut down. SQL> startup ORACLE instance started. Total System Global Area 4.2758E+10 bytes Fixed Size 2255784 bytes Variable Size 2.0670E+10 bytes Database Buffers 2.1475E+10 bytes Redo Buffers 611299328 bytes Database mounted. Database opened. #查看状态为主库# SQL> select open_mode,database_role,db_unique_name from v$database; OPEN_MODE DATABASE_ROLE DB_UNIQUE_NAME -------------------- ---------------- ------------------------------ READ WRITE PRIMARY standsty1 --测试一下是否切换成功 #查看,并切换主库standsty1 日志文件 # SQL> select max(sequence#) from v$archived_log; MAX(SEQUENCE#) -------------- 38 SQL> alter system switch logfile; System altered. SQL> select max(sequence#) from v$archived_log; MAX(SEQUENCE#) -------------- 39 #备库primary1 查看日志文件和主库的相同,切换成功 SQL> select max(sequence#) from v$archived_log; MAX(SEQUENCE#) -------------- 39 -------------------------------------------------测试2:主备库切换-结束---------------------------------------------------------------
标签:
原文地址:http://blog.csdn.net/fly43108622/article/details/51742626