【DataGuard】同一臺主機部署Oracle 11g物理Active Data Guard詳細過程

secooler發表於2012-03-15
  本文記錄了在一臺主機上實現部署Oracle 11g物理Active Data Guard的全過程,部署完畢後備庫處於預設的最大效能模式。
  作業系統版本資訊:
ora11g@secdb /home/oracle$ cat /etc/redhat-release
Red Hat Enterprise Linux Server release 5.5 (Tikanga)
  Oracle資料庫版本資訊:
sys@ora11g> select * from v$version;

BANNER
----------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
PL/SQL Release 11.2.0.1.0 - Production
CORE    11.2.0.1.0      Production
TNS for Linux: Version 11.2.0.1.0 - Production
NLSRTL Version 11.2.0.1.0 - Production

1.Oracle 11g Data Guard主庫配置過程
1)確保主庫處於FORCE LOGGING模式
  調整方法如下:
(1)檢視當前資料庫是否處於FORCE LOGGING模式
sys@ora11g> col force_logging for a15
sys@ora11g> select force_logging from v$database;

FORCE_LOGGING
---------------
NO

  此處表明資料庫執行在非FORCE LOGGING模式。

(2)調整資料庫為FORCE LOGGING模式
sys@ora11g> alter database force logging;

Database altered.

(3)再次檢視當前資料庫是否處於FORCE LOGGING模式
sys@ora11g> select force_logging from v$database;

FORCE_LOGGING
---------------
YES

  OK,FORCE LOGGING模式調整完畢。

2)配置Redo傳輸認證
  Data Guard使用Oracle Net會話在主庫和備庫之間傳輸redo資料和控制資訊,因此需要基於SSL(Secure Sockets Layer )或者密碼檔案進行認證。當SSL認證無法滿足時使用密碼檔案進行認證,因此需要確保所有備庫的密碼檔案與主庫保持一致。備庫可以透過複製主庫密碼檔案的方法完成。

3)配置主庫用於接收Redo資料
  此步驟是可選步驟,Oracle建議在配置主庫的時候就預見到總有一天它會成為備庫(例如進行主備庫之間的switchover切換),要求當主庫成為備庫之後不需要做其他配置就可以順暢地接收主庫傳過來的Redo資料。這也是Oracle最佳實踐的一種體現。
(1)檢視日誌組日誌成員大小
  建立的Standby Redo Log大小要與主庫的Redo大小保持一致。
sys@ora11g> select group#, bytes from v$log;

    GROUP#      BYTES
---------- ----------
         1   52428800
         2   52428800
         3   52428800

  此時主庫每組日誌的日誌成員大小都是50M。因此建立的Standby Redo Log大小也是50M。

(2)建立適當數量的Standby Redo Log組數
  公式如下:
  如果主庫是單例項資料庫:Standby Redo Log組數=主庫日誌組總數+1
  如果住口是RAC資料庫:Standby Redo Log組數=(所有節點中日誌組數最大值 + 1) * RAC節點數

  從上面日誌組查詢結果可見,此資料庫是一個單例項的資料庫,包含三組日誌。因此Standby Redo Log組數=3+1=4。
  需要建立四組Standby Redo Log日誌。

(3)確認資料庫引數MAXLOGFILES和MAXLOGMEMBERS不會限制Standby Redo Log建立
  MAXLOGFILES和MAXLOGMEMBERS這兩引數是在使用“CREATE DATABASE”語句建立資料庫時做的限制,用於限制資料庫日誌檔案的最大數量和日誌組的最大數量。
  如果在建立資料庫時沒有注意這個問題會導致Standby Redo Log無法建立的問題,解決方法只能是創新建立主庫或者重新建立主庫的控制檔案。所以,一定要做好前期的規劃。

(4)建立Standby Redo Log
sys@ora11g> alter database add standby logfile ('/u01/app/oracle/oradata/ora11g/stdb_redo01.log') size 50m;

Database altered.

sys@ora11g> alter database add standby logfile ('/u01/app/oracle/oradata/ora11g/stdb_redo02.log') size 50m;

Database altered.

sys@ora11g> alter database add standby logfile ('/u01/app/oracle/oradata/ora11g/stdb_redo03.log') size 50m;

Database altered.

sys@ora11g> alter database add standby logfile ('/u01/app/oracle/oradata/ora11g/stdb_redo04.log') size 50m;

Database altered.

(5)驗證檢視Standby Redo Log建立結果
sys@ora11g> select group#,thread#,sequence#,archived,status from v$standby_log;

    GROUP#    THREAD#  SEQUENCE# ARC STATUS
---------- ---------- ---------- --- ----------
         4          0          0 YES UNASSIGNED
         5          0          0 YES UNASSIGNED
         6          0          0 YES UNASSIGNED
         7          0          0 YES UNASSIGNED

4)設定主庫的引數檔案
  我這裡的主庫的例項名字是ora11g,備庫的例項名約定為ora11gdg。
  連線主庫的Oracle網路服務名是ora11g,備庫的網路服務名是ora11gdg。

(1)Oracle網路服務名配置資訊如下
ora11g@secdb /home/oracle$ vi $ORACLE_HOME/network/admin/tnsnames.ora
ORA11G =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = secdb)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = ora11g)
    )
  )

ORA11GDG =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = secdb)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = ora11gdg)
    )
  )

(2)生成主庫的pfile檔案並編輯
sys@ora11g> create pfile from spfile;

File created.

ora11g@secdb /home/oracle$ cd $ORACLE_HOME/dbs
ora11g@secdb /u01/app/oracle/product/11.2.0/db_1/dbs$ ls -ltr
total 36K
-rw-r--r-- 1 oracle oinstall 2.8K May 15  2009 init.ora
drwx------ 2 oracle oinstall 4.0K Mar 15 19:37 peshm_DBUA0_0/
drwx------ 2 oracle oinstall 4.0K Mar 15 19:40 peshm_ora11g_0/
-rw-rw---- 1 oracle oinstall 1.6K Mar 15 21:28 hc_DBUA0.dat
-rw-r----- 1 oracle oinstall   24 Mar 15 21:32 lkORA11G
-rw-rw---- 1 oracle oinstall 1.6K Mar 15 21:35 hc_ora11g.dat
-rw-r----- 1 oracle oinstall 1.5K Mar 15 21:35 orapwora11g
-rw-r----- 1 oracle oinstall 2.5K Mar 15 21:42 spfileora11g.ora
-rw-r--r-- 1 oracle oinstall  924 Mar 15 21:45 initora11g.ora
ora11g@secdb /oracle/ora11gR2/product/11.2.0/dbhome_1/dbs$ vi initora11g.ora

(3)主庫配置——當是主庫角色時需要的引數
DB_NAME=ora11g
DB_UNIQUE_NAME=ora11g
LOG_ARCHIVE_CONFIG='DG_CONFIG=(ora11g,ora11gdg)'
control_files='/u01/app/oracle/oradata/ora11g/control01.ctl','/u01/app/oracle/oradata/ora11g/control02.ctl'
LOG_ARCHIVE_DEST_1=
 'LOCATION=/home/oracle/arch/ora11g/
  VALID_FOR=(ALL_LOGFILES,ALL_ROLES)
  DB_UNIQUE_NAME=ora11g'
LOG_ARCHIVE_DEST_2=
 'SERVICE=ora11gdg ASYNC
  VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE)
  DB_UNIQUE_NAME=ora11gdg'
LOG_ARCHIVE_DEST_STATE_1=ENABLE
LOG_ARCHIVE_DEST_STATE_2=ENABLE
REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE
LOG_ARCHIVE_FORMAT=%t_%s_%r.arc

(4)主庫配置——當是備庫角色時需要的引數
FAL_CLIENT=ora11g
FAL_SERVER=ora11gdg
DB_FILE_NAME_CONVERT='ora11gdg','ora11g'
LOG_FILE_NAME_CONVERT='ora11gdg','ora11g'
STANDBY_FILE_MANAGEMENT=AUTO

(5)建立所需要的目錄
ora11g@secdb /home/oracle$ mkdir -p /home/oracle/arch/ora11g
ora11g@secdb /home/oracle$ mkdir -p /home/oracle/arch/ora11gdg

5)資料庫執行在歸檔模式
  如果資料庫為執行在歸檔模式下,按照如下步驟調整資料庫為歸檔模式。
(1)檢視是否為歸檔模式
sys@ora11g> archive log list;
Database log mode              No Archive Mode
Automatic archival             Disabled
Archive destination            USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence     4
Current log sequence           6

  結果顯示“Database log mode”內容“No Archive Mode”表明資料庫未執行在歸檔模式下。

(2)停止資料庫並啟動到mount狀態
sys@ora11g> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
sys@ora11g> startup mount;
ORACLE instance started.

Total System Global Area  535662592 bytes
Fixed Size                  1337720 bytes
Variable Size             402654856 bytes
Database Buffers          125829120 bytes
Redo Buffers                5840896 bytes
Database mounted.

(3)啟用歸檔
sys@ora11g> alter database archivelog;

Database altered.

(4)調整資料庫為open狀態
sys@ora11g> alter database open;

Database altered.

2.Oracle 11g Data Guard物理備庫建立過程
1)建立主庫資料檔案的備份
  最常用的方法是使用RMAN工具完成,這樣可以實現不停庫的部署;還可以使用冷備完成。
  因為這裡實現的是主庫和備庫都在一臺主機上,因此,這裡使用冷備的方式生成資料檔案的備份,並放到備庫對應的目錄下。
(1)關閉資料庫
sys@ora11g> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.

(2)主庫資料檔案的備份
ora11g@secdb /home/oracle$ cd /u01/app/oracle/oradata/ora11g/
ora11g@secdb /u01/app/oracle/oradata/ora11g$ ls -l
total 1.7G
-rw-r----- 1 oracle oinstall 9.4M Mar 15 21:47 control01.ctl
-rw-r----- 1 oracle oinstall 9.4M Mar 15 21:47 control02.ctl
-rw-r----- 1 oracle oinstall  51M Mar 15 21:46 redo01.log
-rw-r----- 1 oracle oinstall  51M Mar 15 21:46 redo02.log
-rw-r----- 1 oracle oinstall  51M Mar 15 21:47 redo03.log
-rw-r----- 1 oracle oinstall  51M Mar 15 21:46 stdb_redo01.log
-rw-r----- 1 oracle oinstall  51M Mar 15 21:46 stdb_redo02.log
-rw-r----- 1 oracle oinstall  51M Mar 15 21:46 stdb_redo03.log
-rw-r----- 1 oracle oinstall  51M Mar 15 21:46 stdb_redo04.log
-rw-r----- 1 oracle oinstall 501M Mar 15 21:47 sysaux01.dbf
-rw-r----- 1 oracle oinstall 681M Mar 15 21:47 system01.dbf
-rw-r----- 1 oracle oinstall  30M Mar 15 21:39 temp01.dbf
-rw-r----- 1 oracle oinstall  91M Mar 15 21:47 undotbs01.dbf
-rw-r----- 1 oracle oinstall 5.1M Mar 15 21:47 users01.dbf

  這裡使用tar方法生成資料檔案的備份tar包,當然可以使用其他方法來完成,比如直接把資料檔案複製到其他目錄下。
ora11g@secdb /u01/app/oracle/oradata/ora11g$ tar -cvf ora11g_cold_backup_datafiles.tar *.dbf
sysaux01.dbf
system01.dbf
temp01.dbf
undotbs01.dbf
users01.dbf
ora11g@secdb /u01/app/oracle/oradata/ora11g$ ls -l ora11g_cold_backup_datafiles.tar
-rw-r--r-- 1 oracle oinstall 1.3G Mar 15 21:48 ora11g_cold_backup_datafiles.tar

2)建立備庫的控制檔案
  此時資料庫處於關閉狀態。
(1)建立備庫ora11gdg控制檔案存放的目錄
ora11g@secdb /home/oracle$ mkdir -p /u01/app/oracle/oradata/ora11gdg

(2)生成主庫spfile,以便在重啟主庫時使主庫引數調整生效。
sys@ora11g@> create spfile from pfile;

File created.

(3)啟動主資料庫到mount狀態,建立備庫的控制檔案。
sys@ora11g@> startup mount;
ORACLE instance started.

Total System Global Area  313860096 bytes
Fixed Size                  1336232 bytes
Variable Size             239078488 bytes
Database Buffers           67108864 bytes
Redo Buffers                6336512 bytes
Database mounted.
sys@ora11g@> alter database create standby controlfile as '/u01/app/oracle/oradata/ora11gdg/control01.ctl';

Database altered.

  複製生成備庫的第二個控制檔案。
sys@ora11g@> ! cp /u01/app/oracle/oradata/ora11gdg/control01.ctl /u01/app/oracle/oradata/ora11gdg/control02.ctl

sys@ora11g@> alter database open;

Database altered.

  此時主庫已經處於Open狀態,可對外提供服務。

3)建立備庫引數檔案
  根據主庫的pfile檔案進行調整。調整後的內容如下。
(1)複製主庫引數檔案生成備庫pfile
ora11g@secdb /home/oracle$ cd $ORACLE_HOME/dbs
ora11g@secdb /oracle/ora11gR2/product/11.2.0/dbhome_1/dbs$ cp initora11g.ora initora11gdg.ora

(2)調整備庫pfile檔案內容
ora11g@secdb /oracle/ora11gR2/product/11.2.0/dbhome_1/dbs$ vi initora11gdg.ora

(3)備庫配置——當是備庫角色時需要的引數
DB_NAME=ora11g
DB_UNIQUE_NAME=ora11gdg
LOG_ARCHIVE_CONFIG='DG_CONFIG=(ora11g,ora11gdg)'
control_files='/u01/app/oracle/oradata/ora11gdg/control01.ctl','/u01/app/oracle/oradata/ora11gdg/control02.ctl'

FAL_CLIENT=ora11gdg
FAL_SERVER=ora11g
DB_FILE_NAME_CONVERT='ora11g','ora11gdg'
LOG_FILE_NAME_CONVERT='ora11g','ora11gdg'
STANDBY_FILE_MANAGEMENT=AUTO
LOG_ARCHIVE_FORMAT=%t_%s_%r.arc

(4)備庫配置——當是主庫角色時需要的引數
LOG_ARCHIVE_DEST_1=
 'LOCATION=/home/oracle/arch/ora11gdg/
  VALID_FOR=(ALL_LOGFILES,ALL_ROLES)
  DB_UNIQUE_NAME=ora11gdg'
LOG_ARCHIVE_DEST_2=
 'SERVICE=ora11g ASYNC
  VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE)
  DB_UNIQUE_NAME=ora11g'
LOG_ARCHIVE_DEST_STATE_1=ENABLE
LOG_ARCHIVE_DEST_STATE_2=ENABLE
REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE

  同時調整與路徑相關的錯誤引數內容。同時建立確實的路徑。
$ mkdir -p /u01/app/oracle/admin/ora11gdg/adump

4)複製備份檔案到備庫資料檔案存放目錄
  把備份的tar包移動到ora11gdg存放資料檔案目錄中,解tar包生成備庫的資料檔案。
ora11g@secdb /u01/app/oracle/product/11.2.0/db_1/dbs$ cd $ORACLE_BASE/oradata/ora11gdg
ora11g@secdb /u01/app/oracle/oradata/ora11gdg$ mv ../ora11g/ora11g_cold_backup_datafiles.tar .
ora11g@secdb /u01/app/oracle/oradata/ora11gdg$ tar -xvf ora11g_cold_backup_datafiles.tar
sysaux01.dbf
system01.dbf
temp01.dbf
undotbs01.dbf
users01.dbf
ora11g@secdb /u01/app/oracle/oradata/ora11gdg$ ls -l
total 2.6G
-rw-r----- 1 oracle oinstall 9.4M Mar 15 21:49 control01.ctl
-rw-r----- 1 oracle oinstall 9.4M Mar 15 21:49 control02.ctl
-rw-r--r-- 1 oracle oinstall 1.3G Mar 15 21:48 ora11g_cold_backup_datafiles.tar
-rw-r----- 1 oracle oinstall 501M Mar 15 21:47 sysaux01.dbf
-rw-r----- 1 oracle oinstall 681M Mar 15 21:47 system01.dbf
-rw-r----- 1 oracle oinstall  30M Mar 15 21:39 temp01.dbf
-rw-r----- 1 oracle oinstall  91M Mar 15 21:47 undotbs01.dbf
-rw-r----- 1 oracle oinstall 5.1M Mar 15 21:47 users01.dbf

5)備庫環境設定
(1)生成備庫的密碼檔案
由於是在一臺主機上部署Data Guard,因此這裡僅需複製主庫的密碼檔案生成備庫密碼檔案即可。
ora11g@secdb /u01/app/oracle/oradata/ora11gdg$ cd $ORACLE_HOME/dbs
ora11g@secdb /u01/app/oracle/product/11.2.0/db_1/dbs$ cp orapwora11g orapwora11gdg

(2)驗證網路服務名是否完整及正確
ora11g@secdb /home/oracle$ cat $ORACLE_HOME/network/admin/tnsnames.ora
ORA11G =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = secdb)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = ora11g)
    )
  )

ORA11GDG =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = secdb)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = ora11gdg)
    )
  )

(3)生成備庫spfile
ora11g@secdb /home/oracle$ export ORACLE_SID=ora11gdg
ora11gdg@secdb /home/oracle$ sqlplus / as sysdba

SQL*Plus: Release 11.2.0.1.0 Production on Thu Mar 15 21:56:31 2012

Copyright (c) 1982, 2009, Oracle.  All rights reserved.

Connected to an idle instance.

sys@ora11gdg@> create spfile from pfile;

File created.

6)啟動物理備庫
(1)啟動物理備庫
sys@ora11gdg@> startup mount;
ORACLE instance started.

Total System Global Area  313860096 bytes
Fixed Size                  1336232 bytes
Variable Size             209718360 bytes
Database Buffers           96468992 bytes
Redo Buffers                6336512 bytes
Database mounted.

(2)建立standby redo log file用於接收主庫傳過來的日誌
由於主庫已經提前建立好了4組standby redo log file,備庫會根據LOG_FILE_NAME_CONVERT引數轉換後自動建立與之對應的standby redo log file日誌組。因此此步驟可省略。

(3)備庫建立建立線上日誌
備庫會自動建立與主庫對應的Redo日誌組。因此此步驟可省略。

(4)啟動Redo Apply
sys@ora11gdg@> alter database recover managed standby database using current logfile disconnect from session;

Database altered.

7)驗證備庫處於正常執行中

(1)檢視已存在的歸檔日誌檔案
sys@ora11gdg@> select sequence#, first_time, next_time from v$archived_log order by sequence#;

 SEQUENCE# FIRST_TIME        NEXT_TIME
---------- ----------------- -----------------
         6 20120315 21:40:46 20120315 21:49:23
         7 20120315 21:49:23 20120315 21:49:26
         8 20120315 21:49:26 20120315 21:59:37

(2)主庫切換一次日誌
ora11gdg@secdb /home/oracle$ export ORACLE_SID=ora11g
ora11g@secdb /home/oracle$ sqlplus / as sysdba

SQL*Plus: Release 11.2.0.1.0 Production on Thu Mar 15 22:04:47 2012

Copyright (c) 1982, 2009, Oracle.  All rights reserved.


Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

sys@ora11g> alter system switch logfile;

System altered.

(3)驗證備庫是否收到歸檔日誌
ora11g@secdb /home/oracle$ export ORACLE_SID=ora11gdg
ora11gdg@secdb /home/oracle$ sqlplus / as sysdba

SQL*Plus: Release 11.2.0.1.0 Production on Thu Mar 15 22:05:12 2012

Copyright (c) 1982, 2009, Oracle.  All rights reserved.


Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

sys@ora11gdg@> select sequence#, first_time, next_time from v$archived_log order by sequence#;

 SEQUENCE# FIRST_TIME        NEXT_TIME
---------- ----------------- -----------------
         6 20120315 21:40:46 20120315 21:49:23
         7 20120315 21:49:23 20120315 21:49:26
         8 20120315 21:49:26 20120315 21:59:37
         9 20120315 21:59:37 20120315 22:04:51

(4)驗證接收到的Redo是否被應用到物理備庫
sys@ora11gdg@> select sequence#,applied from v$archived_log order by sequence#;

 SEQUENCE# APPLIED
---------- ---------
         6 YES
         7 YES
         8 YES
         9 YES

  Oracle 11g物理Data Guard到此建立完畢。

3.Oracle 11g Data Guard物理備庫建立完畢後續任務
1)建議根據具體應用需求調整資料保護模式級別。
  關於Dataguard三種保護模式內容請參見文章《【DataGuard】Oracle Dataguard三種保護模式特點總結》(http://space.itpub.net/519536/viewspace-573342)

2)建議開啟資料庫的閃回功能。

4.小結
  文章詳細記錄了在Oracle 11gR2環境上部署物理Data Guard的過程和注意事項,供大家參考。
  在部署或者管理Oracle 11g Data Guard環境時需要時刻清醒的認識到你操作的物件是主庫還是備庫,防止由於混亂導致潛在故障發生。

Good luck.

secooler
12.03.15

-- The End --

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/519536/viewspace-718710/,如需轉載,請註明出處,否則將追究法律責任。

相關文章