Oracle-11G-DataGuard 一主庫多備庫詳細配置

1  說明

基於網上的文檔做了補充說明改動形成的文檔。

2 判斷DataGuard是否安裝

select * from v$option where parameter = 'Oracle Data Guard';

3 網絡配置

192.168.1.110---------------------------主庫-------------實例名----ora11g(ora11g_PD)

192.168.1.111---------------------------備庫-------------實例名----ora11g(ora11g_ST)

192.168.1.112---------------------------備庫-------------實例名----ora11g(ora11g_SD)

4 監聽配置

主庫

[oracle@node1~]$ cd    /ora11g/oracle/product/11.2.0/db_1/network/admin

[oracle@node1]$ cat  listener.ora

 

# listener.ora Network Configuration File:/ora11g/oracle/product/11.2.0/db_1/network/admin/listener.ora

# Generated by Oracle configuration tools.

 

LISTENER =

  (DESCRIPTION_LIST =

    (DESCRIPTION =

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

      (ADDRESS = (PROTOCOL = IPC)(KEY= EXTPROC1521))

    )

  )

 

ADR_BASE_LISTENER = /ora11g/oracle

SID_LIST_LISTENER =

  (SID_LIST =

    (SID_DESC =

      (GLOBAL_DBNAME = ora11g)

         (ORACLE_HOME =/ora11g/oracle/product/11.2.0/db_1)

          (SID_NAME = ora11g)

   )

 )

[oracle@node1]$  cat   tnsnames.ora

# tnsnames.ora Network Configuration File:/ora11g/oracle/product/11.2.0/db_1/network/admin/tnsnames.ora

# Generated by Oracle configuration tools.

 

ORA11G_PD =

  (DESCRIPTION =

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

    (CONNECT_DATA =

      (SERVER = DEDICATED)

      (SERVICE_NAME = ora11g)

    )

  )

 

 

ORA11G_ST =

  (DESCRIPTION =

    (ADDRESS_LIST =

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

    )

    (CONNECT_DATA =

      (SERVICE_NAME = ora11g)

    )

  )

 

ORA11G_SD =

  (DESCRIPTION =

    (ADDRESS_LIST =

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

    )

    (CONNECT_DATA =

      (SERVICE_NAME = ora11g)

    )

  )

 

備庫1

[oracle@node2]$ cat  listener.ora

 

 

LISTENER =

  (DESCRIPTION_LIST =

    (DESCRIPTION =

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

      (ADDRESS = (PROTOCOL = IPC)(KEY= EXTPROC1521))

    )

  )

 

ADR_BASE_LISTENER = /ora11g/oracle

 

SID_LIST_LISTENER =

 (SID_LIST =

 (SID_DESC =

 (GLOBAL_DBNAME = ora11g)

 (ORACLE_HOME = /ora11g/oracle/product/11.2.0/db_1)

 (SID_NAME = ora11g)

 )

 )

[oracle@node2]$  cat   tnsnames.ora

 

ORA11G_PD =

  (DESCRIPTION =

    (ADDRESS_LIST =

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

    )

    (CONNECT_DATA =

      (SERVICE_NAME = ora11g)

    )

  )

 

ORA11G_ST =

  (DESCRIPTION =

    (ADDRESS_LIST =

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

    )

    (CONNECT_DATA =

      (SERVICE_NAME = ora11g)

    )

  )

 

ORA11G_SD =

  (DESCRIPTION =

    (ADDRESS_LIST =

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

    )

    (CONNECT_DATA =

      (SERVICE_NAME = ora11g)

    )

  )

 

備庫2

[oracle@node3]$ cat  listener.ora

 

 

LISTENER =

  (DESCRIPTION_LIST =

    (DESCRIPTION =

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

      (ADDRESS = (PROTOCOL = IPC)(KEY= EXTPROC1521))

    )

  )

 

ADR_BASE_LISTENER = /ora11g/oracle

 

SID_LIST_LISTENER =

 (SID_LIST =

 (SID_DESC =

 (GLOBAL_DBNAME = ora11g)

 (ORACLE_HOME = /ora11g/oracle/product/11.2.0/db_1)

 (SID_NAME = ora11g)

 )

 )

[oracle@node3]$  cat   tnsnames.ora

 

ORA11G_PD =

  (DESCRIPTION =

    (ADDRESS_LIST =

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

    )

    (CONNECT_DATA =

      (SERVICE_NAME = ora11g)

    )

  )

 

ORA11G_ST =

  (DESCRIPTION =

    (ADDRESS_LIST =

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

    )

    (CONNECT_DATA =

      (SERVICE_NAME = ora11g)

    )

  )

 

ORA11G_SD =

  (DESCRIPTION =

    (ADDRESS_LIST =

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

    )

    (CONNECT_DATA =

      (SERVICE_NAME = ora11g)

    )

  )

 

 

 

5 主庫前期準備

設置強制寫日誌

SQL>  select  FORCE_LOGGING  from  v$database;

NO

SQL> alter  database  force  logging;

SQL> select  FORCE_LOGGING  from  v$database;

YES           

6 創建口令文件

orapwd  file=$ORACLE_HOME/dbs/orapwora11g password=test  entries=5

7 修改主庫初始化參數 

 創建主庫pfile

 sql > create  pfile   from  spfile;

修改pfile

DB_UNIQUE_NAME='ORA11G_PD'

LOG_ARCHIVE_CONFIG='DG_CONFIG=(ORA11G_PD,ORA11G_ST,ORA11G_SD)'

LOG_ARCHIVE_DEST_1= 'LOCATION=/ora11g/oracle/archiveVALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=ORA11G_PD'

LOG_ARCHIVE_DEST_2= 'SERVICE=ORA11G_ST  LGWR SYNCVALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=ORA11G_ST'

LOG_ARCHIVE_DEST_3= 'SERVICE=ORA11G_SD  LGWR SYNCVALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=ORA11G_SD'

LOG_ARCHIVE_DEST_STATE_1=ENABLE

LOG_ARCHIVE_DEST_STATE_2=ENABLE

LOG_ARCHIVE_DEST_STATE_3=ENABLE

LOG_ARCHIVE_FORMAT=%t_%s_%r.arc

FAL_SERVER='ora11g_st,ora11g_sd'

FAL_CLIENT='ora11g_pd'

STANDBY_FILE_MANAGEMENT=AUTO

Pfile 拷貝到備庫1、2上

[node1]$scp -rp /ora11g/oracle/product/11.2.0/db_1/dbs/initorcl.oranode2:/ora11g/oracle/product/11.2.0/db_1/dbs/

[node1]$scp -rp /ora11g/oracle/product/11.2.0/db_1/dbs/initorcl.oranode2:/ora11g/oracle/product/11.2.0/db_1/dbs/

 

8 修改數據庫運行在歸檔模式下

SHUTDOWN  IMMEDIATE;

STARTUP  MOUNT;

ALTER  DATABASE  ARCHIVELOG;

ALTER  DATABASE OPEN;

9 創建備份庫需要的控制文件

創建控制文件

Shutdown immediate

STARTUP  MOUNT;

ALTER  DATABASE  CREATE  STANDBY  CONTROLFILE  AS  '/ora11g/oracle/ora11g01.ctl';

ALTER  DATABASE OPEN;

創建主庫spfile

Shutdown immediate

startuppfile='/ora11g/oracle/oracle/product/11.2.0/db_1/dbs/initora11g.ora'

sql>create spfile from  pfile='/ora11g/oracle/product/11.2.0/db_1/dbs/initora11g.ora'

;

(先把原來的幹掉)

shutdown immediate;

startup

 

10 備份生產數據庫

 scp -rp /ora11g/oracle/oradata/ORA11G node2:/u01/oradata/

scp -rp /ora11g/oracle/admin/ORA11G  node2:/ora11g/oracle/admin(記得在備庫1、2創建admin)

11 修改備庫1的pfile

 

DB_UNIQUE_NAME='ORA11G_ST'

LOG_ARCHIVE_CONFIG='DG_CONFIG=(ORA11G_PD,ORA11G_ST)'

LOG_ARCHIVE_DEST_1= 'LOCATION=/ora11g/oracle/archiveVALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=ORA11G_ST'

LOG_ARCHIVE_DEST_2= 'SERVICE=ORA11G_PD LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE)DB_UNIQUE_NAME=ORA11G_PD'

LOG_ARCHIVE_DEST_STATE_1=ENABLE

LOG_ARCHIVE_DEST_STATE_2=ENABLE

LOG_ARCHIVE_FORMAT=%t_%s_%r.arc

FAL_SERVER=ORA11G_PD

FAL_CLIENT=ORA11G_ST

STANDBY_FILE_MANAGEMENT=AUTO

 

12 修改備庫2的pfile

DB_UNIQUE_NAME='ORA11G_SD'

LOG_ARCHIVE_CONFIG='DG_CONFIG=(ORA11G_PD,ORA11G_SD)'

LOG_ARCHIVE_DEST_1= 'LOCATION=/ora11g/oracle/archiveVALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=ORA11G_SD'

LOG_ARCHIVE_DEST_2= 'SERVICE=ORA11G_PD LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE)DB_UNIQUE_NAME=ORA11G_PD'

LOG_ARCHIVE_DEST_STATE_1=ENABLE

LOG_ARCHIVE_DEST_STATE_2=ENABLE

LOG_ARCHIVE_FORMAT=%t_%s_%r.arc

FAL_SERVER=ORA11G_PD

FAL_CLIENT=ORA11G_SD

STANDBY_FILE_MANAGEMENT=AUTO

13 將控制文件拷貝到備庫1、2

[node1]$scp -rp /ora11g/oracle/ora11g01.ctlnode2:/ora11g/oracle/oradata/ORA11G/

[node1]$scp -rp /ora11g/oracle/ora11g01.ctlnode2:/ora11g/oracle/fast_recovery_area/orcl/controlfile/

 

[node1]$scp –rp  /ora11g/oracle/ora11g01.ctl node3:/ora11g/oracle/oradata/ORA11G/

[node1]$scp -rp /ora11g/oracle/ora11g01.ctlnode3:/ora11g/oracle/fast_recovery_area/orcl/controlfile/

 

14 在備庫1、2上創建口令文件

orapwd  file=$ORACLE_HOME/dbs/orapwora11g password=oracle entries=5

15 在備庫1、2上創建spfile 

SQL>Shutdown immediate;

SQL>startup;

SQL>pfile='/ora11g/oracle/oracle/product/11.2.0/db_1/dbs/initora11g.ora';

SQL>CREATE  SPFILE  FROM  PFILE;

16 啓動物理備用數據庫1、2

STARTUPMOUNT;

17 配置Standby Redo Log

在主備庫兩邊都配置standby  redo log

在主庫查看日誌組的數量和每個日誌文件的大小

SQL> SELECT GROUP#, BYTES FROM V$LOG;

在備庫庫查看日誌組的數量和每個日誌文件的大小

SQL> SELECT GROUP#, BYTES FROM V$STANDBY_LOG;

創建日誌組和redo log文件

SQL> alter database add standby logfile

   group 4 ('/ora11g/oracle/oracle/oradata/highfly/stdby_redo04.log') size50m,

   group 5  ('/ora11g/oracle/oracle/oradata/highfly/stdby_redo05.log')size 50m,

   group 6  ('/ora11g/oracle/oracle/oradata/highfly/stdby_redo06.log')size 50m,

   group 7 ('/ora11g/oracle/oracle/oradata/highfly/stdby_redo07.log') size50m;

18 Start Redo Apply

在備庫

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

SQL>ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;

SQL>alter user scott account lock;

查看哪些歸檔日誌被APPLY了

在備庫

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

在主庫強制日誌切換到當前的online redo log file.

SQL>ALTER  SYSTEM  ARCHIVE  LOG  CURRENT;

在備庫查看新的被歸檔的redo data

SQL>SELECT SEQUENCE#, FIRST_TIME, NEXT_TIME FROMV$ARCHIVED_LOG ORDER BY SEQUENCE#;

在備庫查看接收到的被應用的redo

SQL> SELECT SEQUENCE#,APPLIED FROM V$ARCHIVED_LOG ORDER BYSEQUENCE#;

查看數據庫的角色

SQL>select database_role,protection_mode,protection_levelfrom v$database;

19 主備庫切換

 

1.查看主庫的狀態

SQL> SELECTSWITCHOVER_STATUS FROM V$DATABASE;

2.將主庫切換至備用模式

 

SQL> ALTERDATABASE COMMIT TO SWITCHOVER TO PHYSICAL STANDBY WITH -

> SESSION SHUTDOWN;

 

3.關閉、裝載主數據庫

SQL> SHUTDOWNABORT;

SQL> STARTUP MOUNT;

4.查看備庫準備向主庫模式切換

SQL> SELECT SWITCHOVER_STATUS FROM V$DATABASE;

SWITCHOVER_STATUS

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

TO_PRIMARY

1 row selected

5.切換備庫至主庫模式

SQL> ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY WITH SESSIONSHUTDOWN;

 

6.打開新的主數據庫

 

SQL> ALTER DATABASEOPEN;

 

7. 在新的備庫服務器上啓動 REDO apply。

 SQL> ALTER DATABASE RECOVER MANAGED STANDBYDATABASE USING CURRENT LOGFILE -

> DISCONNECT FROMSESSION;

 

20 災難恢復(failover)

 

Step 1

Flushany unsent redo from the primary database to the target standby

database

 

SQL> ALTER SYSTEMFLUSH REDO TO target_db_name;

 

Step 2

 Verify that the standby database has the mostrecently archived redo log

filefor each primary database redo thread.

 

SQL>SELECT UNIQUE THREAD# AS THREAD, MAX(SEQUENCE#) -

> OVER (PARTITION BYthread#) AS LAST from V$ARCHIVED_LOG;

 

SQL> ALTER DATABASEREGISTER PHYSICAL LOGFILE 'filespec1';

 

Step 3

Identifyand resolve any archived redo log gaps.

 

SQL> SELECT THREAD#,LOW_SEQUENCE#, HIGH_SEQUENCE# FROM V$ARCHIVE_GAP;

 

SQL> ALTER DATABASEREGISTER PHYSICAL LOGFILE 'filespec1';

 

Step 4

RepeatStep 3 until all gaps are resolved.

 

Step 5

StopRedo Apply.

Issuethe following SQL statement on the target standby database:

SQL> ALTER DATABASERECOVER MANAGED STANDBY DATABASE CANCEL;

 

Step 6

Finishapplying all received redo data.

Issuethe following SQL statement on the target standby database:

SQL> ALTER DATABASERECOVER MANAGED STANDBY DATABASE FINISH;

 

Step 7

Verifythat the target standby database is ready to become a primary

database.

 

Step 8

Switchthe physical standby database to the primary role.

Issuethe following SQL statement on the target standby database:

SQL> ALTER DATABASECOMMIT TO SWITCHOVER TO PRIMARY WITH SESSION SHUTDOWN;

 

Step 9

Openthe new primary database.

SQL> ALTER DATABASEOPEN;

 

Step10

Backup the new primary database.

Oracle recommendsthat a full backup be taken of the new primary database.

 

Step11

RestartRedo Apply if it has stopped at any of the other physical standby

databasesin your Data Guard configuration.

Forexample:

SQL> ALTERDATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE -

> DISCONNECT FROMSESSION;

附:

1. 啓動到管理模式

SQL>shutdown immediate;

SQL>startup nomount;

SQL>alter database mount standby database;

SQL>alter database recover managed standbydatabase disconnect from session;

2.啓動到只讀方式

SQL>shutdown immediate;

SQL>startup nomount;

SQL>alter database mount standby database;

SQL>alter database open read only;

3如果在管理恢復模式下到只讀模式

SQL> recover managed standby database cancel;

SQL> alter database open read only;

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