Azure VM での Oracle データベースの作成

適用対象: ✔️ Linux VM

この記事では、Azure CLI を使用して、Marketplace での Oracle のギャラリー イメージから Azure 仮想マシン (VM) をデプロイして Oracle Database 19c データベースを作成する方法について説明します。 サーバーをデプロイしたら、SSH 経由でサーバーを接続して Oracle データベースを構成します。

前提条件

  • Azure サブスクリプションをお持ちでない場合は、開始する前に Azure 無料アカウントを作成してください。

  • Azure Cloud Shell または Azure CLI。

    このクイックスタートの Azure CLI コマンドは、Azure Cloud Shell で対話形式で実行できます。 Cloud Shell でコマンドを実行するには、コード ブロックの右上隅にある [Cloudshell を開く] を選択します。 [コピー] を選択してコードをコピーし、Cloud Shell に貼り付けて実行します。 Azure portal 内から Cloud Shell を実行することもできます。 Cloud Shell では、常に最新バージョンの Azure CLI が使用されます。

    また、Azure CLI をローカルにインストールしてコマンドを実行することもできます。 この記事の手順では、Azure CLI バージョン 2.0.4 以降が必要です。 az version を実行して、インストールされているバージョンと依存ライブラリを確認し、az upgrade を実行してアップグレードします。 ローカル インストールを使用する場合は、az login コマンドを使用して Azure にサインインします。

リソース グループの作成

az group create コマンドを使用して、リソース グループを作成します。 Azure リソース グループとは、Azure リソースのデプロイと管理に使用する論理コンテナーです。

次の例では、rg-oracle という名前のリソース グループを eastus の場所に作成します。

az group create --name rg-oracle --location eastus

注意

このクイックスタートでは、米国東部リージョンに Standard_DS2_v2 SKU VM を作成します。 リージョン別にサポートされている SKU の一覧を表示するには、az vm list-skus コマンドを使用します。

仮想マシンの作成

az vm create コマンドで、仮想マシン (VM) を作成します。

次の例では、vmoracle19c という名前の VM が作成されます。 既定のキーの場所にまだ SSH キーが存在しない場合はそれも作成します。 特定のキー セットを使用するために、コマンドで --ssh-key-value オプションを使用できます。

az vm create \
    --name vmoracle19c \
    --resource-group rg-oracle \
    --image Oracle:oracle-database-19-3:oracle-database-19-0904:latest \
    --size Standard_DS2_v2 \
    --admin-username azureuser \
    --generate-ssh-keys \
    --public-ip-address-allocation static \
    --public-ip-address-dns-name vmoracle19c

VM を作成すると、Azure CLI によって次の例のような情報が表示されます。 publicIpAddress プロパティの値を書き留めます。 この IP アドレスは、VM へのアクセスに使用します。

{
  "fqdns": "",
  "id": "/subscriptions/{snip}/resourceGroups/rg-oracle/providers/Microsoft.Compute/virtualMachines/vmoracle19c",
  "location": "eastus",
  "macAddress": "00-0D-3A-36-2F-56",
  "powerState": "VM running",
  "privateIpAddress": "10.0.0.4",
  "publicIpAddress": "13.64.104.241",
  "resourceGroup": "rg-oracle"
}

Oracle データ ファイル用のディスクを作成する

az vm disk attach コマンドを使用して、Oracle データ ファイル用の新しいディスクと高速リカバリ領域 (FRA) を作成してアタッチします。

次の例では、oradata01 という名前のディスクが作成されます。

az vm disk attach \
    --name oradata01 --new \
    --resource-group rg-oracle \
    --size-gb 64 --sku StandardSSD_LRS \
    --vm-name vmoracle19c

接続のポートを開く

このタスクでは、VM を保護する Azure ネットワーク セキュリティ グループ (NSG) を設定して、データベース リスナーが使用するいくつかの外部エンドポイントを構成する必要があります。

  1. az network nsg create コマンドを使用して、VM 用の NSG を作成します。 このコマンドは、VM へのアクセスを制御するルール用の vmoracle19cNSG NSG を作成します。

    az network nsg create --resource-group rg-oracle --name vmoracle19cNSG
    
  2. az network nsg rule create コマンドを使用して、NSG ルールを作成します。 このコマンドは、Oracle データベースへのリモート アクセス用にエンドポイントを開く allow-oracle NSG ルールを作成します。

    az network nsg rule create \
        --resource-group rg-oracle \
        --nsg-name vmoracle19cNSG \
        --name allow-oracle \
        --protocol tcp \
        --priority 1001 \
        --destination-port-range 1521
    
  3. Oracle へのリモート アクセス用にエンドポイントを開く 2 つめの NSG ルールを作成します。 このコマンドは、allow-oracle-EM NSG ルールを作成します。

    az network nsg rule create \
        --resource-group rg-oracle \
        --nsg-name vmoracle19cNSG \
        --name allow-oracle-EM \
        --protocol tcp \
        --priority 1002 \
        --destination-port-range 5502
    
  4. 必要に応じて、az network public-ip show コマンドを使用して、VM のパブリック IP アドレスを取得します。

    az network public-ip show \
        --resource-group rg-oracle \
        --name vmoracle19cPublicIP \
        --query "ipAddress" \
        --output tsv
    

VM 環境を準備する

  1. VM との SSH セッションを作成します。 <publicIPAddress> 部分を VM のパブリック IP アドレス値 (10.200.300.4 など) に置き換えます。

    ssh azureuser@<publicIPAddress>
    
  2. ルート ユーザーに切り替えます。

    sudo su -
    
  3. Oracle データ ファイルを保持するようにフォーマットする対象の、直近に作成されたディスク デバイスを見つけます。

    ls -alt /dev/sd*|head -1
    

    出力は次の例のようになります。

    brw-rw----. 1 root disk 8, 16 Dec  8 22:57 /dev/sdc
    
  4. ルート ユーザーとして、parted コマンドを使用して、デバイスをフォーマットします。

    1. まず、ディスク ラベルを作成します。

      parted /dev/sdc mklabel gpt
      
    2. 次に、ディスク全体にまたがるプライマリ パーティションを作成します。

      parted -a optimal /dev/sdc mkpart primary 0GB 64GB	
      
    3. 最後に、そのメタデータを出力してデバイスの詳細をチェックします。

      parted /dev/sdc print
      

      出力は次の例のようになります。

      Model: Msft Virtual Disk (scsi)
      Disk /dev/sdc: 68.7GB
      Sector size (logical/physical): 512B/4096B
      Partition Table: gpt
      Disk Flags:
      Number   Start    End      Size     File system   Name     Flags
      1        1049kB   64.0GB   64.0GB   ext4          primary
      
  5. デバイス パーティションにファイル システムを作成します。

    mkfs -t ext4 /dev/sdc1
    

    出力は次の例のようになります。

    mke2fs 1.42.9 (28-Dec-2013)
    Discarding device blocks: done                            
    Filesystem label=
    OS type: Linux
    Block size=4096 (log=2)
    Fragment size=4096 (log=2)
    Stride=0 blocks, Stripe width=0 blocks
    3907584 inodes, 15624704 blocks
    781235 blocks (5.00%) reserved for the super user
    First data block=0
    Maximum filesystem blocks=2164260864
    477 block groups
    32768 blocks per group, 32768 fragments per group
    8192 inodes per group
    Superblock backups stored on blocks: 
         32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 
         4096000, 7962624, 11239424
     Allocating group tables: done                            
     Writing inode tables: done                            
     Creating journal (32768 blocks): done
     Writing superblocks and filesystem accounting information: done   
    
  6. マウント ポイントを作成します。

    mkdir /u02
    
  7. ディスクをマウントします。

    mount /dev/sdc1 /u02
    
  8. マウント ポイントのアクセス許可を変更します。

    chmod 777 /u02
    
  9. そのマウントを /etc/fstab ファイルに追加します。

    echo "/dev/sdc1               /u02                    ext4    defaults        0 0" >> /etc/fstab
    

    重要

    このコマンドは、特定の UUID を使用せずに /etc/fstab ファイルをマウントします。これは、ディスクの正常な再起動を妨げる可能性があります。 ディスクの再起動を試みる前に、/etc/fstab エントリを更新して、マウント ポイントの UUID を含めてください。

  10. パブリック IP アドレスとアドレスのホスト名で /etc/hosts ファイルを更新します。 <Public IP> と、2 つの <VMname> 部分を、実際の値に合わせて変更してください。

    echo "<Public IP> <VMname>.eastus.cloudapp.azure.com <VMname>" >> /etc/hosts
    
  11. VM のドメイン名を /etc/hostname ファイルに追加します。 次のコマンドは、リソース グループと VM が eastus リージョンに作成されることを想定しています。

    sed -i 's/$/\.eastus\.cloudapp\.azure\.com &/' /etc/hostname
    
  12. ファイアウォールのポートを開く

    Marketplace イメージでは SELinux が既定で有効になっているため、データベースのリッスン ポート 1521 宛てのトラフィックと Enterprise Manager Express のポート 5502 宛てのトラフィックに対してファイアウォールを開放する必要があります。 root ユーザーとして、次のコマンドを実行します。

    firewall-cmd --zone=public --add-port=1521/tcp --permanent
    firewall-cmd --zone=public --add-port=5502/tcp --permanent
    firewall-cmd --reload
    

データベースの作成

Oracle ソフトウェアは、既に Marketplace イメージにインストールされています。 次のようにサンプル データベースを作成します。

  1. oracle ユーザーに切り替えます。

    sudo su - oracle
    
  2. データベース リスナーを開始します。

    lsnrctl start
    

    出力は次の例のようになります。

    LSNRCTL for Linux: Version 19.0.0.0.0 - Production on 20-OCT-2020 01:58:18
    
    Copyright (c) 1991, 2019, Oracle.  All rights reserved.
    
    Starting /u01/app/oracle/product/19.0.0/dbhome_1/bin/tnslsnr: please wait...
    
    TNSLSNR for Linux: Version 19.0.0.0.0 - Production
    Log messages written to /u01/app/oracle/diag/tnslsnr/vmoracle19c/listener/alert/log.xml
    Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=vmoracle19c.eastus.cloudapp.azure.com)(PORT=1521)))
    
    Connecting to (ADDRESS=(PROTOCOL=tcp)(HOST=)(PORT=1521))
    STATUS of the LISTENER
    ------------------------
    Alias                     LISTENER
    Version                   TNSLSNR for Linux: Version 19.0.0.0.0 - Production
    Start Date                20-OCT-2020 01:58:18
    Uptime                    0 days 0 hr. 0 min. 0 sec
    Trace Level               off
    Security                  ON: Local OS Authentication
    SNMP                      OFF
    Listener Log File         /u01/app/oracle/diag/tnslsnr/vmoracle19c/listener/alert/log.xml
    Listening Endpoints Summary...
      (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=vmoracle19c.eastus.cloudapp.azure.com)(PORT=1521)))
    The listener supports no services
    The command completed successfully
    
  3. Oracle データ ファイル用のデータ ディレクトリを作成します。

    mkdir /u02/oradata
    
  4. Database Creation Assistant を実行します。

    dbca -silent \
        -createDatabase \
        -templateName General_Purpose.dbc \
        -gdbname oratest1 \
        -sid oratest1 \
        -responseFile NO_VALUE \
        -characterSet AL32UTF8 \
        -sysPassword OraPasswd1 \
        -systemPassword OraPasswd1 \
        -createAsContainerDatabase false \
        -databaseType MULTIPURPOSE \
        -automaticMemoryManagement false \
        -storageType FS \
        -datafileDestination "/u02/oradata/" \
        -ignorePreReqs
    

    データベースの作成には数分かかります。

    出力は次の例のようになります。

         Prepare for db operation
        10% complete
        Copying database files
        40% complete
        Creating and starting Oracle instance
        42% complete
        46% complete
        50% complete
        54% complete
        60% complete
        Completing Database Creation
        66% complete
        69% complete
        70% complete
        Executing Post Configuration Actions
        100% complete
        Database creation complete. For details check the logfiles at: /u01/app/oracle/cfgtoollogs/dbca/oratest1.
        Database Information:
        Global Database Name:oratest1
        System Identifier(SID):oratest1
        Look at the log file "/u01/app/oracle/cfgtoollogs/dbca/oratest1/oratest1.log" for further details.
    
  5. Oracle 変数を設定します。

    接続する前に、環境変数 ORACLE_SID を設定する必要があります。

    export ORACLE_SID=oratest1
    

    次のコマンドを使用して、今後のサインインのために oracle ユーザーの .bashrc ファイルに ORACLE_SID 変数を追加する必要もあります。

    echo "export ORACLE_SID=oratest1" >> ~oracle/.bashrc
    

データベースのスタートアップとシャットダウンの自動化

VM を再起動したとき、既定では、Oracle データベースは自動的には開始しません。 自動的に開始するように Oracle データベースを設定するには、まず root としてサインインします。 次に、いくつかのシステム ファイルを作成および更新します。

  1. ルート ユーザーとしてサインオンします。

    sudo su -
    
  2. /etc/oratab ファイルの自動起動フラグを N から Y に変更します。

    sed -i 's/:N/:Y/' /etc/oratab
    
  3. /etc/init.d/dbora という名前のファイルを作成し、次の bash コマンドをファイルに追加します。

    #!/bin/sh
    # chkconfig: 345 99 10
    # Description: Oracle auto start-stop script.
    #
    # Set ORA_HOME to be equivalent to $ORACLE_HOME.
    ORA_HOME=/u01/app/oracle/product/19.0.0/dbhome_1
    ORA_OWNER=oracle
    
    case "$1" in
    'start')
        # Start the Oracle databases:
        # The following command assumes that the Oracle sign-in
        # will not prompt the user for any values.
        # Remove "&" if you don't want startup as a background process.
        su - $ORA_OWNER -c "$ORA_HOME/bin/dbstart $ORA_HOME" &
        touch /var/lock/subsys/dbora
        ;;
    
    'stop')
        # Stop the Oracle databases:
        # The following command assumes that the Oracle sign-in
        # will not prompt the user for any values.
        su - $ORA_OWNER -c "$ORA_HOME/bin/dbshut $ORA_HOME" &
        rm -f /var/lock/subsys/dbora
        ;;
    esac
    
  4. chmod コマンドを使用して、ファイルのアクセス許可を変更します。

    chgrp dba /etc/init.d/dbora
    chmod 750 /etc/init.d/dbora
    
  5. スタートアップとシャットダウンのシンボリック リンクを作成します。

    ln -s /etc/init.d/dbora /etc/rc.d/rc0.d/K01dbora
    ln -s /etc/init.d/dbora /etc/rc.d/rc3.d/S99dbora
    ln -s /etc/init.d/dbora /etc/rc.d/rc5.d/S99dbora
    
  6. 変更をテストするには、VM を再起動します。

    reboot
    

リソースをクリーンアップする

Azure での最初の Oracle データベースを調べ終わり、VM が必要なくなったら、az group delete コマンドを使用して、リソース グループ、VM、関連するすべてのリソースを削除できます。

az group delete --name rg-oracle

次のステップ