dataguard系列之六------備用資料庫的維護

xingfei80發表於2012-12-12

由於邏輯備用模式模式到9i還不太穩定,所以這裡只討論物理備用模式的維護

1、啟動11 啟動到恢復模式

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;

12 啟動到只讀模式

SQL>shutdown immediate

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

SQL>alter database mount standby database

SQL>alter database open read only

13兩個模式之間的切換

在管理恢復模式下到只讀模式

SQL>recover managed standby database cancel;

SQL>alter database open read only;

從只讀方式到管理恢復方式

SQ>recover managed standby database disconnect from session;[@more@]

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]:即使standbyredo 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號

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/14663377/viewspace-1059920/,如需轉載,請註明出處,否則將追究法律責任。

相關文章