使用Data Guard Broker進行Data Guard物理備用庫配置(Oracle 19c)

jelephant發表於2019-08-15

1 、主伺服器配置

1.1 歸檔模式

檢查主資料庫是否處於歸檔日誌模式。

SELECT log_mode FROM v$database; 
LOG_MODE
------------
NOARCHIVELOG 
SQL>


如果是  NOARCHIVELOG 模式,則切換到 ARCHIVELOG 模式。

SHUTDOWN IMMEDIATE;
STARTUP MOUNT;
ALTER DATABASE ARCHIVELOG;
ALTER DATABASE OPEN;


透過發出以下命令啟用強制日誌記錄。

ALTER DATABASE FORCE LOGGING;
-- 確保至少存在一個日誌檔案。
ALTER SYSTEM SWITCH LOGFILE;


在主資料庫上建立備用重做日誌(在切換的情況下)。備用重做日誌應該至少和最大的聯機重做日誌一樣大,並且與聯機重做日誌相比,每個執行緒應該有一個額外的組。在我的例子中,必須在兩臺伺服器上建立以下備用重做日誌。

-- 如果使用Oracle Managed Files(OMF)。
ALTER DATABASE ADD STANDBY LOGFILE SIZE 50M;
ALTER DATABASE ADD STANDBY LOGFILE SIZE 50M;
ALTER DATABASE ADD STANDBY LOGFILE SIZE 50M;
ALTER DATABASE ADD STANDBY LOGFILE SIZE 50M;
-- 如果未使用Oracle Managed Files(OMF)。
ALTER DATABASE ADD STANDBY LOGFILE ('/u01/oradata/cdb1/standby_redo01.log') SIZE 50M;
ALTER DATABASE ADD STANDBY LOGFILE ('/u01/oradata/cdb1/standby_redo02.log') SIZE 50M;
ALTER DATABASE ADD STANDBY LOGFILE ('/u01/oradata/cdb1/standby_redo03.log') SIZE 50M;
ALTER DATABASE ADD STANDBY LOGFILE ('/u01/oradata/cdb1/standby_redo04.log') SIZE 50M;

如果您想使用閃回資料庫,請立即在主資料庫上啟用它,因此它也將在備用資料庫上啟用。它非常有用,你可以使用以下命令啟用閃回:

ALTER DATABASE FLASHBACK ON;


1.2 初始化引數

檢查  DB_NAME 和 DB_UNIQUE_NAME 引數的設定。在這種情況下,在主資料庫上都設定為 “cdb1”。

SQL> show parameter db_name
NAME                     TYPE    VALUE
------------------------------------ ----------- ------------------------------
db_name                  string  cdb1
SQL> show parameter db_unique_name
NAME                     TYPE    VALUE
------------------------------------ ----------- ------------------------------
db_unique_name               string  cdb1SQL>


備用資料庫的  DB_NAME 與主資料庫的 DB_NAME 相同,但它必須具有不同的DB_UNIQUE_NAME 值。對於此示例,備用資料庫的值為 “cdb1_stby”。

確保已設定  STANDBY_FILE_MANAGEMENT 引數。可以使用以下命令進行設定:

ALTER SYSTEM SET STANDBY_FILE_MANAGEMENT=AUTO;


1.3 服務配置

兩臺伺服器上的  “$ORACLE_HOME/network/admin/tnsnames.ora” 檔案中都需要主資料庫和備用資料庫的條目。您可以使用網路配置實用程式(netca)或手動建立這些。在本示例都使用以下條目。請注意在條目中使用 SID 而不是 SERVICE_NAME。這很重要,因為代理在關閉時需要連線到資料庫,因此服務將不存在。

cdb1 =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = ol7-19-dg1)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SID = cdb1)
    )
  )
 
cdb1_stby =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = ol7-19-dg2)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SID = cdb1)
    )
  )


主伺服器上的  “$ORACLE_HOME/network/admin/listener.ora” 檔案包含以下配置。


LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = ol7-19-dg1)(PORT = 1521))
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
    )
  )
 
SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (GLOBAL_DBNAME = cdb1_DGMGRL)
      (ORACLE_HOME = /u01/app/oracle/product/19.0.0/db_1)
      (SID_NAME = cdb1)
    )
  )
 
ADR_BASE_LISTENER = /u01/app/oracle

備用伺服器上的  “$ORACLE_HOME/network/admin/listener.ora” 檔案包含以下配置。由於代理在關閉時需要連線到資料庫,因此我們不能依賴於監聽器的自動註冊,因此資料庫的顯式條目。

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = ol7-19-dg2)(PORT = 1521))
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
    )
  )
 
SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (GLOBAL_DBNAME = cdb1_stby_DGMGRL)
      (ORACLE_HOME = /u01/app/oracle/product/19.0.0/db_1)
      (SID_NAME = cdb1)
    )
  )
 
ADR_BASE_LISTENER = /u01/app/oracle


完成  listener.ora 修改後,請使用以下命令在兩臺伺服器上重新啟動監聽器。

lsnrctl stop
lsnrctl start


2、備用伺服器配置

2.1 準備 DUPLICATE

為備用資料庫建立名為  “/tmp/initcdb1” 的引數檔案,內容如下:

*.db_name='cdb1'


在備用伺服器上建立必要的目錄。

mkdir -p /u01/app/oracle/oradata/cdb1/pdbseed
mkdir -p /u01/app/oracle/oradata/cdb1/pdb1
mkdir -p /u01/app/oracle/fast_recovery_area/cdb1
mkdir -p /u01/app/oracle/admin/cdb1/adump


建立密碼檔案, SYS密碼與主資料庫的密碼匹配。

$ orapwd file=/u01/app/oracle/product/19.0.0/db_1/dbs/orapwcdb1 password=Password1 entries=10


2.2 使用 DUPLICATE 建立備用

使用臨時  “init.ora” 檔案啟動備用伺服器上的輔助例項。

$ export ORACLE_SID=cdb1
$ sqlplus / as sysdba 
SQL> STARTUP NOMOUNT PFILE='/tmp/initcdb1_stby.ora';

連線到  RMAN,為 TARGET 和 AUXILIARY 例項指定完整的連線字串。請勿嘗試使用 OS 身份驗證。

$ rman TARGET sys/Password1@cdb1 AUXILIARY sys/Password1@cdb1_stby

現在發出以下  DUPLICATE 命令:

DUPLICATE TARGET DATABASE
  FOR STANDBY
  FROM ACTIVE DATABASE
  DORECOVER
  SPFILE
SET db_unique_name='cdb1_stby' COMMENT 'Is standby'
  NOFILENAMECHECK;


如果需要轉換檔案位置或更改任何初始化引數,可以在  DUPLICATE 期間使用 SET 命令執行此操作。如下所示:

DUPLICATE TARGET DATABASE
  FOR STANDBY
  FROM ACTIVE DATABASE
  DORECOVER
  SPFILE
SET db_unique_name='cdb1_stby' COMMENT 'Is standby'
SET db_file_name_convert='/original/directory/path1/','/new/directory/path1/','/original/directory/path2/','/new/directory/path2/'
SET log_file_name_convert='/original/directory/path1/','/new/directory/path1/','/original/directory/path2/','/new/directory/path2/'
SET job_queue_processes='0'
  NOFILENAMECHECK;


命令中各個項的簡要說明如下 :

·  FOR STANDBY:這告訴 DUPLICATE 命令將用於備用資料庫,因此它不會強制更改 DBID。

·  FROM ACTIVE DATABASE:DUPLICATE 將直接從源資料檔案建立,無需額外的備份步驟。

·  DORECOVER:DUPLICATE 將包括恢復步驟,使待機狀態達到當前時間點。

·  SPFILE:允許我們在從源伺服器複製 spfile 時重置它。

·  NOFILENAMECHECK:不檢查目標檔案位置。

以上命令完成後,我們就可以開始使用  Broker 了。

3、啟用 Broker

此時我們有一個主資料庫和一個備用資料庫,所以現在我們需要開始使用  Data Guard Broker 來管理它們。連線到兩個資料庫(主資料庫和備用資料庫)併發出以下命令:

ALTER SYSTEM SET dg_broker_start=true;

在主伺服器上,發出以下命令以向代理註冊主伺服器:

$ dgmgrl sys/Password1@cdb1
DGMGRL for Linux: Release 19.0.0.0.0 - Production on Tue Feb 26 22:39:33 2018
Version 19.2.0.0.0
 
Copyright (c) 1982, 2019, Oracle and/or its affiliates.  All rights reserved.
 
Welcome to DGMGRL, type "help" for information.
Connected as SYSDBA.
DGMGRL> CREATE CONFIGURATION my_dg_config AS PRIMARY DATABASE IS cdb1 CONNECT IDENTIFIER IS cdb1;
Configuration "my_dg_config" created with primary database "cdb1"
DGMGRL>


現在新增備用資料庫。

DGMGRL> ADD DATABASE cdb1_stby AS CONNECT IDENTIFIER IS cdb1_stby MAINTAINED AS PHYSICAL;
Database "cdb1_stby" added
DGMGRL>


現在我們啟用新配置。

DGMGRL> ENABLE CONFIGURATION;
Enabled.
DGMGRL>


以下命令顯示如何從  broker 檢查資料庫的配置和狀態:

DGMGRL> SHOW CONFIGURATION;
 
Configuration - my_dg_config
 
Protection Mode: MaxPerformance
Members:
cdb1      - Primary database
cdb1_stby - Physical standby database
 
Fast-Start Failover: DISABLED
 
Configuration Status:SUCCESS   (status updated 26 seconds ago)
 
DGMGRL> SHOW DATABASE cdb1;
 
Database - cdb1
 
Role:               PRIMARY
Intended State:     TRANSPORT-ON
Instance(s):
cdb1
 
Database Status:
SUCCESS
 
DGMGRL> SHOW DATABASE cdb1_stby;
 
Database - cdb1_stby
 
Role:               PHYSICAL STANDBY
Intended State:     APPLY-ON
Transport Lag:      0 seconds (computed 1 second ago)
Apply Lag:          0 seconds (computed 1 second ago)
Average Apply Rate: 5.00 KByte/s
Real Time Query:    OFF
Instance(s):
cdb1
 
Database Status:
SUCCESS
 
DGMGRL>



4、資料庫切換

資料庫可以是兩種互斥模式之一(主用或備用)。可以在執行時更改這些角色,而不會丟失資料或重置日誌。此過程稱為 “切換”,可以使用以下命令執行。連線到主資料庫(cdb1)並切換到備用資料庫(cdb1_stby)。

$ dgmgrl sys/Password1@cdb1
DGMGRL for Linux: Release 19.0.0.0.0 - Production on Tue Feb 26 22:39:33 2018Version 19.2.0.0.0
 
Copyright (c) 1982, 2019, Oracle and/or its affiliates.  All rights reserved.
 
Welcome to DGMGRL, type "help" for information.
Connected as SYSDBA.
DGMGRL> SWITCHOVER TO cdb1_stby;
Performing switchover NOW, please wait...
Operation requires a connection to instance "cdb1" on database "cdb1_stby"
Connecting to instance "cdb1"...
Connected as SYSDBA.
New primary database "cdb1_stby" is opening...
Operation requires start up of instance "cdb1" on database "cdb1"Starting instance "cdb1"...ORACLE instance started.Database mounted.Switchover succeeded, new primary is "cdb1_stby"
DGMGRL>


讓我們切換回原來的主資料庫。連線到新主伺服器( cdb1_stby)並切換到新的備用資料庫(cdb1)。


$ dgmgrl sys/Password1@cdb1_stby
DGMGRL for Linux: Release 19.0.0.0.0 - Production on Tue Feb 26 22:53:36 2018Version 19.2.0.0.0
 
Copyright (c) 1982, 2019, Oracle and/or its affiliates.  All rights reserved.
 
Welcome to DGMGRL, type "help" for information.
Connected as SYSDBA.
DGMGRL> SWITCHOVER TO cdb1;
Performing switchover NOW, please wait...
Operation requires a connection to instance "cdb1" on database "cdb1"
Connecting to instance "cdb1"...
Connected as SYSDBA.
New primary database "cdb1" is opening...
Operation requires start up of instance "cdb1" on database "cdb1_stby"Starting instance "cdb1"...ORACLE instance started.Database mounted.Switchover succeeded, new primary is "cdb1"
DGMGRL>

5、資料庫故障轉移

如果主資料庫不可用,則可以使用以下語句將備用資料庫啟用為主資料庫。連線到備用資料庫( cdb1_stby)並進行故障轉移。

$ dgmgrl sys/Password1@cdb1_stby
DGMGRL for Linux: Release 19.0.0.0.0 - Production on Tue Feb 26 22:53:36 2018Version 19.2.0.0.0
 
Copyright (c) 1982, 2019, Oracle and/or its affiliates.  All rights reserved.
 
Welcome to DGMGRL, type "help" for information.
Connected as SYSDBA.
DGMGRL> FAILOVER TO cdb1_stby;
Performing failover NOW, please wait...
Failover succeeded, new primary is "cdb1_stby"
DGMGRL>


由於備用資料庫現在是主資料庫,因此應立即進行資料庫備份。

現在可以將原始主資料庫配置為備用資料庫。如果在主資料庫上啟用了閃回資料庫,則可以使用以下命令相對輕鬆地完成此操作。

DGMGRL> REINSTATE DATABASE cdb1;
Reinstating database "cdb1", please wait...
Operation requires shut down of instance "cdb1" on database "cdb1"
Shutting down instance "cdb1"...
ORACLE instance shut down.
Operation requires start up of instance "cdb1" on database "cdb1"Starting instance "cdb1"...ORACLE instance started.Database mounted.
Continuing to reinstate database "cdb1" ...
Reinstatement of database "cdb1" succeeded
DGMGRL>


如果未啟用閃回資料庫,則必須手動將  cdb1 重新建立為備用資料庫。基本過程與您之前所做的相反。如下命令:

# 1) 清理舊例項。
sqlplus / as sysdba <<EOF
SHUTDOWN IMMEDIATE;
EXIT;
EOF
 
rm -Rf /u01/app/oracle/oradata/cdb1/*
rm -Rf /u01/app/oracle/fast_recovery_area/cdb1
rm -Rf /u01/app/oracle/fast_recovery_area/cdb1_stby
rm -Rf /u01/app/oracle/admin/cdb1mkdir -p /u01/app/oracle/fast_recovery_area/cdb1mkdir -p /u01/app/oracle/admin/cdb1/adumpmkdir -p /u01/app/oracle/oradata/cdb1/pdbseedmkdir -p /u01/app/oracle/oradata/cdb1/pdb1
rm $ORACLE_HOME/dbs/spfilecdb1.ora
 
export ORACLE_SID=cdb1
sqlplus / as sysdba <<EOF
STARTUP NOMOUNT PFILE='/tmp/initcdb1_stby.ora';
EXIT;
EOF
# 2) 連線到 RMAN.
$ rman TARGET sys/Password1@cdb1_stby AUXILIARY sys/Password1@cdb1
# 3) 複製資料庫。
DUPLICATE TARGET DATABASE
FOR STANDBY
FROM ACTIVE DATABASE
DORECOVER
SPFILE
SET db_unique_name='cdb1' COMMENT 'Is standby'
NOFILENAMECHECK;
# 4) 連線到當前主節點上的 DGMDRL。
$ dgmgrl sys/Password1@cdb1_stby
# 5) 啟用新備用資料庫。
DGMGRL> ENABLE DATABASE cdb1;


6、閃回資料庫

在上一節中已經提到過,但值得再次關注閃回資料庫。雖然切換 /切換對主資料庫和備用資料庫都是安全的,但故障轉移會使原始主資料庫無法轉換為備用資料庫。如果未啟用閃回資料庫,則必須廢棄原始主資料庫並將其重新建立為備用資料庫。

另一種方法是在主伺服器上啟用閃回資料庫(如果需要,還可以啟用備用資料庫),以便在發生故障轉移時,可以將主資料庫閃回到故障轉移之前的時間並快速轉換為備用資料庫,如上所示。


7、只讀備用和 Active Data Guard

配置備用資料庫後,可以以只讀模式開啟它以允許查詢訪問。這通常用於將報告解除安裝到備用伺服器,從而釋放主伺服器上的資源。以只讀模式開啟時,歸檔日誌傳送將繼續,但託管恢復將停止,因此備用資料庫將逐漸過時,直到恢復管理恢復。

要將備用資料庫切換到只讀模式,請執行以下操作。

SHUTDOWN IMMEDIATE;
STARTUP MOUNT;
ALTER DATABASE OPEN READ ONLY;

重置管理恢復,請執行以下操作。

SHUTDOWN IMMEDIATE;
STARTUP MOUNT;
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;

 11g 中,Oracle 引入了活動資料保護功能。這允許備用資料庫以只讀模式開啟,但仍應用重做資訊。這意味著一個備用系統可以用於查詢,但仍然是最新的。此功能存在許可問題,但以下命令顯示如何啟用活動資料保護。

SHUTDOWN IMMEDIATE;
STARTUP MOUNT;
ALTER DATABASE OPEN READ ONLY;
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;

由於託管恢復繼續使用  Active Data Guard,因此在這種情況下無需從只讀模式切換回託管恢復。


8、快照備用

 11g 中引入,快照備用允許備用資料庫以讀寫模式開啟。當切換回備用模式時,在讀寫模式下所做的所有更改都將丟失。這是使用閃回資料庫實現的,可以正常工作,備用資料庫不需要顯式啟用閃回資料庫來利用此功能。

連線到主( cdb1)資料庫並將備用資料庫(cdb1_stby)轉換為快照備用資料庫。

$ dgmgrl sys/Password1@cdb1
DGMGRL for Linux: Release 19.0.0.0.0 - Production on Tue Feb 26 22:53:36 2018Version 19.2.0.0.0
 
Copyright (c) 1982, 2019, Oracle and/or its affiliates.  All rights reserved.
 
Welcome to DGMGRL, type "help" for information.
Connected as SYSDBA.
DGMGRL> CONVERT DATABASE cdb1_stby TO SNAPSHOT STANDBY;
Converting database "cdb1_stby" to a Snapshot Standby database, please wait...
Database "cdb1_stby" converted successfully
DGMGRL>


完成快照備用後,將其轉換回備用資料庫。

$ dgmgrl sys/Password1@cdb1
DGMGRL for Linux: Release 19.0.0.0.0 - Production on Tue Feb 26 22:53:36 2018Version 19.2.0.0.0
 
Copyright (c) 1982, 2019, Oracle and/or its affiliates.  All rights reserved.
 
Welcome to DGMGRL, type "help" for information.
Connected as SYSDBA.
DGMGRL> CONVERT DATABASE cdb1_stby TO PHYSICAL STANDBY;
Converting database "cdb1_stby" to a Physical Standby database, please wait...
Operation requires shut down of instance "cdb1" on database "cdb1_stby"
Shutting down instance "cdb1"...
Database closed.
Database dismounted.
ORACLE instance shut down.
Operation requires start up of instance "cdb1" on database "cdb1_stby"Starting instance "cdb1"...ORACLE instance started.Database mounted.
Continuing to convert database "cdb1_stby" ...Database "cdb1_stby" converted successfully
DGMGRL>


備用資料庫再次處於託管恢復狀態,並恢復歸檔日誌傳送。請注意,閃回資料庫仍未啟用。

DGMGRL> SHOW CONFIGURATION;
 
Configuration - my_dg_config
 
Protection Mode: MaxPerformance
Members:
cdb1      - Primary database
cdb1_stby - Physical standby database
 
Fast-Start Failover: DISABLED
 
Configuration Status:SUCCESS   (status updated 38 seconds ago)
 
DGMGRL>



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

相關文章