你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
使用 Azure 文件存储在 Azure Linux VM 上备份和恢复 Oracle Database
适用于:✔️ Linux VM
本文演示如何使用 Azure 文件存储作为媒体来备份和还原在 Azure 虚拟机 (VM) 上运行的 Oracle 数据库。 本文中的步骤已在 Oracle 12.1 及更高版本上进行了测试。
在本文中,你将使用 Oracle 恢复管理器 (RMAN) 将数据库备份到通过服务器消息块 (SMB) 协议装载到 VM 的 Azure 文件共享。 使用 Azure 文件存储作为备份介质既经济高效又具有高性能。 但对于大的数据库,Azure 备份提供了更好的解决方案。
先决条件
在 Azure Cloud Shell 中使用 Bash 环境。 有关详细信息,请参阅 Azure Cloud Shell 中的 Bash 快速入门。
如需在本地运行 CLI 参考命令,请安装 Azure CLI。 如果在 Windows 或 macOS 上运行,请考虑在 Docker 容器中运行 Azure CLI。 有关详细信息,请参阅如何在 Docker 容器中运行 Azure CLI。
如果使用的是本地安装,请使用 az login 命令登录到 Azure CLI。 若要完成身份验证过程,请遵循终端中显示的步骤。 有关其他登录选项,请参阅使用 Azure CLI 登录。
出现提示时,请在首次使用时安装 Azure CLI 扩展。 有关扩展详细信息,请参阅使用 Azure CLI 的扩展。
运行 az version 以查找安装的版本和依赖库。 若要升级到最新版本,请运行 az upgrade。
要执行备份和恢复过程,首先必须创建已安装 Oracle Database 实例的 Linux VM。 建议使用 Oracle 12.x 或更高版本。
按照在 Azure VM 中创建 Oracle Database 实例中的步骤创建 Oracle Database 实例。
准备数据库环境
若要与 VM 建立安全外壳 (SSH) 会话,请使用以下命令。 将
<publicIpAddress>
替换为 VM 的公共地址值。ssh azureuser@<publicIpAddress>
切换到根用户:
sudo su -
将
oracle
用户添加到 /etc/sudoers 文件中:echo "oracle ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers
为了更好地执行此步骤,请确保你已有在名为“vmoracle19c”的 VM 上运行的 Oracle 实例(“test”)。
切换到
oracle
用户:sudo su - oracle
在连接之前,请设置环境变量
ORACLE_SID
:export ORACLE_SID=test;
还应该使用以下命令将
ORACLE_SID
变量添加到oracle
用户的 .bashrc 文件中,以便将来登录:echo "export ORACLE_SID=test" >> ~oracle/.bashrc
启动 Oracle 侦听器(如果它还没有运行的话):
lsnrctl start
输出应类似于以下示例:
LSNRCTL for Linux: Version 19.0.0.0.0 - Production on 18-SEP-2020 03:23:49 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 System parameter file is /u01/app/oracle/product/19.0.0/dbhome_1/network/admin/listener.ora 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))) Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521))) Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=vmoracle19c.eastus.cloudapp.azure.com)(PORT=1521))) STATUS of the LISTENER ------------------------ Alias LISTENER Version TNSLSNR for Linux: Version 19.0.0.0.0 - Production Start Date 18-SEP-2020 03:23:49 Uptime 0 days 0 hr. 0 min. 0 sec Trace Level off Security ON: Local OS Authentication SNMP OFF Listener Parameter File /u01/app/oracle/product/19.0.0/dbhome_1/network/admin/listener.ora 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))) (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521))) The listener supports no services The command completed successfully
创建快速恢复区域的位置:
mkdir /u02/fast_recovery_area
连接到数据库:
sqlplus / as sysdba
启动数据库(如果它还没有运行的话):
SQL> startup
设置快速恢复区域的数据库环境变量:
SQL> alter system set db_recovery_file_dest_size=4096M scope=both; SQL> alter system set db_recovery_file_dest='/u02/fast_recovery_area' scope=both;
验证数据库处于
ARCHIVELOG
模式,以启用联机备份。检查日志存档状态:
SQL> SELECT log_mode FROM v$database; LOG_MODE ------------ NOARCHIVELOG
如果日志存档处于
NOARCHIVELOG
模式,请在 SQL Plus 中运行以下命令:SQL> SHUTDOWN IMMEDIATE; SQL> STARTUP MOUNT; SQL> ALTER DATABASE ARCHIVELOG; SQL> ALTER DATABASE OPEN; SQL> ALTER SYSTEM SWITCH LOGFILE;
创建一个表来测试备份和还原操作:
SQL> create user scott identified by tiger quota 100M on users; SQL> grant create session, create table to scott; SQL> connect scott/tiger SQL> create table scott_table(col1 number, col2 varchar2(50)); SQL> insert into scott_table VALUES(1,'Line 1'); SQL> commit; SQL> quit
备份到 Azure 文件存储
若要备份到 Azure 文件存储,请完成以下步骤:
设置 Azure 文件存储
在本部分中,你将使用 Oracle RMAN 将 Oracle 数据库备份到 Azure 文件存储。 Azure 文件共享是位于云中的完全托管文件共享。 可以使用 SMB 协议或网络文件系统 (NFS) 协议来访问它们。
以下过程介绍如何创建使用 SMB 协议装载到 VM 的文件共享。 有关如何使用 NFS 进行装载的信息,请参阅创建 NFS 共享。
装载 Azure 文件共享时,使用 cache=none
选项禁用文件共享数据的缓存。 若要确保 oracle
用户拥有在共享中创建的文件,请设置 uid=oracle
和 gid=oinstall
选项。
设置存储帐户:
在 Azure 门户中,选择“+ 创建资源”,然后搜索并选择“存储帐户”。
在“创建存储帐户”窗格中:
- 对于“资源组”,请选择现有资源组“rg-oracle”。
- 对于“存储帐户名称”,请输入 oracbkup1。
- 请确保将“位置”设置为与资源组中其他所有资源相同的区域。
- 将“性能”设置为“标准”。
- 对于“帐户类型”,请选择“StorageV2(常规用途 v2)”。
- 对于“复制”,请选择“本地冗余存储(LRS)” 。
选择“高级”选项卡,在“Azure 文件存储”下,将“大文件共享”设置为“已启用”。 选择“查看 + 创建”,然后选择“创建”。
创建存储帐户后,请前往资源并选择“文件共享”。
选择“+ 文件共享”,然后在“新建文件共享”面板上:
对于“名称”,请输入 orabkup1。
将“配额”设置为 10240 GiB。
配额反映文件共享可以增长到的上限。 由于在本示例中使用的是标准存储,因此资源是即用即付且未预配。 将配额设置为 10 字节 (TiB) 不会产生超出所用量的成本。 如果备份策略需要更多的存储空间,则需要将配额设置为适当的级别以保存所有备份。
在“层级”下,选择“事务优化”。
选择“创建” 。
创建文件共享后,请在“文件共享设置”窗格中选择“orabkup1”。
选择“连接”选项卡以打开“连接”面板,然后选择“Linux”选项卡。复制提供的命令以使用 SMB 协议装载文件共享。
将 Azure 文件共享装载到 VM
创建装载点:
sudo mkdir /mnt/orabackup
设置凭据:
if [ ! -d "/etc/smbcredentials" ]; then sudo mkdir /etc/smbcredentials fi
运行以下命令。 将
<Your Storage Account Key1>
替换为之前检索到的存储帐户密钥。if [ ! -f "/etc/smbcredentials/orabackup1.cred" ]; then sudo bash -c 'echo "username=orabackup1" >> /etc/smbcredentials/orabackup1.cred' sudo bash -c 'echo "password=<Your Storage Account Key1>" >> /etc/smbcredentials/orabackup1.cred' fi
更改凭据文件的权限:
sudo chmod 600 /etc/smbcredentials/orabackup1.cred
将装载添加到 /etc/fstab 文件:
sudo bash -c 'echo "//orabackup1.file.core.windows.net/orabackup /mnt/orabackup cifs nofail,vers=3.0,credentials=/etc/smbcredentials/orabackup1.cred,dir_mode=0777,file_mode=0777,serverino,cache=none,uid=oracle,gid=oinstall" >> /etc/fstab'
运行命令,以使用 SMB 协议装载 Azure 文件共享:
sudo mount -t cifs //orabackup1.file.core.windows.net/orabackup /mnt/orabackup -o vers=3.0,credentials=/etc/smbcredentials/orabackup1.cred,dir_mode=0777,file_mode=0777,serverino,cache=none,uid=oracle,gid=oinstall
如果收到类似于以下示例的错误,则可能未在 Linux 主机上安装通用 Internet 文件系统 (CIFS) 包:
mount: wrong fs type, bad option, bad superblock on //orabackup1.file.core.windows.net/orabackup
若要检查是否安装了 CIFS 包,请运行以下命令:
sudo rpm -qa|grep cifs-utils
如果该命令未返回任何输出,请使用以下命令安装 CIFS 包。 然后,重新运行
mount
命令以装载 Azure 文件共享。sudo yum install cifs-utils
使用以下命令检查文件共享是否已正确装载:
df -h
输出应类似于以下示例:
$ df -h Filesystem Size Used Avail Use% Mounted on devtmpfs 3.3G 0 3.3G 0% /dev tmpfs 3.3G 0 3.3G 0% /dev/shm tmpfs 3.3G 17M 3.3G 1% /run tmpfs 3.3G 0 3.3G 0% /sys/fs/cgroup /dev/sda2 30G 9.1G 19G 34% / /dev/sdc1 59G 2.7G 53G 5% /u02 /dev/sda1 497M 199M 298M 41% /boot /dev/sda15 495M 9.7M 486M 2% /boot/efi tmpfs 671M 0 671M 0% /run/user/54321 /dev/sdb1 14G 2.1G 11G 16% /mnt/resource tmpfs 671M 0 671M 0% /run/user/54322 //orabackup1.file.core.windows.net/orabackup 10T 0 10T 0% /mnt/orabackup
备份数据库
在本部分中,你将使用 Oracle RMAN 对数据库和存档日志进行完整备份。 然后,将备份作为备份集写入之前装载的 Azure 文件共享。
将 RMAN 配置为备份到 Azure 文件存储装入点:
rman target / RMAN> configure snapshot controlfile name to '/mnt/orabkup/snapcf_ev.f'; RMAN> configure channel 1 device type disk format '/mnt/orabkup/%d/Full_%d_%U_%T_%s'; RMAN> configure channel 2 device type disk format '/mnt/orabkup/%d/Full_%d_%U_%T_%s';
在此示例中,将 RMAN 备份部分的大小限制为 4 GiB。 但是,RMAN 备份
maxpiecesize
值可能高达 4 TiB,这是 Azure 标准文件共享和高级文件共享的文件大小限制。 有关详细信息,请参阅 Azure 文件存储可伸缩性和性能目标。RMAN> configure channel device type disk maxpiecesize 4000G;
确认配置更改详细信息:
RMAN> show all;
运行备份。 以下命令可创建完整数据库备份(包括存档日志文件)作为压缩格式的备份集:
RMAN> backup as compressed backupset database plus archivelog;
你已使用 Oracle RMAN 联机备份了数据库,并且备份位于 Azure 文件存储中。 由于你将备份存储在 Azure 文件存储中,因此如果需要克隆数据库,则可以从其他 VM 访问这些备份。
使用 RMAN 和 Azure 文件进行数据库备份具有许多优势。 备份和还原时间链接到数据库的大小。 对于大的数据库,这些操作可能需要相当长的时间。
另一种方法是通过 Azure 备份使用应用程序一致性 VM 备份。 无论数据库大小如何,此机制都会使用快照技术来执行快速备份。 与恢复服务保管库的集成提供了 Oracle Database 备份的云存储,因此你可以从其他 VM 和其他 Azure 区域访问它们。
还原并恢复数据库
关闭 Oracle 实例:
sqlplus / as sysdba SQL> shutdown abort ORACLE instance shut down.
删除数据库数据文件:
cd /u02/oradata/TEST rm -f *.dbf
下面的命令使用 RMAN 来还原缺失的数据文件并恢复数据库:
rman target / RMAN> startup mount; RMAN> restore database; RMAN> recover database; RMAN> alter database open;
检查数据库内容是否已完全恢复:
RMAN> SELECT * FROM scott.scott_table;
现已完成在 Azure Linux VM 上备份和恢复 Oracle Database 19c 数据库。
删除 VM
如果不再需要 VM,可以使用以下命令删除资源组、VM 和所有相关的资源:
az group delete --name rg-oracle