在 Azure VM 中建立 Oracle 資料庫

適用於:✔️ Linux VM

本文說明如何使用 Azure CLI 從 Oracle Marketplace 資源庫映射 部署 Azure 虛擬機器 (VM) ,以建立 Oracle Database 19c 資料庫。 部署伺服器之後,您可以透過 SSH 連接伺服器,以設定 Oracle 資料庫。

必要條件

  • 如果您沒有 Azure 訂用帳戶,請在開始之前先建立 Azure 免費帳戶

  • Azure Cloud Shell或 Azure CLI。

    您可以在本快速入門中以互動方式在 Azure Cloud Shell中執行 Azure CLI 命令。 若要在 Cloud Shell 中執行命令,請選取程式碼區塊右上角的[開啟 Cloudshell]。 選取[複製] 以複製程式碼,並將它貼到Cloud Shell中以執行程式碼。 您也可以從Azure 入口網站內執行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 資源的邏輯容器。

下列範例在 eastus 位置建立名為 rg-oracle 的資源群組。

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 金鑰。 若要使用一組特定的金鑰,您可以使用 --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。 此命令會為規則建立 vmoracle19cNSG NSG ,以控制對 VM 的存取:

    az network nsg create --resource-group rg-oracle --name vmoracle19cNSG
    
  2. 使用 az network nsg rule create 命令建立 NSG 規則 。 此命令會建立 allow-oracle NSG 規則,以開啟對 Oracle 資料庫的遠端存取端點:

    az network nsg rule create \
        --resource-group rg-oracle \
        --nsg-name vmoracle19cNSG \
        --name allow-oracle \
        --protocol tcp \
        --priority 1001 \
        --destination-port-range 1521
    
  3. 建立第二個 NSG 規則,以開啟遠端存取 Oracle 的端點。 此命令會建立 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>變更 和 兩 <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. 開啟防火牆連接埠。

    由於 SELinux 預設會在 Marketplace 映射上啟用,因此我們必須開啟防火牆以傳送接聽埠 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
    

建立資料庫

Marketplace 映像上已安裝 Oracle 軟體。 建立範例資料庫,如下所示。

  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. 執行「資料庫建立輔助程式」:

    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_SIDoracle 使用者 .bashrc 檔案以供日後登入:

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

自動進行資料庫啟動和關機

當您重新啟動 VM 時,Oracle 資料庫預設不會自動啟動。 若要將 Oracle 資料庫設定為自動啟動,請先以 root 的身分登入。 接著,建立並更新一些系統檔案。

  1. 以根使用者身分登入:

    sudo su -
    
  2. 將自動化啟動旗標從 N 變更為 Y /etc/oratab 檔案中的 :

    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

下一步