standby_db_创建过程
1, primary db initxxx.ora 设置:
log_archive_start = true
log_archive_dest_1 = "location=/templv/arch"
log_archive_format = arch_%t_%s.arc
log_archive_dest_2='SERVICE=stdby'
log_archive_dest_state_2='ENABLE'
*.fal_server='primary'
*.fal_client='standby'
2,standby db initxxx.ora 设置:
lock_name_space=stdby
remote_archive_enable=TRUE
standby_archive_dest='/templv/cwx/stb_arch'
db_file_name_convert=('/dev/vg270gb','/templv/cwx/stdby')
log_file_name_convert=('/dev/vg270gb','/templv/cwx/stdby')
standby_file_management=AUTO
*.fal_server='primary'
*.fal_client='standby'
instance_name=stdby
3,在primary db端配置好TNS(FOR STANDBY DB),在standby db端配置好LISTENER(FOR STANDBY DB)。否则下面过程中将失败。
4,把primary db正常关闭,然后复制数据文件到相应的机器或目录。如果源文件是裸设备,则要用dd工具把数据复制到文件系统上,在HP主机上
读的块数要比在数据库中查到的多一块。否则会在RECOVER的时候报错。
SQL> select sum(blocks),file_id from dba_data_files group by file_id;
SUM(BLOCKS) FILE_ID
----------- ----------
130944 1
262016 2
128000 3
dd if=/dev/vg270gb/rdb09_system01 of=/templv/cwx/stdby/rdb09_system01 bs=8192 count=130945
5,启动primary db,创建standby db的控制文件:
SQL>alter database create standby controlfile as 'standby_control';
或者
SQL>alter database create standby controlfile as '/templv/cwx/stdby/standby_control';
6,在standby db端进行如下操作:
SQL> STARTUP NOMOUNT;
SQL> ALTER DATABASE MOUNT STANDBY DATABASE;
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;
7,任何使用standby db:
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;
SQL> ALTER DATABASE ACTIVATE STANDBY DATABASE; (此时会把STANDBY DB控制文件变成正常的数据库控制文件,否则数据库是打不开)
SQL> SHUTDOWN
SQL> STARTUP
注意:STANDBY DB一旦打开,是不能再转换到STANDBY DB的状态,如果需要,则要重新制作。
8,STANDBY DB 的特点:
A、如果源数据库的数据结构发生变化,则STANDBY DB也会自动发生变化(ORACLE8I没有此功能),所以STANDBY DB所在的文件系统要有足够的空间。
而且新建的源数据库的数据文件的位置依靠初始化文件中的转换关系在STANDBY DB中建立相应的数据文件:
如:
db_file_name_convert=('/templv/cwx/9iora','/templv/cwx/stdby')
源数据库:
create tablespace test2 datafile '/templv/cwx/9iora/test2.dbf' size 200m;
STANDBY DB:
Recovery created file /templv/cwx/stdby/test2.dbf
Successfully added datafile 5 to media recovery
B、如果网络发生中断,或者STANDBY DB的归档目录发生变化,则PRIMARY DB的警告文件会报错,如果修复正常,则可以继续从中断的位置
开始RECOVER。
C、如果源数据库的数据文件在多个不同路径下,那么在STANDBY DB的初始化文件中要把转换的路径给添加上:
db_file_name_convert=('/dev/vg270gb','/templv/cwx/stdby')
db_file_name_convert=('/templv/cwx/9iora','/templv/cwx/stdby')
D、如果STANDBY DB的归档日志所在的目录没有空间,则会报错,解决办法,只要腾出空间,就会自动往前继续,错过的归档日志也会自动补充。
ARC0: I/O error 272 archiving log 3 to 'stdby'
Fri Feb 25 10:39:15 2005
Errors in file /oracle9i/admin/db09/bdump/db09_arc0_16909.trc:
ORA-00272: error writing archive log
ARC0: Error 270 Closing archive log file 'stdby'
E、有时某个归档日志没有归档到远端的主机,这个归档日志之后的几个却归档过来了,ORACLE会一直尝试归档动作,直到归档成功。
如果一个脚本把正在归档的文件或者已经归档过来还没有使用过的给删除了,ORACLE会报错,停止远程的归档,但是以后会主动补充,继续RECOVER。
但是如果源数据库端的归档日志被删除了,就没办法补充过了。