AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / dba / 问题 / 129311
Accepted
user_0
user_0
Asked: 2016-02-16 08:06:45 +0800 CST2016-02-16 08:06:45 +0800 CST 2016-02-16 08:06:45 +0800 CST

从旧的 rman 备份恢复数据 - ORA-01152

  • 772

我在从旧备份中恢复一些数据时遇到了一些麻烦。

原来的机器丢失了,我的任务是恢复数据。这不是一台关键机器,但一些数据仍然有用。

  • 原始服务器上的 Oracle:11.2.0.2
  • 目标服务器上的 Oracle:11.2.0.4

服务器是redhat- 5.6 原版。6.x 目的地。

在安装了 oracle 的新机器上,我做了:

export ORACLE_SID=oldsid
rman TARGET /

在 rman 中,我将 sid 设置为旧数据库:

SET DBID 3348161342;

然后从备份中恢复 controlfile 和 spfile。重要提示:这些文件比备份更新。

RESTORE CONTROLFILE from '/mount/restorepoint/3348161342_41qtltn4_1_1_20160111.bck
restore spfile from '/mount/restorepoint/sp_OLDDB-3348161342_42qtltn6_1_1_20160111.bck';

挂载数据库:

ALTER DATABASE MOUNT;

并指定备份文件的位置:

catalog start with '/mount/restorepoint/rmanfiles';

因为在原始数据库上也有 TDE。

  • 创建了一个存放钱包的目录
  • 创建了带有钱包位置指示的 sqlnet.ora 文件

修改后的系统:

alter system set encryption wallet open identified by "thetdepassword";

然后再次在 rman 中:

alter database mount;
RESTORE DATABSE;

到目前为止,一切都很好。但是当我进入 OPEN 数据库时:

ORA-01589: must use RESETLOGS or NORESETLOGS option for database open

好吧,我的坏。然后我使用:alter database open RESETLOGS; 我有错误:

ORA-01152: file 4 was not restored from a sufficiently old backup
ORA-01110: data file 4: '/ltm/data/oracle/dati/olddb/users01.dbf'

我错过了什么?
在原始备份脚本中的选项必须是:

BACKUP AS COMPRESSED BACKUPSET INCREMENTAL LEVEL 0 DATABASE

我怎样才能再次读取该数据?

我来自 sqlserver 和 postgresql 世界,所以可能我错过了一些东西......

oracle rman
  • 3 3 个回答
  • 21912 Views

3 个回答

  • Voted
  1. Best Answer
    atokpas
    2016-02-16T09:20:15+08:002016-02-16T09:20:15+08:00

    让我们看看 oerr 实用程序提供的信息。

    ORA-01152: 文件 1 未从足够旧的备份中恢复

    原因:启动了不完整的恢复会话,但应用的日志数量不足以使数据库保持一致。该文件仍然在最后应用的日志的未来。此错误的最可能原因是在进行不完全恢复之前忘记从备份中恢复文件。

    行动:要么应用更多日志,直到数据库保持一致,要么从旧备份恢复数据库文件并重复恢复

    根据您的帖子,您尚未恢复数据库。您可以尝试以下命令来恢复您的数据库。

    SQL> 使用备份控制文件恢复数据库,直到取消;
    SQL>alter database open resetlog;
    

    由于您是 Oracle 新手,您可能会发现以下链接对于将旧备份恢复到新主机很有用。
    在新主机上恢复数据库

    • 3
  2. miracle173
    2016-02-17T10:49:43+08:002016-02-17T10:49:43+08:00

    您必须恢复数据库。我假设您恢复了您的在线备份(或不一致的离线备份,但我们将忽略这种可能性)。下一步是恢复数据库。所以在你的rman会话中执行一个

    recover database;
    

    或一个

    recover database until ....;
    

    其中 '....' 是一个时间点(或 SCN 或类似的东西)。如果使用时间点,它必须在数据文件备份的结束时间之后。否则数据文件将保持不一致。

    恢复过程会将增量 1 级备份(如果存在)和存档日志应用到您的数据库。

    恢复数据库后,您可能会遇到下一个问题,因为您将 11.2.0.2 数据库恢复到 11.2.0.4 环境。因此,您必须将还原与升级到 11.2.0.4 结合起来。

    升级到 11.2.0.4 的详细说明可以在 11.2.0.4 软件包中找到。这是我在 Google 上搜索到的一篇简短的 Blob 文章 ( rkorclappsdbastuff )。从这里我们看到,您必须在 11.2.0.2 数据库上执行一些预升级步骤(步骤 2 到 5),因此您必须跳过它们:您无法运行预升级脚本 utlu112i.sql 并实施其建议,您也不能升级前计算字典统计信息,不能运行 utlrp.sql 编译无效对象。您必须将恢复的 spfile 调整为 11.2.0.4:创建一个 pfile,更改/添加/删除参数,如有必要,从 spfile 重新创建一个 spfile。您不需要数据库来执行create pfileand create spfile。

    现在您可以打开数据库,但您必须在升级模式下打开它,因为它是一个 11.2.0.2 数据库,必须升级到 11.2.0.4 并且您使用重置日志打开它,因为它是一个没有日志文件的恢复数据库。所以正确的命令(参见Oracle SQL Language Reference)是

    REM step 12 of rkorclappsdbastuff
    startup mount
    alter database open resetlogs upgrade ;
    @catupgrd.sql
    

    现在您可以继续执行其余步骤。

    • 2
  3. Gandolf989
    2016-02-17T06:28:28+08:002016-02-17T06:28:28+08:00

    如果您有多个控制文件备份,请尝试使用最旧的备份。本质上,该消息告诉您控制文件比备份的其余部分更新。例如,如果您备份控制文件,然后备份数据库,然后备份控制文件。使用控制文件的第二个备份进行还原将导致您遇到的错误。使用控制文件的旧备份或第一个备份进行恢复应该可以工作。

    • 0

相关问题

  • Oracle 中的数据库备份 - 导出数据库还是使用其他工具?

  • ORDER BY 使用文本列的自定义优先级

  • 舒服的sqlplus界面?[关闭]

  • 如何在数据库中找到最新的 SQL 语句?

  • 如何使用正则表达式查询名称?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目

    • 12 个回答
  • Marko Smith

    如何让sqlplus的输出出现在一行中?

    • 3 个回答
  • Marko Smith

    选择具有最大日期或最晚日期的日期

    • 3 个回答
  • Marko Smith

    如何列出 PostgreSQL 中的所有模式?

    • 4 个回答
  • Marko Smith

    列出指定表的所有列

    • 5 个回答
  • Marko Smith

    如何在不修改我自己的 tnsnames.ora 的情况下使用 sqlplus 连接到位于另一台主机上的 Oracle 数据库

    • 4 个回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Martin Hope
    Jin 连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane 如何列出 PostgreSQL 中的所有模式? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh 为什么事务日志不断增长或空间不足? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland 列出指定表的所有列 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney MySQL 能否合理地对数十亿行执行查询? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx 如何监控大型 .sql 文件的导入进度? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve