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 つ作成します。 次の例では、OracleVM1
と OracleVM2
という名前の 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
仮想マシンへの接続
次に、OracleVM1
Azure portal から Azure Bastion サービスを使用して にアクセスします。
ウィンドウ上部の検索ボックスに、「OracleVM1」と入力します。 結果の一覧で [OracleVM1] を選択して VM を開きます。
ペイン上部で [接続]>[Bastion] を選択します。
ユーザー名とパスワードを入力し、[接続] ボタンを選択します。
新しいタブが開き、Azure Marketplace イメージから Oracle ソフトウェアが既にインストールされた仮想マシンへの安全な接続が表示されます。
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_SID
と ORACLE_HOME
を設定します。
$ ORACLE_HOME=/u01/app/oracle/product/19.0.0/dbhome_1; export ORACLE_HOME
$ ORACLE_SID=cdb1; export ORACLE_SID
必要に応じて、ORACLE_HOME
と ORACLE_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_MANAGEMENT
を AUTO
に設定します。 完了したら、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 を検索し、結果の一覧からリソースを選択します。
ペイン上部で [接続]>[Bastion] を選択します。
ユーザー名とパスワードを入力し、[接続] ボタンを選択します。
OracleVM2 (スタンバイ) のファイアウォールを無効にする
sudo systemctl stop firewalld
sudo systemctl disable firewalld
OracleVM1 の環境を構成する
oracle
ユーザーのパスワードを設定します。
sudo passwd oracle
azureuser
のパスワード (OracleLab123
) を入力します。
oracle
ユーザーのパスワードを OracleLab123
に変更します。 (確認のためにもう一度入力します。)
oracle
スーパーユーザーに切り替えます。
$ sudo su – oracle
変数 ORACLE_SID
と ORACLE_HOME
を設定します。
ORACLE_HOME=/u01/app/oracle/product/19.0.0/dbhome_1; export ORACLE_HOME
ORACLE_SID=cdb1; export ORACLE_SID
必要に応じて、ORACLE_HOME
と ORACLE_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