Oracle 11g Data Guard 使用duplicate from active database 创建 standby database(一)

2015-01-21 12:17:34 · 作者: · 浏览: 14

用这种方式来搭建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