在oracle 7和oracle 8的时代,就已经有了dataguard,那个时候还不叫dataguard,叫做standby server。那个时候没有switchover的命令,所有的操作必须手工完成。下面,我们就来谈谈oracle 7或8的dataguard的手工切换。
你可能会说,在当今已经是12c的年代,谈oracle 7或8的dataguard切换,还有什么意义呢?在这里我先不讲,我会在另外一个文章中讲到客户使用这种方式+存储mirror的方式,实现数据库升级且不重建dataguard。
在这里,我只讲如何做dataguard切换。
#######
# 初始状态:
#######
最初的配置状态,我们假设主库在深圳(SZ),备库在上海(SH)
-Primary database = SZ
-Standby database = SH
The final configuration of the sites described here is:
转换后,最终的状态变成主库在上海(SH),备库在深圳(SZ)
-Primary database = SH
-Standby database = SZ
主库(深圳库)包含有控制文件cfile.ctl,和下面的一些数据文件:
-tbs_01.dbf
-tbs_02.dbf
-tbs_03.dbf
主库(深圳库)包含如下的redo logfiles:
-redo_01.log
-redo_02.log
备库(上海库)包含有控制文件scfile.ctl, 和如下的数据文件:
-stbs_01.dbf
-stbs_02.dbf
-stbs_03.dbf
备库(上海库)包含redo logfile的信息在控制文件scfile.ora中,
但是注意,这写redo logfile其实是不存在的。(在7和8中,只是用archive来做恢复,不用redo logfile)
-sredo_01.log
-sredo_02.log
下面的初始化参数,需要在备库(上海库)设置:
在Oracle8:
-db_file_name_convert = (“/dbs/”,”/dbs/s”)
-log_file_name_convert = (“/dbs/”,”/dbs/s”)
在Oracle7:
-db_file_standby_name_convert = (“/dbs/”,”/dbs/s”)
-log_file_standby_name_convert = (“/dbs/”,”/dbs/s”)
#######
# 开始实施切换(上海库变主库):
#######
在深圳主库端:
1. 关闭主库.
注意,深圳主库关闭后,在切换前不要进行任何startup或者recover的操作。
在上海备库端:
1. 在standby库上apply所有的日志.
2. 执行CANCEL命令停止介质恢复.
3. Shutdown standby库.
4. 拷贝一份深圳主库的控制文件和redo logfile给上海备库使用。
在上海备库端,现在有:
cfile.ora
redo_01.log
redo_02.log
注:
此时深圳主库端必须一直保持着shutdown的状态,不能startup
5. 如果深圳主库还上海备库的文件名不一样(我们就是不一样的情况),需要statup mount之后,使用ALTER DATABASE RENAME FILE命令,将控制文件中的数据文件信息,rename成上海库的路径和文件名。
startup mount;
(注:此时使用的是深圳库的控制文件)
alter database rename file ‘tbs_01.dbf’ to ‘stbs_01.dbf’;
alter database rename file ‘tbs_02.dbf’ to ‘stbs_02.dbf’;
alter database rename file ‘tbs_03.dbf’ to ‘stbs_03.dbf’;
alter database rename file ‘redo_01.log’ to ‘sredo_01.log’;
alter database rename file ‘redo_02.log’ to ‘sredo_02.log’;
推荐:
你其实可以让主库和备库的文件名一样,就不需要进行rename的操作了。
6. 发起RECOVER DATABASE命令.
recover database;
7. open你的“新”主库,上海库.
alter database open;
你现在可以在上海库作为主库,进行常规的操作了。
#######
# 开始实施切换(深圳库变备库):
#######
让深圳库变成standby库
在上海库端:
1. 创建新的standby控制文件.
alter database create standby controlfile as ‘cfile.ora’;
2. 在新主库,上海库,Archive日志.
alter database archive log current;
在深圳端:
1. 在成功打开上海库成为主库之后,可以删除深圳库的控制文件和所有的日志文件。
警告:
在成功启动上海库成为主库之前,禁止打开深圳库。会造成两个库都不可用的状态。
2. 拷贝新的standby控制文件到深圳库。
3. 编辑初始化文件:(如果文件路径没有变,就不需要这一步)
db_file_standby_name_convert = (“/dbs/s”,”/dbs/”);
log_file_standby_name_convert = (“/dbs/s”,”/dbs/”);
4. Mount深圳库,并且进行介质恢复.
alter database mount standby database;
alter database recover standby database;
现在可以在深圳库进行正常的备库操作了。
如果你想把深圳库再次转为主库,上海库再次转为备库,也是类似上面的步骤,反向操作即可。