DG创建
环境
这次创建DG的环境是
Database:11.2.0.3
主备库的oracle软件安装路径都在/u01/app/oracle下面。
主库IP地址:20.4.1.81
备库IP地址:20.4.1.79
准备TNS项
在主库上编辑tns文件,然后拷贝到备库上。
[oracle@2F ~]$ cat /u01/app/oracle/product/11.2.0/db/network/admin/tnsnames.ora # tnsnames.ora Network Configuration File: /u01/app/oracle/product/11.2.0/db/network/admin/tnsnames.ora # Generated by Oracle configuration tools.
ORCL = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 20.4.1.81)(PORT = 1521)) ) (CONNECT_DATA = (SERVICE_NAME = orcl) ) )
#连接到主库的tns zd_pri = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 20.4.1.81)(PORT = 1521)) ) (CONNECT_DATA = (SERVICE_NAME = pri) ) )
#连接到备库的tns zd_std = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 20.4.1.79)(PORT = 1521)) ) (CONNECT_DATA = (SERVICE_NAME = std) ) ) |
配置好之后,将该tnsname.ora拷贝的standby库上。
验证一下tnsping,和使用sqlplus登陆一下,连接是通的
[oracle@2F ~]$ tnsping zd_pri
TNS Ping Utility for Linux: Version 11.2.0.3.0 - Production on 08-MAR-2014 14:33:21
Copyright (c) 1997, 2011, Oracle. All rights reserved.
Used parameter files:
Used TNSNAMES adapter to resolve the alias Attempting to contact (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 20.4.1.81)(PORT = 1521))) (CONNECT_DATA = (SERVICE_NAME = pri))) OK (0 msec) [oracle@2F ~]$ sqlplus system/oracle@zd_pri
SQL*Plus: Release 11.2.0.3.0 Production on Sat Mar 8 14:33:35 2014
Copyright (c) 1982, 2011, Oracle. All rights reserved.
Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production With the Partitioning, OLAP, Data Mining and Real Application Testing options
SQL> |
配置主备库的listener.ora文件(如果不做switch over就不需要做),添加SID_LIST
SID_LIST_LISTENER= (SID_LIST = (SID_DESC= (GLOBAL_DBNAME=pri) (ORACLE_HOME=/u01/app/oracle/product/11.2.0/db) (SID_NAME=orcl) ) ) |
添加这个的时候,需要注意的是SID_LIST_LISTENER必须定格写,不然会报错。
在备库的时候也需要添加如下内容
SID_LIST_LISTENER= (SID_LIST = (SID_DESC= (GLOBAL_DBNAME=std) (ORACLE_HOME=/u01/app/oracle/product/11.2.0/db) (SID_NAME=orcl) ) ) |
修改主库的相关项:
alter database force logging; alter database archivelog; |
[oracle@2F ~]$ sqlplus / as sysdba
SQL*Plus: Release 11.2.0.3.0 Production on Sat Mar 8 13:10:11 2014
Copyright (c) 1982, 2011, Oracle. All rights reserved.
Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production With the Partitioning, OLAP, Data Mining and Real Application Testing options
SQL> archive log list Database log mode No Archive Mode Automatic archival Disabled Archive destination USE_DB_RECOVERY_FILE_DEST Oldest online log sequence 6 Current log sequence 8 SQL> select force_logging from v$database;
FOR --- NO
SQL> alter database force logging;
Database altered.
SQL> shutdown immediate; Database closed. Database dismounted. ORACLE instance shut down. SQL> startup mount; ORACLE instance started.
Total System Global Area 4.0486E+10 bytes Fixed Size 2237088 bytes Variable Size 4026535264 bytes Database Buffers 3.6373E+10 bytes Redo Buffers 84631552 bytes Database mounted. SQL> alter database archivelog;
Database altered.
SQL> alter database open;
Database altered.
SQL> archive log list; Database log mode Archive Mode Automatic archival Enabled Archive destination USE_DB_RECOVERY_FILE_DEST Oldest online log sequence 6 Next log sequence to archive 8 Current log sequence 8 SQL> select force_logging from v$database;
FOR --- YES |
在操作的时候,我是先将主库参数文件修改好
[oracle@2F ~]$ cat $ORACLE_HOME/dbs/initorcl.ora *.audit_file_dest='/u01/app/oracle/admin/orcl/adump' *.audit_trail='db' *.compatible='11.2.0.0.0' *.control_files='/u01/app/oracle/oradata/orcl/control01.ctl','/u01/app/oracle/fast_recovery_area/orcl/control02.ctl' *.db_block_size=8192 *.db_domain='' *.db_name='orcl' *.db_recovery_file_dest='/u01/app/oracle/fast_recovery_area' *.db_recovery_file_dest_size=4322230272 *.diagnostic_dest='/u01/app/oracle' *.dispatchers='(PROTOCOL=TCP) (SERVICE=orclXDB)' *.nls_language='SIMPLIFIED CHINESE' *.nls_territory='CHINA' *.open_cursors=300 *.pga_aggregate_target=13519290368 *.processes=250 *.remote_login_passwordfile='EXCLUSIVE' *.sessions=280 *.sga_target=40557871104 *.undo_tablespace='UNDOTBS1' #以上部分是数据库原来的参数,如果有跟下面的相同的参数,就将上面的删除 *.db_unique_name='pri' *.LOG_ARCHIVE_CONFIG='DG_CONFIG=(pri,std)' *.LOG_ARCHIVE_DEST_1='LOCATION=/u01/app/oracle/arch/pri VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=pri' *.LOG_ARCHIVE_DEST_2='SERVICE=zd_std LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=std' *.LOG_ARCHIVE_DEST_STATE_1=ENABLE *.LOG_ARCHIVE_DEST_STATE_2=ENABLE *.LOG_ARCHIVE_FORMAT=%t_%s_%r.arc *.LOG_ARCHIVE_MAX_PROCESSES=5 *.FAL_SERVER=zd_std *.FAL_CLIENT=zd_pri *.DB_FILE_NAME_CONVERT='/u01/app/oracle/oradata/std/','/u01/app/oracle/oradata/orcl/' *.LOG_FILE_NAME_CONVERT='/u01/app/oracle/oradata/std/','/u01/app/oracle/oradata/orcl/' *.STANDBY_FILE_MANAGEMENT=AUTO |
需要解释一下这个几个参数
db_unique_name 是数据库的唯一名字,这个需要跟备库有区别
LOG_ARCHIVE_CONFIG 是标注DG环境下的数据库的unique_name
LOG_ARCHIVE_DEST_1 是数据库归档的路径,location表明归档的路径。VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=pri' 表明主库的db_unique_name 为pri, valid_for表示,当该市里的角色为all_roles的时候,all_logfiles所有的文件都归档当location指定的位置上。
LOG_ARCHIVE_DEST_2='SERVICE=zd_std LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=std'
表示数据第二个归档路径,其中service指定的tnsname.ora中配置的tnsname,指定的备库的连接字符串,同样valid_for表示,该实例作为primay_role的时候,online_logfiles归档到service指定的路径,db_unique_name指定的备库的唯一名字
*.LOG_ARCHIVE_DEST_STATE_1=ENABLE
*.LOG_ARCHIVE_DEST_STATE_2=ENABLE 启动用这两个归档路径
*.LOG_ARCHIVE_FORMAT=%t_%s_%r.arc 归档日志的文件命名格式
*.LOG_ARCHIVE_MAX_PROCESSES=5 归档进程的最大数量。
*.FAL_SERVER=zd_std 当在本实例是standby角色的时候取日志的目标服务器
*.FAL_CLIENT=zd_pri 当本实例是standby角色的时候,指定的客户端,一般是本实例的tns
*.DB_FILE_NAME_CONVERT='/u01/app/oracle/oradata/std/','/u01/app/oracle/oradata/orcl/' 数据文件转化,如果路径一样,就不需要转换,如果不一样的存放路径就需要转换。
*.LOG_FILE_NAME_CONVERT='/u01/app/oracle/oradata/std/','/u01/app/oracle/oradata/orcl/'
日志文件的路径转换
*.STANDBY_FILE_MANAGEMENT=AUTO 对standby文件的管理方式
以下是备库的参数文件,注意标红的部分的不同。因为角色的不同,所以这些参数就会有不同的地方。
*.audit_file_dest='/u01/app/oracle/admin/std/adump' *.audit_trail='db' *.compatible='11.2.0.0.0' *.control_files='/u01/app/oracle/oradata/std/control01.ctl','/u01/app/oracle/fast_recovery_area/std/control02.ctl' *.db_block_size=8192 *.db_domain='' *.db_name='orcl' *.db_recovery_file_dest='/u01/app/oracle/fast_recovery_area' *.db_recovery_file_dest_size=4322230272 *.diagnostic_dest='/u01/app/oracle' *.dispatchers='(PROTOCOL=TCP) (SERVICE=orclXDB)' *.nls_language='SIMPLIFIED CHINESE' *.nls_territory='CHINA' *.open_cursors=300 *.pga_aggregate_target=13519290368 *.processes=250 *.remote_login_passwordfile='EXCLUSIVE' *.sessions=280 *.sga_target=40557871104 *.undo_tablespace='UNDOTBS1'
*.db_unique_name='std' *.LOG_ARCHIVE_CONFIG='DG_CONFIG=(pri,std)' *.LOG_ARCHIVE_DEST_1='LOCATION=/u01/app/oracle/arch/std VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=std' *.LOG_ARCHIVE_DEST_2='SERVICE=zd_pri LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=pri' *.LOG_ARCHIVE_DEST_STATE_1=ENABLE *.LOG_ARCHIVE_DEST_STATE_2=ENABLE *.LOG_ARCHIVE_FORMAT=%t_%s_%r.arc *.LOG_ARCHIVE_MAX_PROCESSES=5 *.FAL_SERVER=zd_pri *.FAL_CLIENT=zd_std *.DB_FILE_NAME_CONVERT='/u01/app/oracle/oradata/orcl/','/u01/app/oracle/oradata/std/' *.LOG_FILE_NAME_CONVERT='/u01/app/oracle/oradata/orcl/','/u01/app/oracle/oradata/std/' *.STANDBY_FILE_MANAGEMENT=AUTO |
给主库增加standby logfile
alter database add standby logfile group 4 size 50M; alter database add standby logfile group 5 size 50M; alter database add standby logfile group 6 size 50M; alter database add standby logfile group 7 size 50M; |
这个standby的日志大小,必须跟online redo log的大小一样,组数要比redo log多一组。
给主库添加密码文件,如果主库的密码文件没有的话,需要这样添加
[oracle@2F dbs]$ orapwd file='/u01/app/oracle/product/11.2.0/db/dbs/orapworcl' password=oracle |
在备库上补建参数文件中的相关文件夹
[oracle@2D ~]$ mkdir -p /u01/app/oracle/admin/std/adump [oracle@2D ~]$ mkdir -p /u01/app/oracle/oradata/std [oracle@2D ~]$ mkdir -p /u01/app/oracle/fast_recovery_area/std [oracle@2D ~]$ mkdir -p /u01/app/oracle/arch/std |
利用备库的参数文件启动备库到nomount状态,可以先创建spfile后,在启动到nomount
[oracle@2D ~]$ sqlplus / as sysdba
SQL*Plus: Release 11.2.0.3.0 Production on Sat Mar 8 13:53:06 2014
Copyright (c) 1982, 2011, Oracle. All rights reserved.
Connected to an idle instance.
SQL> startup nomount ORACLE instance started.
Total System Global Area 4.0486E+10 bytes Fixed Size 2237088 bytes Variable Size 3758099808 bytes Database Buffers 3.6641E+10 bytes Redo Buffers 84631552 bytes |
rman连接两个库做复制
rman target sys/oracle@zd_pri auxiliary sys/oracle@zd_std
duplicate target database for standby from active database;
[oracle@2D admin]$ rman target sys/oracle@zd_pri auxiliary sys/oracle@zd_std
Recovery Manager: Release 11.2.0.3.0 - Production on Sat Mar 8 14:10:27 2014
Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved.
connected to target database: ORCL (DBID=1369450057) connected to auxiliary database: ORCL (not mounted)
RMAN> duplicate target database for standby from active database;
Starting Duplicate Db at 08-MAR-14 using target database control file instead of recovery catalog allocated channel: ORA_AUX_DISK_1 channel ORA_AUX_DISK_1: SID=313 device type=DISK
contents of Memory Script: { backup as copy reuse targetfile '/u01/app/oracle/product/11.2.0/db/dbs/orapworcl' auxiliary format '/u01/app/oracle/product/11.2.0/db/dbs/orapworcl' ; } executing Memory Script
Starting backup at 08-MAR-14 allocated channel: ORA_DISK_1 channel ORA_DISK_1: SID=106 device type=DISK Finished backup at 08-MAR-14
contents of Memory Script: { backup as copy current controlfile for standby auxiliary format '/u01/app/oracle/oradata/std/control01.ctl'; restore clone controlfile to '/u01/app/oracle/fast_recovery_area/std/control02.ctl' from '/u01/app/oracle/oradata/std/control01.ctl'; } executing Memory Script
Starting backup at 08-MAR-14 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/db/dbs/snapcf_orcl.f tag=TAG20140308T141113 RECID=3 STAMP=841673473 channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:01 Finished backup at 08-MAR-14
Starting restore at 08-MAR-14 using channel ORA_AUX_DISK_1
channel ORA_AUX_DISK_1: copied control file copy Finished restore at 08-MAR-14
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/std/temp01.dbf"; switch clone tempfile all; set newname for datafile 1 to "/u01/app/oracle/oradata/std/system01.dbf"; set newname for datafile 2 to "/u01/app/oracle/oradata/std/sysaux01.dbf"; set newname for datafile 3 to "/u01/app/oracle/oradata/std/undotbs01.dbf"; set newname for datafile 4 to "/u01/app/oracle/oradata/std/users01.dbf"; set newname for datafile 5 to "/u01/app/oracle/oradata/std/example01.dbf"; backup as copy reuse datafile 1 auxiliary format "/u01/app/oracle/oradata/std/system01.dbf" datafile 2 auxiliary format "/u01/app/oracle/oradata/std/sysaux01.dbf" datafile 3 auxiliary format "/u01/app/oracle/oradata/std/undotbs01.dbf" datafile 4 auxiliary format "/u01/app/oracle/oradata/std/users01.dbf" datafile 5 auxiliary format "/u01/app/oracle/oradata/std/example01.dbf" ; sql 'alter system archive log current'; } executing Memory Script
executing command: SET NEWNAME
renamed tempfile 1 to /u01/app/oracle/oradata/std/temp01.dbf in control file
executing command: SET NEWNAME
executing command: SET NEWNAME
executing command: SET NEWNAME
executing command: SET NEWNAME
executing command: SET NEWNAME
Starting backup at 08-MAR-14 using channel ORA_DISK_1 channel ORA_DISK_1: starting datafile copy input datafile file number=00001 name=/u01/app/oracle/oradata/orcl/system01.dbf output file name=/u01/app/oracle/oradata/std/system01.dbf tag=TAG20140308T141120 channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:15 channel ORA_DISK_1: starting datafile copy input datafile file number=00002 name=/u01/app/oracle/oradata/orcl/sysaux01.dbf output file name=/u01/app/oracle/oradata/std/sysaux01.dbf tag=TAG20140308T141120 channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:15 channel ORA_DISK_1: starting datafile copy input datafile file number=00005 name=/u01/app/oracle/oradata/orcl/example01.dbf output file name=/u01/app/oracle/oradata/std/example01.dbf tag=TAG20140308T141120 channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:07 channel ORA_DISK_1: starting datafile copy input datafile file number=00003 name=/u01/app/oracle/oradata/orcl/undotbs01.dbf output file name=/u01/app/oracle/oradata/std/undotbs01.dbf tag=TAG20140308T141120 channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:03 channel ORA_DISK_1: starting datafile copy input datafile file number=00004 name=/u01/app/oracle/oradata/orcl/users01.dbf output file name=/u01/app/oracle/oradata/std/users01.dbf tag=TAG20140308T141120 channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:01 Finished backup at 08-MAR-14
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=3 STAMP=841673486 file name=/u01/app/oracle/oradata/std/system01.dbf datafile 2 switched to datafile copy input datafile copy RECID=4 STAMP=841673486 file name=/u01/app/oracle/oradata/std/sysaux01.dbf datafile 3 switched to datafile copy input datafile copy RECID=5 STAMP=841673486 file name=/u01/app/oracle/oradata/std/undotbs01.dbf datafile 4 switched to datafile copy input datafile copy RECID=6 STAMP=841673486 file name=/u01/app/oracle/oradata/std/users01.dbf datafile 5 switched to datafile copy input datafile copy RECID=7 STAMP=841673486 file name=/u01/app/oracle/oradata/std/example01.dbf Finished Duplicate Db at 08-MAR-14
RMAN> exit
Recovery Manager complete. |
此时查看备库的状态
SQL> select status from v$instance ;
STATUS ------------ MOUNTED |
SQL> alter database recover managed standby database disconnect from session;
Database altered. |
此时可以在alert日志中看到
Sat Mar 08 14:13:00 2014 alter database recover managed standby database disconnect from session Attempt to start background Managed Standby Recovery process (orcl) Sat Mar 08 14:13:00 2014 MRP0 started with pid=23, OS id=28042 MRP0: Background Managed Standby Recovery process started (orcl) started logmerger process Sat Mar 08 14:13:05 2014 Managed Standby Recovery not using Real Time Apply |
表明DG不是实时应用的,因此在主库switch logfile的时候,在备库的alert日志中需要等待一段时间才能看到这个切换日志应用操作。
将日志的应用改为实时应用
alter database recover managed standby database cancel; alter database recover managed standby database using current logfile disconnect from session; |
此时再在备库的日志中可以看到
Sat Mar 08 14:19:44 2014 alter database recover managed standby database using current logfile disconnect from session Attempt to start background Managed Standby Recovery process (orcl) Sat Mar 08 14:19:44 2014 MRP0 started with pid=23, OS id=28265 MRP0: Background Managed Standby Recovery process started (orcl) started logmerger process Sat Mar 08 14:19:49 2014 Managed Standby Recovery starting Real Time Apply |
至此DG搭建完毕,可见rman搭建DG还是很快的。