database - 如何重新复制损坏的物理备用数据库?

标签 database oracle oracle11g standby

首先是一些数据:我们使用的是 Oracle 11g 数据库。在专用服务器上运行的主数据库和在单独的专用服务器上运行的物理备用数据库。我们使用DataGuard特性实时自动复制主库到物理备库。主数据库也通过 RMAN 备份。

目前我无法处理我们的物理备用数据库的问题。归档日志从主数据库到物理备用数据库的传输以某种方式停止了,更糟糕的是一些归档日志已经从我们的一些员工中删除,现在我无法通过执行以下语句来发出恢复:

RECOVER MANAGED STANDBY DATABASE THROUGH ALL SWITCHOVER DISCONNECT USING CURRENT LOGFILE;

因为所需的归档日志已经不存在了。

所以我的想法是重新复制物理备用数据库。我关闭了物理备用数据库并使用 STARTUP NOMOUNT 重新启动它。然后登录到托管主数据库的服务器并启动 RMAN session :

RMAN target / auxiliary sys@PRIMARY_DB_DG
   RMAN> sql 'ALTER SYSTEM ARCHIVE LOG CURRENT';
   RMAN> DUPLICATE TARGET DATABASE FOR STANDBY FROM ACTIVE DATABASE DORECOVER
         NOFILENAMECHECK;

但在将物理备用数据库更改为 MOUNT 状态后不久,进程因任一原因而崩溃

  1. RMAN-04006:来自辅助数据库的错误:ORA-12537:TNS:连接已关闭,

  2. RMAN-03009:clone_default channel 上的切换命令在 2011 年 11 月 15 日 11:13:58 失败 ORA-03113: 通信 channel 上的文件结束或

  3. RMAN-06136:来自辅助数据库的 ORACLE 错误:ORA-03113:通信 channel 上的文件结束

我在谷歌上搜索了解决方案,但只找到了从头开始设置物理备用数据库的指南。那么有人知道如何修复物理数据库而无需全新设置吗?

您好, 炭黑

最佳答案

这是对我有用的解决方案:

  1. 关闭物理备用数据库

    SQL> shutdown immediate;
    
  2. (可选,发生故障时更安全)备份关闭实例使用的所有数据文件 (*.dbf)、重做日志、存档日志、在线日志、闪回日志和控制文件。

  3. 删除所有数据文件 (*.dbf)、重做日志、存档日志、联机日志、闪回日志和控制文件在其引用位置,但确保保留目录。

  4. 使用 NOMOUNT-Option 启动物理备用数据库

    SQL> startup nomount;
    
  5. 现在切换到您的主要数据库环境。

  6. 开始对您的主要环境进行管理:

    $> rman target / auxiliary sys@Dataguard_instance
    

    Dataguard_instance 必须替换为您的 DataGuard 实例名称。 连接后确保你连接的目标数据库是你的主数据库

    connected to target database: PRIM_DB (DBID=4135917300)
    auxiliary database Password:
    connected to auxiliary database: PRIM_DB (not mounted)
    

    请注意,您的物理备用数据库被列为未安装的主数据库。 如果您看到与目标数据库中相同的信息,则可能是您两次连接到主数据库。在那种情况下,我们将创建一个 100% 的副本而不是物理备用数据库。因此,请确保您使用的是正确的 DataGuard 实例。

  7. 因此,在我们开始之前,我们强制进行日志切换:

    RMAN> sql 'alter system archive log current';
    
  8. 现在我们要开始完全复制我们的物理备用数据库

    RMAN> duplicate target database for standby from active database dorecover  nofilenamecheck;
    
  9. 现在 rman 将执行物理备用数据库的复制。根据您的数据文件大小,这可能需要几个小时才能打开结束(当主数据库闲置约 1.5T 文件时,我在晚上需要大约 4 个小时)。

  10. rman 完成后,您可以退出 rman。

  11. 重新连接到您的物理备用数据库并将其关闭:

    SQL> shutdown immediate;
    
  12. 如果您使用闪回选项(否则继续第 13 步):

    SQL> startup mount;
    SQL> alter database flashback on;
    SQL> alter database open;
    
  13. 重启物理备用:

    SQL> startup;
    
  14. 完成!

希望对您有所帮助。

关于database - 如何重新复制损坏的物理备用数据库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8135393/

相关文章:

mysql - 使用 NodeJS 和 KnexJS 同步 MySQL 查询

java - Java 数据库抽象语言

c# - 使用 EF 在 db 中建模树状结构

iOS:从 JSON 更新核心数据数据库

oracle - Oracle是否等效于SQL Server STUFF函数?

sql - 按时间间隔对数据进行分组

oracle - 将物化 View 转换为 Oracle 11g 中的表?

oracle - 无法将大 double 存储到 Oracle 中(ORA-01426 : numeric overflow)

sql - 使用 Group by 的 SQL 命令出错?

oracle - 为已经存在的表创建列表分区