? ● 確保可能成為primary 數(shù)據(jù)庫的standby 服務(wù)器已經(jīng)處于archivelog 模式。
? ● 確保standby 數(shù)據(jù)庫的臨時文件存在并匹配primary 數(shù)據(jù)庫的臨時文件
? ●確保standby 數(shù)據(jù)庫的RAC 實例只有一個處于open 狀態(tài)。(對于rac 結(jié)構(gòu)的standby 數(shù)據(jù)庫,在角色轉(zhuǎn)換時只能有一個實例startup。其它rac 實例必須統(tǒng)統(tǒng)shutdown,待角色轉(zhuǎn)換結(jié)束后再startup)
??? 不可預(yù)知原因?qū)е聀rimary 數(shù)據(jù)庫故障并且短期內(nèi)不能恢復(fù)就需要failover。如果是這種切換那你就要小心點了,有可能只是虛驚一場,甚至連你可能損失的腦細胞的數(shù)量都能預(yù)估,但如果運氣不好又沒有完備的備份恢復(fù)策略而且primary 數(shù)據(jù)并非處于最大數(shù)據(jù)保護或最高可用性模式地話,黑黑,哭是沒用地,表太傷心了,來,讓三思GG 安慰安慰你,這種情況下呢丟失數(shù)據(jù)有可能是難免的,并且如果其故障未能修復(fù),那它甚至連快速修復(fù)成為standby 的機會也都失去了吶,咦,你腦門怎么好像在往外冒水,難道是強效凈膚液,你的臉也忽然好白皙喲~~~~
??? 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 的角色,通過下列語句:
??? SQL> alterdatabasecommittoswitchovertophysicalstandby;
??? 數(shù)據(jù)庫已更改。
??? SQL> shutdownimmediate
??? ORA-01507: 未裝載數(shù)據(jù)庫
??? ORACLE 例程已經(jīng)關(guān)閉。
??? SQL> startupmount
??? ORACLE 例程已經(jī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ù)庫裝載完畢。
??? 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
??? 此時待轉(zhuǎn)換standby 數(shù)據(jù)庫switchover_status 列值應(yīng)該是"TO_PRIMARY",如否則檢查其初始化參數(shù)文件中的設(shè)置,提示一下,比著原primary 數(shù)據(jù)庫的初始化參數(shù)改改。
??? SQL> alter database commit to switchover to primary;
??? 數(shù)據(jù)庫已更改。
??? SQL> alter database open;
??? 數(shù)據(jù)庫已更改。
??? 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ù)庫不直接參與failover 的過程,因此這些數(shù)據(jù)庫不需要做任何操作。
??? ● 某些情況下,新的primary 數(shù)據(jù)庫配置之后,需要重新創(chuàng)建其它所有的standby 數(shù)據(jù)庫。
??? 一般情況下failover 都是表示primary 數(shù)據(jù)庫癱瘓,最起碼也是起不來了,因此這種類型的切換基本上不需要primary 數(shù)據(jù)庫做什么操作。所以下列步驟中如果有提到primary 和standby 執(zhí)行的,只是建議你如果primary還可以用,那就執(zhí)行一下,即使它能用你卻不執(zhí)行,也沒關(guān)系,不影響standby 數(shù)據(jù)庫的切換:)
1、檢查歸檔文件是否連續(xù)
??? 查詢待轉(zhuǎn)換standby 數(shù)據(jù)庫的V$ARCHIVE_GAP 視圖,確認歸檔文件是否連接:
??? 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ù)庫已更改。
??? SQL> alter database commit to switchover to primary;
??? 數(shù)據(jù)庫已更改。
??? SQL> alter database open;
??? 數(shù)據(jù)庫已更改。