** 试验环境 ** **
primary server:
**
** ** windows2000 server + oracle 10.0.1 .0.2
ORACLE_SID:dgtest
ORACLE_HOME: D:\oracle\product\ 10.1.0 \db_1 **
standby server: **
windows XP pro + oracle 10.0.1 .0.2
ORACLE_SID:dgtest
ORACLE_HOME: D:\oracle\product\ 10.1.0 \db_1
**
**
** 配置步骤 ** **
** 首先,装好 primary 和 standby 上的 oracle ,建 SID 同为 dgtest 的库,所有设置完全相同。然后停止 shutdown 两台上的 oracle ,将 primary 上的所有数据文件,控制文件, redo 文件和 password 文件都 copy 到 standby 机器的相应位置。(还可以利用热备, rman 等来建立初始 standby 库),这样,我们就拥有了两台完全一样的 oracle server
1. 在 primary database 上设置 force logging
SQL>alter database force logging;
2. 修改 primary databse 的初始化参数
DB_UNIQUE_NAME =’primary’
CONTROL_FILES ='d:\oracle\product\oradata\control01.ctl','d:\oracle\product\oradata\control02.ctl','d:\oracle\product\oradata\control03.ctl'
LOG_ARCHIVE_DEST_1 = 'LOCATION= d:\oracle\product\arch’
LOG_ARCHIVE_DEST_2 = 'SERVICE=standby'
LOG_ARCHIVE_DEST_STATE_1 =ENABLE
LOG_ARCHIVE_DEST_STATE_2 =ENABLE
REMOTE_LOGIN_PASSWORDFILE =EXCLUSIVE
LOG_ARCHIVE_FORMAT ='arc%s%t%r.arc'
FAL_SERVER =standby
FAL_CLIENT =primary
STANDBY_FILE_MANAGEMENT =AUTO
LOCK_NAME_SPACE ---- 这是当主数据库和备用数据在同一台机上时要设该参数,设为备用数据库的 SID
3. 设置 primary database 为 archivelog 模式
SQL>shutdown immediate;
SQL>startup mount;
SQL>alter database archivelog;
SQL>alter database open:
4. 在 primary database 上创建 standby database 的控制文件
SQL>shutdown immedaite;
SQL>startup mount;
SQL>alter database create standby controlfile as ‘d:\oracle\product\oradata\controlstandby.ctl’
SQL>alter database open;
然后将该 controlfile 复制到 standby server 的对应位置
5. 修改 standby databse 的初始化参数
DB_UNIQUE_NAME =’standby’
CONTROL_FILES ='d:\oracle\product\oradata\controlstandby.ctl'
LOG_ARCHIVE_DEST_1 = 'LOCATION= d:\oracle\product\arch’
LOG_ARCHIVE_DEST_2 = 'SERVICE=primary'
LOG_ARCHIVE_DEST_STATE_1 =ENABLE
LOG_ARCHIVE_DEST_STATE_2 =ENABLE
STANDBY_ARCHIVE_DEST =’ d:\oracle\product\arch’
REMOTE_LOGIN_PASSWORDFILE =EXCLUSIVE
FAL_SERVER =primary
FAL_CLIENT =standby
STANDBY_FILE_MANAGEMENT =AUTO
DB_FILE_NAME_CONVERT ---- 当 primary 和 standby 的数据文件路径不一致时使用
LOG_FILE_NAME_CONVERT ---- 当 primary 和 standby 的数据文件路径不一致时使用
LOCK_NAME_SPACE ---- 当主数据库和备用数据在同一台机上时设为备用数据库的 SID
具体参数的说明请参考 oracle 在线文档
6. 设置 primary database 和 standby database 的 tnsnames.ora
primary =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = primary_server)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = dgtest)
)
)
standby =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = standby_server)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = dgtest)
)
)
7. 启动 standby database
SQL>startup nomount pfile=’d:\oracle\product\initdgtest.ora’
SQL>alter database mount standby database;
8. 启动 primary database
SQL>startup pfile=’d:\oracle\product\initdgtest.ora’
9. 启动 standby database 到 recover manage 模式
SQL>alter database recover managed standby database disconnect from session;
** Switchover
**
在 primary 上
1. SQL>select switchover_status from v$database
switchover_status 的值入股是 To standby ,可以直接 switchover ,如果是 sessions active ,
则需要在 switchover 的命令后面加上 with session shutdown
2. SQL>alter database commit to switchover to physical standby;
3. SQL>shutdowm immediate;
4. SQL>startup mount;
在 standby 上
1. SQL> select switchover_status from v$database
switchover_status 的值入股是 To primary ,可以直接 switchover ,如果是 sessions active ,
则需要在 switchover 的命令后面加上 with session shutdown
2. SQL>alter database commit to switchover to primary;
3. SQL>shutdown immediate;
4. SQL>startup;
要想顺利的实现 switchover ,最好在每台 server 上都同时设置好 primary 和 standby 的一些初始化参数,虽然其中一些参数只有在 primary 或者 standby 其中之一上起作用
** Failover
**
在 standby 上
1. SQL>alter database recover managed standby database finish;
or SQL>alter database recover managed standby database finish skip standby logfile;
2. SQL>alter database commit to switchover to primary;
3. SQL>shutdown immediate;
4. SQL>startup;
** 相关视图 ** **
**
** ** v$archive_dest
v$archive_dest_status
v$log_history
v$archvied_log
v$managed_standby
v$archive_gap
**
**
** 常见问题 ** **
**
1. 日志无法传送
SQL>select dest_name,status,error from v$archive_dest;
察看相应的归档路径的状态是否 valid ,否则根据 error 信息进行处理
2. 无法使用 alter database 重命名 data file
在 standby 上,当设置 standby_file_management 为 auto 时,不允许下列操作
alter database rename
alter database add/drop logfile
alter database add/drop standby logfile member
alter database create datafile as
3. switchover 失败
SQL>alter database commit to switchover to physical standby
ORA-01093:alter database close only permitted with no session connected
察看引起该错误的活动 session
SQL> select sid,process,program from v$session where type='USER' and
sid<>(select distinct sid from v$mystat);
断开该 session ,或者使用如下命令来做 switchover
SQL>lter database commit to switchover to physical standby with session shutdown;