这几天在搭建10g DG Windows 2008 R2的测试环境,主要是明天要去给一客户重新搭建一套生产库的DG,其中发现一些问题,特此记录一下
由于将要部署到生产环境,所以考虑在线搭建DG的方案,即不停库的情况下,而问题主要就是出在不停库时,用RAMN创建STANDBY的时候
通常在线搭建DG,主要是下面几个步骤:
1. 确保主库开启归档,并开启force logging模式
2. 主库在线修改spifle,alter system set .... scope=both;并创建pfile
首先要确保所需修改的参支持在线修改,可以查看视图v$parameter
SQL> select distinct issys_modifiable from v$parameter;
ISSYS_MODIFIABLE
---------------------------
DEFERRED
FALSE
IMMEDIATE
说明:
DFERRED:动态参数,修改后对当前活跃的session无效
FALSE:静态参数,修改后需重启数据库
IMMEDIATE:动态参数,修改后立即对所有session生效
SQL> select name,issys_modifiable,value from v$parameter where name='xxxx'; xxxx为要修改的参数名
在需要改的几个参数中,只有db_unique_name不支持在线修改
SQL> alter system set LOG_ARCHIVE_CONFIG='DG_CONFIG=(ora10gpd,ora10gst)' scope=both;
SQL> alter system set LOG_ARCHIVE_DEST_1='LOCATION=USE_DB_RECOVERY_FILE_DEST VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=ora10gpd' scope=both;
SQL> alter system set LOG_ARCHIVE_DEST_2='SERVICE=ora10gst LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=ora10gst' 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 FAL_SERVER=ora10gst scope=both;
SQL> alter system set FAL_CLIENT=ora10gpd scope=both;
SQL> alter system set STANDBY_FILE_MANAGEMENT='AUTO' scope=both;
所以如果生产库想不停库搭建DG的话,那么就要使用原有的db_unique_name,通常和db_name是同一个名字
修改完spfile以后,用它创建一个pfile,供备库使用,create pfile from spfile;
3. 主库创建standby redo logfile,alter database add standby logfile group # datafile ('xxxx') size 50M; xxxx指定路径和文件名
4.创建listener.ora和tnsnames.ora,把生成的文件复制到备库相应位置并修改
5. 主库创建备库控制文件、数据文件、归档日志文件备份集
rman target /
RMAN> backup full database format 'c:\backup\full_%d_%I_%U' include current controlfile for standby plus archivelog format 'c:\backup\arc_%d_%I_%U';
或者:
run
{
allocate channel d1 type disk;
backup format 'C:\backup\df_%d_%I_%U' database;
sql 'alter system archive log current';
backup format 'C:\backup\al_%d_%I_%U' archivelog all;
backup current controlfile for standby format 'C:\backup\cf_%d_%I_%U';
release channel d1;
}
6. 把pfile参数文件,密码文件,拷贝到备库%ORACLE_HOME%\database\下
7. 创建备库实例(ora10g)及相关目录
C:\Users\Administrator>oradim -new -sid ora10g
C:\oracle\product\10.2.0\fast_recovery_area
C:\oracle\product\10.2.0\admin\
C:\oracle\product\10.2.0\admin\adump
C:\oracle\product\10.2.0\admin\bdump
C:\oracle\product\10.2.0\admin\cdump
C:\oracle\product\10.2.0\admin\dpdump
C:\oracle\product\10.2.0\admin\pfile
C:\oracle\product\10.2.0\admin\udump
8. 把主库备份集拷贝到备库并进行恢复,主要是3个步骤
① nomount状态下恢复备库控制文件, RMAN> restore controlfile from 'C:\backup\xxxx'; xxxx为含有备库控制文件的备份片名称
② mount状态下恢复数据库,RMAN> restore database;
③ 恢复备库归档日志文件,RMAN> restore archivelog all;
或在做完第①步后,在主库open,备库nomount状态下连接到RMAN执行:
rman target sys/oracle@ora10gpd auxiliary /
run
{
allocate channel C1 device type disk;
allocate auxiliary channel C2 device type disk;
duplicate target database for standby nofilenamecheck;
release channel C1;
release channel C2;
}
9. 备库创建standby redo logfile,大小位置需和主库一致
10. 完成恢复并启动mpr0进程,即启用redo apply,alter database recover managed standby database disconnect from session;
如果一切顺利,那么此时备库就会开始逐一应用主库传过来的归档日志文件
但,事实没有这么简单,在我实际做下来的结果是,主库的redo log日志文件无法传递到备库,备库的alert log日志会报 ORA-19527 和 ORA-00312 错误,如下:
ORA-19527: 必须重