你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
在 Azure VM 上创建 Oracle 数据库
适用于:✔️ Linux VM
本文介绍如何使用 Azure CLI 从 Oracle Marketplace Gallery 映像部署 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
注意
此快速入门将在美国东部地区创建标准 _DS2_V2 SKU 虚拟机。 要按地区查看支持的 SKU 列表,请使用 az vm list-skus 命令。
创建虚拟机
使用 az vm create 命令创建虚拟机 (VM)。
以下示例创建名为 vmoracle19c 的虚拟机。 此外,它还在默认密钥位置中不存在 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 命令为虚拟机创建 NSG。 此命令为规则创建 vmoracle19cNSG NSG 以控制对虚拟机的访问:
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 命令获取虚拟机的公共 IP 地址:
az network public-ip show \ --resource-group rg-oracle \ --name vmoracle19cPublicIP \ --query "ipAddress" \ --output tsv
准备虚拟机环境
创建与虚拟机的 SSH 会话。 将
<publicIPAddress>
部分替换为虚拟机的公共 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
以 root 用户身份,使用
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
将虚拟机的域名添加到 /etc/hostname 文件中。 以下命令假定资源组和 VM 是在 eastus 区域中创建的:
sed -i 's/$/\.eastus\.cloudapp\.azure\.com &/' /etc/hostname
打开防火墙端口。
由于 SELinux 对于市场映像是默认启用的,因此我们需要为数据库侦听端口 1521 和企业管理器快速端口 5502 打开防火墙以接受流量。 以 root 用户身份运行以下命令:
firewall-cmd --zone=public --add-port=1521/tcp --permanent firewall-cmd --zone=public --add-port=5502/tcp --permanent firewall-cmd --reload
创建数据库
该 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 身份登录。 然后,创建并更新一些系统文件。
以 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
后续步骤
- 使用 Oracle 备份策略保护 Azure 中的数据库
- 浏览 Azure 上的 Oracle 解决方案
- 安装并配置 Oracle 自动存储管理