在 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 中執行命令,請選取程式碼區塊右上角的 [開啟 Cloud Shell]。 選取 [複製] 以複製程式碼,並將其貼至 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-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),以設定一些外部端點供資料庫接聽程式使用。
使用 az network nsg create 命令來建立 VM 的 NSG。 此命令會建立 vmoracle19cNSG NSG 以供規則控制 VM 的存取:
az network nsg create --resource-group rg-oracle --name vmoracle19cNSG
使用 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
建立第二個 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
視需要使用 az network public-ip show 命令以取得 VM 的共用 IP 位址:
az network public-ip show \ --resource-group rg-oracle \ --name vmoracle19cPublicIP \ --query "ipAddress" \ --output tsv
準備 VM 環境
建立與 VM 的 SSH 工作階段。 將
<publicIPAddress>
部分取代為 VM 的公用 IP 位址,例如10.200.300.4
:ssh azureuser@<publicIPAddress>
切換至根使用者:
sudo su -
找出您要格式化以保存 Oracle 資料檔案的最近建立磁碟裝置:
ls -alt /dev/sd*|head -1
輸入類似於此範例:
brw-rw----. 1 root disk 8, 16 Dec 8 22:57 /dev/sdc
以根使用者身分,使用
parted
命令來格式化裝置。首先建立磁碟標籤:
parted /dev/sdc mklabel gpt
接下來,建立跨整個磁碟的主要磁碟分割:
parted -a optimal /dev/sdc mkpart primary 0GB 64GB
最後,列印裝置的中繼資料,以檢查其詳細資料:
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
在裝置磁碟分割上建立檔案系統:
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
建立掛接點:
mkdir /u02
掛接磁碟:
mount /dev/sdc1 /u02
變更掛接點的權限:
chmod 777 /u02
將掛接新增至 /etc/fstab 檔案:
echo "/dev/sdc1 /u02 ext4 defaults 0 0" >> /etc/fstab
重要
此命令會掛接沒有特定 UUID 的 /etc/fstab 檔案,可防止成功重新開機磁碟。 嘗試重新開機磁碟前,請先更新 /etc/fstab 項目以包含掛接點的 UUID。
使用公用 IP 位址和位址主機名稱更新 /etc/hosts 檔案。 變更
<Public IP>
和兩個<VMname>
部分以反映您實際的值:echo "<Public IP> <VMname>.eastus.cloudapp.azure.com <VMname>" >> /etc/hosts
將 VM 的網域名稱新增至 /etc/hostname 檔案。 下列命令假設已在 eastus 區域中建立資源群組和 VM:
sed -i 's/$/\.eastus\.cloudapp\.azure\.com &/' /etc/hostname
開啟防火牆連接埠。
由於 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 軟體。 建立範例資料庫,如下所示。
切換至 Oracle 使用者:
sudo su - oracle
啟動資料庫接聽程式:
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
建立 Oracle 資料檔案的資料目錄:
mkdir /u02/oradata
執行「資料庫建立輔助程式」:
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.
設定 Oracle 變數:
在連線之前,您需要設定環境變數
ORACLE_SID
:export ORACLE_SID=oratest1
您也應該使用下列命令,將
ORACLE_SID
變數新增至oracle
使用者的 .bashrc 檔案,供未來登入時使用:echo "export ORACLE_SID=oratest1" >> ~oracle/.bashrc
自動進行資料庫啟動和關機
當您重新啟動 VM 時,Oracle 資料庫預設不會自動啟動。 若要將 Oracle 資料庫設定為自動啟動,請先以 root 的身分登入。 接著,建立並更新一些系統檔案。
以根使用者身分登入:
sudo su -
在 /etc/oratab 檔案中,將自動啟動旗標從
N
變更為Y
:sed -i 's/:N/:Y/' /etc/oratab
建立名為 /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
使用
chmod
命令來變更檔案的權限:chgrp dba /etc/init.d/dbora chmod 750 /etc/init.d/dbora
建立用於啟動和關閉的符號連結:
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
若要測試您的變更,請重新啟動 VM:
reboot
清除資源
完成在 Azure 上探索第一個 Oracle 資料庫而且不再需要 VM 之後,就可以使用 az group delete 命令移除資源群組、VM 和所有相關資源。
az group delete --name rg-oracle
下一步
- 在 Azure 中使用 Oracle 備份策略來保護資料
- 探索 Azure 上的 Oracle 解決方案
- 安裝和設定 Oracle 自動儲存體管理