web-dev-qa-db-ja.com

Windowsプラットフォームでのバックアップからの別のデータベース名でのOracle 11g Rmanリストア

Oracle 11g(Windowsプラットフォーム)の別のデータベース名を持つ別のサーバーへのRMAN復元の適切な方法を誰でも共有できますか?私が見つけたすべてのRMAN復元方法に完全に混乱しています。コマンドを使用してバックアップを取得しました

BACKUP AS COMPRESSED BACKUPSET DATABASE PLUS ARCHIVELOG;

別途制御ファイルのバックアップが必要か確認してください。

どんな助けでもありがたいです。

デフォルトでは、制御ファイルはデータとともにバックアップされます。これは、次のコマンドでオンまたはオフになります。

CONFIGURE CONTROLFILE AUTOBACKUP ON;

しかし、習慣の問題として、私は通常、データのバックアップを次のように実行します。

backup current controlfile ;
backup spfile ;

Windowsで複製データベースを使用する際に、かなりの問題がありました。通常、ターゲットログインのNTS権限エラーが発生します。これにより、補助データベースが作成されなくなります。これらのエラーをトラブルシューティングするための私の努力...まあ、私はあきらめました。

これにより、データベースを新しいインスタンス名で新しいサーバーに手動で復元するために必要なさまざまなOSおよびRMANコマンドをすべて含む「プレイブック」ドキュメントを作成することができました。これにより、新しいホストをより細かく調整できます。

これらのスクリプトは私のOracle 12.1 Windows環境でテストされましたが、あなたの環境には理想的ではないかもしれません。たとえば、RMANは11gよりも12cでSQLステートメントを実行する方が前向きです。うまくいけば、彼らは助けます。

これらのスクリプトは、復元の this link および SIDの変更 に基づいて、いくつかの試行錯誤で作成されました。手順は次のとおりです。

すべてがバックアップされていることを確認します。

Spfileとcontrolfileの新しいコピーを取得したいのですが、後で簡単にできます。

backup device type disk incremental level = 0 section size 1g database plus archivelog;
backup current controlfile tag='Controlfile Level 0';
backup spfile tag='SPFile Level 0';

古いサーバーと新しいサーバーがOracleデータに同じファイルパスを使用していない場合は、次のコマンドを実行します。

select '  Set Newname For Datafile ' || file# || ' to ''' || name || ''';' from v$datafile;
select '  Alter Database Rename File ''' || Member || ''' To ''' || Member || ''';' from v$logfile;

出力を取得し、新しい環境に合わせて必要に応じてパス/ファイル名を変更します。

古いホストから新しいホストにバックアップをコピーする

オプションですが、RMANバックアップファイルを復元先のボックスに置くのが好きです。したがって、新しいサーバーにログインし、完全なバックアップ、アーカイブログ、および自動バックアップフォルダーを古いサーバーの高速リカバリ領域からコピーします。最新の完全バックアップに戻る必要があるだけで、数週間分のファイルを取得する必要がないことに注意してください。

新しいインスタンスをステージングする

新しいホストで、データフォルダー、高速復旧フォルダー、および管理フォルダーを作成します。 Oracleがインストールされており、Oracleユーザーアカウントがこれらのフォルダーを完全に制御できることを確認してください。

古いものと同じ名前の(= /// =)を使用して空のインスタンスを作成します:

oradim -new -sid <<old sid name>>

Set Oracle_SID=<<old sid name>>
RMAN target /

RMANを使用してSPFILEと制御ファイルをリカバリします。 RMAN内で、DBIDを古いインスタンスのDB IDと一致するように設定し、ファイル名とパスを環境に一致するように設定します。

SET DBID=1234567;
startup nomount;
restore spfile to 'C:\Oracle\Product\12.1.0\dbhome_1\database\init<<Old sid>>/ora' from 'f:\fast_recovery_area\<<old sid>>\BackupSet\2017_07_17\O1_MF_NNSNF_SPFILE_LEVEL_0_DOSTOJT8_.BKP';
create pfile='c:\Oracle\product\12.1.0\dbhome_1\Database\pfile<<old sid>>.ora' from spfile='c:\Oracle\product\12.1.0\dbhome_1\Database\Init<<old sid>>.ora';
shutdown immediate;

まだRMANを閉じないでください。 NotePadまたはNotePad ++で前のステップのpfileを編集します。新しい環境を反映するために、必要に応じてパスとメモリ要件を調整します。データベースの名前は変更せず、フォルダーパスを新しいインスタンス名に変更してください。

RMANセッションに戻り、制御ファイルを復元します。ここでも、必要に応じてパスを修正します。

startup nomount pfile = 'c:\Oracle\product\12.1.0\dbhome_1\Database\pfile<<old sid>>.ora’;
restore controlfile from 'F:\fast_recovery\<<old sid>>\BACKUPSET\2017_07_05\O1_MF_NCNNF_CONTROLFILE_LEVEL_0_DOSTO715_.BKP';
Alter Database Mount;

データベースファイルを復元する

引き続きRMANで、コピーしたバックアップファイルをインベントリします。

 catalog start with 'f:\fast_recovery_Area\<<old sid>>';

REDOログファイルをRMANの新しいフォルダに移動します。これらのスクリプトは以前に生成したものです。

Alter Database Rename File 'O:\ORADATA\<<old sid>>\REDO03.LOG' To 'f:\ORADATA\<<NEW sid>>\REDO03.LOG';
Alter Database Rename File 'O:\ORADATA\<<old sid>>\REDO02.LOG' To 'f:\ORADATA\<<new sid>>\REDO02.LOG';
Alter Database Rename File 'O:\ORADATA\<<old sid>>\REDO01.LOG' To 'f:\ORADATA\<<NEW Sid>>\REDO01.LOG';

次に、復元と回復を行い、以前に作成したNewNameスクリプトを置き換えます。

run { 
    Set Newname For Datafile 1 to 'f:\ORADATA\<<new sid>>\SYSTEM01.DBF';
    Set Newname For Datafile 3 to 'f:\ORADATA\<<new sid>>\SYSAUX01.DBF';
    Set Newname For Datafile 5 to 'f:\ORADATA\<<new sid>>\UNDOTBS01.DBF';
    Set Newname For Datafile 6 to 'f:\ORADATA\<<new sid>>\USERS01.DBF';

    RESTORE DATABASE;
    SWITCH DATAFILE ALL;
    RECOVER DATABASE;
}

RMANがベースの復元とリカバリを完了したら、新しいSPFileを作成します。

create spfile from pfile = 'c:\Oracle\product\12.1.0\dbhome_1\Database\pfile<<OLD sid>>.ora’;
alter database open resetlogs;

OracleはTEMPテーブルスペースをバックアップまたは復元しません。これにより、完全なリカバリが成功しなくなります。新しい一時テーブルスペースを作成し、古いテーブルスペースを削除してから、元のテーブルスペースを再構築します。

CREATE TEMPORARY TABLESPACE TEMP_NEW TEMPFILE 'f:\OraData\<<NEW Sid>>\TempNew1.dbf' SIZE 5m autoextend on next 10m maxsize unlimited;
ALTER DATABASE DEFAULT TEMPORARY TABLESPACE TEMP_NEW;
DROP TABLESPACE TEMP including contents;
CREATE TEMPORARY TABLESPACE TEMP TEMPFILE 'f:\OraData\<<NEW Sid>>\Temp01.dbf' SIZE 50m autoextend on next 10m maxsize unlimited;
ALTER DATABASE DEFAULT TEMPORARY TABLESPACE TEMP;
DROP TABLESPACE TEMP_NEW including contents and datafiles;

インスタンス名を変更する

この時点で、Oracleはデータベースの完全に復元されたコピーを実行しているはずです。しかし、新しい名前が必要です。 RMANの場合:

Shutdown immediate;
Startup mount;

RMANを閉じないでください。ただし、管理者として実行されている新しいCMDウィンドウから:

 set Oracle_SID=<<old sid>>
 NID target=/ DBNAME=<<new sid>>

後で災害復旧のために必要になるので、これによって得られるDBIDに注意してください(これが最初のRMANコマンドでした)。

RMANウィンドウに戻ります。

Shutdown Immediate;
Startup Mount;
Alter System Set DB_NAME=<<New sid>> scope=SPFILE;
Shutdown Immediate;
exit;

新しいDBを起動してください!

他のCMDウィンドウから、新しいパスワードファイルを作成し、Windowsサービスを再作成します。 Oracleのほとんどの場合とは異なり、このユーティリティはパスを引用符で囲みません。

orapwd file=c:\Oracle\product\12.1.0\dbhome_1\Database\pwd<<new SID>>.ora password=<SYS pwd> entries=25
oradim -delete -sid <<old sid>>
oradim -new -sid <<new sid>> -intpwd <SYS pwd> -startmode a 

データベースを起動します。

Set Oracle_SID=<<new sid>>
lsnrctl reload
sqlplus / as sysdba
Startup Mount;
Alter Database Open ResetLogs;

新しいデータベースをバックアップする

この時点で、DBにはバックアップがありません。このDBで作業を行う前に、RMANバックアップを実行してください。

4
CaM