在 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) 。
使用 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 檔案。 下列命令假設資源群組和 VM 是在 eastus 區域中建立的:
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 -
將自動化啟動旗標從
N
變更為Y
/etc/oratab 檔案中的 :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
下一步
- 使用Oracle 備份策略保護 Azure 中的資料庫
- 探索 Azure 上的 Oracle 解決方案
- 安裝和設定 Oracle 自動儲存體管理