用这种方式来搭建DG ,主库的停机时间很少,只需要重启一下,使参数生效。也可以用这种方法进行DB迁移。DG搭建好,然后把备库激活就可以了。 这样整个迁移中宕机时间也比较短。
Oracle: 11.2.0.1
Primary IP: 192.168.2.42
DB_NAME=sanfu
?
Standby IP: 192.168.2.43
DB_NAME=sanfu
?
一.? Primary 端操作:
1. 设置归档模式
? ? ? 这个生产库都是这种模式。
? ? ? SQL> archive log list;
? ? ? SQL> shutdown immediate
? ? ? SQL> startup mount
? ? ? SQL> alter database archivelog;
? ? ? SQL> archive log list;
? ? ?
2. Primary 设置force logging
SQL> alter database force logging;
SQL> select force_logging from v$database;
FORCE_LOG
---------
YES
?
3. 配置Oracle Net
? ? ? 在Primary 库和Standby 都要修改。也可以使用netca 和netmgr命令配置。
注意:修改完后记得重启listener。
?
Listener.ora
[oracle@qs-dmm-rh1 admin]$ cat listener.ora
LISTENER =
? (DESCRIPTION_LIST =
? ? (DESCRIPTION =
? ? ? (ADDRESS = (PROTOCOL = TCP)(HOST = localhost6.localdomain6)(PORT = 1521))
? ? )
? )
?
ADR_BASE_LISTENER = /u01/app/oracle
?
SID_LIST_LISTENER =
? (SID_LIST =
? ? (SID_DESC =
? ? ? (GLOBAL_DBNAME = orcl)
? ? ? (ORACLE_HOME = /u01/app/oracle/product/11.2.0/dbhome_1)
? ? ? (SID_NAME = orcl)
? ? )
? )
?-- 配置静态注册
?
tnsname.ora
[oracle@qs-dmm-rh1 admin]$ cat tnsnames.ora
sanfus =
? (DESCRIPTION =
? ? (ADDRESS_LIST =
? ? ? (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.2.43)(PORT = 1521))
? ? )
? ? (CONNECT_DATA =
? ? ? (SERVICE_NAME = orcl)
? ? )
? )
?
sanfup =
? (DESCRIPTION =
? ? (ADDRESS_LIST =
? ? ? (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.2.42)(PORT = 1521))
? ? )
? ? (CONNECT_DATA =
? ? ? (SERVICE_NAME = orcl)
? ? )
? )
?
?
4. 添加data guard 参数
? ? ? 创建pfile, 添加如下文件:
SQL> create pfile from spfile;
*.db_name='orcl'
*.db_unique_name='sanfup'
*.log_archive_config='dg_config=(sanfup,sanfus)'
*.log_archive_dest_1='location=/u01/archivelog valid_for=(all_logfiles,all_roles) db_unique_name=sanfup'
*.log_archive_dest_2='service=sanfus reopen=120 lgwr async valid_for=(online_logfiles,primary_role) db_unique_name=sanfus'
*.log_archive_dest_state_1=enable
*.log_archive_dest_state_2=enable
*.standby_file_management='auto'
*.fal_server='sanfus'
*.fal_client='sanfup'
?
?
注意:
? ? ? 在Oracle 11g的Data Guard中,standby_archive_dest参数已经被取消了。
? ? ?
Standby归档文件的存放位置按如下规则来进行:
(1)当LOG_ARCHIVE_DEST_n设置了valid_for=(all_logfiles,all_roles),那么在不定义standby_archive_dest参数时,Oracle就会选择LOG_ARCHIVE_DEST_n参数作为归档目标。
(2)如果在第一步设置的同时,又独立设置LOG_ARCHIVE_DEST_n参数为 valid_for=(standby_logfile,*) 属性,那么当compatible参数大于10.0的时候,会自动的选择任意一个LOG_ARCHIVE_DEST_n的值。
(3)如果LOG_ARCHIVE_DEST_n 没有设置的话,默认位置是:
? ? ? $ORACLE_HOME/dbs.
? ? ? 不过valid_for参数的默认值就是all_logfiles和all_roles. 所以只要设置了本地的归档位置,远程的归档文件也会放到这个目录下面。
?
5. 用新pfile重启主库
?
SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> create spfile from pfile='/u01/app/oracle/product/11.2.0/dbhome_1/dbs/initorcl.ora';
File created.
SQL> startup
ORACLE instance started.
?
Total System Global Area? 422670336 bytes
Fixed Size? ? ? ? ? ? ? ? ? 1336960 bytes
Variable Size? ? ? ? ? ? 310380928 bytes
Database Buffers? ? ? ? ? 104857600 bytes
Redo Buffers? ? ? ? ? ? ? ? 6094848 bytes
Database mounted.
Database opened.
SQL>
?
?
二.? Standby 端设置:
?
1. 创建相关目录结构
[oracle@qs-dmm-rh2 trace]$ mkdir -p /u01/app/oracle/oradata/dave
--这里我们创建的目录和Target 库不同,我们在参数文件里需要转换一下。
?
2. 创建standby的口令文件
[oracle@qs-dmm-rh2 trace]$ orapwd file=?/dbs/orapwdave password=oracle
?
3. 创建standby的初始化参数:
*.compatible='11.2.0.4.0'
*db_name=orcl
*.control_files='/u01/app/oracle/oradata/dave/control01.ctl', '/u01/app/oracle/oradata/dave/control02.ctl',
'/u01/app/o