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

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

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

    Decode360's Blog

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

      BlogJava :: 首頁 :: 新隨筆 :: 聯系 ::  :: 管理 ::
      302 隨筆 :: 26 文章 :: 82 評論 :: 0 Trackbacks
    本文作者: junsansi???? 轉載網址: http://www.5ienet.com/index.shtml
    ?
    ?
    第二部分物理standby(3)角色轉換? 2007.12.11
    ?
    ??? 第1節的時候我們就提到了角色切換,我們也聽說了其操作簡單但用途廣泛,同時我們也猜測其屬于primary與standby 之間的互動,那么在primary 和standby 數據庫(之一)上都需要有操作,并且切換又分了:switchover和failover,前者是無損切換,不會丟失數據,而后者則有可能會丟失數據,并且切換后原primary 數據庫也不再是該data guard 配置的一部分了.針對不同standby(邏輯或物理)的處理方式也不盡相同。en,內容也挺多地。我們還是先大概了解下概念,然后再通過實戰去印證。
    ?
    ??? 角色轉換前的準備工作:

    ??? ● 檢查各數據庫的初始化參數,主要確認對不同角色相關的初始化參數都進行了正確的配置。
    ??確保可能成為primary 數據庫的standby 服務器已經處于archivelog 模式。
    ??確保standby 數據庫的臨時文件存在并匹配primary 數據庫的臨時文件
    ??確保standby 數據庫的RAC 實例只有一個處于open 狀態。(對于rac 結構的standby 數據庫,在角色轉換時只能有一個實例startup。其它rac 實例必須統統shutdown,待角色轉換結束后再startup)
    ?
    Switchover
    ??? 無損轉換,通常是用戶手動觸發或者有計劃的讓其自動觸發,比如硬件升級啦,軟件升級啦之類的。通常它給你帶來的工作量非常小并且都是可預計的。其執行分兩個階段,第一步, primary 數據庫轉換為standby 角色,第二步,standby 數據庫(之一)轉換為primary 角色,primary 和standby 只是簡單的角色互換,這也印證了我們前面關于角色轉換是primary/standby 互動的猜測。
    ?
    Failover
    ??? 不可預知原因導致primary 數據庫故障并且短期內不能恢復就需要failover。如果是這種切換那你就要小心點了,有可能只是虛驚一場,甚至連你可能損失的腦細胞的數量都能預估,但如果運氣不好又沒有完備的備份恢復策略而且primary 數據并非處于最大數據保護或最高可用性模式地話,黑黑,哭是沒用地,表太傷心了,來,讓三思GG 安慰安慰你,這種情況下呢丟失數據有可能是難免的,并且如果其故障未能修復,那它甚至連快速修復成為standby 的機會也都失去了吶,咦,你腦門怎么好像在往外冒水,難道是強效凈膚液,你的臉也忽然好白皙喲~~~~
    ?
    ??? 在執行failover 之前,盡可能將原primary 數據庫的可用redo 都復制到standby 數據庫。
    ?
    ??? 注意,如果要轉換角色的standby 處于maximum protection 模式,需要你首先將其切換為maximumperformance 模式(什么什么,你不知道怎么轉換模式?oooo,對對,我們還沒有操作過,這塊并不復雜,接下來會通過專門章節討論),這里先提供透露一下,轉換standby 數據庫到MAXIMIZE PERFORMANCE 執行下列SQL 即可:

    ??? SQL> ALTER DATABASE SET STANDBY DATABASE TO MAXIMIZE PERFORMANCE;

    ??? 等standby 切換為新的primary 之后,你可以再隨意更改數據庫的保護模式。
    ?
    ??? 你是不是有疑問關于為什么待切換角色的standby 不能處于maximum protection 模式呢?這個其實很好理解,我們在第一節學習三種保護模式的時候就介紹過其各自的特點,腦袋瓜好使的同學應該還有印象,maximum protection 模式需要確保絕無數據丟失,因此其對于提交事務對應的redo 數據一致性要求非常高,另外,如果處于maximum protection 模式的primary 數據庫仍然與standby 數據庫有數據傳輸,此時alterdatabase 語句更改standby 數據庫保護模式會失敗,這也是由maximum protection 模式特性決定的。
    ?
    ??? 下面分別演示switchover 和failover 的過程:
    ?
    ?
    一、物理standbstandby的Switchover
    ??? 注意操作步驟的先后,很關鍵的喲。
    ?
    1、檢查是否支持switchover 操作--primary 數據庫操作
    ?
    ??? 登陸primary 數據庫,查詢v$database 視圖的switchover_status 列。

    ??? 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

    ??? 如果該列值為"TO STANDBY"則表示primary 數據庫支持轉換為standby 角色,否則的話你就需要重新檢查一下Data Guard 配置,比如看看LOG_ARCHIVE_DEST_n 之類參數值是否正確有效等等。
    ?
    2、啟動switchover --primary 數據庫操作

    ??? 首先將primary 轉換為standby 的角色,通過下列語句:

    ??? SQL> alterdatabasecommittoswitchovertophysicalstandby;
    ??? 數據庫已更改。

    ?
    ??? 語句執行完畢后,primary 數據庫將會轉換為standby 數據庫,并自動備份控制文件到trace。
    ?
    3、重啟動到mount --原primary 數據庫操作
    ?

    ??? SQL> shutdownimmediate
    ??? ORA-01507: 未裝載數據庫
    ??? ORACLE 例程已經關閉。

    ??? SQL> startupmount
    ??? ORACLE 例程已經啟動。
    ??? Total System Global Area 167772160 bytes
    ??? Fixed Size 1289484 bytes
    ??? Variable Size 104858356 bytes
    ??? Database Buffers 54525952 bytes
    ??? Redo Buffers 7098368 bytes
    ??? 數據庫裝載完畢。

    ?
    4、檢查是否支持switchover 操作--待轉換standby 數據庫操作
    ?
    ??? 待原primary 切換為standby 角色之后,檢查待轉換的standby 數據庫switchover_status 列,看看是否支持角色轉換。

    ??? 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


    ??? 此時待轉換standby 數據庫switchover_status 列值應該是"TO_PRIMARY",如否則檢查其初始化參數文件中的設置,提示一下,比著原primary 數據庫的初始化參數改改。
    ?
    5、轉換角色到primary --待轉換standby 數據庫操作
    ?
    ??? 通過下列語句轉換standby 到primary 角色:

    ??? SQL> alter database commit to switchover to primary;
    ??? 數據庫已更改。

    ?
    ??? 注意:待轉換的物理standby 可以處于mount 模式或open read only 模式,但不能處于open read write模式。
    ?
    6、完成轉換,打開新的primary 數據庫
    ?

    ??? SQL> alter database open;
    ??? 數據庫已更改。

    ?
    ??? 注:如果數據庫處于open read-only 模式的話,需要先shutdown 然后直接startup 即可。
    ?
    7、驗證一下
    ?
    ??? 新的primary 數據庫

    ??? 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;
    ??? 系統已更改。

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

    ?
    ??? 新的standby 數據庫

    ??? 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
    ?
    ??? 注意幾點:
    ??? ● failover 之后,原primary 數據庫默認不再是data guard 配置的一部分。
    ??? ● 多數情況下,其它邏輯/物理standby 數據庫不直接參與failover 的過程,因此這些數據庫不需要做任何操作。
    ??? ● 某些情況下,新的primary 數據庫配置之后,需要重新創建其它所有的standby 數據庫。
    ?
    ??? 另外,如果待轉換角色的standby 處于maximum protection 或maximum availability 模式的話,歸檔日志應該是連續存在的,這種情況下你可以直接從第3 步執行,否則建議你按照操作步驟從第1 步開始執行。

    ??? 一般情況下failover 都是表示primary 數據庫癱瘓,最起碼也是起不來了,因此這種類型的切換基本上不需要primary 數據庫做什么操作。所以下列步驟中如果有提到primary 和standby 執行的,只是建議你如果primary還可以用,那就執行一下,即使它能用你卻不執行,也沒關系,不影響standby 數據庫的切換:)

    1、檢查歸檔文件是否連續

    ??? 查詢待轉換standby 數據庫的V$ARCHIVE_GAP 視圖,確認歸檔文件是否連接:

    ??? SQL> SELECT THREAD#, LOW_SEQUENCE#, HIGH_SEQUENCE# FROM V$ARCHIVE_GAP;
    ??? 未選定行

    ?
    ??? 如果返回的有記錄,按照列出的記錄號復制對應的歸檔文件到待轉換的standby 服務器。這一步非常重要,必須確保所有已生成的歸檔文件均已存在于standby 服務器,不然可能會數據不一致造成轉換時報錯。文件復制之后,通過下列命令將其加入數據字典:

    ??? SQL> ALTER DATABASE REGISTER PHYSICAL LOGFILE 'filespec1';

    ?
    2、檢查歸檔文件是否完整
    ?
    ??? 分別在primary/standby 執行下列語句:

    ??? SQL> select distinct thread#,max(sequence#) over(partition by thread#) a from v$archived_log;

    ?
    ??? 該語句取得當前數據庫各線程已歸檔文件最大序號,如果primary 與standby 最大序號不相同,必須將多出的序號對應的歸檔文件復制到待轉換的standby 服務器。不過既然是failover,有可能primary 數據庫此時已經無法打開,甚至無法訪問,那你只好聽天由命嘍,三思在這里替你默念:蒼天啊,大地啊,哪路的神仙大姐能來保佑俺們不丟數據呀!
    ?
    3、啟動failover
    ?
    ??? 執行下列語句:

    ??? SQL> alter database recover managed standby database finish force;
    ??? 數據庫已更改。

    ?
    ??? FORCE 關鍵字將會停止當前活動的RFS 進程,以便立刻執行failover。
    ?
    ?
    剩下的步驟就與前面switchover 很相似了
    ?
    4、切換物理standby 角色為primary
    ?

    ??? SQL> alter database commit to switchover to primary;
    ??? 數據庫已更改。

    ?
    5、啟動新的primary 數據庫。
    ?
    ??? 如果當前數據庫已mount,直接open 即可,如果處于read-only 模式,需要首先shutdown immediate,然后再直接startup。

    ??? SQL> alter database open;
    ??? 數據庫已更改。

    ?
    ?
    ?
    ??? 角色轉換工作完成。剩下的是補救措施(針對原primary 數據庫),由于此時primary 數據庫已經不再是data guard 配置的一部分,我們需要做的就是嘗試看看能否恢復原primary 數據庫,將其改造為新的standby服務器。具體操作方式可以分為二類:1.重建2.備份恢復。所涉及的技術前面的系列文章中均有涉及,此處不再贅述。
    ?
    ?
    ?




    -The End-

    posted on 2009-02-21 21:58 decode360-3 閱讀(318) 評論(0)  編輯  收藏 所屬分類: DBA
    主站蜘蛛池模板: 久久一区二区三区免费播放| 国外成人免费高清激情视频| 亚洲区视频在线观看| 国产99视频精品免费视频7| a级成人毛片免费视频高清| 亚洲砖码砖专无区2023| 狠狠亚洲狠狠欧洲2019| 在线观看特色大片免费视频| 一级女性全黄生活片免费看| 日韩亚洲国产综合高清| 亚洲无码在线播放| 日韩免费视频观看| 99久久久国产精品免费牛牛 | 亚洲综合中文字幕无线码| 亚洲男女内射在线播放| 亚洲成在人线aⅴ免费毛片| www.av在线免费观看| 亚洲中文字幕久久精品无码2021| 亚洲人妻av伦理| 最近最好的中文字幕2019免费| 国产在线观a免费观看| 亚洲AV无码国产精品永久一区| 亚洲成人动漫在线| 久久久久亚洲爆乳少妇无| 丁香花在线观看免费观看| 精品国产一区二区三区免费| 国产精品亚洲二区在线| 亚洲熟妇色自偷自拍另类| 国产成人麻豆亚洲综合无码精品| 免费看www视频| 亚洲免费在线视频播放| 国产午夜无码精品免费看| 麻豆va在线精品免费播放| 亚洲愉拍一区二区三区| 亚洲成无码人在线观看| 亚洲成AV人片在WWW色猫咪| 亚洲一区二区三区乱码A| 国产大片线上免费看| 成人毛片手机版免费看| 国产一卡二卡四卡免费| 91香蕉国产线观看免费全集|