为 Backup and DR Service 准备 Oracle 数据库

在开始之前,建议您先查看 适用于 Oracle 的备份和灾难恢复服务

您必须先将 Oracle 服务器添加为备份和灾难恢复服务的主机,然后才能备份 Oracle 数据库。为此,请务必参阅备份 Oracle 数据库的前提条件,然后按照以下准备步骤操作。

Oracle 数据库的准备流程
步骤 准备流程
1 在 Linux 环境中准备 Oracle 数据库
在 Windows 环境中准备 Oracle 数据库
2 准备备份包含 ASM 磁盘组上数据文件的 Oracle 数据库
3 准备 Oracle 数据库身份验证
启用数据库块更改跟踪(可选)
通过 Oracle Data Guard 节点进行保护
将 RMAN 备份配置为对其他节点进行 RAC 透明故障切换
Oracle 归档日志压缩
配置 Oracle 数据库服务以跨多个节点进行负载均衡
修补 Oracle 12c

在 Linux 环境中准备 Oracle 数据库

在保护 Oracle 数据库之前,或者如果数据库保护作业失败,请确保 Oracle 数据库服务器上的以下设置正确无误。

  • 每个要保护的 Oracle 数据库都必须处于运行状态。例如:

    database: actdb
    #ps -ef | grep pmon | grep -i actdb
    oracle   27688     1  0  2015 ?        00:26:24 ora_pmon_actdb
    
  • 数据库必须以归档日志模式运行。如需验证数据库是否在归档日志模式下运行,请以 Oracle OS 用户身份登录数据库服务器并设置数据库环境变量:

    export ORACLE_HOME=<oracle home path>
    (get this from /etc/oratab)
    export ORACLE_SID=<database instance name> (you can get this through
    ps -ef | grep pmon)
    export PATH=$ORACLE_HOME/bin:$PATH
    

    登录 sqlplus:

    #sqlplus / as sysdba
    #SQL> archive log list;
    Database log mode   Archive Mode
    Automatic archival        Enabled
    Archive destination        +FRA
    Oldest online log sequence     569
    Next log sequence to archive   570
    Current log sequence        570
    #SQL>
    
  • 数据库应使用 spfile。验证数据库是否在使用 spfile 运行:

    #sqlplus / as sysdba
    SQL> show parameter spfile
    NAME      TYPE   VALUE
    ------------------ ----------- ------------
    spfile      string  +DATA/ctdb/spfilectdb.ora
    
  • 对于 Oracle RAC 数据库,快照控制文件必须位于共享磁盘下。对于 ASM 下的 Oracle RAC 数据库,快照控制文件必须位于共享磁盘下。

    如需检查这一点,请连接到 RMAN 并运行 show all 命令。如有必要,请进行配置:

        rman target /
    

    然后在 RMAN 中执行以下操作:

       show all
    

    具有 db_unique_name CTDB 的数据库的 RMAN 配置参数如下:

    CONFIGURE RETENTION POLICY TO REDUNDANCY 1; # default
    CONFIGURE BACKUP OPTIMIZATION OFF; # default
    CONFIGURE DEFAULT DEVICE TYPE TO DISK; # default
    CONFIGURE CONTROLFILE AUTOBACKUP OFF; # default
    CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '%F'; # default
    CONFIGURE DEVICE TYPE DISK PARALLELISM 1 BACKUP TYPE TO BACKUPSET; # default
    CONFIGURE SNAPSHOT CONTROLFILE NAME TO '/mnt/ctdb/snapcf_ctdb.f';
    

    此示例展示了设置为本地文件系统的配置。

    在 RAC 环境中,此值必须设置为共享 ASM 磁盘组。如需将其放置在 ASM 磁盘组中,请使用以下命令:

    CONFIGURE SNAPSHOT CONTROLFILE NAME TO '+<DG name>/snap_<DB name>.f';
    

准备备份在 ASM 磁盘组上具有数据文件的 Oracle 数据库

ASM 磁盘组上的备份和灾难恢复暂存磁盘

ASM diskstring 参数必须设置且不为 null。以 ASM OS 用户身份登录数据库服务器,然后设置 ASM 环境变量:

    # export ORACLE_HOME=(oracle ASM home path)
    (get this from /etc/oratab)
    #export ORACLE_SID=(ASM instance name) (you
    can get this through ps ?ef | grep pmon)
    #export PATH=$ORACLE_HOME/bin:$PATH

连接到 sqlplus

    #sqlplus / as sysasm
    #sql> show parameter asm_diskstring
    NAME      TYPE   VALUE
    ------------------- ----------- ------------------------------
    asm_diskstring      string  ORCL:*, /dev/sdt1, /dev/sdu1

如果值的结果为 null,请先获取现有 ASM 磁盘的正确 ASM 磁盘字符串值,然后再继续执行备份和灾难恢复保护。Backup and DR 备份会为其备份暂存磁盘添加磁盘字符串路径 (/dev/Backup and DR/asm/*),以映射到 ASM。

文件系统上的备份和灾难恢复暂存磁盘

如果您要将 Oracle ASM 数据库保护到文件系统,则必须在应用详细信息和设置下将将 ASM 转换为文件系统设置为。请参阅 Oracle 数据库的应用详细信息和设置

准备 Oracle 数据库身份验证

只有在您计划使用数据库身份验证时,才需要执行以下额外的准备步骤。如需了解 Oracle 数据库身份验证,请参阅使用数据库身份验证进行备份和灾难恢复

  1. 按照在 Linux 环境中准备 Oracle 数据库中的步骤操作。

  2. 创建一个数据库用户账号(如果未提供)以用于备份和灾难恢复备份:

    create user act_rman_user identified by <password>;
    
  3. 通过在所有节点上登录 sqlplus 并运行以下命令,向 sysdba 授予对所有 RAC 节点的访问权限:

    grant create session, resource, sysdba to act_rman_user;
    

    对于 Oracle 12c,此角色可以是 sysbackup,而不是 of sysdba,并且数据库用户名以 # 开头。

  4. 验证是否已在 RAC 环境中的所有节点上授予 sysdba 角色:

    #sqlplus / as sysasm
    # sql> select * from gv$pwfile_users;
    INST_ID USERNAME SYSDB SYSOP SYSAS
    ---------- --------------  ----- ----- -----
    1 SYS TRUE TRUE FALSE
    2 SYS TRUE TRUE FALSE
    1 ACT_RMAN_USER TRUE TRUE FALSE
    2 ACT_RMAN_USER TRUE TRUE FALSE
    
  5. 根据您的环境类型,按照以下说明测试服务名称:

在非 RAC 环境中创建并验证 Oracle 服务名称

Oracle 服务名称仅用于数据库身份验证。无需进行操作系统身份验证。

示例:dbstd(数据库名称)和 dbstd(实例名称)

  1. 如果 Oracle 服务名称未列出,请在位于 $ORACLE_HOME/network/admin$GRID_HOME/network/admintnsnames.ora 文件中添加以下条目,以创建服务名称条目:

    act_svc_dbstd =
    (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST
    = (IP of the database server)(PORT = 1521))
    (CONNECT_DATA =
    (SERVER = DEDICATED)
    (SERVICE_NAME = dbstd)
    ) )
    

    如果 tnsnames.ora 文件位于非标准位置,请在应用详细信息和设置下提供该文件的绝对路径,如适用于 Oracle 数据库的应用详细信息和设置中所述

  2. 测试数据库的服务名称条目,确保其已配置:

    以 Oracle OS 用户身份登录并设置 Oracle 环境:

    TNS_ADMIN=(tnsnames.ora file location)
    tnsping act_svc_dbstd
    
  3. 检查数据库用户账号,确保备份和灾难恢复备份可以连接:

    sqlplus act_rman_user/act_rman_user@act_svc_dbstd as sysdba
    
  4. 应用详细信息和设置下的“Oracle 服务名称”设置下,提供创建的服务名称 (act_svc_dbstd),如Oracle 数据库的应用详细信息和设置中所述

在 RAC 环境中创建并验证 Oracle 服务名称

Oracle 服务名称仅用于数据库身份验证。无需进行操作系统身份验证。

三节点 RAC 示例:

  • 数据库名称:dbrac

  • Instance1 名称:dbrac1

  • Instance2 名称:dbrac2

  • Instance3 名称:dbrac3,数据库保护设置来自 Node3(实例名称 dbrac3):

  1. 在位于 $ORACLE_HOME/network/admin$GRID_HOME/network/admintnsnames.ora 文件中添加以下条目,以创建服务名称条目:

    act_svc_dbrac3 =
    (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = (IP of the database server)(PORT = 1521))
    (CONNECT_DATA =
    (SERVER = DEDICATED)
    (INSTANCE_NAME = dbrac3)
    (SERVICE_NAME = dbrac)
    ) ) )
     Where:
     HOST = This can be SCAN IP in a RAC environment or VIP or IP of the node 3 database server.
    SERVICE_NAME = database name
    INSTANCE_NAME = database instance name on node3
    
  2. 测试服务名称:

    以 Oracle OS 用户身份登录并设置 Oracle 环境:

    TNS_ADMIN=(tnsnames.ora file location)
    tnsping act_svc_dbrac3
    
  3. 检查数据库用户账号,确保备份和灾难恢复备份可以连接:

    sqlplus act_rman_user/act_rman_user@act_svc_dbrac3 as sysdba
    
  4. Oracle 数据库的应用详细信息和设置中所述的应用详细信息和设置下,在“Oracle 服务名称”设置下提供创建的服务名称 (act_svc_dbrac3)。

    如果 tnsnames.ora 文件位于非标准位置,请在Oracle 数据库的应用详细信息和设置中所述的应用详细信息和设置下的“Oracle TNS_Admin 路径”设置下提供 tnsnames.ora 文件的绝对路径

启用数据库块更改跟踪(可选)

Oracle 数据库块更改跟踪 (BCT) 中介绍了数据库更改块跟踪

如需检查数据库块更改跟踪是否已启用,请执行以下操作:

sqlplus / as sysdba

在 SQL 提示符中:

select * from v$block_change_tracking;

如果未启用数据库块更改跟踪,请通过 sqlplus 启用数据库块更改跟踪:

使用 ASM 磁盘组

sqlplus / as sysdba

在 SQL 提示符中:

alter database enable block change tracking using file '+<ASM Disk Group Name>/<database name>/<dbname>.bct';

使用文件系统

sqlplus / as sysdba

在 SQL 提示符中:

alter database enable block change tracking using file '$ORACLE_HOME/dbs/<dbname>.bct';

从 Oracle Data Guard 节点保护

您可以通过主数据库节点或 Oracle Data Guard 备用节点保护 Oracle 数据库。如果是从 Oracle Data Guard 节点设置保护,请务必在管理控制台中的“应用详细信息和设置”下设置主节点凭据。

对于数据库身份验证(仅限 Linux)

  • 用户名/密码:数据库用户账号凭据。 为了让此用户账号在 Data Guard 节点上可用并拥有 sysdba 访问权限,必须在主节点上使用 sysdba 权限创建此用户(请参阅创建具有 sysdba 访问权限的备用用户账号)。 然后,必须将主节点中的密码文件(位于 $ORACLE_HOME/dbs/ 下)复制到 Data Guard 节点。

操作系统身份验证

  • 用户名/密码:在操作系统身份验证下,不需要 sysdba 特权。此数据库用户账号需要具有 connect, alter system 权限。为了让此用户账号可在 Data Guard 节点上使用,必须在主节点上创建此用户。

如果用户没有 sysdba 角色,则需要 grant connect, alter system, select on dba_tablespaces

如需授予这些权限,请在 SQL 提示中执行以下操作:

    grant connect, alter system, select on dba_tablespaces to act_rman_user;
  • Oracle Data Guard 主节点服务名称:这是 Data Guard 节点上配置的 tnsnames.ora 文件中的服务名称,用于从备用节点连接到主节点。如果从 Data Guard 备用节点配置备份,则必须提供 Oracle Data Guard 主节点服务名称,才能进行操作系统和数据库身份验证。

如需详细了解所有详细信息和设置,请参阅 Oracle 数据库的应用详细信息和设置

数据库节点 操作系统身份验证 数据库身份验证
主要 无需数据库凭据。 需要数据库凭据。如果未选择任何角色,则使用 sysdba。
待机 即使使用操作系统身份验证(连接到主服务器以切换日志),也需要数据库凭据。 数据库凭据不需要具有 sysdba/sysbackup 角色。 如果使用的是 sysdba/sysbackup 账号,请在“应用详情和设置”中的数据库中的用户角色中设置用户角色。 需要数据库凭据。 数据库凭据必须是 sysdba 或 sysbackup 角色的凭据,并且应用详情和设置中的数据库中的用户角色必须设置为 sysdba 或 sysbackup。 如需设置数据库身份验证,请参阅为 Oracle 服务器启用数据库身份验证

配置将 RMAN 备份透明故障切换到其他节点

您计划纳入备份故障切换配置的所有节点上都必须安装并运行备份和灾难恢复代理。保护功能只能从一个节点设置。

在“详细信息和设置”的“集群节点”中,指定 Oracle RAC 环境中的故障切换节点选项:

    <Failover choice>:<Node IP>:<Servicename>:<Role>

其中:

  • 故障切换选项:故障切换的节点顺序。

  • 节点 IP:您希望在其中运行备份的节点的 IP 地址

  • Servicename:为 Backup and DR RMAN 备份在 tnsnames.ora 中创建并指定的服务的名称。这可以是专门为备份和灾难恢复备份创建的新服务,也可以是该节点上数据库的 SID 名称(实例名称)。

  • 角色:F,表示它是故障切换节点

如需在故障切换节点上的 tnsnames.ora 文件 ($ORACLE_HOME/network/admin/tnsnames.ora 或 $GRID_HOME/network/admin/tnsnames.ora) 下创建新的服务名称,请执行以下操作:

Oracle One 节点环境中的示例

RAC One 节点由两个节点组成:

172.15.157.200
172.15.157.201

它有一个数据库 OneN,在任何给定时间只在一个节点上运行。OneN 受 172.15.157.200 保护,集群节点设置指定为 1:172.15.157.201:OneN:F

如果 OneN 故障转移到 172.15.157.201,备份和灾难恢复备份会跟随它,并从 172.15.157.201(而非 200)开始下一个备份作业。如果备份作业中途发生故障切换,则该作业会失败,下一个作业会使用故障切换节点启动新的备份。

Oracle 环境(而非单个节点)中的示例:

  • 2 个节点 RAC (dbrac1, dbrac2)

  • 保护设置使用 dbrac1 中的数据库名称“dbrac”,故障切换设置为 dbrac2

  • 节点 2 上的服务名称:act_svc_dbrac2

  • Node2 IP 或扫描 IP:172.1.1.0

act_svc_node2 =

  (DESCRIPTION =
  (ADDRESS = (PROTOCOL = TCP)(HOST = 172.1.1.0)(PORT = 1521))
  (CONNECT_DATA =
  (SERVER = DEDICATED)
  (INSTANCE_NAME = dbrac2)
  (SERVICE_NAME = dbrac)
  ) )

应用详情和设置下,集群节点条目如下所示:

Failoverchoice:NodeIP:Servicename:Role

1:172.1.1.1:act_svc_node2:F

集群节点条目 F 和 M 的行为

F:故障切换节点,仅在保护节点无法执行备份时参与。

M:维护节点,如果经过验证能够执行备份,则会替换保护节点。

Oracle 归档日志压缩

备份和灾难恢复归档日志备份支持 Oracle 日志备份集压缩。您选择的压缩类型取决于这些 RMAN 配置设置。根据您的应用场景选择一个选项。

  • 压缩比越低,对备份吞吐量的影响就越小。这些最适合 CPU 资源是限制因素的环境。

  • 建议在大多数环境中使用中等压缩。这些算法可提供良好的压缩比和速度组合。

  • 高压缩率会占用大量资源,最适合在网络速度较慢且网络速度是限制因素的情况下进行备份。

默认设置为“基本”。基本级别不需要 Oracle 高级压缩。

如需检查环境中设置的压缩类型,请从 RMAN 提示符运行 show all 命令:

rman target /

    show all

配置 Oracle 数据库服务以在多个节点之间进行负载均衡

此过程仅适用于 Oracle ASM 数据库。在本示例中,假设有一个四节点 RAC 环境;节点 3 和 4 将进行负载均衡以供备用。

请参阅:

在 Oracle RAC 节点之间进行负载均衡需要进行 Oracle 数据库身份验证。

配置从多个节点进行并行 RMAN 映像复制

在 RAC 环境中,您可以将备份配置为从多个节点并行运行。

  1. 在所有节点上安装备份和灾难恢复代理。

  2. 使用“应用详情和设置”部分,将 ASM 磁盘组映射到节点 3 和节点 4。

  3. 使用 srvctl 创建一个数据库服务,以便从节点 3 和节点 4 运行。

  4. 您可以在应用详情和设置下使用此服务进行指定。在“高级设置”下,选择“频道数量”。RMAN 会在节点 3 和节点 4 之间分配通道。

  5. 设置 Oracle 服务名称和 RAC 成员节点。

配置 Oracle 数据库服务以在多个节点之间进行负载均衡

  1. 应用详情和设置中,配置 RAC 成员节点:node3 的 IP 地址和 node4 的 IP 地址。

  2. 为维护节点创建数据库服务,以供备份和灾难恢复服务进行备份:

    srvctl add service -d <dbname> -s act_service_<dbname>
    -r <dbinstance3>,<dbinstance4> srvctl start service -d <dbname>
    -s act_service_<dbname>
    
  3. 在备用节点(本例中的 dbinstance3dbinstance4 节点)上创建的 Oracle 服务名称的 tns 条目,位于 tnsnames.ora 文件 ($ORACLE_HOME/network/admin/tnsnames.ora 或 $GRID_HOME/network/admin/tnsnames.ora) 下

    act_service_<dbname> =
    (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = <SCAN IP>)(PORT = 1521))
    (CONNECT_DATA =
    (SERVER = DEDICATED)
    (SERVICE_NAME = <DATABASE NAME>)
    ) )
    
  4. 测试创建的 servicename:

    tnsping actservice

  5. 测试 servicename 和用户凭据:

    sqlplus act_rman_user/act_rman_user@act_service_<dbname> as sysdba
    
  6. Application Details & Settings(应用详细信息和设置)下的 Oracle 服务名称下指定此服务名称。

  7. 在受保护的节点(例如节点 3)上创建专用的归档日志备份服务,以用于备份:

    srvctl add service -d <dbname> -s act_arc_service_<dbname> -r <dbinstance3>
    srvctl start service -d <dbname> -s act_arc_service_<dbname>
    
  8. 为在 tnsnames.ora 文件($ORACLE_HOME/network/admin/tnsnames.ora$GRID_HOME/network/admin/tnsnames.ora)下创建的归档日志备份服务名称添加 tns 条目

    act_arc_service_<dbname> =
    (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = <SCAN IP>)(PORT = 1521))
    (CONNECT_DATA =
    (SERVER = DEDICATED)
    (INSTANCE_NAME = <node 3 instance>)
    (SERVICE_NAME = act_arc_service_<dbname>)
    ) )
    
  9. 测试服务名称:

    tnsping act_archservice

  10. 应用详细信息和设置归档日志备份服务名称下指定此服务名称。

修补 Oracle 12c

如果您的 Oracle 12c 安装不包含此补丁(可从 Oracle 支持门户下载),备份和灾难恢复应用感知挂载操作可能会失败:

Oracle 数据库 12c bug# 19404068(针对已创建的控制文件恢复数据库时出现 ORA-1610)

  • (补丁 19404068)适用于 Oracle 12.1.0.2.0 的 Linux x86-64

如需查看是否已安装补丁,请运行以下命令:

    $cd $ORACLE_HOME/OPatch
    $./opatch lsinventory -details
    $./opatch lsinventory -details | grep 19404068

后续步骤

在添加 Oracle 主机之前,请继续执行以下操作:

  1. (可选)将 Oracle Direct NFS 与备份和灾难恢复搭配使用
  2. Oracle 补丁和已知问题

Oracle DBA 指南