適用対象: ✔️ Linux VM
Azure CLI を使用すると、コマンドラインまたはスクリプトで Azure リソースを作成したり管理したりすることができます。 この記事では、Azure CLI を使用して Azure Marketplace イメージから Oracle Database 19c リリース 3 データベースをデプロイする方法を説明します。 さらに、手順に従って Azure 仮想マシン (VM) に Data Guard をインストールして構成する方法を説明します。 環境をセキュリティで保護するため、パブリックにアクセスできるポートをなくし、Azure Bastion インスタンスで Oracle VM へのアクセスを提供します。
始める前に、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 つのサブネットから成る仮想ネットワークの作成
すべてのコンピューティング サービスを接続する仮想ネットワークを作成します。 1 つのサブネットで、データベースをパブリック アクセスから保護する Azure サービスである Azure Bastion をホストします。 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
仮想マシンへの接続
これで、Azure portal から Azure Bastion サービスを使って OracleVM1
にアクセスできます。
ウィンドウ上部の検索ボックスに、「OracleVM1」と入力します。 結果の一覧で [OracleVM1] を選択して VM を開きます。
1 つ目の Oracle VM の検索ボックスと結果を示す図。
ペイン上部で [接続]>[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_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 を検索し、結果の一覧からリソースを選択します。
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_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