dataguard系列之六------備用資料庫的維護
由於邏輯備用模式模式到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;[@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]:即使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號
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/14663377/viewspace-1059920/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 【DATAGUARD】DG系列之RACtoONE快照備用資料庫的搭建資料庫
- 六、資料庫管理與維護資料庫
- ORACLE DATAGUARD 資料庫---建立物理備用資料庫Oracle資料庫
- 【DATAGUARD】DG系列之RACtoONE物理備庫的搭建
- dataguard之物理備庫丟失資料檔案
- 【DATAGUARD】DG系列之11g物理備庫的搭建
- dataguard之邏輯備庫移動資料檔案
- 【DATAGUARD】DG系列之11g邏輯備庫的搭建
- 維護資料庫安全資料庫
- 軟體測試之資料庫系列六資料庫
- dataguard備庫的資料檔案的遷移
- 資料庫常用維護命令資料庫
- Oracle資料庫日常維護Oracle資料庫
- 用rman建立dataguard備用資料庫繼續(無法找到備份檔案)資料庫
- 啟用enable restricted對資料庫進行維護REST資料庫
- RMAN備用資料庫(邏輯dataguard) --關於dorecover 的解釋 (2)資料庫
- DataGuard 日常維護命令整理
- Oracle資料庫由dataguard備庫引起的log file sync等待Oracle資料庫
- 【DataGuard】Oracle DataGuard 資料保護模式切換Oracle模式
- Oracle資料庫維護的重要性Oracle資料庫
- oralce動態維護資料庫的序列資料庫
- Oracle資料庫中索引的維護 ztOracle資料庫索引
- Oracle資料庫中索引的維護(zt)Oracle資料庫索引
- Oracle資料庫中索引的維護(轉)Oracle資料庫索引
- dataguard備庫的資料檔案的遷移實戰
- 達夢資料庫主備實時叢集搭建和維護資料庫
- [原創]RMAN備用資料庫(邏輯dataguard) --關於dorecover 的解釋資料庫
- SQL Server調優系列進階篇(如何維護資料庫索引)SQLServer資料庫索引
- Notes隱藏資料庫設計應用的維護 (轉)資料庫
- 備用資料庫資料庫
- ORACLE資料庫管理維護綱要Oracle資料庫
- 資料庫自動維護任務的管理資料庫
- Oracle資料庫中索引的維護 (轉帖)Oracle資料庫索引
- dataguard環境中的密碼維護密碼
- 使用RMAN線上建立DataGuard備用庫(資料檔案不同路徑結構)
- 《大型資料庫技術》MySQL管理維護資料庫MySql
- 【轉】Oracle資料庫日常維護手冊Oracle資料庫
- Informix_on_line資料庫維護技巧ORM資料庫