盛哥學習 Data Guard 第二篇《物理standby準備和建立》

leonarding發表於2012-05-28

一、主庫準備

1.開啟force logging 模式

alter database force logging;

SYS@LEO> select open_mode,log_mode,force_logging,flashback_on from v$database;

OPEN_MODE  LOG_MODE     FOR FLASHBACK_ON

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

READ WRITE ARCHIVELOG      YES   NO

作用:不管什麼操作都會生成redo日誌

特點:1.在資料庫mount狀態和open狀態都可以啟動force logging模式

      2. alter database表示直接修改控制檔案內容,所以一次設定長期有效

      3.臨時表空間和臨時回滾段動作不會生成redo日誌

      4. alter database no force logging;  關閉force logging

2.建立密碼檔案 (如果沒有就先建立密碼檔案)

密碼檔案:記錄特權使用者的管理員資訊

注意事項:同一套Data Guard 中的所有資料庫的密碼檔案的密碼都必須一致,保證重做日誌正常傳輸。因為Data Guard 中資料庫通訊都是透過監聽來訪問密碼檔案來驗證管理員身份的。

orapwd  file=orapwLEO password=oracle  entries=30   建立密碼檔案語句

3.啟動archivelog模式

shutdown  immediate                            關閉資料庫

startup  mount                                  啟動到mount狀態

alter  database  archivelog;                       開啟歸檔模式

select  log_mode,force  logging  from v$database;   檢查修改狀態

alter  database  open ;                           開啟資料庫

col name for a40                                 設定name欄位寬為40個字元

select SEQUENCE#,name,ARCHIVED,APPLIED from v$archived_log;   檢查是否生效

SEQUENCE# NAME                                 ARC APP

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

         5 /home/oracle/arch/LEO/1_5_784052660.dbf  YES NO

         6 /home/oracle/arch/LEO/1_6_784052660.dbf  YES NO

         7 /home/oracle/arch/LEO/1_7_784052660.dbf  YES NO

【友情提示一下,常規歸檔日誌存放目錄設定方法,但物理standby有自己的設定方法】

注:alter system set log_archive_dest_1='location=/home/oracle/arch/LEO' scope=both; 設定歸檔日誌存放目錄

    select dest_name,destination,status,error from v$archive_dest; 查詢歸檔目錄設定資訊

4.建立standby logfile

作用:備庫角色時接收主庫redo日誌

語法: 建立standby logfile

ALTER DATABASE ADD STANDBY LOGFILE GROUP 4

('/u01/app/oracle/oradata/LEO/file1/redo4_1.rdo','/u01/app/oracle/oradata/LEO/file2/redo4_2.rdo') SIZE 100M;

ALTER DATABASE ADD STANDBY LOGFILE GROUP 5

('/u01/app/oracle/oradata/LEO/file1/redo5_1.rdo','/u01/app/oracle/oradata/LEO/file2/redo5_2.rdo') SIZE 100M;

ALTER DATABASE ADD STANDBY LOGFILE GROUP 6

('/u01/app/oracle/oradata/LEO/file1/redo6_1.rdo','/u01/app/oracle/oradata/LEO/file2/redo6_2.rdo') SIZE 100M;

ALTER DATABASE ADD STANDBY LOGFILE GROUP 7

('/u01/app/oracle/oradata/LEO/file1/redo7_1.rdo','/u01/app/oracle/oradata/LEO/file2/redo7_2.rdo') SIZE 100M;

檢查:

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

特點:

a.服務物件是備庫

b.standby logfileonline redolog 大小應一致,管理方便

c.如果是單例項資料庫那麼standby logfile online redolog 組的個數多一個

  如果是rac架構那麼standby logfile 組個數=rac節點數*online redolog 組個數+1

  目的:緩衝主庫傳過來的redo日誌

d.提示如果在邏輯standbystandby logfile 接收主庫的redo日誌->轉換sql語句重演變化-> 應用備庫,同時可以獨立操作寫入備庫online redolog,因為備庫可以在open狀態下接收日誌

e.刪除standby logfilealter database drop standby logfile group 4/5/6/7

5.備份pfile引數檔案

作用:當修改引數檔案失敗的時候可以使用備份重新設定,這種方法趨於便捷和快速

a. 生成最新pfile

SYS@LEO> create pfile from spfile;

File created.

b.複製一個副本

cp  initLEO.ora  initLEO.ora_bak

6.設定主庫初始化引數

引數說明:主庫有2部分引數,第1部分是原來已經有的,第2部分是新新增的(Data Guard專有引數)

a.檢視一下資料庫狀態

SYS@LEO> select status,instance_name from v$instance;

STATUS       INSTANCE_NAME

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

OPEN         LEO

b.新增新引數,有主庫角色的引數 and 備庫角色的引數

#primary database role initialization parameter      當為主庫角色使用的引數

DB_UNIQUE_NAME=LEO                        資料庫例項名,一經指定不能修改

LOG_ARCHIVE_CONFIG='DG_CONFIG=(LEO,OEL)'     羅列一個DG中所有資料庫例項名

LOG_ARCHIVE_DEST_1=                        

 'LOCATION=/home/oracle/arch/LEO               本地資料庫歸檔日誌存放目錄

  VALID_FOR=(ALL_LOGFILES,ALL_ROLES)

  DB_UNIQUE_NAME=LEO'                      指定本地資料庫例項

LOG_ARCHIVE_DEST_2= 

 'SERVICE=OEL LGWR ASYNC                      遠端資料庫接收日誌模式

  VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE)

  DB_UNIQUE_NAME=OEL'                       指定遠端資料庫例項

LOG_ARCHIVE_DEST_STATE_1=ENABLE              啟動傳輸redo日誌服務

LOG_ARCHIVE_DEST_STATE_2=ENABLE              啟動接收redo日誌服務

REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE         可以設定為EXCLUSIVE or SHARED

                                             主備庫sys密碼必須相同

LOG_ARCHIVE_FORMAT=%t_%s_%r.arc             歸檔日誌格式

注意:有三個引數沒寫
DB_NAME=LEO                            資料庫名字原來已經有了不用在新增了
LOG_ARCHIVE_MAX_PROCESSES=30       歸檔日誌最大程式數,最大30 預設4
CONTROL_FILES='/arch1/chicago/control1.ctl','/arch2/chicago/control2.ctl'                           控制檔案所在路徑

#standby database role initialization parameter          當為備庫角色使用的引數

FAL_SERVER=OEL       #fetch archive log_server  獲取歸檔日誌服務端,指主庫service_name

FAL_CLIENT=LEO        #fetch archive log_client  獲取歸檔日誌客戶端,指備庫service_name

DB_FILE_NAME_CONVERT='OEL','LEO'        主備庫資料檔案轉換對映目錄,只設定不同部分

LOG_FILE_NAME_CONVERT='OEL','LEO'       主備庫日誌檔案轉換對映目錄,只設定不同部分,如果你有多個目錄路徑那麼用逗號分隔對應多個

STANDBY_FILE_MANAGEMENT=AUTO         備庫是否根據主庫的動態變化而變化,例如當主庫檔案發生重新命名、新建等動作時,備庫自動做出相應修改

7.建立備庫控制檔案

特點:

a.在主庫中建立具有備庫屬性的控制檔案

b.建立完備庫控制檔案後主庫不能再有structure變化,否則主備庫同步不能成功

ALTER DATABASE CREATE STANDBY CONTROLFILE AS '/home/oracle/control01.ctl';

檢查:已經建立完成

drwxr-xr-x   3 oracle oinstall      4096 May 23 17:39 arch

drwxrwxrwx  25 oracle oinstall      4096 Jun  3  2010 B19306_01

-rwx------   1 oracle oinstall 465489785 May 17  2011 B19306_01.zip

drwxr-xr-x   3 oracle oinstall      4096 May 23 15:49 backup

-rw-r-----   1 oracle oinstall   7061504 May 26 05:31 control01.ctl

drwxr-xr-x   2 oracle oinstall      4096 May 17  2011 Desktop

drwxr-xr-x   2 oracle oinstall      4096 May 23 15:49 flash

drwxr-xr-x   2 oracle oinstall      4096 May 23 15:49 scripts

drwxr-xr-x   2 oracle oinstall      4096 May 23 15:49 temp

-rw-r--r--   1 oracle oinstall      2641 May 24 07:00 test.sql

8.建立備庫引數檔案

a.用引數檔案副本複製出一份備庫引數檔案

cp initLEO.ora_bak initOEL.ora

b. 新增備庫引數檔案新內容

#standby database set parameter

DB_UNIQUE_NAME=OEL                             資料庫例項名

LOG_ARCHIVE_CONFIG='DG_CONFIG=(LEO,OEL)'          羅列一個DG中所有資料庫例項名

DB_FILE_NAME_CONVERT='LEO','OEL'       主備庫資料檔案轉換對映目錄,只設定不同部分

LOG_FILE_NAME_CONVERT='LEO','OEL'      主備庫日誌檔案轉換對映目錄,只設定不同部分,如果你有多個目錄路徑那麼用逗號分隔對應多個

LOG_ARCHIVE_FORMAT=log%t_%s_%r.arc    歸檔日誌格式

LOG_ARCHIVE_DEST_1=

 'LOCATION=/home/oracle/arch/OEL          備庫接收主庫歸檔日誌存放目錄

  VALID_FOR=(ALL_LOGFILES,ALL_ROLES)

  DB_UNIQUE_NAME=OEL'

LOG_ARCHIVE_DEST_2=                     當變成主庫後傳輸給備庫LEO日誌模式

 'SERVICE=LEO LGWR ASYNC                

  VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE)

  DB_UNIQUE_NAME=LEO'

LOG_ARCHIVE_DEST_STATE_1=ENABLE         啟動接收redo日誌服務

LOG_ARCHIVE_DEST_STATE_2=ENABLE         啟動傳輸redo日誌服務

REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE     主備庫sys密碼必須相同

STANDBY_FILE_MANAGEMENT=AUTO          備庫是否根據主庫的動態變化而變化,例如當主庫檔案發生重新命名、新建等動作時,備庫自動做出相應修改

FAL_SERVER=LEO                            獲取歸檔日誌服務端,指主庫service_name

FAL_CLIENT=OEL                            獲取歸檔日誌客戶端,指備庫service_name

9.新增OELtnsnames.ora連線串

在主庫的/u01/app/oracle/product/10.2.0/db_1/network/admin/tnsnames.ora 檔案中新增

指向備庫的連線串

OEL=

 (DESCRIPTION=

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

   (CONNECT_DATA=

     (SERVER=dedicated)

     (SERVICE_NAME=OEL)

   )

 )

10.建立備庫所需目錄

mkdir -p $ORACLE_BASE/admin/OEL/adump

mkdir -p $ORACLE_BASE/admin/OEL/bdump

mkdir -p $ORACLE_BASE/admin/OEL/cdump

mkdir -p $ORACLE_BASE/admin/OEL/udump

mkdir -p arch/OEL

11.建立備庫5要素,這5要素要在備庫上存在

a.密碼檔案     /u01/app/oracle/product/10.2.0/db_1/dbs

orapwd  file=orapwOEL  password=oracle  entries=30

b.引數檔案     現在複製到備庫

scp initOEL.ora 192.168.61.102:/u01/app/oracle/product/10.2.0/db_1/dbs/

c.資料檔案     現在複製到備庫,複製之前要先shutdown資料庫

tar -zcvf LEO.tar.gz LEO

scp LEO.tar.gz 192.168.61.102:/u01/app/oracle/oradata/

在備庫/u01/app/oracle/oradata/目錄下解壓縮

tar -zxvf LEO.tar.gz

mv  LEO  OEL   重新命名

d.控制檔案     現在複製到備庫,覆蓋原來的老control檔案

scp /home/oracle/control01.ctl 192.168.61.102:/u01/app/oracle/oradata/OEL/file1/control01.ctl

scp /home/oracle/control01.ctl 192.168.61.102:/u01/app/oracle/oradata/OEL/file2/control02.ctl

scp /home/oracle/control01.ctl 192.168.61.102:/u01/app/oracle/oradata/OEL/file3/control03.ctl

e.監聽         現在複製到備庫

scp  tnsnames.ora 192.168.61.102:/u01/app/oracle/product/10.2.0/db_1/network/admin/

scp  listener.ora 192.168.61.102:/u01/app/oracle/product/10.2.0/db_1/network/admin/

修改listener.ora內容

      (ADDRESS=(PROTOCOL=tcp)(HOST=192.168.61.102)(PORT=1521))  IP設定成本地

12.啟動備庫OEL

注意:

1.startup mount 是可以接收主庫redo日誌,但不能對外提供服務(常用)

2.startup open read only 不可以接收主庫redo日誌,但能對外提供服務(常用)

3.startup open   不可以接收主庫redo日誌,失去資料保護功能,開打閃回,閃回到初始狀態,DG自動同步,不需要重建備庫(不常用)

4.設定備庫sqlplus提示符樣子

vim  /u01/app/oracle/product/10.2.0/db_1/sqlplus/admin/glogin.sql          在最後新增一行

set sqlprompt "_user'@'_connect_identifier> "

現在我們啟動備庫到mount狀態

13.啟動備庫監聽

lsnrctl start listener

LSNRCTL for Linux: Version 10.2.0.1.0 - Production on 28-MAY-2012 19:13:09

Copyright (c) 1991, 2005, Oracle.  All rights reserved.

Starting /u01/app/oracle/product/10.2.0/db_1/bin/tnslsnr: please wait...

TNSLSNR for Linux: Version 10.2.0.1.0 - Production

System parameter file is /u01/app/oracle/product/10.2.0/db_1/network/admin/listener.ora

Log messages written to /u01/app/oracle/product/10.2.0/db_1/network/log/listener.log

Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.61.102)(PORT=1521)))

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.61.102)(PORT=1521)))

STATUS of the LISTENER

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

Alias                     LISTENER

Version                   TNSLSNR for Linux: Version 10.2.0.1.0 - Production

Start Date                 28-MAY-2012 19:13:09

Uptime                    0 days 0 hr. 0 min. 1 sec

Trace Level                off

Security                   ON: Local OS Authentication

SNMP                     OFF

Listener Parameter File   /u01/app/oracle/product/10.2.0/db_1/network/admin/listener.ora

Listener Log File         /u01/app/oracle/product/10.2.0/db_1/network/log/listener.log

Listening Endpoints Summary...

  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.61.102)(PORT=1521)))

The listener supports no services

The command completed successfully

啟動到mount狀態

startup mount

啟動redo日誌應用恢復備庫

alter database recover managed standby database disconnect from session parallel 2;

disconnect from session把這個session提交到後臺執行,相當於no hup 後臺恢復備庫

如果沒有這個關鍵詞:這個session一直處理redo日誌應用,不會顯示Database altered.結果,不會返回到命令運算子介面,如果還想作其他操作,需要重新開啟一個session

parallel 2:啟動2MRP程式恢復備庫

14.啟動主庫LEO

生成spfile

create spfile from pfile;

啟動open狀態

startup

注意檢視 tail  -f  alert_LEO.log  告警日誌,看看是否給備庫傳送redo日誌

備庫

RFS程式接收主庫傳過來的redo日誌儲存在standby log file

物理standby透過redo應用

邏輯standby透過sql應用

啟動 real time 模式(實時應用)

alter database recover managed standby database using current logfile disconnect from session

using current logfile:直接獲取standby log file內容應用

不加 using current logfile:直接獲取歸檔日誌內容應用,預設不加

RFS[2]: Archived Log: '/home/oracle/arch/OEL/log1_5_784052660.arc'

RFS[2]: Archived Log: '/home/oracle/arch/OEL/log1_6_784052660.arc'

RFS[2]: Archived Log: '/home/oracle/arch/OEL/log1_7_784052660.arc'

15.測試備庫歸檔能力

ALTER SYSTEM SWITCH LOGFILE;

主庫和備庫2邊的日誌都同步了才行

16.檢查歸檔日誌

檢查歸檔日誌是否在2邊都同步應用了

SELECT SEQUENCE#, FIRST_TIME, NEXT_TIME  FROM V$ARCHIVED_LOG ORDER BY SEQUENCE#;

主庫

SEQUENCE# FIRST_TIM NEXT_TIME

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

         5 23-MAY-12 23-MAY-12

         5 23-MAY-12 23-MAY-12

         6 23-MAY-12 23-MAY-12

         6 23-MAY-12 23-MAY-12

         7 23-MAY-12 23-MAY-12

         7 23-MAY-12 23-MAY-12

         8 23-MAY-12 28-MAY-12

         8 23-MAY-12 28-MAY-12

         9 28-MAY-12 28-MAY-12

         9 28-MAY-12 28-MAY-12

        10 28-MAY-12 28-MAY-12

 

 SEQUENCE# FIRST_TIM NEXT_TIME

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

        10 28-MAY-12 28-MAY-12

備庫

SEQUENCE# FIRST_TIM NEXT_TIME

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

         5 23-MAY-12 23-MAY-12

         6 23-MAY-12 23-MAY-12

         7 23-MAY-12 23-MAY-12

         8 23-MAY-12 28-MAY-12

         9 28-MAY-12 28-MAY-12

        10 28-MAY-12 28-MAY-12

好這時我們可以看出歸檔日誌在2邊同步了

ALTER SYSTEM SWITCH LOGFILE; 在歸檔一次,檢查新redo日誌是否在備庫同步

主庫

SELECT SEQUENCE#, FIRST_TIME, NEXT_TIME  FROM V$ARCHIVED_LOG ORDER BY SEQUENCE#;

SEQUENCE# FIRST_TIM NEXT_TIME

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

10 28-MAY-12 28-MAY-12

        10 28-MAY-12 28-MAY-12

        11 28-MAY-12 28-MAY-12

        11 28-MAY-12 28-MAY-12

備庫

SELECT SEQUENCE#, FIRST_TIME, NEXT_TIME  FROM V$ARCHIVED_LOG ORDER BY SEQUENCE#;

SEQUENCE# FIRST_TIM NEXT_TIME

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

        10 28-MAY-12 28-MAY-12

        11 28-MAY-12 28-MAY-12

好這時我們可以看出新redo日誌已經在2邊同步了

檢查新歸檔是否在備庫應用了

SELECT SEQUENCE#,APPLIED FROM V$ARCHIVED_LOG ORDER BY SEQUENCE#;

 SEQUENCE# APP

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

         5 NO

         6 NO

         7 NO

         8 YES

         9 YES

        10 YES

        11 YES

好這時我們可以看出新歸檔已經在備庫應用了

17.啟動備庫read only狀態

Read only狀態:資料庫只讀狀態,這時備庫不能應用日誌,但可以接收日誌。

取消備庫日誌應用

Alter database recover managed standby database cancel;

Background Media Recovery process shutdown (OEL)       後臺介質恢復程式關閉

Standby Recovery Canceled (OEL)                       備庫恢復取消

啟動到alter database open read only;

SYS@OEL> alter database open read only;

Database altered.

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

DATABASE_ROLE    SWITCHOVER_STATUS    OPEN_MODE

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

PHYSICAL STANDBY   NOT ALLOWED         READ ONLY   只讀狀態

主庫狀態

elect database_role,switchover_status,open_mode from v$database;

DATABASE_ROLE    SWITCHOVER_STATUS    OPEN_MODE

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

PRIMARY          TO STANDBY            READ WRITE

 

小結:建立physical standby database 首先要做好5要素準備,現在啟動備庫在啟動主庫,因為主庫啟動後會刺探一次備庫如果此時備庫沒有啟動那麼就要等好長時間在迴圈刺探,注意備庫mount狀態時候能應用日誌,open read only 狀態不能應用日誌只能接收日誌,實時注意2邊日誌要同步應用,一般物理備庫在是在mount狀態下,只有需要備庫提供一些服務支援的時候會設定成open read only狀態

 

 

Leonarding

2012.5.28

於天津&summer

Bloghttp://space.itpub.net/26686207

 

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

相關文章