化身在本网站上另一个问题的回答中进行了解释。答案提到了“孤儿”化身:
…还有其他因素会导致 ORPHANED 化身和 OBSOLETE 备份…
我从 Oracle 文档中看到,V$DATABASE_INCARNATION
其中包含一个STATUS
列,该列的值必须为ORPHAN
、CURRENT
或PARENT
,这必须是相关的。
什么是“孤儿”化身,哪些步骤会导致STATUS
= ORPHAN
in出现一行V$DATABASE_INCARNATION
?
化身在本网站上另一个问题的回答中进行了解释。答案提到了“孤儿”化身:
…还有其他因素会导致 ORPHANED 化身和 OBSOLETE 备份…
我从 Oracle 文档中看到,V$DATABASE_INCARNATION
其中包含一个STATUS
列,该列的值必须为ORPHAN
、CURRENT
或PARENT
,这必须是相关的。
什么是“孤儿”化身,哪些步骤会导致STATUS
= ORPHAN
in出现一行V$DATABASE_INCARNATION
?
下面是一个简短的图形,我将用它来解释何时在数据库的化身中创建孤儿。这是我在回答问题时用来解释化身的图形的变体,谁能以易于理解的方式向我解释 Oracle 数据库中的“化身”概念?
我希望你喜欢这个旅程。
恢复数据库到时间点(一)
在 13:00(下午 1 点)之后的某个地方,有人决定必须将数据库恢复到 12:00(中午 12 点)。DBA 要么启动一堆 RMAN 命令来将数据库恢复到那个时间点,要么通过出色的 GUI 单击他的方式来启动来自第 3 方供应商的恢复/恢复。
RMAN 从磁盘/磁带检索数据库的完整备份和所有存档日志备份,并将它们还原到磁盘。在恢复阶段,RMAN 将检查所有相关信息是否可用,并将所有已完成的事务前滚到该时间点,并将所有未完成的事务回滚到该时间点,以确保数据库处于一致状态。
在数据库向公众开放之前,数据库必须确保所有未来的备份不会与之前的备份发生冲突。这是应该创建一个新的化身的时候,它发生在您执行以下命令打开数据库时:
您可以对您的实例运行以下脚本以检索您的(当前)化身的分层视图:
数据库的当前化身将与此类似:
使用图形我们可以看到我们已经从包含化身 1 的路径移动到包含化身 2 的路径,因为我们已经打开了数据库
RESETLOGS
并且数据库已经创建了一个新的化身。恢复数据库到时间点(二)
让我们再次假设数据库在第一次恢复/恢复操作后继续运行,并且在 15:00(下午 3 点)之后不久,有人决定需要在同一天的 15:00(下午 3 点)重新开始一个新的恢复/恢复到整小时。
RMAN 将还原文件、恢复数据库并启动
ALTER DATABASE OPEN RESETLOGS
以使数据库重新联机。INCARNATION# 现在将设置为 3,并且 16:00 的第一个备份将包含以下信息:如果我们使用上面的脚本查询数据库中的化身,我们将得到如下内容:
恢复数据库到时间点(三)
让我们再次假设数据库在第二次恢复/恢复操作之后继续运行,并且在 17:00(下午 5 点)之后,有人决定需要在同一天的 14:00(下午 2 点)进行新的恢复/恢复。
RMAN 将恢复文件、恢复数据库并启动
ALTER DATABASE OPEN RESETLOGS
以使数据库重新联机。INCARNATION# 现在将设置为 4,并且 18:00 的第一个备份将包含以下信息:如果我们使用上面的脚本查询数据库中的化身,我们将得到如下内容:
发生了什么事?我们有一个孤儿!
孤儿化身...
如果你看一下这张图,我们现在正站在广场上,时间是 18:00(下午 6 点),带着 Incarnation 4 和 SCN 400。现在如果你沿着这条线回到开头,你可以看到我们将从 incarnation 开始4 备份到化身 2,然后返回到化身 1,这是创建数据库的时间。
这也对应于我的脚本的(简化)输出。
那么化身3发生了什么?化身 3 是坏的还是陈旧的,或者是什么给出的?
回答
不,化身3还不错,只是孤儿而已。
在更大的规模上,备份和恢复之间的时间更长,您仍然可以将数据库恢复/恢复到化身 3 沿袭中的某个时间点。您将启动以下命令:
...然后将数据库恢复/恢复到该时间点,就像其他恢复/恢复数据库一样。
状态告诉您
ORPHAN
的是,化身 3 不再与具有当前化身 4 的数据库的当前状态相关。孤立化身 3 不再需要沿当前时间线恢复/恢复数据库。...导致过时的备份
现在查看与孤立实例相关的数据库备份,RMAN 确定孤立实例的备份已过时。但这是一个不同的问答的故事......
RC_DATABASE_INCARNATION
重现步骤: