<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Decode360's Blog

    業(yè)精于勤而荒于嬉 QQ:150355677 MSN:decode360@hotmail.com

      BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 ::  :: 管理 ::
      397 隨筆 :: 33 文章 :: 29 評論 :: 0 Trackbacks
    本文作者: junsansi???? 轉(zhuǎn)載網(wǎng)址: http://www.5ienet.com/index.shtml
    ?
    ?
    第三部分邏輯standby(3)角色轉(zhuǎn)換? 2008.02.22
    ?
    ??? 關(guān)于角色轉(zhuǎn)換的一些概念在物理standby 章節(jié)的時候已經(jīng)講了很多,在概念和操作方式上二者基本一致,不過如果你真正深刻理解了物理standby 和邏輯standby,你會意識到,對于邏輯standby 而言,不管是switchover還是failover,怎么操作起來,都這么怪怪的呢~~~
    ?
    ?
    邏輯standby之switchover
    ?
    ??? 要在primary 和邏輯standby 之間切換角色,一般是從操作primary 開始。

    ??? 提示:
    ??? 如果primary 或邏輯standby 是rac 結(jié)構(gòu),切記只保留一個實例啟動,其它實例全部shutdown。等角色轉(zhuǎn)換操作完成之后再啟動其它實例,角色轉(zhuǎn)換的操作會自動傳播到這些實例上,并不需要你再對這些實例單獨做處理。

    ?
    ?
    一、準備工作

    1、檢查primary 和邏輯standby 的初始化參數(shù)設(shè)置,常規(guī)的檢查包括:

    ??? 確保fal_server,fal_client 值設(shè)置正確
    ??? 確保log_archive_dest_n 參數(shù)設(shè)置正確
    ??? 更多可能涉及的初始化參數(shù)可以參考2.1 中的第4 小章
    ?
    ??? 首先來看當(dāng)前的primary數(shù)據(jù)庫:

    ??? JSSWEB> show parameter fal
    ??? NAME?????????????????????? TYPE??????? VALUE
    ??? -------------------------- ----------- -------------------------------
    ??? fal_client???????????????? string????? jssweb
    ??? fal_server???????????????? string????? jsspdg

    ?

    ??? JSSWEB> show parameter name_convert
    ??? NAME?????????????????????? TYPE??????? VALUE
    ??? -------------------------- ----------- -------------------------------
    ??? db_file_name_convert?????? string????? oradata\jsspdg, oradata\jssweb
    ??? log_file_name_convert????? string????? oradata\jsspdg, oradata\jssweb

    ?

    ??? JSSWEB> show parameter log_archive_dest
    ??? NAME?????????????????????? TYPE??????? VALUE
    ??? -------------------------- ----------- -------------------------------
    ??? log_archive_dest?????????? string
    ??? log_archive_dest_1???????? string????? LOCATION=E:\ora10g\oradata\jssweb\arc
    ?????????????????????????????????????????? VALID_FOR=(ALL_LOGFILES,ALL_ROLES)
    ?????????????????????????????????????????? DB_UNIQUE_NAME=jssweb
    ??? log_archive_dest_2???????? string????? service=jsspdg OPTIONAL LGWR SYNC AFFIRM
    ?????????????????????????????????????????? VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE)
    ?????????????????????????????????????????? DB_UNIQUE_NAME=jsspdg
    ??? ................
    ??? ................
    ??? ................
    ??? log_archive_dest_state_1?? string????? ENABLE
    ??? log_archive_dest_state_2?? string????? defer

    ?
    ??? 由于此處primary 的初始化參數(shù)并不合適,為了避免其轉(zhuǎn)換之后發(fā)生錯誤,我們需要提前做些修改:

    ??? JSSWEB> alter system set log_archive_dest_2='location=e:\ora10g\oradata\jssweb\std\valid_for=(standby_logfiles,standby_role) db_unique_name=jssweb';
    ???
    系統(tǒng)已更改。

    ?

    ??? JSSWEB> alter system set log_archive_dest_1='location=e:\ora10g\oradata\jssweb\arc\valid_for=(online_logfiles,all_roles) db_unique_name=jssweb';
    ???
    系統(tǒng)已更改。

    ?

    ??? JSSWEB> alter system set log_archive_dest_state_2='enable';
    ???
    系統(tǒng)已更改。

    ?

    ??? JSSWEB> alter system set fal_server='jssldg';
    ???
    系統(tǒng)已更改。

    ?

    ??? --xx_file_name_convert 這兩個參數(shù)無法動態(tài)修改,因此我們首先修改 spfile ,然后再重啟一下數(shù)據(jù)庫
    ??? JSSWEB> alter system set db_file_name_convert='oradata\jssldg','oradata\jssweb' scope=spfile;
    ???
    系統(tǒng)已更改。

    ??? JSSWEB> alter system set log_file_name_convert='oradata\jssldg','oradata\jssweb' scope=spfile;
    ???
    系統(tǒng)已更改。

    ?

    ??? JSSWEB> startup force

    ?
    ??? 然后再看看待轉(zhuǎn)換的邏輯standbstandby

    ??? JSSLDG> show parameter fal
    ??? NAME?????????????????? TYPE??????? VALUE
    ??? ---------------------- ----------- --------------------
    ??? fal_client?????????? string
    ??? fal_server?????????? string

    ?

    ??? JSSLDG> show parameter file_name
    ??? NAME?????????????????? TYPE??????? VALUE
    ??? ---------------------- ----------- --------------------
    ??? db_file_name_convert?? string????? oradata\jssweb, oradata\jssldg
    ??? log_file_name_convert? string????? oradata\jssweb, oradata\jssldg

    ?

    ??? JSSLDG> show parameter log_archive
    ??? NAME?????????????????? TYPE??????? VALUE
    ??? ---------------------- ----------- --------------------
    ??? log_archive_config???? string????? DG_CONFIG=(jssweb,jsspdg,jssldg)
    ??? log_archive_dest?????? string
    ??? log_archive_dest_1???? string????? location=E:\ora10g\oradata\jssldg\arc\
    ?????????????????????????????????????? valid_for=(online_logfiles,all_roles)
    ?????????????????????????????????????? db_unique_name=jssldg
    ??? log_archive_dest_10??? string
    ??? log_archive_dest_2???? string????? location=E:\ora10g\oradata\JSSLDG\std\
    ?????????????????????????????????????? valid_for=(standby_logfiles,standby_role)
    ?????????????????????????????????????? db_unique_name=JSSLDG
    ??? .......................
    ??? .......................

    ?
    ?
    ??? 對于待轉(zhuǎn)換的邏輯standby 中,某些初始化參數(shù)也可以不設(shè)置,不過走到這一步了,順手全設(shè)置一遍。

    ??? JSSLDG> alter system set fal_server='jssweb';
    ??? 系統(tǒng)已更改。


    ??? JSSLDG> alter system set fal_client='jssldg';
    ??? 系統(tǒng)已更改。


    ??? JSSLDG> alter system set log_archive_dest_3='service=jssweb lgwr async?valid_for=(online_logfiles,primary_role) db_unique_name=jssweb';
    ??? 系統(tǒng)已更改。

    ?
    2、檢查primary 數(shù)據(jù)庫是否配置了standby redologs

    ??? JSSWEB> select * from v$standby_log;
    ??? 未選定行

    ?
    ??? 對于邏輯standby 數(shù)據(jù)庫,standby redologs 是必須的,因此我們需要為當(dāng)前的primary 創(chuàng)建幾個standbyredologs。

    ??? JSSWEB> alter database add standby logfile group 4 ('e:\ora10g\oradata\jssweb\standbyrd01.log') size 20m;
    ??? 數(shù)據(jù)庫已更改。
    ??? .....................
    ??? .......................
    ??? .........................
    ??? JSSWEB> alter database add standby logfile group 8 ('e:\ora10g\oradata\jssweb\standbyrd05.log') size 20m;
    ??? 數(shù)據(jù)庫已更改。

    ?
    ?
    二、檢查primary數(shù)據(jù)庫狀態(tài)
    ?
    ??? 在當(dāng)前的primary 數(shù)據(jù)庫查詢v$database 視圖中的switchover_status 列,查看當(dāng)前primary 數(shù)據(jù)庫狀態(tài)。

    ??? JSSWEB> select switchover_status from v$database;
    ??? SWITCHOVER_STATUS
    ??? --------------------
    ??? TO STANDBY

    ?
    ??? 如果該查詢返回TO STANDBY 或SESSIONS ACTIVE 則表示狀態(tài)正常,可以執(zhí)行轉(zhuǎn)換操作,如果否的話,就需要你先檢查一下當(dāng)前的dataguard 配置,看看是否
    ?
    ?
    三、準備轉(zhuǎn)換primary為邏輯standby
    ?
    ??? 執(zhí)行下列語句,將primary 置為準備轉(zhuǎn)換的狀態(tài):

    ??? JSSWEB> alterdatabasepreparetoswitchovertologicalstandby;
    ??? 數(shù)據(jù)庫已更改。

    ?
    ??? 查看一下switchover_status 的狀態(tài),喲,果然變成準備ing 啦~~

    ??? JSSWEB> select switchover_status from v$database;
    ??? SWITCHOVER_STATUS
    ??? --------------------
    ??? PREPARING SWITCHOVER

    ?
    ?
    四、準備轉(zhuǎn)換邏輯standby為primary
    ?
    ??? 我們一定要學(xué)習(xí)oracle 這種邏輯,甭管想做什么,都得先有個準備的過程~

    ??? JSSLDG> alterdatabasepreparetoswitchovertoprimary;
    ??? 數(shù)據(jù)庫已更改。

    ??? JSSLDG> select switchover_status from v$database;
    ??? SWITCHOVER_STATUS
    ??? --------------------
    ??? PREPARING SWITCHOVER

    ?
    ?
    五、再次檢查primary數(shù)據(jù)庫狀態(tài)

    ?

    ??? JSSWEB> select switchover_status from v$database;
    ??? SWITCHOVER_STATUS
    ??? --------------------
    ??? TO LOGICAL STANDBY

    ?
    ??? 注意:這步雖然不做什么操作,但檢查結(jié)果卻非常重要,它直接關(guān)系到switchover 轉(zhuǎn)換是否能夠成功。邏輯standby 執(zhí)行完prepare 命令之后,就會生成相應(yīng)的LogMiner 字典數(shù)據(jù)(就像我們前面創(chuàng)建邏輯standby 時,primary 會生成LogMiner 字典數(shù)據(jù)一樣),只有它正常生成并發(fā)送至當(dāng)前的primary,轉(zhuǎn)換操作才能夠繼續(xù)下去。不然當(dāng)前的primary 數(shù)據(jù)庫在轉(zhuǎn)換完之后,可能就失去了從新的primary 接收redo 數(shù)據(jù)的能力了。
    ?
    ??? 因此,如果上述查詢的返回結(jié)果不是:TO LOGICAL STANDBY 的話,你可能就需要取消此次轉(zhuǎn)換,檢查原因,然后再重新操作了。

    ??? 提示:
    ??? 取消轉(zhuǎn)換可以通過下列語句:
    ??? ALTER DATABASE PREPARE TO SWITCHOVER CANCEL;
    ??? 需要分別在primary 和邏輯standby 執(zhí)行。

    ?

    ?

    六、轉(zhuǎn)換primary為邏輯standby
    ?
    ??? 執(zhí)行下列語句:

    ??? JSSWEB> alterdatabasecommittoswitchovertologicalstandby;
    ??? 數(shù)據(jù)庫已更改。

    ?
    ??? 該語句需要等待當(dāng)前primary 所有事務(wù)全部結(jié)束。同時該語句也會自動拒絕用戶發(fā)布的新事務(wù)或修改需求。為確保該操作盡可能快的執(zhí)行,最好自開始切換操作起就禁止所有用戶的操作。
    ??? 該命令執(zhí)行完之后,這個primary 就已經(jīng)成為新的邏輯standby 了。不過在新primary 執(zhí)行完轉(zhuǎn)換之前,不要關(guān)閉當(dāng)前這個數(shù)據(jù)庫。
    ?
    ?
    七、再次檢查邏輯standby狀態(tài)
    ?
    ??? 邏輯standby 在接收到前primary 的轉(zhuǎn)換消息,并應(yīng)用完相關(guān)的redo 數(shù)據(jù)之后,會自動暫停sql 應(yīng)用,然后查詢switchover_status 的狀態(tài),應(yīng)該為:TO PRIMARY

    ??? JSSLDG> select switchover_status from v$database;
    ??? SWITCHOVER_STATUS
    ??? --------------------
    ??? TO PRIMARY

    ?
    ?
    八、轉(zhuǎn)換邏輯standby為primary
    ?
    ??? 最后的工作總會在邏輯standby 上操作,通過上列語句,將該邏輯standby 轉(zhuǎn)換為新的primary。

    ??? JSSLDG> alterdatabasecommittoswitchovertoprimary;
    ??? 數(shù)據(jù)庫已更改。

    ?
    ??? 轉(zhuǎn)換完成
    ?
    ?
    九、啟動新邏輯standby的sql應(yīng)用

    ??? 最后啟動新邏輯standby 的sql 應(yīng)用。

    ??? JSSWEB> alter database start logical standby apply;
    ??? 數(shù)據(jù)庫已更改。

    ?
    ??? 提示:還記的我們的jsspdg 嗎,雖然它也是standby(物理),不過它現(xiàn)在也并非這個dataguard 配置中的一員了,這也是由于邏輯standby 自身特性決定的,每一個邏輯standby 都相當(dāng)于是一個不同于primary 的數(shù)據(jù)庫(DBID都不同),因此在邏輯standby 完成了轉(zhuǎn)換之后,相當(dāng)于原primary 已經(jīng)消失,因此原primary 配置的物理standby也失去了主從參照,不過原primary 配置的邏輯standby 不會有影響。
    ?
    ?
    邏輯standby之failover

    ??? 前面學(xué)習(xí)物理standby 的failover 時我們提到過,failover 有可能會丟失數(shù)據(jù)(視當(dāng)前的數(shù)據(jù)庫保護模式而定),對于邏輯standby 也一樣;物理standby 在做failover 演示時還提到過,所有的操作都會在standby 端執(zhí)行,對于邏輯standby 這也一樣,甚至對于明確提及在前primary 執(zhí)行的,你不執(zhí)行,也沒關(guān)系,畢竟對于failover,我們假設(shè)的就是,primary 已經(jīng)over 了:)
    ?
    ?
    一、準備工作要充分
    ?
    ??? 準備工作可以從以下幾個方面著手:
    ?
    1、檢查及處理丟失的歸檔
    ?
    ??? 雖然本步不是必須的,但如果希望盡可能少丟失數(shù)據(jù),除了數(shù)據(jù)保護模式之外,本步操作也非常重要。如果此時primary 仍可被訪問,首先檢查當(dāng)前的歸檔日志序號與邏輯standby 是否相同:

    ??? JSSLDG> select max(sequence#) from v$archived_log;
    ??? MAX(SEQUENCE#)
    ??? --------------
    ??? 24

    ?

    ??? JSSWEB> select sequence#,applied from dba_logstdby_log;
    ??? SEQUENCE#? APPLIED
    ??? ---------- --------
    ??? 23???????? YES
    ??? 24???????? YES
    ???
    已選擇2 行。

    ?
    ??? 提示:如果primary 的數(shù)據(jù)庫已經(jīng)無法打開,您就只好直接到磁盤上查看歸檔目錄中的序號來與standby端做比較了。
    ?
    ??? 如果不同序號,則將primary 尚未發(fā)送至standby 的歸檔文件手工復(fù)制到待轉(zhuǎn)換的邏輯standby 服務(wù)器,然后在standby 端通過ALTER DATABASE REGISTER LOGICAL LOGFILE ''; 命令將文件手工注冊
    ??? 如果standby 與primary 的歸檔序號相同,但某些序號的applied 狀態(tài)為no,建議你檢查一下當(dāng)前standby是否啟動了SQL 應(yīng)用:)。
    ?
    2、檢查待轉(zhuǎn)換邏輯standby 的日志應(yīng)用情況

    ??? 可以通過查詢v$logstdby_progress 視圖:

    ??? JSSWEB> select applied_scn,latest_scn from v$logstdby_progress;
    ??? APPLIED_SCN LATEST_SCN
    ??? ----------- ----------
    ??? 1259449 ??? 1259453

    ?
    ??? 如果兩值一致,表示所有接收到的歸檔都已經(jīng)應(yīng)用了。
    ?
    3、檢查及修正待轉(zhuǎn)換邏輯standby 的初始化參數(shù)配置

    ??? 確認待轉(zhuǎn)換的邏輯standby 配置了正確的歸檔路徑,不僅是寫本地的歸檔,還要有寫遠程的歸檔,不然轉(zhuǎn)換完之后,這臺新的primary 就成了光桿司令了。

    ??? JSSWEB> show parameter log_archive_dest
    ??? .......................

    ?
    ??? 當(dāng)然一般來說,我們都是推薦在創(chuàng)建standby 的同時將一些用于角色切換的初始化參數(shù)也配置好(primary 和standby 端都應(yīng)如此),以減小切換時操作的時間,提高切換效率。
    ?

    二、激活新的primary數(shù)據(jù)庫
    ?
    ??? 首先查看當(dāng)前操作的角色

    ??? JSSWEB> select database_role,force_logging from v$database;
    ??? DATABASE_ROLE ?? FOR
    ??? ---------------- ---
    ??? LOGICAL STANDBY YES

    ??? 注意,如果當(dāng)前force_logging 為no,務(wù)必執(zhí)行:Alter database force logging;

    ??? 轉(zhuǎn)換standby 角色為primary

    ??? JSSWEB> altealterdatabaseactivatelogicalstandbydatabasefinishapply;
    ??? 數(shù)據(jù)庫已更改。

    ?
    ??? 該語句主要是停止待轉(zhuǎn)換的邏輯standby 中RFS 進程,并應(yīng)用完當(dāng)前所有已接收但并未應(yīng)用的redo 數(shù)據(jù),然后停止sql 應(yīng)用,將數(shù)據(jù)庫轉(zhuǎn)換成primary 角色。

    ??? JSSWEB> select database_role,force_logging from v$database;
    ??? DATABASE_ROLE ?? FOR
    ??? ---------------- ---
    ??? PRIMARY ???????? YES

    ?
    ??? 基本上到這一步,我們可以說角色轉(zhuǎn)換的工作已經(jīng)完成了,但是注意,活還沒有干完!
    ?
    ??? 此處與邏輯standby 的switchover 同理,切換完之后,原dg 配置就失效了(不僅原物理standby 沒了,原邏輯standby 也失去了參照,看看,邏輯standby 的failover 確實威力巨大呀,怪不得邏輯standby 用的人這么人呢,環(huán)境脆弱肯定是原因之一啊),因此我們需要做些設(shè)置,重新將原來的standby 再加入到新的dg 配置環(huán)境中。
    ?
    ?
    三、修復(fù)其它standby
    ?
    ??? 注意喲,邏輯standby 的修復(fù)可并不像物理standby 那樣簡單,每個邏輯standby 都相當(dāng)于是獨立的數(shù)據(jù)庫,如果你不希望重建邏輯standby 的話呢,oracle 倒是也提供了其它解決方案(雖然不一定好使):
    ?
    1、在各個原邏輯standby 中創(chuàng)建數(shù)據(jù)庫鏈,連接到新的primary
    ?
    ??? 注意,數(shù)據(jù)庫鏈中用于連接新primary 的用戶必須擁有SELECT_CATALOG_ROLE 角色。

    ??? JSSLDG2> alter session disable guard;
    ??? 會話已更改。
    ??? JSSLDG2> create database link getjssweb connect to jss identified by jss using 'jssweb';
    ??? 數(shù)據(jù)庫鏈接已創(chuàng)建。
    ??? JSSLDG2> alter session enable guard;
    ??? 會話已更改。

    ?
    ??? 驗證一下數(shù)據(jù)鏈是否能夠正常訪問:

    ??? JSSLDG2> select sysdate from dual@getjssweb;
    ??? SYSDATE
    ??? --------------
    ??? 23-2 月-08


    ??? 提示:關(guān)于alter session enable|disable guard 語句,用于允許或禁止用戶修改邏輯standby 中的結(jié)構(gòu)。例如:

    ??? JSSLDG2> conn jss/jss
    ???
    已連接。

    ?

    ??? JSSLDG2> select * from b;
    ??? ID
    ??? ----------
    ??? 1
    ??? 2
    ??? 3
    ??? 4
    ??? 5
    ??? 6
    ??? 7
    ??? 8
    ???
    已選擇8 行。

    ?

    ??? JSSLDG2> alter table b rename to a;
    ??? alter table b rename to a
    ??? *
    ???
    1 行出現(xiàn)錯誤:
    ??? ORA-16224: Database Guard
    已啟用

    ?

    ??? JSSLDG2> alter session disable guard;
    ???
    會話已更改。

    ?

    ??? JSSLDG2> alter table b rename to a;
    ???
    表已更改。

    ?
    2、重新啟動SQL 應(yīng)用

    ??? 在各個邏輯standby 執(zhí)行下列語句啟動sql 應(yīng)用(注意更新dblinkName):

    ??? JSSLDG2> alter database start logical standby apply new primary getjssweb;
    ??? 數(shù)據(jù)庫已更改。

    ?
    ??? 如果你運氣好,等語句執(zhí)行完之后,恢復(fù)過程就完成了。如果你非常不幸的碰到了ORA-16109 錯誤,那么我不得不告訴你,恐怕你得重建邏輯standby 了。所以,祝你好運吧:)

    ??? 語句順利執(zhí)行完之后,我們來驗證一下:

    ??? JSSWEB> alter system switch logfile;
    ???
    系統(tǒng)已更改。

    ?

    ??? JSSWEB> select max(sequence#) from v$archived_log;
    ??? MAX(SEQUENCE#)
    ??? --------------
    ??? 862

    ?

    ??? JSSLDG2> select sequence#,applied from dba_logstdby_log;
    ??? SEQUENCE#? APPLIED
    ??? ---------- --------
    ??? 862??????? NO


    ?
    ??? 注意:出現(xiàn)問題了!!
    ?
    ??? 日志是傳輸過去了,但是邏輯standby 并沒有開始應(yīng)用,怎么回事?
    ?
    ??? 我們先來確認一下standby 的各進程狀態(tài):

    ??? JSSLDG2> select process,status,group#,thread#,sequence#,block#,blocks from v$managed_standby;
    ??? PROCESS ? STATUS ????? GROUP# ?? THREAD#??? SEQUENCE# BLOCK# ??? BLOCKS
    ??? --------- ------------ --------- ---------- ---------- ---------- ----------
    ??? ARCH ???? CLOSING ???? 2 ??????? 1 ???????? 4????????? 16385 ???? 1836
    ??? ARCH ???? CLOSING ???? 6 ??????? 1 ???????? 862??????? 1 ???????? 18
    ??? RFS ????? IDLE ??????? N/A ????? 0 ???????? 0????????? 0 ???????? 0
    ??? RFS ????? IDLE ??????? 3 ??????? 1 ???????? 863??????? 2 ???????? 1


    ??? 看起來也是正常的,接收完了862,正在等待863,但是,為什么不應(yīng)用呢。
    ?
    ??? 手工查詢一下新primary 生成的歸檔日志情況:

    ??? JSSWEB> select sequence#,name,COMPLETION_TIME from v$archived_log where sequence#>855;
    ??? SEQUENCE# NAME???????????????????????????????????????????????????? COMPLETION_TIME
    ??? ---------- -------------------------------------------------------- -------------------
    ??? 856 ?????? E:\ORA10G\ORADATA\JSSWEB\ARC\LOG1_856_641301252.ARC????? 2008-02-21 10:15:42
    ??? 857 ?????? E:\ORA10G\ORADATA\JSSWEB\ARC\LOG1_857_641301252.ARC????? 2008-02-21 10:16:46
    ??? 858 ?????? E:\ORA10G\ORADATA\JSSWEB\ARC\LOG1_858_641301252.ARC????? 2008-02-23 14:15:18
    ??? 859 ?????? E:\ORA10G\ORADATA\JSSWEB\ARC\LOG1_859_641301252.ARC????? 2008-02-23 14:56:55
    ??? 860 ?????? E:\ORA10G\ORADATA\JSSWEB\ARC\LOG1_860_641301252.ARC????? 2008-02-23 14:57:03
    ??? 861 ?????? E:\ORA10G\ORADATA\JSSWEB\ARC\LOG1_861_641301252.ARC????? 2008-02-23 16:58:14
    ??? 861 ?????? jssldg2 ???????????????????????????????????????????????? 2008-02-23 16:58:16
    ??? 862 ?????? E:\ORA10G\ORADATA\JSSWEB\ARC\LOG1_862_641301252.ARC????? 2008-02-23 17:08:57
    ??? 862 ?????? jssldg2 ???????????????????????????????????????????????? 2008-02-23 17:08:57
    ??? 863 ?????? E:\ORA10G\ORADATA\JSSWEB\ARC\LOG1_863_641301252.ARC????? 2008-02-23 17:19:48
    ??? 863 ?????? jssldg2 ???????????????????????????????????????????????? 2008-02-23 17:20:59
    ??? 864 ?????? E:\ORA10G\ORADATA\JSSWEB\ARC\LOG1_864_641301252.ARC????? 2008-02-23 17:21:11
    ??? 864 ?????? jssldg2 ???????????????????????????????????????????????? 2008-02-23 17:21:13
    ??? 已選擇13 行。


    ??? 發(fā)現(xiàn)了一點點痕跡,我們的切換操作是下午3 點左右進行的,期間還產(chǎn)生了序列號為860,861 之類的歸檔文件,但并未傳輸至standby,是不是因為這些文件中包含了一部分應(yīng)被應(yīng)用的數(shù)據(jù),因此造成standby
    接收到的新primary 傳輸過來的歸檔scn 與最后應(yīng)用的scn 不連續(xù),所以無法應(yīng)用?再來驗證一下:

    ??? JSSLDG2> select applied_scn,latest_scn from v$logstdby_progress;
    ??? APPLIED_SCN LATEST_SCN
    ??? ----------- ----------
    ??? 1259449 ??? 1284126


    ??? 果然如此,應(yīng)用的scn 與最后的scn 確實不匹配,剩下的就好解決了,把所有可疑的應(yīng)傳輸?shù)絪tandby的歸檔文件手工復(fù)制到standby,然后通過alter 命令注冊一下:

    ??? JSSLDG2> alter database register logical logfile 'E:\ora10g\oradata\jssldg2\std\LOG1_859_641301252.ARC';
    ??? 數(shù)據(jù)庫已更改。
    ??? JSSLDG2> alter database register logical logfile 'E:\ora10g\oradata\jssldg2\std\LOG1_860_641301252.ARC';
    ??? 數(shù)據(jù)庫已更改。
    ??? JSSLDG2> alter database register logical logfile 'E:\ora10g\oradata\jssldg2\std\LOG1_861_641301252.ARC';
    ??? 數(shù)據(jù)庫已更改。

    ?
    ??? 提示:復(fù)制文件的時候盡可能把相近時間段的歸檔文件都拷過來,不用擔(dān)心無用歸檔會不會影響到應(yīng)用,oracle 會自動判斷歸檔中的scn,對于已經(jīng)應(yīng)用過的正常情況下是不會重復(fù)應(yīng)用的,因此我們把
    859,860,861 全部復(fù)制過來。
    ?
    ??? 再查看一下應(yīng)用狀態(tài):

    ??? JSSLDG2> select sequence#,applied from dba_logstdby_log;
    ??? SEQUENCE# APPLIED
    ??? ---------- --------
    ??? 862 ?????? CURRENT
    ??? 863 ?????? CURRENT

    ?
    ??? 哈哈,已經(jīng)開始應(yīng)用了。邏輯standby 恢復(fù)成功!想起官方文檔中有一句提示,說的是在打開新的primary數(shù)據(jù)庫,生成數(shù)據(jù)字典之前,不要執(zhí)行任何DDL,不然就只能重建邏輯standby 了,估計就是擔(dān)心執(zhí)行ddl后不幸觸發(fā)日志切換,造成邏輯standby 接收新primary 傳來的歸檔文件不連續(xù),無法順利應(yīng)用。
    ?
    ??? 切換完成之后,在修復(fù)邏輯standby 的同時,順手打掃一下戰(zhàn)場,比如設(shè)置新primary 數(shù)據(jù)庫的備份策略,以及考慮如何修復(fù)前故障的primary 等等,dba 這份工作,人前看起來光鮮,如果你已經(jīng)下定決心要從事這行,那對于人后的辛苦一定要有深刻心理準備喲,你看看像上面這種情況,primary 只要隨隨便便宕個機,引之而來的工作量就夠我們忙活的。
    ?
    ?
    ??? 也許這個時候dba 需要的不僅是保持清晰的大腦,還要能打開思路,此時我們更不妨考慮在做角色切換和修復(fù)損壞的primary 之間做個選擇,究竟哪個更快,哪個更簡便一些呢,你看,干dba 這行,不僅壓力大,不僅要本領(lǐng)過硬,不僅要耐心細致,關(guān)鍵時刻還要保持清醒的頭腦,額地神耶,太刺激啦,太有挑戰(zhàn)啦~~~~~~
    posted on 2009-02-25 21:46 decode360 閱讀(119) 評論(0)  編輯  收藏 所屬分類: 10.DB_Tools
    主站蜘蛛池模板: 亚洲成a人片在线看| 亚洲精品97久久中文字幕无码| 无码人妻久久一区二区三区免费| eeuss影院免费92242部| 国产无限免费观看黄网站| 精品久久久久久无码免费| 中文在线免费观看| 99久久免费国产精品热| 久久精品电影免费动漫| 青青草无码免费一二三区| 亚洲黄色片免费看| 国产免费AV片在线播放唯爱网| 久久精品网站免费观看| 日本免费人成黄页网观看视频 | 羞羞漫画登录页面免费| 男人和女人高潮免费网站| 国产成人自产拍免费视频| 国产一级一毛免费黄片| 国产无遮挡无码视频免费软件| 性色午夜视频免费男人的天堂| 69视频免费在线观看| 一二三四在线播放免费观看中文版视频 | 香蕉蕉亚亚洲aav综合| 亚洲精品偷拍无码不卡av| 亚洲乱码一区二区三区国产精品| 亚洲精品乱码久久久久久V | 久久丫精品国产亚洲av| 亚洲一级毛片免费看| 亚洲AV噜噜一区二区三区| 有码人妻在线免费看片| 秋霞人成在线观看免费视频| 国产精品视频免费| 国产在线不卡免费播放| 国外亚洲成AV人片在线观看| 亚洲欧洲第一a在线观看| 亚洲一区二区三区乱码在线欧洲| 国产精品亚洲精品久久精品 | 亚洲中文无码永久免| 四虎影视久久久免费| 日韩精品极品视频在线观看免费| 日本精品人妻无码免费大全|