Linux ベースの Azure 仮想マシンに Oracle Data Guard を導入する

適用対象: ✔️ Linux VM

Azure CLI を使用すると、コマンドラインまたはスクリプトで Azure リソースを作成したり管理したりすることができます。 この記事では、Azure CLI を使用して Azure Marketplace イメージから Oracle Database 19c リリース 3 データベースをデプロイする方法を説明します。 さらに、手順に従って Azure 仮想マシン (VM) に Data Guard をインストールして構成する方法を説明します。 環境をセキュリティで保護するために、パブリックにアクセスできるポートはなくなり、Oracle VM へのアクセスは Azure Bastion インスタンスによって提供されます。

始める前に、Azure CLI がインストールされていることを確認します。 詳細については、Azure CLI のインストール ガイドを参照してください。

環境の準備

前提条件

Oracle Data Guard をインストールするには、同じ可用性セットに 2 つの 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 の製品ライフサイクルに関する Web ページを参照してください。

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

2 つのサブネットから成る仮想ネットワークの作成

すべてのコンピューティング サービスの接続先となる仮想ネットワークを作成します。 Azure Bastion は、データベースをパブリック アクセスから保護する Azure サービスで、1 つ目のサブネットでホストされます。 2 つ目のサブネットは、2 つの 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

2 つの仮想マシンの作成

az vm create コマンドを使用して、VM を 2 つ作成します。 次の例では、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 は、仮想ネットワーク内でホストされているすべてのサービスに対して、セキュリティで保護されたトンネルを提供します。 Oracle データベースへの直接アクセスを排除するためのジャンプ ボックスとして機能します。

Azure Bastion サービスにアクセスするためのパブリック IP アドレスを作成します。

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

仮想マシンへの接続

次に、OracleVM1Azure portal から Azure Bastion サービスを使用して にアクセスします。

ウィンドウ上部の検索ボックスに、「OracleVM1」と入力します。 結果の一覧で [OracleVM1] を選択して VM を開きます。

1 つ目の 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 (プライマリ) でのデータベースの作成

Azure Marketplace イメージには Oracle ソフトウェアが既にインストールされているので、次の手順ではデータベースをインストールします。

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;

強制ログを有効にし、少なくとも 1 つのログ ファイルが存在するようにします。

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;

フラッシュバック機能をオン (回復の際に簡単に戻せる) にし、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 ブローカーを有効にします。

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 Portal に戻ります。 OracleVM2 を検索し、結果の一覧からリソースを選択します。

2 つ目の 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 ブローカーを有効にします。

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

myVM1 (プライマリ) での Data Guard ブローカーの構成

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 構成のテスト

OracleVM2 (プライマリ) でのデータベースの切り替え

プライマリからスタンバイ (cdb1 から cdb1_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

次のステップ