备用数据库问题(第四部分起)snowhite2000(白雪红尘)写的

rjcludy 2002-03-27 09:48:48
前三部分见 http://www.csdn.net/expert/topic/602/602504.xml?temp=.8452265


三、Standby database的维护与备份

在前面的部份,我们提到过,standby database所处于的状态。在oracle 8i之前的各版本(指7.3.x – 8.0.x) ,standby database只能处于manual recovery mode以及被actived 成为 primary database,并且 archived log files的传送需要靠手动或OS的相关工具完成。

从 oracle8.1.x开始(EE版),oracle增加了新的功能,在 standby database所处的状态上面,增加了managed recoveredd mode 和 read only mode,archived log files也可以通过 oracle network自动传到standby side。

本篇是基于 oracle 8.1.7EE版本在 unix环境下的相关问题进行的讨论。

1. standby database的维护

在一般的情况下面,standby database一直是处于 managed recovered mode的情形下。

(1) 如果需要database 处于managed recovered mode 的情况下,必须满足的条件是:

在 primary database 与 standby database 在建立之后已经手动 recoverd gap log files。因此,如果不是用以前的冷备份及备份的 archived log files 建立的 standby database,两个database 之间没有 log 差距的话,即可直接进入 managed mode。

当 primary database 与 standby database 存在 archived log files 差距的时候,需要手动去做 recovery,有关命令是:
SQL> recover standby database;
Or
SQL> recover automatic standby database;

如果这两个 command 得到 ora-00308, 27037, 01547, 01194, 01110, 01112错误的时候,standby database可以直接进入 managed mode:

SQL> recover managed standby database;

(2) 当 standby database是处于 managed recovery mode时,recover managed standby database; command line的 window session要永远 open, standby database才能一直处于等待状态,当下一个 archived log file送达 standby node指定位置的时候,会及时被recovery到 standby database中。

如果,受到条件限制,无法永远 open一个 managed mode session window时,可以采用下面命令。

SQL> recover managed standby database timeout 15;

即为 managed mode窗口 open并等待 15分钟,如果 15分钟之内未收到新的 archived log files,这个session会自己结束。但结束之后,新到的 archived log files将不会被自动 recover到 standby database。这种情形下,可以通过设立 crontab job,在每隔一固定的时间段,运行上述命令,保证 primary database和standby database中的数据差距,最大为 crontab job的执行频率。

(3) 在维护方面,我们这里没有讨论到 primary database数据结构及 data files size等改变对 standby database的影响。这些情况,在一个成熟的 database环境中不是很常见问题,也不是很难解决的。


2. 在使用了 standby database后,database 的备份计划

在系统尚未使用 standby database之前,大家都知道正常运行在一个node上面的databases的备份计划非常的重要。从DBA的角度上来讲,并不希望因为系统增加了 standby database,而将全部的全部的备份计划弃置不用。

以我上面举例的系统来说,在设立 standby database之前,我们每个星期,有二个小时的 downtime做 cold back,删除 hard disk上面的所有 archived log files; 每天晚上,有一次 full export和全部 data files的 hotback。

在建立 standby database之后,我们失去了每周二小时的 downtime时间,即意味着,我们没有办法每周对 primary database进行 cold backup了,但我们仍然保留了对 primary database每晚上的 full export和全部 data files的 hotback。所有的 archived log files仍然一周清理一次,并转移到 backup tape上面,保留一年。每一年的 downtime我们仍在与客户的协商之中。

在这种情形下,对 standby database进行 backup,就变的相对需要考虑,以弥补每周以来,primary database无法进行 cold backup的缺陷。

Standby database可以采用两种情形进行 backup。一种是处于 shutdown状态 (必须 shutdown normal/immediate) 。另一种是 standby database处于 read-only状态。shutdown状态,相当于 cold backup,缺点是,standby database shutdown以后,database不能处于 managed recovery状态,有可能再 mount的时候,需要手动 recover primary/standby database的间距 archived log files。而 standby database处于read-only状态时仍然可以使 database处于 managed recovery mode。
但这种 backup的恢复可能会麻烦一些。

考虑各种情况之后,我们的系统对 standby database每天晚上采用的是 shutdown immediate之后的 cold backup。


由 snowhite2000 于 02-01-08 01:36 最后编辑

...全文
92 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
zenghongmei1 2002-03-27
  • 打赏
  • 举报
回复
大虾不见了。
大虾的东西还在。
rjcludy 2002-03-27
  • 打赏
  • 举报
回复
后记

从去年的十二月十八日开始写 standby database 的技术总结,到今天完成后记,历时两年,可谓长矣。

對于本篇的內容,白雪力求完成一份概括全部讨论问题的技术总结,希望从来没有使用的 standby database 的朋友,有一个基本的概念;希望对要实施 standby database 的朋友,有一个基本的技术指导。希望该篇技术总结能够达到白雪的初衷,对论坛的各位朋友有所帮助。

日精月华,斗转星移。回想每每遇到困难,得到了论坛上朋友们多方鼓励和支持,是很多年来未曾有過的﹐白雪非常的感動。在此﹐向這些朋友致以衷心的敬意和感谢。

同时亦非常感谢当初参加讨论的所有朋友,特别是提供资料的朋友:blossom(ak66), allanliao, 半瓶醋(it is a good name. ), guan_yi 等。

日后在精力和时间都允许的情形下,白雪愿意继续推出大家感兴趣的技术专题。如果您有问题,请贴在论坛上,或留悄悄话给我,欢迎大家参与。

最后,对支持白雪的朋友再次的感谢。


参考文献:
1. Oracle 8i 随机文档:Oracle8i Standby Database Concepts and Administration
http://otn.oracle.com/docs/products.../a76995/toc.htm

2. Oracle white papers.
http://otn.oracle.com/deploy/availa...8i_listing.html



全文转贴完毕
版权归snowhite2000白雪红尘

rjcludy 2002-03-27
  • 打赏
  • 举报
回复
五、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 node 要变回 primary database的服务器, standby node上的database要回归 standby database 的状态。在这种情形下,如果你能得到足够的系统 down time,最容易的办法,就是将 standby node上面的database shutown,拷贝所有的 all database file (包括 control files,但不包括 parameter file) 到 primary node 原来的目录下面,覆盖住原来的文件,清除掉原来 database的 alter.log/trace files/archived log files等等,直接 open database,同时把 application side的所有 tnsnames.ora文件 host name/IP 改回成 primary node 即可。重建 primary database的时间只比系统拷贝文件的时间多出 10分钟而已。

在 standby node上面:在 database shutdown之后,拷贝文件去 primary node的过程中,要对整个 database进行一次冷备份。之后用原来备份的 standby database的 parameter file取代当前的 parameter file,再从已经 open的 primary database上面建立一个 standby database的 control file拷贝到 standby node上面取代当前的 control files。

如果此时,primary database 尚未生成新的 archived log files, standby database 可以直接进入 managed recovery mode。

这个实例是我本人比较喜欢采用的一种方法。现给出具体的操作步骤如下:

重建 primary database的过程:

1) 在 standby node上面建一个 standby database 的 control file:
Alter database create standby control file ‘/oradba/DBA/stcrt1si.ctl’;
2) Shutdown database normal/immediate;
3) 对 database进行一个冷备份
4) 清除所有 archived log files (原来的 primary node上面的)
5) 拷贝除了 parameter file 之外的所有 data files/control files/online redo log files 到 primary node 原来 directory下面,覆盖掉原来的文件。
6) 可以用原来已经存在的 instance 直接 open database

重建 standby database的过程:

1) 拷贝刚刚建好的 control file (见重建 primary database过程) standby database parameter file 指定的 directory 下面
2) 清除 standby node上面全部的 archived log files.
3) 核对一下 parameter file是否与原来的 standby database parameter file相同 (应该是相同的) 之后,就可以直接 Startup standby database:
Startup nomount pfile=’xxxxxxxxxxxxxxxxxxx’;
Alter database mount standby database;
4) Recover managed standby database timeout 15;
(因为是在非工作繁忙期,所以,primary上面不会有很多 transactions,所以没有产生新的 archived log file之前,可以直接进入 managed recover mode。如果已经产生了 archived log files,要先手工 recover。



实例三:在实例二的情况下,如果在 primary node 上面重建 primary database 的时间,用户不允许有足够多的系统down time,可以采用的方法就是,在 primary node 上面再建目前运行的 database 的standby database,建立好之后,可以在最短时间内,进行一个转换。

在这种情况下,需要主意的问题是,在原来的 primary node 上面的 parameter file 要修改成为 standby mode 的 parameter,同时 network file 也需要做相应的更改。 (standby database 改来改去的,最好每个版本的文件,如果 parameter file, tnsnames.ora, listener.ora 等文件,专门收集到一个地方,会受益非浅的。)

在这个实例下运行,在 activated 了在 primary node 上面的 standby database,shutdown 之后,还是要做一次 cold backup 的。因此需要的 system downtime,几乎就是一次 cold backup 的时间。怎样重建standby database 在原来的 standby node上面,请参照前面如何建立 standby database 部份所讲的内容。

rjcludy 2002-03-27
  • 打赏
  • 举报
回复
四、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 地址。


由 snowhite2000 于 02-01-08 17:16 最后编辑

2,596

社区成员

发帖
与我相关
我的任务
社区描述
Sybase相关技术讨论区
社区管理员
  • Sybase社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧