共用方式為


在 Azure VM 中建立 Oracle 資料庫

適用於: ✔️ Linux VM

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

先決條件

  • 如果您沒有 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。 此命令會建立 NSG vmoracle19cNSG,用於制定規則以控制 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 nsg rule create 命令建立 NSG 規則 。 此命令會建立 allow-ssh NSG規則,以透過 ssh 開啟遠端存取的端點:

    az network nsg rule create \
        --resource-group rg-oracle \
        --nsg-name vmoracle19cNSG \
        --name allow-ssh \
        --protocol tcp \
        --priority 1001 \
        --destination-port-range 22
    
  5. 視需要使用 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
    

    這很重要

    此命令會掛接 /etc/fstab 檔案,但沒有特定的 UUID,這可以防止磁碟重新啟動。 嘗試重新啟動磁碟之前,請更新 /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 來接受流量。 以根使用者身分執行下列命令:

    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. 執行資料庫建立小幫手:

    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

後續步驟