共用方式為


在以 Linux 為基礎的 Azure 虛擬機器上實作 Oracle Data Guard

適用於:✔️ Linux VM

您可以使用 Azure CLI 從命令列或在指令碼中建立和管理 Azure 資源。 本文說明如何使用 Azure CLI,從 Azure Marketplace 映像部署 Oracle Database 19c Release 3 資料庫。 本文接著會為您逐步說明如何安裝及設定 Azure 虛擬機器 (VM) 上的 Data Guard。 為了協助保護環境,不會公開存取任何埠,而且 Azure Bastion 實例會提供 Oracle VM 的存取權。

在開始之前,請確定您已安裝 Azure CLI。 如需詳細資訊,請參閱 Azure CLI 安裝指南

準備環境

假設

若要安裝 Oracle Data Guard,您需要在相同的可用性設定組建立兩個 Azure VM:

  • 主要 VM (OracleVM1) 具有已執行的 Oracle 執行個體。
  • 待命 VM (OracleVM2) 只安裝了 Oracle 軟體。

您用來建立 VM 的 Azure Marketplace 映像為 Oracle:oracle-database-19-3:oracle-database-19-0904:latest

注意

請注意已進入生命週期結束 (EOL),且 Red Hat 不再支援的版本。 於 EOL 或之後上傳的映像,將會根據合理的商務義務支援。 如需詳細資訊,請參閱產品生命週期的 Red Hat 網頁

登入 Azure

使用 az login 命令登入 Azure 訂用帳戶並遵循畫面上的說明。

az login

設定環境變數

調整您環境的 LOCATION 變數:

LOCATION=eastus
RESOURCE_GROUP="Oracle-Lab"
VM_USERNAME="azureuser"
VM_PASSWORD="OracleLab123"
VNET_NAME="${RESOURCE_GROUP}VNet"

啟用 Azure Bastion 延伸模組

在 Azure CLI 中包含 Azure Bastion 延伸模組:

az extension add \
  --name bastion

建立資源群組

使用 az group create 命令來建立資源群組。 Azure 資源群組是在其中部署與管理 Azure 資源的邏輯容器。

az group create \
  --name $RESOURCE_GROUP \
  --location $LOCATION

建立具有兩個子網路的虛擬網路

建立連線所有計算服務的虛擬網路。 一個子網裝載 Azure Bastion,這是一項 Azure 服務,可協助保護您的資料庫免於公開存取。 第二個子網會裝載兩個 Oracle 資料庫 VM。

此外,建立一個網路安全性群組,讓所有服務都會參考以判斷公開的連接埠。 只會公開連接埠 443。 當您建立該服務執行個體,Azure Bastion 服務會自動開啟此連接埠。

az network vnet create \
  --resource-group $RESOURCE_GROUP \
  --location $LOCATION \
  --name $VNET_NAME \
  --address-prefix "10.0.0.0/16"
az network vnet subnet create \
  --resource-group $RESOURCE_GROUP \
  --name AzureBastionSubnet \
  --vnet-name $VNET_NAME \
  --address-prefixes 10.0.0.0/24
az network vnet subnet create \
  --resource-group $RESOURCE_GROUP \
  --name OracleSubnet \
  --vnet-name $VNET_NAME \
  --address-prefixes 10.0.1.0/24
az network nsg create \
  --name OracleVM-NSG \
  --resource-group $RESOURCE_GROUP \
  --location $LOCATION

建立可用性設定組

建立可用性設定組是選擇性的,但我們仍建議您這麼做。 如需詳細資訊,請參閱 Azure 可用性設定組的指導方針

az vm availability-set create \
  --resource-group $RESOURCE_GROUP \
  --name OracleVMAvailabilitySet \
  --platform-fault-domain-count 2 \
  --platform-update-domain-count 2

建立兩部虛擬機器

使用 az vm create 命令建立兩個 VM。 下列範例會建立名為 OracleVM1OracleVM2 的 VM。

建立 OracleVM1 (主要):

az vm create \
  --resource-group $RESOURCE_GROUP \
  --name OracleVM1 \
  --availability-set OracleVMAvailabilitySet \
  --image Oracle:oracle-database-19-3:oracle-database-19-0904:latest \
  --size Standard_DS1_v2 \
  --authentication-type password \
  --admin-username $VM_USERNAME \
  --admin-password $VM_PASSWORD \
  --vnet-name $VNET_NAME \
  --subnet OracleSubnet \
  --nsg OracleVM-NSG \
  --os-disk-size-gb 32

建立 OracleVM2 (待命):

az vm create \
  --resource-group $RESOURCE_GROUP \
  --name OracleVM2 \
  --availability-set OracleVMAvailabilitySet \
  --image Oracle:oracle-database-19-3:oracle-database-19-0904:latest \
  --size Standard_DS1_v2 \
  --authentication-type password \
  --admin-username $VM_USERNAME \
  --admin-password $VM_PASSWORD \
  --vnet-name $VNET_NAME \
  --subnet OracleSubnet \
  --nsg OracleVM-NSG \
  --os-disk-size-gb 32

建立 Azure Bastion 服務執行個體

Azure Bastion 為虛擬網路內裝載的所有服務提供安全通道。 其可作為 Jumpbox,以排除對 Oracle 資料庫的直接存取。

建立公用 IP 位址以存取 Azure Bastion 服務:

az network public-ip create \
  --resource-group $RESOURCE_GROUP \
  --name OracleLabBastionPublicIP \
  --sku Standard

建立 Azure Bastion 服務執行個體:

az network bastion create \
  --location $LOCATION \
  --name OracleLabBastion \
  --public-ip-address OracleLabBastionPublicIP \
  --resource-group $RESOURCE_GROUP \
  --vnet-name $VNET_NAME \
  --sku basic

連接至虛擬機器

現在,您可以從 Azure 入口網站 使用 Azure Bastion 服務進行存取OracleVM1

在視窗頂端的搜尋方塊中,輸入 OracleVM1。 在結果清單中,選取 OracleVM1 以開啟該 VM。

此圖顯示第一個 Oracle VM 的搜尋方塊和結果。

在窗格頂端,選取 [連線] > [Bastion]

此圖顯示透過 Azure Bastion 連線的選項。

輸入使用者名稱和密碼,然後選取 [連線] 按鈕。

顯示如何輸入認證以透過 Azure Bastion 連線的圖表。

隨即會開啟一個新索引標籤,其中使用安全連線連至您的虛擬機器,且已透過 Azure Marketplace 映像安裝 Oracle 軟體。

顯示瀏覽器中透過 Azure Bastion 連線的圖表。

設定 OracleVM1 (主要)

停用防火牆:

sudo systemctl stop firewalld
sudo systemctl disable firewalld

設定 oracle 使用者密碼:

sudo passwd oracle

輸入 azureuser 密碼:OracleLab123

oracle 使用者密碼變更為 OracleLab123。 (再次輸入以驗證。)

在 OracleVM1 上建立資料庫 (主要)

Oracle 軟體已安裝於 Azure Marketplace 映像上,因此下一個步驟是安裝資料庫。

切換至 Oracle 超級使用者:

sudo su - oracle

建立資料庫︰

dbca -silent \
   -createDatabase \
   -datafileDestination /u01/app/oracle/cdb1 \
   -templateName General_Purpose.dbc \
   -gdbname cdb1 \
   -sid cdb1 \
   -responseFile NO_VALUE \
   -characterSet AL32UTF8 \
   -sysPassword OracleLab123 \
   -systemPassword OracleLab123 \
   -createAsContainerDatabase true \
   -numberOfPDBs 1 \
   -pdbName pdb1 \
   -pdbAdminPassword OracleLab123 \
   -databaseType MULTIPURPOSE \
   -automaticMemoryManagement false \
   -storageType FS

輸出結果看起來應該會像下面的回應這樣:

Copying database files
1% complete
2% complete
8% complete
13% complete
19% complete
27% complete
Creating and starting Oracle instance
29% complete
32% complete
33% complete
34% complete
38% complete
42% complete
43% complete
45% complete
Completing Database Creation
48% complete
51% complete
53% complete
62% complete
70% complete
72% complete
Creating Pluggable Databases
78% complete
100% complete
Look at the log file "/u01/app/oracle/cfgtoollogs/dbca/cdb1/cdb1.log" for further details.

設定 ORACLE_SIDORACLE_HOME 變數:

$ ORACLE_HOME=/u01/app/oracle/product/19.0.0/dbhome_1; export ORACLE_HOME
$ ORACLE_SID=cdb1; export ORACLE_SID

您可以視需要將 ORACLE_HOMEORACLE_SID 新增到 /home/oracle/.bashrc 檔案中,如此可將這些設定儲存,以供日後登入使用:

# add oracle home
export ORACLE_HOME= /u01/app/oracle/product/19.0.0/dbhome_1
# add oracle sid
export ORACLE_SID=cdb1

設定 Data Guard

在 myVM1 (主要) 上啟用封存記錄模式

啟用記錄模式:

sqlplus / as sysdba
SQL> SELECT log_mode FROM v$database;
LOG_MODE
------------
NOARCHIVELOG
SQL> SHUTDOWN IMMEDIATE;
SQL> STARTUP MOUNT;
SQL> ALTER DATABASE ARCHIVELOG;
SQL> ALTER DATABASE OPEN;

啟用強制記錄,並確定至少有一個記錄檔存在:

SQL> ALTER DATABASE FORCE LOGGING;
SQL> ALTER SYSTEM SWITCH LOGFILE;

若要建立待命重做記錄,需設定與主資料庫重做記錄相同的大小和數量:

SQL> ALTER DATABASE ADD STANDBY LOGFILE ('/u01/app/oracle/cdb1/standby_redo01.log') SIZE 200M;
SQL> ALTER DATABASE ADD STANDBY LOGFILE ('/u01/app/oracle/cdb1/standby_redo02.log') SIZE 200M;
SQL> ALTER DATABASE ADD STANDBY LOGFILE ('/u01/app/oracle/cdb1/standby_redo03.log') SIZE 200M;
SQL> ALTER DATABASE ADD STANDBY LOGFILE ('/u01/app/oracle/cdb1/standby_redo04.log') SIZE 200M;

開啟 Flashback (這可讓復原更容易)並設定 STANDBY_FILE_MANAGEMENTAUTO,然後結束之後的 SQL*Plus。

SQL> ALTER SYSTEM SET db_recovery_file_dest_size=50G scope=both sid='*';
SQL> ALTER SYSTEM SET db_recovery_file_dest='/u01/app/oracle/cdb1' scope=both sid='*';
SQL> ALTER SYSTEM SET STANDBY_FILE_MANAGEMENT=AUTO SCOPE=BOTH;
SQL> ALTER SYSTEM SET STANDBY_FILE_MANAGEMENT=AUTO;
SQL> EXIT;

在 OracleVM1 上設定服務 (主要)

編輯或建立 tnsnames.ora 檔案,其位於 $ORACLE_HOME/network/admin 資料夾。

新增下列項目:

cdb1 =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = OracleVM1)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SID = cdb1)
    )
  )
cdb1_stby =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = OracleVM2)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SID = cdb1)
    )
  )

編輯或建立 listener.ora 檔案,其位於 $ORACLE_HOME/network/admin 資料夾。

新增下列項目:

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = OracleVM1)(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/dbhome_1)
      (SID_NAME = cdb1)
    )
  )
ADR_BASE_LISTENER = /u01/app/oracle

啟用 Data Guard Broker:

sqlplus / as sysdba
SQL> ALTER SYSTEM SET dg_broker_start=true;
SQL> CREATE pfile FROM spfile;
SQL> EXIT;

將參數檔案複製到待命伺服器:

scp -p $ORACLE_HOME/dbs/initcdb1.ora oracle@OracleVM2:$ORACLE_HOME/dbs/

啟動接聽程式:

 lsnrctl stop
 lsnrctl start

在 OracleVM2 上設定服務 (待命)

返回 Azure 入口網站。 搜尋 OracleVM2,然後在結果清單中選取資源。

搜尋方塊的螢幕快照,以及第二個 Oracle VM 的結果。

在窗格頂端,選取 [連線] > [Bastion]

此圖顯示透過 Azure Bastion 連線的選項。

輸入使用者名稱和密碼,然後選取 [連線] 按鈕。

輸入使用者名稱和密碼認證以透過 Azure Bastion 連線的螢幕快照。

在 OracleVM2 上停用防火牆 (待命)

sudo systemctl stop firewalld
sudo systemctl disable firewalld

設定 OracleVM1 的環境

設定 oracle 使用者密碼:

sudo passwd oracle

輸入 azureuser 密碼:OracleLab123

oracle 使用者密碼變更為 OracleLab123。 (再次輸入以驗證。)

切換至 oracle 超級使用者:

$ sudo su – oracle

設定 ORACLE_SIDORACLE_HOME 變數:

ORACLE_HOME=/u01/app/oracle/product/19.0.0/dbhome_1; export ORACLE_HOME
ORACLE_SID=cdb1; export ORACLE_SID

您可以視需要將 ORACLE_HOMEORACLE_SID 新增到 /home/oracle/.bashrc 檔案中,如此可將這些設定儲存,以供日後登入使用:

# add oracle home
export ORACLE_HOME=/u01/app/oracle/product/19.0.0/dbhome_1
# add oracle sid
export ORACLE_SID=cdb1

編輯或建立 tnsnames.ora 檔案,其位於 $ORACLE_HOME/network/admin 資料夾。

新增下列項目:

cdb1 =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = OracleVM1)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SID = cdb1)
    )
  )
cdb1_stby =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = OracleVM2)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SID = cdb1)
    )
  )

編輯或建立 listener.ora 檔案,其位於 $ORACLE_HOME/network/admin 資料夾。

新增下列項目:

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = OracleVM2)(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/dbhome_1)
      (SID_NAME = cdb1)
    )
  )
ADR_BASE_LISTENER = /u01/app/oracle

啟動接聽程式:

 lsnrctl stop
 lsnrctl start

將資料庫還原至 OracleVM2 (待命)

使用下列內容建立參數檔案 /tmp/initcdb1_stby.ora

*.db_name='cdb1'

建立資料夾:

$ mkdir -p /u01/app/oracle/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

建立密碼檔案:

$ orapwd file=/u01/app/oracle/product/19.0.0/dbhome_1/dbs/orapwcdb1 password=OracleLab123 entries=10 force=y

OracleVM2 上啟動資料庫:

 export ORACLE_SID=cdb1
 sqlplus / as sysdba
SQL> CREATE spfile from pfile;
SQL> STARTUP NOMOUNT PFILE='/tmp/initcdb1_stby.ora';
SQL> EXIT;

使用 Oracle Recovery Manager (RMAN) 工具來還原資料庫:

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

在 RMAN 中執行下列命令:

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

當命令完成時,會出現類似下列的訊息:

media recovery complete, elapsed time: 00:00:00
Finished recover at 29-JUN-22
Finished Duplicate Db at 29-JUN-22

結束 RMAN:

RMAN> EXIT;

啟用 Data Guard Broker:

sqlplus / as sysdba
SQL> ALTER SYSTEM SET dg_broker_start=true;
SQL> EXIT;

在 OracleVM1 (主要) 上設定 Data Guard Broker

啟動 Data Guard Manager 並使用 SYS 和密碼登入。 (請勿使用 OS 驗證。)

$ dgmgrl sys/OracleLab123@cdb1
DGMGRL for Linux: Version 19.0.0.0 - 64bit Production
Copyright (c) 2000, 2013, Oracle. 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> ADD DATABASE cdb1_stby AS CONNECT IDENTIFIER IS cdb1_stby MAINTAINED AS PHYSICAL;
Database "cdb1_stby" added
DGMGRL> ENABLE CONFIGURATION;
Enabled.

檢閱組態:

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)

您已完成 Oracle Data Guard 設定。 下一節會說明如何測試連線並進行切換。

從用戶端電腦連線到資料庫

在您的用戶端電腦上更新 tnsnames.ora 檔案。 此檔案通常位於 $ORACLE_HOME/network/admin

cdb1=
  (DESCRIPTION=
    (ADDRESS=
      (PROTOCOL=TCP)
      (HOST=OracleVM1)
      (PORT=1521)
    )
    (CONNECT_DATA=
      (SERVER=dedicated)
      (SERVICE_NAME=cdb1)
    )
  )
cdb1_stby=
  (DESCRIPTION=
    (ADDRESS=
      (PROTOCOL=TCP)
      (HOST=OracleVM2)
      (PORT=1521)
    )
    (CONNECT_DATA=
      (SERVER=dedicated)
      (SERVICE_NAME=cdb1_stby)
    )
  )

啟動 SQL*Plus:

$ sqlplus sys/OraPasswd1@cdb1
SQL*Plus: Release 19.0.0.0 Production on Wed May 10 14:18:31 2022
Copyright (c) 1982, 2016, Oracle.  All rights reserved.
Connected to:
Oracle Database 12c Enterprise Edition Release 19.0.0.0 - 64bit Production
With the Partitioning, OLAP, Advanced Analytics and Real Application Testing options
SQL>

測試 Data Guard 組態

在 OracleVM1 上切換資料庫 (主要)

從主要切換為待命 (cdb1cdb1_stby):

$ dgmgrl sys/OracleLab123@cdb1
DGMGRL for Linux: Version 19.0.0.0 - 64bit Production
Copyright (c) 2000, 2013, Oracle. 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>

您現在可以連線到待命資料庫。 啟動 SQL*Plus:

$ sqlplus sys/OracleLab123@cdb1_stby
SQL*Plus: Release 19.0.0.0 Production on Wed May 10 14:18:31 2022
Copyright (c) 1982, 2016, Oracle.  All rights reserved.
Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0 - 64bit Production
With the Partitioning, OLAP, Advanced Analytics and Real Application Testing options
SQL>

在 OracleVM2上切換資料庫 (待命)

若要切換,請在 OracleVM2 上執行下列操作:

$ dgmgrl sys/OracleLab123@cdb1_stby
DGMGRL for Linux: Version 190.0.0.0 - 64bit Production
Copyright (c) 2000, 2013, Oracle. 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"

同樣地,您現在應該能夠連線到主要資料庫了。 啟動 SQL*Plus:

$ sqlplus sys/OracleLab123@cdb1
SQL*Plus: Release 19.0.0.0 Production on Wed May 10 14:18:31 2022
Copyright (c) 1982, 2016, Oracle.  All rights reserved.
Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0 - 64bit Production
With the Partitioning, OLAP, Advanced Analytics and Real Application Testing options
SQL>

您已完成 Oracle Linux 上的 Data Guard 安裝和設定。

刪除虛擬機器

如果您不再需要 VM,則可以使用下列命令來移除資源群組、VM 和所有相關資源:

az group delete --name $RESOURCE_GROUP

下一步