备用数据库的维护

 由于逻辑备用模式模式到9i还不太稳定,所以这里只讨论物理备用模式的维护

1、启动
1、1 启动到恢复模式
SQL>shutdown immediate

SQL>startup nomount pfile=?/dbs/inittbdbsdby.ora

SQL>alter database mount standby database

SQL>alter database recover managed standby database disconnect from session;

1、2 启动到只读模式
SQL>shutdown immediate

SQL>startup nomount pfile=?/dbs/inittbdbsdby.ora

SQL>alter database mount standby database

SQL>alter database open read only


1、3两个模式之间的切换
在管理恢复模式下到只读模式

SQL>recover managed standby database cancel;

SQL>alter database open read only;

从只读方式到管理恢复方式

SQ>recover managed standby database disconnect from session;

2、用物理备用库实现对主数据库的备份
备用机和主机的唯一的区别就在controlfile上,所以只要对备机的数据文件进行备份就可以了,控制文件还是需要从主机上进行备份。

RMAN可以实现对备用库的备份,并可以实现用此备份来恢复主数据库,但是控制文件还是需要用主数据库自己的备份。

3、备用服务器日志删除
备用服务器的日志删除也必须小心,因为如果有些日志还没有被备用服务器应用而该日志被删除的话,将引起备用数据库无法往下应用新的日志。

删除备用服务器的日志的脚本为:

$ more removearchive.sh

#!/bin/sh

ORACLE_BASE=/u01/oracle;export ORACLE_BASE

ORACLE_HOME=$ORACLE_BASE/product/9.2;export ORACLE_HOME

PATH=$ORACLE_HOME/bin:$PATH;export PATH

ORACLE_SID=tbdb; export ORACLE_SID


grep "Media Recovery Log"

$ORACLE_BASE/admin/$ORACLE_SID/bdump/alert_${ORACLE_SID}.log|

awk '{print $4}'|sed -e 's/^/rm /' >$ORACLE_BASE/work/worksh/rmarchlog.sh

chmod +x $ORACLE_BASE/work/worksh/rmarchlog.sh

$ORACLE_BASE/work/worksh/rmarchlog.sh

cd $ORACLE_BASE/admin/$ORACLE_SID/bdump

cat alert_${ORACLE_SID}.log >>alert_${ORACLE_SID}.log.bak

echo ''>alert_${ORACLE_SID}.log

rm -f $ORACLE_BASE/work/worksh/rmarchlog.sh

4、日志延迟检查
备用服务器可能有这样的情况发生,因为日志块逻辑损坏,或者主机应用了resetlogs,从而导致备用数据库无法应用主数据库传过来的日志。所以必须对日志应用进行检查,防止日志应用被停止,防患于未然,当然我们可以手工检查,但是以下脚本则可以实现自动检查(放到cron中),如果发现问题则并发送mail到指定邮箱

$ more checkstdlog.sh

#!/bin/sh

#first u must set env

ORACLE_BASE=/u01/oracle;export ORACLE_BASE

ORACLE_HOME=$ORACLE_BASE/product/9.2;export ORACLE_HOME

PATH=$ORACLE_HOME/bin:$PATH;export PATH

ORACLE_SID=ora9; export ORACLE_SID

#start check

DATE=`date +%Y-%m-%d:%H:%M:%S`

filepath=$ORACLE_BASE/oradata/$ORACLE_SID/archive/

logpath=$ORACLE_BASE/admin/$ORACLE_SID/bdump

remotefile=`ssh oracle@10.0.29.164 "ls -t /u01/oracle/oradata/tbdb/archive/*|head -1|sed -e

's/.*_1_//g' |sed -e 's/.arc$//g'"`

echo "CHECK TIME:"${DATE}

echo "remote file:"$remotefile

cd $filepath

varfile=`ls -tl | grep "arch" | head -1|sed -e 's/.*_1_//g' |sed -e 's/.arc$//g'`

echo "archive file:"$varfile

cd $logpath

varlog=`grep "Media Recovery Log" alert_${ORACLE_SID}.log | tail -1 |sed -e 's/.*_1_//g' | sed

-e 's/.arc$//g'`

echo "applice file:"$varlog

vs1=$(($remotefile-$varfile))

vs2=$(($varfile-$varlog))

#if log is not be sended then mail to me

if [ $vs1 -ge 3 ]

then

echo "send error!"

mail -s "error!" chenjiping@itown.net.cn < $ORACLE_BASE/work/worksh/mail.txt

else

echo "send is ok!"

echo

fi

#if log is not be apped then mail to me

if [ $vs2 -ge 3 ]

then

echo "applice error!"

mail -s "error!" chenjiping@itown.net.cn < $ORACLE_BASE/work/worksh/mail.txt

else

echo "applice is ok!"

echo

fi

5、更改表空间
当主数据库添加或删除表空间时,会把相应的修改记录在redolog中,备用数据库应用日志,并修改standby controlfile,但这必须确保备用数据库的参数设置为standby_file_management=auto,备用数据库就会做相应的更改而不需要人为的干涉。

当更改表空间为只读、离线的模式时,备用数据库也会做相应的更改而不需要人为的干涉。

更改主数据库的数据文件位置的时候,备用数据库不会做相应的更改,这时,需要在主数据库上重新创建备用数据库的控制文件,以实现此更改。


6、何时需要重新创建备用数据库
6、1当主数据库用resetlogs选项打开数据库的时候
当主数据库进行不完全恢复、使用using backup controlfile选项恢复数据库或使用 CLEAR UNARCHIVED LOGFILES命令时,数据库都会用alter database open resetlog进行打开

那么,当主数据库用resetlogs打开数据库时,日志序列号会从1开始重新排序。但备用数据库等待依然是以前的那个日志号,它无法应用新产生的日志,所以这时,备用数据库需要重新创建。

6、2当主数据库用fail over的方式切换到备份数据库时,新的备份数据库需要重新创建。
7、可时不需要重新创建备用数据库
主数据库添加或删除表空间(如上所述)

主数据库添加或删除日志组或日志成员。

主数据库损坏后进行了完全恢复

8、查看日志是否应用到备用数据库
做为DBA,不但要注意主数据库的日志是否已经传到备机上,而且还要查看这些日志是否已经应用到备用数据库上,下面的srcipt可以看到备用数据库最后应用的日志号。

方法一:查看备用数据库上v$log_history

SQL> SELECT THREAD#, MAX(SEQUENCE#) AS "LAST_APPLIED_LOG"

2> FROM V$LOG_HISTORY

3> GROUP BY THREAD#;

THREAD# LAST_APPLIED_LOG

------- ----------------

1 967

但如果数据库用resetlogs打开过,就要用下面的script来检查备用数据库最后应用的日志号。

SQL> select SEQUENCE# from v$log_history where recid=(select max(recid) from v$log_history);


SEQUENCE#

----------

15


方法二:查看备用数据库上的V$ARCHIVED_LOG视图的APPLIED字段

SQL> SELECT THREAD#, SEQUENCE#, APPLIED FROM V$ARCHIVED_LOG;

THREAD# SEQUENCE# APP

---------- ---------- ---

1 2 YES

1 3 YES

1 4 YES

1 5 YES

1 6 YES

1 7 YES

1 8 YES

1 9 YES

1 10 YES

1 11 NO


9、查看日志是否从主机上传到了备机上
下面的语句主要是把本地的(dest_id=1)归档情况和远程的(dest_id=2)归档情况进行比较,找到归档到本地而没有归档的远程的日志,用户应该根据数据库的实际情况改写下面的语句。

SQL> SELECT LOCAL.THREAD#, LOCAL.SEQUENCE# FROM

2> (SELECT THREAD#, SEQUENCE# FROM V$ARCHIVED_LOG WHERE DEST_ID=1) LOCAL

3> WHERE

4> LOCAL.SEQUENCE# NOT IN

5> (SELECT SEQUENCE# FROM V$ARCHIVED_LOG WHERE DEST_ID=2 AND

6> THREAD# = LOCAL.THREAD#);

THREAD# SEQUENCE#

---------- ----------

1 12

1 13

1 14

10、当主数据库的更改没有记录到日志中时,如何把相应的修改应用到备用数据库
注意下面几种情况是不会产生日志的

Direct path load

用子查询建立表

在主数据库上建立索引

表或索引的属性为nologging


如果主数据库的操作不产生日志,所做的修改就不会应用到备用数据库上,所以在建立备用数据库的时候,我们应该执行alter database force logging命令以强制生成日志,但是对那些没有生成日志的修改,我们也可以用下面的方法对备用数据库进行恢复

1)利用主数据库的最新备份重新创建备用数据库

2)如果所有的修改只是针对某个表空间的话,也可以在主数据库上对这个表空间进行备份,并把它传到备用数据库上,并利用归档日志进行恢复操作。

11、当主数据库用create controlfile重建控制文件的时候,备用数据库做何更改
1)关闭备份数据库

SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;

SQL> SHUTDOWN IMMEDIATE;

2)在主数据库上重建控制文件

SQL> ALTER DATABASE CREATE STANDBY CONTROLFILE AS ’stbycf.ctl’;

3)把控制文件COPY到备份机上

4)启动备份数据库

SQL> ALTER DATABASE MOUNT STANDBY DATABASE;

SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;

12、相关的视图
V$ARCHIVE_GAP:查看归档在standby的应用情况

V$ARCHIVE_DEST:查看归档的路径

V$ARCHIVED_LOG:查看归档的历史信息

V$DATABASE:查看数据库是主机还是备机

V$MANAGED_STANDBY:查看备机的后台进程运行情况(仅适用于物理模式)

V$STANDBY_LOG:备用机的在线日志情况

13、RAC环境
在RAC环境下,每个实例把自己的归档文件传到备用数据库上。由于归档的格式中有%T,这代表了实例的number,所以不会有相同名字的归档文件。而备用数据库会自动应用这些归档以实现数据库的同步。结构如下图所示。


14、SQL语句
14.1 ALTER DATABASE ACTIVATE STANDBY DATABASE
功能:当主数据库down的时候,用于强行把备用数据库转换成主数据库。

语法:ALTER DATABASE ACTIVATE [PHYSICAL | LOGICAL] STANDBY DATABASE [SKIP [STANDBY LOGFILE]];

PHYSICAL:当启用的是物理备用数据库的时候,加此参数,但如果不加的时候,默认就是这个参数,所以加不加都无所谓。

LOGICAL:当启用的是逻辑备用数据库的时候,加此参数

SKIP [STANDBY LOGFILE]:即使standby的redo log没有恢复到备用数据库,也强行启动。

14.2 ALTER DATABASE ADD/DROP [STANDBY] LOGFILE
功能:为主数据库或备用数据库添加/删除日志组

语法:ALTER DATABASE ADD/DROP [STANDBY] LOGFILE [THREAD integer] [GROUP integer] filespec;

STANDBY:为备用数据库添加/删除日志文件

其它的就和普通的建立日志语法一样,这里就不多作解释了。

14.3 ALTER DATABASE ADD/DROP [STANDBY] LOGFILE MEMBER
功能:为主数据库或备用数据库添加/删除日志成员

语法:ALTER DATABASE ADD/DROP [STANDBY] LOGFILE MEMBER ’filename’ [REUSE] TO logfile-descriptor;

14.4ALTER DATABASE ADD SUPPLEMENTAL LOG DATA
功能:在创建logical standby前,必须启用SUPPLEMENTAL LOG,它存放着logical standby的更改信息源。

语法:ALTER DATABASE ADD SUPPLEMENTAL LOG DATA {PRIMARY KEY | UNIQUE INDEX} COLUMNS;

14.5 ALTER DATABASE COMMIT TO SWITCHOVER
功能:用于转换数据库的角色。

语法:

ALTER DATABASE COMMIT TO SWITCHOVER TO PHYSICAL STANDBY [[WITH | WITHOUT]

SESSION SHUTDOWN ] [WAIT | NOWAIT];

把主数据库转成物理备用数据库

ALTER DATABASE COMMIT TO SWITCHOVER TO LOGICAL STANDBY [WAIT | NOWAIT];

把主数据库转成逻辑备用数据库

ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY [[WITH | WITHOUT] SESSION

SHUTDOWN ] [WAIT | NOWAIT];

把物理备用数据库转成主数据库

ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY [WAIT | NOWAIT];

把逻辑备用数据库转成主数据库

14.6 ALTER DATABASE CREATE STANDBY CONTROLFILE AS
功能:用于创建备用库的控制文件

语法:ALTER DATABASE CREATE STANDBY CONTROLFILE AS ’filename’ [REUSE];


14.7 ALTER DATABASE MOUNT STANDBY DATABASE
功能:把物理备用数据库启动到mount状态

14.8 ALTER DATABASE RECOVER MANAGED STANDBY DATABASE
功能:用于启用、修改、关闭恢复的进程。

语法ALTER DATABASE RECOVER MANAGED STANDBY DATABASE [ startup_clause | modify_clause | cancel_clause ];

startup_clause:启动恢复的进程

启动前台的会话

ALTER DATABASE RECOVER MANAGED STANDBY DATABASE;

启动后台的会话

ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT [FROM SESSION];

modify_clause:修改恢复的进程

ALTER DATABASE RECOVER MANAGED STANDBY DATABASE [

[ NO TIMEOUT | TIMEOUT [integer] ]

[ NODELAY | DELAY [integer] ]

[ DEFAULT DELAY ]

[ NO EXPIRE | EXPIRE [integer] ]

[ NEXT [integer] ]

[ NOPARALLEL | PARALLEL [integer]]

[ THROUGH { ALL | NEXT | LAST } SWITCHOVER ]

[ THROUGH ALL ARCHIVELOG [ THREAD n ] SEQUENCE n ]

[ FINISH [ SKIP [STANDBY LOGFILE] [NOWAIT | WAIT] ] ]

]

这里,最有用的就是finish 选项,它会应用所有有效的归档文件,如果加上skip standby logfile就会忽略standby的在线日志中的信息。

cancel_clause:关闭恢复的进程,在关闭前,会应用所有已传到备用机上的归档日志。

ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL [IMMEDIATE]

IMMEDIATE:在应用完当前的redo block后,马上关闭恢复进程。

14.9 ALTER DATABASE SET STANDBY DATABASE TO MAXIMIZE{PROTECTION | AVAILABILITY | PERFORMANCE}
功能:把备用数据库切换到不同的保护模式

14.10 ALTER DATABASE START/STOP/ABORT LOGICAL STANDBY APPLY
在逻辑备用数据库中启用/关闭日志应用服务

ALTER DATABASE START LOGICAL STANDBY APPLY [INITIAL [scn-value] ] [NEW PRIMARY dblink];

INITIAL [scn-value]:指定一个开始进程恢复的SCN号

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值