你当前正在访问 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 备份提供了更好的解决方案。

先决条件

  • 要执行备份和恢复过程,首先必须创建已安装 Oracle Database 实例的 Linux VM。 建议使用 Oracle 12.x 或更高版本。

  • 按照在 Azure VM 中创建 Oracle Database 实例中的步骤创建 Oracle Database 实例。

准备数据库环境

  1. 若要与 VM 建立安全外壳 (SSH) 会话,请使用以下命令。 将 <publicIpAddress> 替换为 VM 的公共地址值。

    ssh azureuser@<publicIpAddress>
    
  2. 切换到根用户:

    sudo su -
    
  3. oracle 用户添加到 /etc/sudoers 文件中:

    echo "oracle   ALL=(ALL)      NOPASSWD: ALL" >> /etc/sudoers
    
  4. 为了更好地执行此步骤,请确保你已有在名为“vmoracle19c”的 VM 上运行的 Oracle 实例(“test”)。

    切换到 oracle 用户:

    sudo su - oracle
    
  5. 在连接之前,请设置环境变量 ORACLE_SID

    export ORACLE_SID=test;
    

    还应该使用以下命令将 ORACLE_SID 变量添加到 oracle 用户的 .bashrc 文件中,以便将来登录:

    echo "export ORACLE_SID=test" >> ~oracle/.bashrc
    
  6. 启动 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
    
  7. 创建快速恢复区域的位置:

    mkdir /u02/fast_recovery_area
    
  8. 连接到数据库:

    sqlplus / as sysdba
    
  9. 启动数据库(如果它还没有运行的话):

    SQL> startup
    
  10. 设置快速恢复区域的数据库环境变量:

    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;
    
  11. 确保数据库处于 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;
    
  12. 创建一个表来测试备份和还原操作:

    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 文件存储,请完成以下步骤:

  1. 设置 Azure 文件存储
  2. 将 Azure 文件共享装载到 VM
  3. 备份数据库
  4. 还原并恢复数据库

设置 Azure 文件存储

在本部分中,你将使用 Oracle RMAN 将 Oracle 数据库备份到 Azure 文件存储。 Azure 文件共享是位于云中的完全托管文件共享。 可以使用 SMB 协议或网络文件系统 (NFS) 协议来访问它们。

以下过程介绍如何创建使用 SMB 协议装载到 VM 的文件共享。 有关如何使用 NFS 进行装载的信息,请参阅创建 NFS 共享

装载 Azure 文件共享时,使用 cache=none 选项禁用文件共享数据的缓存。 若要确保 oracle 用户拥有在共享中创建的文件,请设置 uid=oraclegid=oinstall 选项。

设置存储帐户:

  1. 在 Azure 门户中,选择“+ 创建资源”,然后搜索并选择“存储帐户”。

    显示创建资源和选择存储帐户的位置的屏幕截图。

  2. 在“创建存储帐户”窗格中:

    1. 对于“资源组”,请选择现有资源组“rg-oracle”。
    2. 对于“存储帐户名称”,请输入 oracbkup1
    3. 请确保将“位置”设置为与资源组中其他所有资源相同的区域。
    4. 将“性能”设置为“标准”。
    5. 对于“帐户类型”,请选择“StorageV2(常规用途 v2)”。
    6. 对于“复制”,请选择“本地冗余存储(LRS)” 。

    屏幕截图显示与创建存储帐户相关的基本信息。

  3. 选择“高级”选项卡,在“Azure 文件存储”下,将“大文件共享”设置为“已启用”。 选择“查看 + 创建”,然后选择“创建”。

    显示用于启用大文件共享的选项卡的屏幕截图。

  4. 创建存储帐户后,请前往资源并选择“文件共享”。

    显示在何处为资源选择文件共享的屏幕截图。

  5. 选择“+ 文件共享”,然后在“新建文件共享”面板上:

    1. 对于“名称”,请输入 orabkup1

    2. 将“配额”设置为 10240 GiB。

      配额反映文件共享可以增长到的上限。 由于在本示例中使用的是标准存储,因此资源是即用即付且未预配。 因此,将配额设置为 10 TiB 不会产生超出所用量的成本。 如果备份策略需要更多的存储空间,则需要将配额设置为适当的级别以保存所有备份。

    3. 在“层级”下,选择“事务优化”。

    4. 选择“创建” 。

    显示用于添加新文件共享的选项的屏幕截图。

  6. 创建文件共享后,请在“文件共享设置”窗格中选择“orabkup1”。

  7. 选择“连接”选项卡以打开“连接”面板,然后选择“Linux”选项卡。复制提供的命令以使用 SMB 协议装载文件共享。

    屏幕截图显示了用于访问命令的面板,这些命令可将文件共享连接到 Linux 计算机。

将 Azure 文件共享装载到 VM

  1. 创建装载点:

    sudo mkdir /mnt/orabackup
    
  2. 设置凭据:

    if [ ! -d "/etc/smbcredentials" ]; then
     sudo mkdir /etc/smbcredentials
    fi
    
  3. 运行以下命令。 将 <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
    
  4. 更改凭据文件的权限:

    sudo chmod 600 /etc/smbcredentials/orabackup1.cred
    
  5. 将装载添加到 /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'
    
  6. 运行命令,以使用 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
    
  7. 使用以下命令检查文件共享是否已正确装载:

    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 文件共享。

  1. 将 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';
    
  2. 在此示例中,将 RMAN 备份部分的大小限制为 4 GiB。 但是,RMAN 备份 maxpiecesize 值可能高达 4 TiB,这是 Azure 标准文件共享和高级文件共享的文件大小限制。 有关详细信息,请参阅 Azure 文件存储可伸缩性和性能目标

    RMAN> configure channel device type disk maxpiecesize 4000G;
    
  3. 确认配置更改详细信息:

    RMAN> show all;
    
  4. 运行备份。 以下命令可创建完整数据库备份(包括存档日志文件)作为压缩格式的备份集:

    RMAN> backup as compressed backupset database plus archivelog;
    

你现在已使用 Oracle RMAN 联机备份了数据库,并且备份位于 Azure 文件存储中。 由于你将备份存储在 Azure 文件存储中,因此如果需要克隆数据库,则可以从其他 VM 访问这些备份。

虽然使用 RMAN 和 Azure 文件存储进行数据库备份具有诸多优势,但备份和还原时间与数据库的大小相关。 对于非常大的数据库,这些操作可能需要相当长的时间。

另一种方法是通过 Azure 备份使用应用程序一致性 VM 备份。 无论数据库大小如何,此机制都会使用快照技术来执行快速备份。 与恢复服务保管库的集成提供了 Oracle Database 备份的云存储,因此你可以从其他 VM 和其他 Azure 区域访问它们。

还原并恢复数据库

  1. 关闭 Oracle 实例:

    sqlplus / as sysdba
    SQL> shutdown abort
    ORACLE instance shut down.
    
  2. 删除数据库数据文件:

    cd /u02/oradata/TEST
    rm -f *.dbf
    
  3. 下面的命令使用 RMAN 来还原缺失的数据文件并恢复数据库:

    rman target /
    RMAN> startup mount;
    RMAN> restore database;
    RMAN> recover database;
    RMAN> alter database open;
    
  4. 检查数据库内容是否已完全恢复:

    RMAN> SELECT * FROM scott.scott_table;
    

现已完成在 Azure Linux VM 上备份和恢复 Oracle Database 19c 数据库。

删除 VM

如果不再需要 VM,可以使用以下命令删除资源组、VM 和所有相关的资源:

az group delete --name rg-oracle

后续步骤

创建高度可用的 VM

浏览用于 VM 部署的 Azure CLI 示例