不,相反,这意味着您需要在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,除非在执行insert/* + append * /之前,将表设置为NOLOGGING(即alter table tab_name nologging;)。在这种情况下,表的禁用REDO日志记录。但是,这是您可能遇到备份/恢复影响的地方。如果您执行NOLOGGING直接加载,然后遭受介质故障,和包含具有nologging操作的段的数据文件将从nologging加载之前执行的备份中恢复,那么重做日志将为而不是包含更改需要恢复该段。那么,会发生什么?那么,当您执行NOLOGGING加载时,Oracle会将范围无效记录写入重做日志,而不是实际的更改。然后,如果您在恢复时使用该重做,那些数据块将被标记为逻辑损坏。对该段的任何后续查询都将得到一个ORA-26040错误。
那么,如何避免这种情况呢?那么,您应该始终在任何NOLOGGING直接加载后立即进行备份。如果您从之后的备份中恢复/恢复负载,则没有问题,因为数据将位于已恢复的文件中的数据块中。
希望是十分明显的,
马克
这是否意味着我永远不能备份数据库或东西吗?对不起,我不明白。 – johnny