ORACLE Dataguard安裝

ORACLE Dataguard安裝

2011-02-25 15:58:23|  分類: 數據庫之Oracle |  標籤:oracle  dataguard   |字號大中小 訂閱

花了一週時間,終於部署和穩定都整理好了. 拷貝到blog裏, 留份記錄. 也算是對大家的貢獻吧. 
當然這篇技術文檔很大一部分歸功於這位仁兄: http://blog.csdn.net/tianlesoftware/archive/2010/04/30/5547565. 我參考該文檔,對實施過程的碰到的問題做了調整,整理了一份自己的參考文檔。

1      前言

1.1    Dataguard實施前準備

    Oracle安裝分包括2塊,安裝DB 軟件和升級。 如果是10g的話,可以先將DB升級到10.2.0.5。 升級的原因是爲了避免某些bug。先安裝軟件,升級,升級完在用DBCA 創建實例。 這樣比安裝DB 和創建實例之後升級要簡單點。
    (1)redo 文件默認是50M,改成100M
    (2)每個redo group裏改成2個 redo logfile。 大小100M (只保留2組red log)
    (3)檢查一下字符集:ZHS16GBK
    (4)設置SGA,PGA 大小。
       OLTP 系統一般的規則是:
              SGA=內存*80%*80%
              PGA=內存*80%*20%

註釋: 本次實施中 {SID} = oratest

2      Dataguard實施步驟

2.1 Primary端設置

2.1.1        設置oracle爲歸檔模式

查看當前歸檔模式情況: archive log list
    設置本地歸檔目錄: 修改init{SID}.ora文件
        *.log_archive_dest_1='LOCATION=/home/ora_arch'
        *.log_archive_format='%t_%s_%r.dbf'
    注意:
    oracle startup啓動數據庫查詢啓動文件的順序:
         1. spfile{SID}.ora文件 (爲二進制文件不可以手動更改)
         2.  spfile.ora文件
         3.  init{SID}.ora文件 (可以更改)
         4.  pfile.ora文件
    設置爲歸檔模式,命令如下:   
        SQL> archive log list;
        SQL> shutdown immediate
        SQL> startup mount
        SQL> alter database archivelog;
        SQL> archive log list;
 

2.1.2           設置主數據庫爲force logging 模式

SQL> alter database force logging;

2.1.3           添加red log file

添加一個新的Standby Redologs組(注意組號不要與當前存在的Online Redologs組重複),併爲該組指定一個成員
    SQL> ALTER DATABASE ADD STANDBY LOGFILE GROUP 4 ('/u01/app/oracle/oradata/orcl/redo04.log') size 100M;
    SQL> ALTER DATABASE ADD STANDBY LOGFILE GROUP 5 ('/u01/app/oracle/oradata/orcl/redo05.log') size 100M;
    SQL> ALTER DATABASE ADD STANDBY LOGFILE GROUP 6 ('/u01/app/oracle/oradata/orcl/redo06.log') size 100M;
    SQL> ALTER DATABASE ADD STANDBY LOGFILE GROUP 7 ('/u01/app/oracle/oradata/orcl/redo07.log') size 100M;

2.1.4           創建備庫的密碼文件和控制文件

   SQL> alter database create standby controlfile as '/home/u01/control01.ctl';
        -- 說明: 判斷一個數據庫是Primary還是Standby,就是通過控制文件來判斷的。
    拷貝/home/u01/product/10R2/db/dbs/orapw{SID} 至 /home/u01.
 

2.1.5           修改初始化參數文件

    SQL> create pfile='/home/u01/initorcl.ora' from spfile;
    在initorcl.ora 添加如下內容:
    *.DB_UNIQUE_NAME='PRIMARY'
    *.FAL_CLIENT='primary'
    *.FAL_SERVER='standby'
    *.log_archive_config='DG_CONFIG=(PRIMARY,STANDBY)'
    *.log_archive_dest_1='LOCATION=/home/ora_arch db_unique_name=PRIMARY'
    *.log_archive_dest_2='SERVICE=STANDBY DB_UNIQUE_NAME=STANDBY'
    *.log_archive_dest_state_1='ENABLE'
    *.log_archive_dest_state_2='ENABLE'
    *.standby_archive_dest='/home/ora_arch'
    *.standby_file_management='AUTO'
     注意:
        如果主庫和備庫的數據文件位置不同,還需要加如下2個參數:
        *.log_file_name_convert='/u02/oradata/orcl/','/u03/oradata/orcl/'
        *.db_file_name_convert='/u02/oradata/orcl/','/u03/oradata/orcl/'
     TNS設置:
    primary =
      (DESCRIPTION =
        (ADDRESS_LIST =
          (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.21.6)(PORT = 1521))
        )
        (CONNECT_DATA =
          (SID = oratest)
        )
      )

standby =
      (DESCRIPTION =
        (ADDRESS_LIST =
          (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.21.7)(PORT = 1521))
        )
        (CONNECT_DATA =
          (SID = oratest)
        )
      )
 
    用'/home/u01/init{SID}.ora' 這個pfile 啓動數據庫,並生成spfile。
    SQL> shutdown immediate
    Database closed.
    Database dismounted.
    ORACLE instance shut down.
    SQL> startup pfile='/home/u01/init{SID}.ora';
    ORACLE instance started.
    Total System Global Area 1090519040 bytes
    Fixed Size                  2020128 bytes
    Variable Size             301993184 bytes
    Database Buffers          771751936 bytes
    Redo Buffers               14753792 bytes
    SQL> create spfile from pfile='/home/u01/init{SID}.ora';
    File created.

2.1.6           修改listener.ora 和tnsnames.ora 文件

Listener.ora 文件: (本次不做修改, 啓動時先從庫. 關閉時先關閉主庫)
    SID_LIST_LISTENER =
      (SID_LIST =
        (SID_DESC =
          (SID_NAME = PLSExtProc)
          (ORACLE_HOME = /home/u01/product/10R2/db)
          (PROGRAM = extproc)
        )
    (SID_DESC =
    (GLOBAL_DBNAME = orcl)
    (ORACLE_HOME = /home/u01/product/10R2/db)
           (SID_NAME = orctest
       )
      )
    LISTENER =
      (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = localhost.localdomain)(PORT = 1521))
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0))
    )
  )
    注意:SID_LIST_LISTENER 配置的是靜態註冊,如果沒有該參數,而且Data Guard 啓動順序又不正確,那麼在主庫可能會報 PING[ARC1]: Heartbeat failed to connect to standby 'orcl_st'. Error is 12514. 錯誤,導致歸檔無法完成。

    tnsnames.ora 文件
    primary =
      (DESCRIPTION =
        (ADDRESS_LIST =
          (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.21.6)(PORT = 1521))
        )
        (CONNECT_DATA =
          (SID = oratest)
        )
      )
    standby =
      (DESCRIPTION =
        (ADDRESS_LIST =
          (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.21.7)(PORT = 1521))
        )
        (CONNECT_DATA =
          (SID = oratest)
        )
      )

2.2 Standby 端配置

2.2.1        創建備庫存放數據文件和後臺跟蹤目錄

這個目錄可以和主庫相同,如果不同,就需要在主庫的初始化文件中進行轉換。
   如: *.log_file_name_convert='/u02/oradata/orcl/','/u03/oradata/orcl/'
        *.db_file_name_convert='/u02/oradata/orcl/','/u03/oradata/orcl/'

2.2.2        將主庫的密碼文件,控制文件,數據文件,參數文件,日誌文件copy到備庫

說明一點,這個控制文件是我們自己創建的standby 控制文件。將copy過來的控制文件再複製三份就可以了。
   主備的控制文件是不一樣的。這裏除了採用直接copy 文件之外,還可以採用Rman恢復來做。 直接copy 需要停數據庫,如果採用RMAN 的話,就不需要停機了。
     文件如下:
      (初始安裝oracle, 沒有其他數據文件; 若對現網數據庫做DG,需要拷貝相應的文件)
       control01.ctl  redo01.log  redo04.log  redo07.log    temp01.dbf
       control02.ctl  redo02.log  redo05.log  sysaux01.dbf  undotbs01.dbf
       control03.ctl  redo03.log  redo06.log  system01.dbf  users01.dbf

2.2.3        修改初始化參數文件

修改之後如下:
       *.log_archive_config='DG_CONFIG=(PRIMARY,STANDBY)'
       *.log_archive_dest_1='LOCATION=/home/ora_arch db_unique_name=STANDBY'
       *.log_archive_dest_2='SERVICE=PRIMARY DB_UNIQUE_NAME=PRIMARY'
       *.log_archive_dest_state_1='ENABLE'
       *.log_archive_dest_state_2='ENABLE'
       *.fal_client='STANDBY'
       *.fal_server='PRIMARY'
       *.DB_UNIQUE_NAME='STANDBY'
       *.standby_archive_dest='/home/ora_arch'

2.2.4        配置Listener.ora和tnsnames.ora

如果不存在,就從主庫上copy 過去。

2.2.5        在備庫添加redo log file

       如果主庫沒有添加redo log file,可以先用copy 過來的初始化文件將數據庫啓動到mount 狀態。在創建個spfile,最後添加redo log。
       SQL> startup mount pfile='/home/u01/init{SID}.ora'
       ORACLE instance started.
       SQL> create spfile from pfile='/home/u01/init{SID}.ora';
 
       添加一個新的Standby Redologs組(注意組號不要與當前存在的Online Redologs組重複),併爲該組指定一個成員:
       SQL> ALTER DATABASE ADD STANDBY LOGFILE GROUP 4 ('/home/u01/product/oradata/oratest/redo04.log') size 100M;
       SQL> ALTER DATABASE ADD STANDBY LOGFILE GROUP 5 ('/home/u01/product/oradata/oratest/redo05.log') size 100M;
       SQL> ALTER DATABASE ADD STANDBY LOGFILE GROUP 6 ('/home/u01/product/oradata/oratest/redo06.log') size 100M;
       SQL> ALTER DATABASE ADD STANDBY LOGFILE GROUP 7 ('/home/u01/product/oradata/oratest/redo07.log') size 100M;
提示: 在主庫上面已經添加了standby redologs 可以先用下面語句刪除掉. 再重新添加
      alter database drop standby logfile group 4;
      查看配置情況:
SELECT GROUP#,THREAD#,SEQUENCE#,ARCHIVED,STATUS FROM V$STANDBY_LOG;
        GROUP#    THREAD#  SEQUENCE# ARC STATUS
---------- ---------- ---------- --- ----------
         4          1          0 YES UNASSIGNED
         5          0          0 YES UNASSIGNED
         6          0          0 YES UNASSIGNED
         7          0          0 YES UNASSIGNED
      提示,由於從Primary數據庫複製文件時並沒有複製Online Redologs,因此物理Standby數據庫在第一次啓動REDO應用時,會在Alert文件中報Online Redo Logfile文件不存在,沒有關係,物理Standby會自動重建這批文件,同時你也不用擔心會丟失數據,Online Redologs中的數據會以歸檔文件的形式從Primary端接收。
       至此,Data Guard 的操作已經完成,下面來開始驗證。

注意:  tns的primary和standby配置需要先通過測試. 保證通信無誤後再啓動雙機服務.
        Data Guard 啓動順序:
        啓動順序:先standby ,後primary;
        關閉順序:先primary 後standby;

2.3 驗證Dataguard狀態

在備庫將實例啓動到mount 狀態:
    SQL> startup nomount;
    SQL> alter database mount standby database ;
    SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;
    SQL> alter database recover managed standby database disconnect from session;
     //希望實時應用(MANAGED REAL TIME APPLY) 需要使用下面語句進行啓動:
    SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE NODELAY USING CURRENT LOGFILE DISCONNECT FROM SESSION;
 
    在備庫啓動監聽:
    $lsnrctl start
 
    在主庫啓動實例:
    SQL> startup;
 
    在主庫啓動監聽:
    $lsnrctl start
 
    在主庫驗證歸檔目錄是否有效:
    SQL> SELECT STATUS,DESTINATION, ERROR FROM V$ARCHIVE_DEST;
    如果有錯誤,要排查原因。
 
    SQL> alter system switch logfile;
   
    查看歸檔日誌情況.
 
    SQL> archive log list;
  
    主備查詢結果一致,Data Guard 搭建結束。

3      主備切換

    由於目前數據庫由3臺服務器組成,因此做主備切換後,需要重新對GIS分析數據庫做Stream同步。 下面主要介紹主從切換。
    Data  Guard主從數據庫雙向切換:
    A.準備工作
    (1)首先查詢主庫狀態,確認可以做切換:
        SQL> select switchover_status from v$database;      
        SWITCHOVER_STATUS
        ------------------
        TO STANDBY
               
        SWITCHOVER_STATUS有三個狀態: to standby、 sessions active、 not allowed(該狀態下無法切換)
 
    (2)在從庫上面確認所有的archive log 都已經apply:
        select sequence#,first_time,next_time,applied from v$archived_log;
    (3)在主庫上switch  logfile:
        Alter system switch logfile;
    (4)觀察從庫上已經 apply所有archive log:
        select sequence#,first_time,next_time,applied from v$archived_log;

        查看是否仍然有連接
        select username,program  from v$session  where status='ACTIVE';

    B.切換:
    (1)將主庫轉變爲可切換狀態:
        ALTER DATABASE COMMIT TO SWITCHOVER TO PHYSICAL STANDBY WITH SESSION SHUTDOWN;
        --------此時會有日誌切換,並傳輸到舊standby點。Standby端會自動cancel(查看alter{SId}.log日誌。

    (2)standby   
        ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY;
    (3)原primary
        SHUTDOWN IMMEDIATE;
        STARTUP NOMOUNT;
        alter database mount standby database;

(4)原primary
        alter system set log_archive_dest_state_2=defer scope=both;
    (5)原standby
        RECOVER MANAGED STANDBY DATABASE CANCEL-------系統已自動執行。(會報異常錯誤, 可忽略)
        shutdown immediate;
        startup
    (6)原standby( new primary)
        alter system set log_archive_dest_state_2=enable scope=both;
    (7)新的primary
        ALTER SYSTEM SWITCH LOGFILE;
        查看archive log是否自動傳輸
    (8)原來的primary 新的standby
        RECOVER MANAGED STANDBY DATABASE disconnect; (清除原有日誌信息)
    (9)新的primary
        ALTER SYSTEM SWITCH LOGFILE;
    (10)新standby    
        archive log list; 查看
    經測試,系統雙向切換成功,目前整套系統工作正常。

4      主庫失敗,啓用備庫(Failovers)

1. 查看是否有日誌GAP,沒有應用的日誌:
SQL> SELECT UNIQUE THREAD#, MAX(SEQUENCE#) OVER(PARTITION BY THREAD#) LAST FROM V$ARCHIVED_LOG;
SQL> SELECT THREAD#, LOW_SEQUENCE#, HIGH_SEQUENCE# FROM V$ARCHIVE_GAP;
如果有,則拷貝過來並且註冊
SQL> ALTER DATABASE REGISTER PHYSICAL LOGFILE '路徑';
重複查看直到沒有應用的日誌:

2. 然後停止應用歸檔:

SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL; Database altered.

3. 下面將STANDBY數據庫切換爲PRIMARY數據庫:
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE FINISH;
或SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE FINISH FORCE;
Database altered.

SQL> SELECT DATABASE_ROLE FROM V$DATABASE;
DATABASE_ROLE
----------------
PHYSICAL STANDBY

SQL> ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY;
Database altered.

SQL> ALTER DATABASE OPEN; 或者 shutdown immediate+startup

Database altered.

檢查數據庫是否已經切換成功:

SQL> SELECT DATABASE_ROLE FROM V$DATABASE;

DATABASE_ROLE
----------------
PRIMARY

至此,FAILOVER切換完成。這個時候應該馬上對新的PRIMARY數據庫進行備份。;

 

發佈了66 篇原創文章 · 獲贊 7 · 訪問量 29萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章