不,相反,这意味着您需要在 NOLOGGING 加载后进行备份,而不是您无法备份数据库。
请允许我详细说明一下。通常,当您在 Oracle 中执行 DML 时,您所做更改的前图像会记录在 UNDO 中,并且所有更改(包括 UNDO 更改)首先写入 REDO。这就是 Oracle 管理事务、实例恢复和数据库恢复的方式。如果事务被中止或回滚,Oracle 使用 UNDO 中的信息来撤消事务所做的更改。如果实例崩溃,那么在实例重新启动时,Oracle 将使用 REDO 和 UNDO 中的信息恢复到最后提交的事务。首先,Oracle 会读取 REDO 并前滚,然后,使用 UNDO 回滚所有在崩溃时未提交的事务。通过这种方式,Oracle 能够恢复到最后提交的事务。
现在,当您在插入语句上指定 APPEND 提示时,Oracle 将直接加载执行 INSERT。这意味着数据从高水位线上方加载到全新的、从未使用过的块中。由于正在加载的块是全新的,没有“前映像”,因此,Oracle 可以避免编写 UNDO,从而提高性能。如果数据库处于 NOARCHIVELOG 模式,那么 Oracle 也不会写入 REDO。在处于 ARCHIVELOG 模式的数据库上,Oracle 仍然会写入 REDO,除非在您执行插入 /*+ 附加 */ 之前,您将表设置为 NOLOGGING,(即,alter table tab_name nologging;)。在这种情况下,表的 REDO 日志记录被禁用。但是,这是您可能遇到备份/恢复问题的地方。如果您执行 NOLOGGING 直接加载,然后您遭受媒体故障,并且包含带有 nologging 操作的段的数据文件是从 nologging 加载之前的备份中恢复的,那么重做日志将不包含恢复该段所需的更改。那么,会发生什么?好吧,当您执行 NOLOGGING 加载时,Oracle 会将范围失效记录写入重做日志,而不是实际更改。然后,如果您在恢复中使用该重做,这些数据块将被标记为逻辑损坏。针对该段的任何后续查询都将收到 ORA-26040 错误。
那么,如何避免这种情况呢?好吧,您应该始终在任何 NOLOGGING 直接加载后立即进行备份。如果您从 nologging 加载后的备份中恢复/恢复,则没有问题,因为数据将位于已恢复文件的数据块中。
希望这很清楚,
-标记