?? ● 確保可能成為primary 數(shù)據(jù)庫(kù)的standby 服務(wù)器已經(jīng)處于archivelog 模式。
?? ● 確保standby 數(shù)據(jù)庫(kù)的臨時(shí)文件存在并匹配primary 數(shù)據(jù)庫(kù)的臨時(shí)文件
?? ●確保standby 數(shù)據(jù)庫(kù)的RAC 實(shí)例只有一個(gè)處于open 狀態(tài)。(對(duì)于rac 結(jié)構(gòu)的standby 數(shù)據(jù)庫(kù),在角色轉(zhuǎn)換時(shí)只能有一個(gè)實(shí)例startup。其它rac 實(shí)例必須統(tǒng)統(tǒng)shutdown,待角色轉(zhuǎn)換結(jié)束后再startup)
??? 不可預(yù)知原因?qū)е聀rimary 數(shù)據(jù)庫(kù)故障并且短期內(nèi)不能恢復(fù)就需要failover。如果是這種切換那你就要小心點(diǎn)了,有可能只是虛驚一場(chǎng),甚至連你可能損失的腦細(xì)胞的數(shù)量都能預(yù)估,但如果運(yùn)氣不好又沒(méi)有完備的備份恢復(fù)策略而且primary 數(shù)據(jù)并非處于最大數(shù)據(jù)保護(hù)或最高可用性模式地話,黑黑,哭是沒(méi)用地,表太傷心了,來(lái),讓三思GG 安慰安慰你,這種情況下呢丟失數(shù)據(jù)有可能是難免的,并且如果其故障未能修復(fù),那它甚至連快速修復(fù)成為standby 的機(jī)會(huì)也都失去了吶,咦,你腦門怎么好像在往外冒水,難道是強(qiáng)效凈膚液,你的臉也忽然好白皙喲~~~~
??? SQL> ALTER DATABASE SET STANDBY DATABASE TO MAXIMIZE PERFORMANCE;
???
E:\ora10g>set oracle_sid=jssweb
??? E:\ora10g>sqlplus "/ as sysdba"
??? SQL*Plus: Release 10.2.0.3.0 - Production on 星期四12 月13 09:41:29 2007
??? Copyright (c) 1982, 2006, Oracle. All Rights Reserved.
???
已連接。
??? SQL> selectswitchover_statusfromv$database;
??? SWITCHOVER_STATUS
??? --------------------
??? TO STANDBY
??? 首先將primary 轉(zhuǎn)換為standby 的角色,通過(guò)下列語(yǔ)句:
???
SQL> alterdatabasecommittoswitchovertophysicalstandby;
??? 數(shù)據(jù)庫(kù)已更改。
??? SQL> shutdownimmediate
??? ORA-01507: 未裝載數(shù)據(jù)庫(kù)
??? ORACLE 例程已經(jīng)關(guān)閉。
??? SQL> startupmount
??? ORACLE 例程已經(jīng)啟動(dòng)。
??? Total System Global Area 167772160 bytes
??? Fixed Size 1289484 bytes
??? Variable Size 104858356 bytes
??? Database Buffers 54525952 bytes
??? Redo Buffers 7098368 bytes
??? 數(shù)據(jù)庫(kù)裝載完畢。
??? E:\ora10g>set oracle_sid=jsspdg
??? E:\ora10g>sqlplus " / as sysdba"
??? SQL*Plus: Release 10.2.0.3.0 - Production on 星期四12 月13 10:08:15 2007
??? Copyright (c) 1982, 2006, Oracle. All Rights Reserved.
??? 已連接。
??? SQL> select switchover_status from v$database;
??? SWITCHOVER_STATUS
??? --------------------
??? TO PRIMARY
??? 此時(shí)待轉(zhuǎn)換standby 數(shù)據(jù)庫(kù)switchover_status 列值應(yīng)該是"TO_PRIMARY",如否則檢查其初始化參數(shù)文件中的設(shè)置,提示一下,比著原primary 數(shù)據(jù)庫(kù)的初始化參數(shù)改改。
??? SQL> alter database commit to switchover to primary;
??? 數(shù)據(jù)庫(kù)已更改。
??? SQL> alter database open;
??? 數(shù)據(jù)庫(kù)已更改。
??? SQL> show parameter db_unique
??? NAME???????????????? TYPE??????? VALUE
??? -------------------- ----------- ------------------------------
??? db_unique_name?????? string????? jsspdg
??? SQL> select max(sequence#) from v$archived_log;
??? MAX(SEQUENCE#)
??? --------------
??? 67
??? SQL> altealter system switch logfile;
??? 系統(tǒng)已更改。
??? SQL> select max(sequence#) from v$archived_log;
??? MAX(SEQUENCE#)
??? --------------
??? 68
??? SQL> show parameter db_unique
??? NAME???????????????? TYPE??????? VALUE
??? -------------------- ----------- ------------------------------
??? db_unique_name?????? string????? jssweb
??? SQL> select max(sequence#) from v$archived_log;
??? MAX(SEQUENCE#)
??? --------------
??? 68
二、物理standby的failover
??? ● 多數(shù)情況下,其它邏輯/物理standby 數(shù)據(jù)庫(kù)不直接參與failover 的過(guò)程,因此這些數(shù)據(jù)庫(kù)不需要做任何操作。
??? ● 某些情況下,新的primary 數(shù)據(jù)庫(kù)配置之后,需要重新創(chuàng)建其它所有的standby 數(shù)據(jù)庫(kù)。
??? 一般情況下failover 都是表示primary 數(shù)據(jù)庫(kù)癱瘓,最起碼也是起不來(lái)了,因此這種類型的切換基本上不需要primary 數(shù)據(jù)庫(kù)做什么操作。所以下列步驟中如果有提到primary 和standby 執(zhí)行的,只是建議你如果primary還可以用,那就執(zhí)行一下,即使它能用你卻不執(zhí)行,也沒(méi)關(guān)系,不影響standby 數(shù)據(jù)庫(kù)的切換:)
1、檢查歸檔文件是否連續(xù)
??? 查詢待轉(zhuǎn)換standby 數(shù)據(jù)庫(kù)的V$ARCHIVE_GAP 視圖,確認(rèn)歸檔文件是否連接:
??? SQL> SELECT THREAD#, LOW_SEQUENCE#, HIGH_SEQUENCE# FROM V$ARCHIVE_GAP;
??? 未選定行
??? SQL> ALTER DATABASE REGISTER PHYSICAL LOGFILE 'filespec1';
??? SQL> select distinct thread#,max(sequence#) over(partition by thread#) a from v$archived_log;
??? SQL> alter database recover managed standby database finish force;
??? 數(shù)據(jù)庫(kù)已更改。
??? SQL> alter database commit to switchover to primary;
??? 數(shù)據(jù)庫(kù)已更改。
??? SQL> alter database open;
??? 數(shù)據(jù)庫(kù)已更改。