启动到管理模式
shutdown immediate
startup nomount;
alter database mount standby database;
alter database recover managed standby database disconnect from session;
启动到只读的模式
shutdown immediate
startup nomount
alter database mount standby database;
alter database database open read only;
如果在管理恢复的模式下到只读模式
recover managed standby database cancel;
alter database open read only;
这个时候可以给数据库增加临时数据库文件(这时候热备份是没有备份过来的)
在只读模式下到管理恢复方式
recover managed standby database disconnect from session;
主库和备库的切换
switchover时只能先从primary切换到standby,再从standby到primary
最简单的办法是把两个数据库的文件互换,
primary到standby
sqlplus /nolog < connect / as sysdba
alter database commit switchover to physical standby with session shutdown;
shutdown immediate;
create spfile from '/../product/10.1.0/db_1/dbs/inittbdbsdby.ora';
startup nomount;
alter database mount standby disconnect;
exit
eof
lsnrctl stop
lsnrctl start listenerdb
修改主机的tnsnames.ora 将主机的ip与备机的ip兑换
standby到primary
more switchprimary.sh
sqlplus /nolog < connect / as sysdba
shutdown immediate
create spfile from '/../product/10.1.0/db_1/dbs/inittdbdprim.ora';
startup
exit
eof
lsnrctl stop listenerdb
lsnrctl start
修改备库的tnsname.ora 主备库的ip互换
这样切换的要求是主备机各有两个listener,listener监听的是1521,listenerdb监听的是1522
任何一个节点,在primary期间启动listener,standby期间启动listenerdb
连接data guard的客户端的tnsname配置,这样可以实现失败对换,对客户端是透明的:
BOSS =
(DESCRIPTION =
(failover = on )
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 主)(PORT = 1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = 备)(PORT = 1521))
)
(CONNECT_DATA =
(SID = BOSS)
)
备库的失败切换
1,失败的切换
一般是主服务器已经不能使用,必须切换到备用的服务器,所以只操作备用服务器这一端,提供一切换脚本
more switchprimary.sh
cd $HOME
.bash_profile
sqlplus /nolog < connect / as sysdba
recover managed standby database cancel;
--if standby hava standby redo logfile;
--alter database recover managed standby database finish;
--else
alter database recover managed standby database finish skip standby logfile;
--switch
alter database recover managed standby database finish skip standby logfile;
--open
shutdown immediate
create spfile from '/../product/10.1.0/db_1/dbs/inittbdbprim.ora';
startup
exit
eof
lsnrctl stop linstenerdb
lsnrctl start
最后将tnsname.ora将住备库的ip对换
如果在备用端有活动的为归档的日志,或者有从主数据库拷贝过来的联机日志,可以采用如下的办法注册并恢复
alter database register logfile '/../oradata/tbdb/archive/1_87.dbf';
recover standby database;
如果有活动日志必须用
alter database recover managed standby database finish;
否则用
alter database recover managed standby database finish skip standby logfile;
这样切换的备用服务器可以避免最小的数据丢失和不用retlogs,特别是对于用多个备用服务器的时候,该服务器可以马上作为主服务器而不用重新创建备用的服务器。
强行切换(激活)
这种切换是以激活备用服务器来完成的,在重新启动数据库的时候,备用激活resetlogs,这样会影响到其他的备用服务器而且必须重新再主服务器上重新构造备用服务器,一般不建议这样做
$more activeprimary.sh
#!/bin/bash
#switch to primary with cancel;
cd $HOME
. .bash_profile
#cancel and startup database;
sqlplus /notog < connect / as sysdba
alter system arcive log current;
recover managed standby database cancel;
alter database activete standby database;
shutdown immediate;
create spfile from '/../product/10.1.0/db_1/dbs/inittbdbprim.ora';
startup
exit
eof
lsnrctl stop listenerdb
lsnrctl start
备用库的备份与恢复
1,从备用库上恢复主库的数据文件
在某些情况下,主服务器可能会损坏一到两个数据文件,如果是从主库的备份设备恢复,理论是可以的,但是可能会因为需要太多的日志,实际耗时太大,这个时候,我们可以考虑从备份的服务器上恢复该数据,因为备份的服务器和主数据库一般只是相差一个日志文件左右。
1》关闭备用的数据库
recover managed standby database cancel;
shutdown immediate;
2》拷贝或ftp损坏的数据文件到主数据库
3》在主数据库recover database datafile ‘文件名'即可
2,在备用数据库上进行备份
如果想减轻主库的压力,可以在备用数据库上进行备份,因为备用数据库的特性关系,在对standby的rman备份中,不能修改rman的配置,所以没有办法自动备份控制文件。
可以采取一下方法进行备份
1》备份备用数据库,可以停止恢复进程,跳转到read only的模式下,通过backup database,来备份数据库,这样的数据库处于一致的模式下
2》采用恢复目录备份standby数据库
rman target sys@dbstandby
backup database format '/../oradata/rman_backup/full_%d_%T_s%s_p%p';
backup archivelog all delete input format '/../oradate/rman_backup/ctl_%d_%T_s%s_p%p';
如果采用控制文件做恢复的目录,注意
alter database backup controlfile to '/../ordata/rman_backup/ctl_%d_%T_s%s_p%p';