11g 上的 Oracle rman 简单备份

Oracle rman simple backup on 11g

这个问题几乎完全一样 oracle rman simple backup

但是那里没有acceptable答案,这个问题大约是11g。所以我会问:

我想在 oracle shema 上做一些 table 初始化 DDL 测试,并且我想在两次运行之间将数据库恢复到之前的测试状态。我在 RMAN 中执行以下操作:

shutdown immediate;
startup mount
backup database;
sql 'alter database open';

正如我所见,它工作正常,列表备份显示了备份。

然后我做了一些修改(添加了一些用户,添加了一些 tables,添加了数据)并尝试恢复备份:

shutdown immediate;
startup mount
restore database;
recover database;
sql 'alter database open resetlogs';

预期结果:数据库应恢复到初始备份时的准确状态。

实际结果:我在测试 DDL 中创建的所有新 table 和用户继续存在。我通过关闭连接、重新启动会话,然后甚至从 tables 中进行选择来验证这一点!即使在恢复后 table 仍然存在!

这是怎么回事?在 MSSQL 和 Postgres 中,备份意味着您保存数据库的状态,而恢复它意味着您回到备份时的状态。但是在 Oracle 11g 的 RMAN 中,它 'claims' 恢复成功,但证据清楚地表明并非如此。

怎样才能让oracle把数据库的状态原封不动的保存下来,然后进行修改,恢复的时候,我想让数据库和我备份的时候一模一样起来了

这在 Oracle 中可行吗?

是的,这是可能的 - 您有多种选择:

  1. 创建数据库(数据文件、控制文件、联机重做日志)的冷备份,然后在需要时恢复它们
  2. 执行所谓的"point in time recovery"(假设您的数据库处于归档日志模式)。使用 RMAN 进行数据库备份,注意 "time" 或 "SCN" 或 "archivelog sequence" 一段时间后,您可以恢复数据库并恢复到之前记录的 time/SCN/LOG SEQUENCE
  3. Oracle 为此目的专门设计的,我在您的案例中推荐它 "Flashback Database"(浏览 Oracle 文档以了解这是什么)。

Oracle 总是 "try" 到 restore/recover 你的数据库,如果可能的话,直到最后提交的事务,这就是为什么你得到上面描述的结果,但是如果你想恢复到特定的time/SCN/SEQUENCE 只需将此事告诉 Oracle :)