ORACLE DG專題3--手把手部署DG 物理備庫

前言

         筆者前文已介紹了ORACLE DG的成員身份與數據保護模式等相關理論知識,從本文開始,將進入ORACLE DG理論與實踐相結合模式,深入理解ORACLE DG的內在原理與基本運維技能。本文講述如何使用rman恢復方式搭建ORACLE DG物理備庫—physical standby。

部署前規劃

         oracle DG要求主備數據庫的DB_NAME相同,db_unique_name不同,DG根據db_unique_name區分主備庫。根據此要求,規劃DG主備如下表所示,

 

primary db

standby db

IP

99.12.98.194

55.14.17.100

hostname

t24app1sg

mqserver02n

db_name

T24APDB

T24APDB

db_unique_name

T24APDB

T24APDBDG

附加說明:

  • 主庫

  • 備庫

      安裝oracle軟件後使用dbca創建一個空的oracle實例。數據庫名與主庫保持相同,建議datafile路徑、快速恢復區路徑也保持與主庫相同,不相同也行,只是後續需要進行文件名轉換。

主庫端配置

開啓主庫歸檔模式

此操作詳細步驟從略,以下只列出可能用到的操作SQL語句。

  • 檢查數據庫歸檔模式
SQL> archive log list;
  • 開啓歸檔模式(此操作需要數據庫處於mount---12c)
SQL> alter database archivelog;

開啓db的強制寫日誌模式

oracle有些DDL(如create table)支持NOLOGGING子句,即建表時不會產生重做日誌,由於物理備庫是應用主庫的重做日誌而來,所以主庫必須打開FORCE LOGGING模式。

  • 檢查FORCE LOGGING狀態
SQL> select force_logging from v$database;
FORCE_LOGGING
---------------------------------------
NO
  • 打開force logging
SQL> ALTER DATABASE FORCE LOGGING;
  • 再次檢查force logging模式
SQL> select force_logging from v$database;

補充:

  • 關閉force logging模式
SQL> ALTER DATABASE NO FORCE LOGGING;

配置監聽和tnsname

正常情況下primary db應該是已經正常配置了監聽,無需重複配置,只需查看監聽狀態,確認能通過監聽連接到實例上。

  • 查看監聽狀態
$ lsnrctl status

Service "T24APDB " has 1 instance(s).
  Instance "T24APDB", status READY, has 1 handler(s) for this service...

說明:此服務下有對應的instance,狀態爲ready,表示動態監聽。主庫由於一直正常使用,可以是動態監聽。

  • 配置tns連接串(tnsnames.ora)

1. 增加到主庫自身的連接串(可用於客戶端訪問)。

T24APDB =

  (DESCRIPTION =

    (ADDRESS = (PROTOCOL = TCP)(HOST = 99.12.98.194)(PORT = 1521))

    (CONNECT_DATA =

      (SERVER = DEDICATED)

      (SERVICE_NAME = T24APDB)

    )  

  )

配置完畢後可使用tnsping進行測試。

2. 增加主庫到備庫的TNS連接串

T24APDBDG =

  (DESCRIPTION =

      (ADDRESS = (PROTOCOL = TCP)(HOST = 55.14.17.100)(PORT = 1521))

          (CONNECT_DATA =

           (SERVER = DEDICATED)

           (SERVICE_NAME = T24APDBDG)

      )  

  )

此條TNS暫時還不能測試,因爲備庫還沒有配置監聽。

添加data guard參數

  • 從spfile生成pfile(重新生成一個pfile,用於編輯)
SQL> create pfile='/home/oracle/T24APDB_PR.ora' from spfile;
  • 修改pfile添加DG配置參數(主庫vim T24APDB_PR.ora)
*.db_unique_name='T24APDB '

說明:db_unique_name嚴格區分大小寫


*.log_archive_config='dg_config=(T24APDB,T24APDBDG)'

說明:dg_config參數指定的是DG環境中的db_unique_name,所有unique name通過逗號分割;

        

*.log_archive_dest_1='location=USE_DB_RECOVERY_FILE_DEST valid_for=(all_logfiles,all_roles) db_unique_name= T24APDB '

說明:valid_for參數的含義是當本數據庫處於all_roles即任何角色時到往本地路徑log_archive_dest_1下歸檔all_logfiles(online redo log和standby redo log),若爲ASM管理,location環境ASM路徑(如+ARCH);


*.log_archive_dest_2='service=T24APDBDG reopen=120 lgwr async valid_for=(online_logfiles,primary_role) db_unique_name=T24APDBDG'

說明:valid_for參數的含義是當數據庫爲primary_role主庫角色時往遠程路徑log_archive_dest_2下歸檔online_logfiles(online redo log)。其中的service= T24APDBDG,指定歸檔傳輸TNS路徑;lgwr:指定redo data傳輸使用的傳輸方式,lgwr async的組合表示redo data使用lgwr進程採用異步傳輸的方式同步到db_unique_name 爲T24APDBDG 的standby db;


*.log_archive_dest_state_1=enable

*.log_archive_dest_state_2=enable

說明:啓用歸檔目的地,該參數對應的值有三個,分別如下:

enable:啓用歸檔目的地

defer:禁用歸檔目的地

ALTERNATE:作爲備用歸檔目的地


*.standby_file_management='auto'

說明:該參數的意思是standby db的文件管理方式是auto,而非manual。設置該參數值爲auto主要目的是:主庫如果添加、刪除表空間或者數據文件時,會自動在備庫相應的添加、刪除表空間或者數據文件。


*.fal_server='T24APDBDG'

說明:指定故障轉移的目標端(主庫)。即出現故障時往tnsname='T24APDBDG'指定的目標端切。通常不會設置故障轉移的自動切換,都是dba按照自己的意願,往最適合接管  primary db的standby db上去切。


*.fal_client='T24APDB

說明:指定發送故障的客戶端,即本地db。

最終新加的pfile配置如下:

用新pfile重啓主庫

SQL> shutdown immediate
SQL> create spfile from pfile='/home/oracle/T24APDB_PR.ora'
SQL> startup

可能的報錯:

ORA-01078: failure in processing system parameters
ORA-16032: parameter LOG_ARCHIVE_DEST_1 destination string cannot be translated
ORA-19801: initialization parameter DB_RECOVERY_FILE_DEST is not set

原因:DB_RECOVERY_FILE_DEST未解析到,導致log_archive_dest_state_1解析失敗;

修改方案:將pfile文件中DB_RECOVERY_FILE_DEST放到LOG_ARCHIVE_DEST_1參數的前面;

創建standby redo log文件

     添加standby redo log文件的目的是在後續執行rman duplicate時可以直接從主庫複製standby redo log,而不用再在standby db端創建standby redo log。直接從主庫複製的好處有如下幾條:

1、保證主庫和備庫有相同的standby redo log,即省了在備庫端創建的麻煩又能保證主備庫完全相同,這樣在switchover時可以直接切換,無需做任何更改;

2、如果主庫有多套dg備庫,所有的dg備庫的standby redo log是完全相同的,這樣管理起來方便。

創建standby redo log的原則:

  • Each standby redo log file must be at least as large as the largest redo log file in the redo log of the redo source database.

每個standby 重做日誌至少和online重做日誌一樣大;

  • The standby redo log must have at least one more redo log group than the redo log at the redo source database, for each redo thread at the redo source database.

standby重做日誌數量至少比online重做日誌多一個。

  • 查詢重做日誌
select group#,type,member from v$logfile;

  • 添加standby redo log
alter database add standby logfile '/odata/datafile/standby_01.log' size 100m;
alter database add standby logfile '/odata/datafile/standby_02.log' size 100m;
alter database add standby logfile '/odata/datafile/standby_03.log' size 100m;
alter database add standby logfile '/odata/datafile/standby_04.log' size 100m;
  • 再次查詢重做日誌
select group#,type,member from v$logfile;

備庫端配置

確保備庫與主庫目錄相同

若不相同,後續需要進行轉化;此處從略。

生產備庫的密碼文件

由於後面需要通過RMAN主庫遠程登錄備庫進行恢復,此處需要配置備庫SYS用戶的密碼。有如下集中方法:

  1. 直接將主庫的orapwT24APDB密碼文件拷貝到備庫;
  2. 使用orapwd命令創建密碼文件
orapwd file='/u01/app/oracle/product/12.1.0/dbhome_1/dbs/orapwT24APDBDG' password=TEST

  • 創建standby的初始化參數

與主庫類似,創建備庫的DG參數(vim initT24APDBDG.ora)。如下:

*.db_name='T24APDB'

*.db_recovery_file_dest='/data/T24APDBDG'

*.db_recovery_file_dest_size=48318382080

*.db_unique_name='T24APDBDG'

*.dispatchers='(PROTOCOL=TCP) (SERVICE=eppsXDB)'

*.fal_client='T24APDBDG'

*.fal_server='T24APDB'

*.log_archive_config='dg_config=(T24APDB,T24APDBDG)'

*.log_archive_dest_1='LOCATION=USE_DB_RECOVERY_FILE_DEST VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=T24APDBDG'

*.log_archive_dest_2='SERVICE=T24APDB LGWR SYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=T24APDB'

*.log_archive_dest_state_1='ENABLE'

*.log_archive_dest_state_2='ENABLE'

用pfile 將standby 啓動到nomount狀態

  • 把spfile文件重命名
$ mv spfileT24APDBDG.ora spfileT24APDBDG.ora.bak
  • 用pfile啓動數據庫到nomount狀態
SQL> startup nomount;

備庫端配置監聽

備庫由於處於nomount狀態,要想通過SYS用戶鏈接,需要配置靜態監聽(vim listener.ora)。

SID_LIST_LISTENER =

  (SID_LIST =

    (SID_DESC =

      (GLOBAL_DBNAME = T24APDBDG)

      (SID_NAME=T24APDBDG)

      (ORACLE_HOME = /u01/app/oracle/product/12.1.0/dbhome_1)

      (SERVICE_NAME=T24APDBDG)

    )

  )

LISTENER =

  (DESCRIPTION=

       (ADDRESS=(PROTOCOL=tcp)(HOST=mqserver02n)(PORT=1521))

  )

注意上面的配置中,SID爲實例名,GLOBAL_DBNAME爲unique名,serive_name隨便起(與主庫配置的tnsname一致)。然後啓動監聽服務並查看。

$ lsnrctl start
$ lsnrctl status

Service "T24APDBDG" has 1 instance(s).
  Instance "T24APDB", status UNKNOWN, has 1 handler(s) for this service...

如上unknown狀態的實例即爲靜態監聽註冊的實例。其中還有一個nomount狀態註冊的動態實例。

配置tnsname(vim tnsnames.ora)

T24APDBDG =

  (DESCRIPTION =

     (LOAD_BALANCE = OFF)(FAILOVER=ON)(CONNECT_TIMEOUT=3)(TRANSPORT_CONNECT_TIMEOUT=2)

           (ADDRESS = (PROTOCOL = TCP)(HOST = 55.14.17.100)(PORT = 1521))

    (CONNECT_DATA =

      (SERVER = DEDICATED)

      (SERVICE_NAME = T24APDBDG)

    )

  )

T24APDB =

  (DESCRIPTION =

     (LOAD_BALANCE = OFF)(FAILOVER=ON)(CONNECT_TIMEOUT=3)(TRANSPORT_CONNECT_TIMEOUT=2)

           (ADDRESS = (PROTOCOL = TCP)(HOST = 99.12.98.194)(PORT = 1521))

    (CONNECT_DATA =

      (SERVER = DEDICATED)

      (SERVICE_NAME = T24APDB)

    )

  )

測試主庫和備庫端tnsname配置是否正確

配置完主備的TNS後即可測試TNS聯繫連通性,主備都執行如下語句:

$tnsping T24APDB
$tnsping T24APDBDG

使用rman開啓duplicate創建備庫(主庫操作)

  • 在主庫上使用rman同時登錄主備庫,如下:
$ rman target SYS/SYSTEM@T24APDB auxiliary SYS/SYSTEM@T24APDBDG nocatalog

  • 執行duplicate創建備庫

run {

allocate auxiliary channel c1 device type disk;

allocate auxiliary channel c2 device type disk;

 

duplicate target database for standby nofilenamecheck dorecover;

release channel c1;

release channel c2;

}

報錯1:auxiliary file name /odata/datafile/SYSAUX0422.dbf conflicts with a file used by the target database

原因:目錄不對應,主庫這邊需要加文件轉換

解決方案:

     1. 將DG備庫shutdown並重新startup 稱nomount狀態;---因爲上面的操作中將備庫設置成了mount狀態;

     2. 主庫rman重新登錄兩個庫;

$ rman target SYS/SYSTEM@T24APDB auxiliary SYS/SYSTEM@T24APDBDG nocatalog

    3. 主庫RMAN執行如下duplicate,其中加了文件轉換。

run {

duplicate target database for standby from active database 

db_file_name_convert=('/odata/datafile','/data/T24APDBDG');

}

最後成功後如下:

此時備庫就獲得了主庫完全的數據文件拷貝,備庫處於mount狀態。備庫基本搭建完畢。

備庫啓動實時重做應用redo apply

SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT FROM SESSION;

執行完上述語句後,理論上主庫與備庫已經實時同步了,可以使用v$managed_standby查看備庫的狀態:

SQL> select process,status from v$managed_standby;

其中,MRP0處於APPLYING_LOG,即代表正常,此時可以查看備庫的角色和打開模式。

SYS@T24APDBDG> select database_role,open_mode from v$database;

 

DATABASE_ROLE    OPEN_MODE

---------------- --------------------

PHYSICAL STANDBY MOUNTED

將備庫設置爲只讀狀態(可選)

         從ORACLE 11g開始,支持備庫應用redo 日誌的同時處於redo only狀態。這樣可以方法進行數據讀操作。

SQL> recover managed standby database cancel

SQL> alter database open;

SQL> recover managed standby database using current logfile disconnect;

         說明:以上操作就是先取消日誌應用,再打開數據庫,最後啓用日誌應用。查詢數據庫的打開模式和角色如下圖所示--read only with apply。完畢

總結

         本文step-by-step詳細講述了ORACLE物理備庫的部署,除了rman的duplicate操作可能需要稍微注意一下,其他步驟應該不難。整個流程包含諸多知識點,如強制歸檔、歸檔模式、standby redo log、靜態監聽等等。讀者在部署過程中要仔細琢磨各個步驟的作用,才能做到少出錯或出錯後懂得如何着手解決。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章