四、Opening/Activating a standby database
在通常的情形下,standby database是处于 recovery状态的。但是在 opened read-only 或者 activeated 之后可以 access standby database 中的 data。
1. opening standby database read-only:
当 standby database 被 opened read-only 时,
数据只能处于读取状态。
因为 standby database被opened 成为 read-only mode之后,还可以恢复成 recovery/managed recovery mode,所以 opening standby database read-only,可以用来试验 standby database是否建立成功及 archived log files是否成功 applied到database 中。
在更多的情况下,read-only mode 是用于系统 run report。很多拥有很多用户的系统,需要 on-line data access,同时需要 run report,为了避免系统 overheat,单机状态的时候,大的 reports 是在非尖峰期的晚上和周末运行的。如果系统有 standby database,可以 open standby database在 read-only情况下 run reports,不影响 primary database的性能。
需要注意的是,在 read-only状态下面时,primary database的 archived log files仍然持续送达 standby database,但是不会 apply到 standby database中去。所以,在 run完 reports之后,要将 standby database 回归至 managed/manual recovery mode。
有关命令行如下:
如果 standby database处于shutdown状态:
SQL> startup nomount pfile=/path/stinit.ora
SQL> alter database mount standby database;
SQL> alter database open read only;
如果 standby database 处于 manual/managed recovery mode:
SQL> recover cancel/recover managed standby database cancel
(需要另开启一个 session来做)
SQL> alter database open read only;
将 read-only mode 的 standby database 回归 manual/managed recovery mode:
SQL> recover standby database;/recover managed standby database time out 15;
检查 database 所处状态的命令:
SQL> select status from v$instance;
STATUS
-------
MOUNTED
2. activating a standby database
当 primary database 由于某种原因不能正常工作,而修复时间超过用户可以接受的范围时,需要击活 standby database,使之成为 primary database 运行。这个行为是单向的。被击活的 standby database 是无法再回到 standby 状态下的。下一个部份,我们讲讨论到 standby database 的重建问题。
完成击活 standby database 使之成为 primary database 的过程是需要 downtime 的。
过程如下:
(1) 首先要 shutdown primary database. 这种情况出现在 primary database 出了问题,不能正常工作,但 database 仍然处于 open 的状态下,但是无法做 online recovery,或者 online recovery 所需要的条件,客户不能接受(可能部份 data 无法访问,所需时间视
数据库损坏程度而不同)。
这时,如果可能要尽量 archive current online log file:
SQL> alter system archive log current;
(2) 对应在 standby database node,activating 之前,要 apply 最后一个 archived log file。
如果 primary database 的错误导致 database down,系统丢失的 data 将会是 online log file 中的 data。同样的,在 activating 之前,要 apply 最后一个 archived log file。
(3) 在 standby database 处于 mount 的状态下 activate standby database:
SQL> alter database activate standby database;
(4) shutdown the standby database normal/immediate,之后做一次 cold backup。
在这里需要解释一下,当 standby database 被activated 之后成为 primary database,这个过程将自动 resetlogs。因此,在 startup 之前要做一次 cold backup,因为以往的 backup 最多只能 recover 到 standby database 被activated 这一点。
另外,standby database 的 parameter file 中log_archive_start 是 false,系统不能自动 archive log file,在startup 之前要改为 ture。
这样即可以保证在 重建 primary database 之前的任何状况发生,database 可以被 recovered to the point of failure。
(5) open the standby database.
SQL> startup pfile=/path/stinit.ora
注意:如果用户是通过client/server mode 或其他方式与 primary database 相连的话,在 activate standby database 的同时,需要修改 client side 的 tnsnames.ora 文件中的 database hose name 或者IP 地址。
五、Primary and standby database的重建
当原 standby database 因为 primary database的 failure而成为 primary database 之后,一般在仅接下来的第一个非高峰工作时段,就要进行 standby database的重建。
怎样对 Standby database进行重建,首先要考虑系统的设置,以及有多少的时间进行重建。
实例一:如果 primary/standby 两个nodes都是为该
数据库专用的,且设置相同的话,可以保留 standby node上面的
数据库做为 primary database,在原来的 primary上面建立一个standby database就可以了。系统不需要 downtime。备份文件可以采用上一部份中,standby database变为 primary database open 之前的冷备份,再手工 apply 从
数据库 open 到目前的所有 archived logs。
注意,这种情形下,要重新设置当前 primary database node的 tnsnames.ora文件,以及当前 standby node上面的 listener.ora文件。(详细参见上面部份的 standby database的建立)
这种设置在 standby database系统中算是最理想的设置了,甚至在某些情形下面,可以 activing standby database,直接对 primary database进行 recovery,再在standby node上重建 standby database。具体的设置和操作,是要根据项目的要求设定的。
实例二:这种情况下,不管怎样,原来的primary n