0

RMAN を使用して Oracle バックアップを取得し、現在の scn 番号を保存しています。以下のコマンドから scn 番号を取得しています。

select max(next_change#) from v$archived_log where archived = 'YES' group by thread#;

以下のように出力されます

MAX(NEXT_CHANGE#)
-----------------
          3911392
          3903950

オラクルのドキュメントから見つけたのは、ログが2回アーカイブされた場合、同じ、、、のアーカイブされたログレコードが2つあるがTHREAD#SEQUENCE#名前FIRST_CHANGE#が異なることです。

SET Until SCN質問 1)コマンドで復元中にどの SCN を参照する必要がありますか?

Que 2) 以下のように、SCN を取得するためのコマンドがもう 1 つあります。

select current_scn from v$database;

その出力は

CURRENT_SCN
-----------
    3914145

これら 2 つのコマンド出力 SCN の違いは何ですか?

質問 3) 2 つの Oracle マシンを持つ RAC セットアップがあります。これらの 2 つのスレッド # はこれと関係がありますか?

4

1 に答える 1

1

まず、Oracle にはシステム SCN が 1 つしかないという事実から始めましょう (RAC にいくつのノードがあるかは関係ありません)。各トランザクションには独自の SCN があります。そのため、異なるスレッドに異なる SCN が存在します (各スレッドが独自のトランザクションを管理するため、これは明らかです)。今、あなたの質問に答えます:

  1. 必要な SCN を参照する必要があるため、この質問は少し奇妙です。3 日前の「特定の時点」の復元が必要な場合は、3 日前の SCN を参照します。最後にコミットされたトランザクションまで DB を復元/回復したい場合は、SCN をまったく参照する必要はありません。
  2. はい - 「デュアルから dbms_flashback.get_system_change_number を選択」し、他の方法が存在する可能性があります。select max(next_change#) from v$archived_log where archived = 'YES' group by thread#;との違い select current_scn from v$database;は、最初のケースでは (archivelog に) アーカイブされた max(SCN) を取得することです。2 番目は現在の DB SCN であり、常に最初の SELECT より大きくなります。
  3. はい、各スレッドは独自のトランザクション (および暗黙の SCN) を管理します

一般に、「特定の時点」のリカバリが必要な場合にのみ、リストア/リカバリ シナリオで SCN を参照する必要があります。select max(next_change#) from v$archived_log where archived = 'YES' group by thread#;は、最新のシステム全体の SCN を意味するのではなく、最大のアーカイブ SCN を意味します (現在のオンライン REDO ログにも多数の SCN があることを考慮してください)。また、DB が NO_ARCHIVE モードであるかどうかについても考えてください。この場合、select は何も返しません...

于 2016-02-23T13:24:50.407 に答える