いいえ、逆に、データベースをバックアップできないということではなく、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モードのデータベースでは、挿入/ *+追加*/を実行する前に、テーブルをNOLOGGINGに設定しない限り(つまり、テーブルtab_name nologging;を変更しない限り)、OracleはREDOを書き込みます。その場合、テーブルのREDOロギングは無効になります。ただし、これはバックアップ/リカバリの影響に遭遇する可能性がある場所です。NOLOGGINGの直接ロードを実行した後、メディア障害が発生した場合、nologging操作のあるセグメントを含むデータファイルは、nologgingロードの前に作成されたバックアップから復元されます。その場合、REDOログには、そのセグメントを回復するために必要な変更は含まれません。それで、何が起こりますか?NOLOGGINGロードを実行すると、Oracleは、実際の変更ではなく、エクステント無効化レコードをREDOログに書き込みます。次に、そのREDOをリカバリで使用すると、それらのデータブロックは論理的に破損しているとマークされます。そのセグメントに対する後続のクエリは、ORA-26040エラーを受け取ります。
だから、これを回避する方法は?さて、NOLOGGINGの直接ロードの直後に常にバックアップを取る必要があります。ロギングなしのロード後に作成されたバックアップから復元/復元する場合、データは復元されたファイルのデータブロックにあるため、問題はありません。
それが明確であることを願っています、
-マーク