成功完成9istandby配置(参考fenng的大作后补充修正版本)
环境:windows 2000+Oracle 9.2.0.4;主库名为test,备库名为pstandby
1、首先确认Primary数据库是否在归档模式下,假如不是请自己调整,这里略过。
SQL; archive log list
数据库日志模式存档模式
自动存档 启用
存档终点D:\oracle\oradata\test\Archive
最早的概要日志序列 45
下一个存档日志序列 47
当前日志序列 47
2、激活Primary Database的Forced Logging
SQL; ALTER DATABASE FORCE LOGGING;
3、设置Primary Database的本地归档地址,假如已经设置过无须重复;
SQL; ALTER SYSTEM SET LOG_ARCHIVE_DEST_1='LOCATION=D:\oracle\oradata\test\Archive' SCOPE=BOTH;
4、关闭primary database,复制主数据库的数据文件(可以不包括在线日志和临时文件)到备用库的对应位置,本例为D:\oracle\oradata\pstandby(该目的目录需要提前建立,类似需要提前建立的目录还有d:\oracle\admin\pstandby\下的pfile目录)
5、使primary database处于mount状态时,为Standby 数据库创建控制文件(注重这个控制文件的名字不要和Primary的控制文件名字重复 )
SQL; ALTER DATABASE CREATE STANDBY CONTROLFILE AS 'D:\oracle\oradata\pstandby\PSTANDBY.CTL';
6、为Standby数据库预备初始化参数文件名字
SQL; CREATE PFILE='d:\oracle\admin\pstandby\pfile\initpstandby' FROM SPFILE;
7、修改Physical Standby Database和Primary Database的初始化参数文件(该步骤非凡重要)
备库initpstandby.ora 一些可能出现错误的参数设置
*****************************************************************
*.control_files='D:\oracle\oradata\pstandby\PSTANDBY.CTL'
*.db_name='test'
*.instance_name='pstandby'
*.log_archive_dest_1='LOCATION=D:\oracle\oradata\pstandby\archive'
*.lock_name_space='pstandby'
*.standby_file_management=AUTO
*.remote_archive_enable=TRUE
*.standby_archive_dest='D:\oracle\oradata\pstandby\archive'
*.db_file_name_convert=('D:\oracle\oradata\test','D:\oracle\oradata\pstandby')
*.log_file_name_convert=('D:\oracle\oradata\test','D:\oracle\oradata\pstandby')
*.fal_server='PRIMARY'
*.fal_client='STANDBY'
*************************************************************************
主库inittest.ora一些可能出现错误的参数设置
*************************************************************************
*.db_name='test'
*.instance_name='test'
*.log_archive_dest_1='LOCATION=D:\oracle\oradata\test\archive'
*.db_file_name_convert=('D:\oracle\oradata\test','D:\oracle\oradata\pstandby')
*.log_file_name_convert=('D:\oracle\oradata\test','D:\oracle\oradata\pstandby')
*.fal_server='PRIMARY'
*.fal_client='STANDBY'
*.lock_name_space='test'
*.standby_file_management=AUTO
*.remote_archive_enable=TRUE
***********************************************************************
8、为Standby Database创建一个Windows服务,并且在tnsnames.ora下增加网络服务
C:\Documents and Settings\Administrator;oradim -NEW -SID Pstandby -STARTMODE manual
tnsnames.ora文件
************************************************************************
TEST =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = JIWEI_Office)(PORT = 1521))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = test)
)
)
PSTANDBY =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = JIWEI_OFFICE)(PORT = 1521))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = test) --此处不能为pstandby
)
)
****************************************************************************
9、为Standby Database重新生成一个新的SPFILE
可参考执行如下操作:
C:\Documents and Settings\Administrator;set oracle_sid=pstandby
C:\Documents and Settings\Administrator;sqlplus /nolog
SQL; connect / as sysdba
SQL; CREATE SPFILE FROM PFILE='d:\oracle\admin\pstandby\pfile\initpstandby';
10、启动物理Standby数据库
C:\Documents and Settings\Administrator;set oracle_sid=pstandby
C:\Documents and Settings\Administrator;sqlplus /nolog
SQL; connect / as sysdba
SQL; STARTUP NOMOUNT;
SQL; ALTER DATABASE MOUNT STANDBY DATABASE;
SQL; ALTER DATABASE OPEN READ ONLY; (standby数据库只能用read only的模式打开)
此处假如错误:
ERROR at line 1:
ORA-01154: database busy. Open, close, mount, and dismount not allowed now
请执行备用库的不完全恢复
SQL; recover managed standby database cancel;
Media recovery complete.
SQL; alter database open read only;
Database altered.
11、在Standby数据库上,初始化Log Apply 服务:
SQL; ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;(后台会话,相当于nohup(&),即使网络断开也不会中断而且可以立即返回到用户执行其他操作,但他仍然是守护的影子进程等待主数据库传送的日志一旦发现就自动恢复)
12、在Primary database上激活到standby的日志归档
SQL; ALTER SYSTEM SET LOG_ARCHIVE_DEST_2='SERVICE=Pstandby' SCOPE=BOTH;
SQL; ALTER SYSTEM SET LOG_ARCHIVE_DEST_STATE_2=ENABLE SCOPE=BOTH;
13、在Primary database启动远程归档
SQL; ALTER SYSTEM ARCHIVE LOG CURRENT;
14、安装完的的验证:
在standby database下,查询V$ARCHIVED_LOG
(其实也可以直接到相关目录下查看Log是否创建):
SQL; SELECT SEQUENCE#, FIRST_TIME, NEXT_TIMEFROM V$ARCHIVED_LOG ORDER BY SEQUENCE#;
SEQUENCE# FIRST_TIME NEXT_TIME
---------- ---------- ----------
14 12-9?-05 12-9?-05
15 12-9?-05 12-9?-05
16 12-9?-05 12-9?-05
17 12-9?-05 12-9?-05
18 12-9?-05 12-9?-05
19 12-9?-05 12-9?-05
20 12-9?-05 12-9?-05
21 12-9?-05 12-9?-05
....
假如在配置过程中,发现无法传送归档日志,并且在alter.log中有错误ORA-12154: TNS: 无法处理服务名
请查看tnsnames.ora文件配置,不要忘记启动lsnrctl。