不,相反,這意味着您需要在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