次の手順は、データベースの停止時間を最小限にするためのものです。移行の対象がプライマリ・データベースかスタンバイ・データベースによって、手順がわずかに異なります。この手順では、「RMANを使用してOracle ASMにデータベースを移行するための準備」で説明したのと同じことを前提とします。リカバリ領域をOracle ASMに移行しない場合は、示されている手順の一部を変更する必要があります。
注意:
次の手順は、SQL*PlusとRMANの間で切り替わるため、それぞれのユーティリティに1つのターミナル・ウィンドウを開いたままにします。
Oracle ASMにデータベースを移行する手順:
「RMANを使用してOracle ASMにデータベースを移行するための準備」の手順に従います。
Oracle ASMストレージでサーバー・パラメータ・ファイルをリストアまたは作成します。
データベースでサーバー・パラメータ・ファイルが使用されているかどうかによって、手順が異なります。
データベースでサーバー・パラメータ・ファイルが使用されている場合、次のコマンドでOracle ASMディスク・グループにリストアします。sid
はインスタンスのSIDです。
RMAN> STARTUP MOUNT;
RMAN> RESTORE SPFILE TO '+DATA/spfilesid.ora';
RMAN> SHUTDOWN IMMEDIATE;
データベースでサーバー・パラメータ・ファイルが使用されていない場合、Oracle ASMで1つ作成します。SQL*PlusでCREATE SPFILE
コマンドを次のように実行します(sid
はデータベースのSIDです)。
SQL> CREATE SPFILE='+DATA/spfilesid.ora' FROM PFILE='?/dbs/initsid.ora';
Oracle Managed Files初期化パラメータをOracle ASMの場所に設定します。
注意:
高速リカバリ領域を移行しない場合、DB_RECOVERY_FILE_DEST
およびDB_RECOVERY_FILE_DEST_SIZE
初期化パラメータの設定を変更しないでください。ただし、オンラインREDOログの移行の場合は、DB_CREATE_ONLINE_LOG_DEST_
n
パラメータをOracle ASMの場所に設定する必要があります。
DB_CREATE_FILE_DEST
およびオプションのDB_CREATE_ONLINE_LOG_DEST_
n
初期化パラメータをOracle ASMディスク・グループに設定します。データベースでリカバリ領域を使用する場合、リカバリ領域の場所をOracle ASMディスク・グループに変更します。また、リカバリ領域のサイズも変更します。
次の例に示すように、SQL*Plusでコマンドを実行します。例では、高速リカバリ領域のサイズを100GBと想定し、高速リカバリ領域にディスク・グループ+FRA
を指定します。
SQL> STARTUP FORCE NOMOUNT; SQL> ALTER SYSTEM SET DB_CREATE_FILE_DEST='+DATA' SID='*'; SQL> ALTER SYSTEM SET DB_RECOVERY_FILE_DEST_SIZE=100G SID='*'; SQL> ALTER SYSTEM SET DB_RECOVERY_FILE_DEST='+FRA' SID='*';
CONTROL_FILES
初期化パラメータをOracle ASMの場所に設定します。
高速リカバリ領域を移行する場合は、SQL*Plusで次のコマンドを入力してデータベース・インスタンスを再起動し、制御ファイルの場所をディスク・グループ+DATA
および+FRA
に設定します。
SQL> STARTUP FORCE NOMOUNT; SQL> ALTER SYSTEM SET CONTROL_FILES='+DATA','+FRA' SCOPE=SPFILE SID='*';
高速リカバリ領域を移行しない場合は、SQL*Plusで次のコマンドを入力してデータベース・インスタンスを再起動し、制御ファイルの場所をディスク・グループ+DATA
に設定します。
SQL> STARTUP FORCE NOMOUNT; SQL> ALTER SYSTEM SET CONTROL_FILES='+DATA','+DATA' SCOPE=SPFILE SID='*';
制御ファイルをOracle ASMに移行し、制御ファイルをマウントします。
制御ファイルをリストアするためにRMANターミナルに切り替えます。次の例で、original_cf_name
は、移行前の初期化パラメータ・ファイル内の制御ファイル名です。
RMAN> STARTUP FORCE NOMOUNT;
RMAN> RESTORE CONTROLFILE FROM 'original_cf_name';
RMAN> ALTER DATABASE MOUNT;
データファイルをOracle ASMに移行します。
RMANを使用して、「RMANを使用してOracle ASMにデータベースを移行するための準備」の手順5「データファイルをOracle ASMディスク・グループにバックアップします」で作成したデータベース・コピーに切り替えます。切替えにより、すべてのデータファイルはOracle ASMディスク・グループ上のファイルに名前が変更されます。後で、データベースをリカバリします。増分バックアプが取られた場合、RMANではそれらをリカバリ中に適用します。たとえば、RMANプロンプトで次のコマンドを入力します。
SWITCH DATABASE TO COPY; RUN { ALLOCATE CHANNEL dev1 DEVICE TYPE DISK; ALLOCATE CHANNEL dev2 DEVICE TYPE DISK; ALLOCATE CHANNEL dev3 DEVICE TYPE DISK; ALLOCATE CHANNEL dev4 DEVICE TYPE DISK; RECOVER DATABASE; }
データベースでブロック変更トラッキングまたはフラッシュ・データベースを使用する場合、これらの機能を有効にします。
注意:
リカバリ領域を移行しない場合、フラッシュバック・データベースは無効にしていないので、有効にはしません。
たとえば、SQL*Plusで次の文を入力します。
SQL> ALTER DATABASE ENABLE BLOCK CHANGE TRACKING USING FILE '+DATA'; SQL> ALTER DATABASE FLASHBACK ON;
データベースを標準操作モードにします。
標準操作モードは、データベースがプライマリ・データベースかスタンバイ・データベースかによって決まります。
データベースがプライマリ・データベースである場合は、次のようにオープンします。
SQL> ALTER DATABASE OPEN;
データベースがスタンバイ・データベースの場合は、次のように管理リカバリ・モードを再開します。
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE;
一時ファイルを削除し、Oracle ASMに再作成します。
SQL*Plusを使用して、一時ファイルを再作成します。次の例では、元の記憶域にある一時ファイルの名前はtempfile_name
です。一時表領域の名前はtemp_tbs_name
です。
SQL> ALTER DATABASE TEMPFILE 'tempfile_name' DROP; SQL> ALTER TABLESPACE temp_tbs_name ADD TEMPFILE;
オンラインREDOログ・ファイルを移行します。
これがプライマリ・データベースである場合、Oracle ASMで新しいログ・グループ・メンバーを追加し、古いメンバーを削除します。次のPL/SQLスクリプトを使用すると、オンラインREDOログ・グループをOracle ASMディスク・グループに移行できます。PL/SQLスクリプトでは、「RMANを使用したOracle ASMへのデータベースの移行」の手順3「Oracle Managed Files初期化パラメータをOracle ASMの場所に設定します」で指定したOracle Managed Files初期化パラメータが設定されていると想定しています。
必要に応じて、古い高速リカバリ領域のバックアップおよびコピーを、次のようにOracle ASMに移行します。
リカバリ領域に外部アーカイブ・ログが存在する場合、それらをOracle ASMに移行できません。RMANプロンプトで次のコマンドを実行します。
RMAN> DELETE ARCHIVELOG ALL;
アーカイブREDOログ・ファイル、バックアップ・セットおよびデータファイル・コピーをOracle ASMにバックアップします。たとえば、RMANプロンプトで次のコマンドを実行します。
RUN { ALLOCATE CHANNEL dev1 DEVICE TYPE DISK; ALLOCATE CHANNEL dev2 DEVICE TYPE DISK; ALLOCATE CHANNEL dev3 DEVICE TYPE DISK; ALLOCATE CHANNEL dev4 DEVICE TYPE DISK; BACKUP AS COPY ARCHIVELOG ALL DELETE INPUT; BACKUP BACKUPSET ALL DELETE INPUT; BACKUP AS COPY DATAFILECOPY ALL DELETE INPUT; }
例8-1 オンラインREDOログの移行
SET SERVEROUTPUT ON; DECLARE CURSOR rlc IS SELECT GROUP# GRP, THREAD# THR, BYTES, 'NO' SRL FROM V$LOG UNION SELECT GROUP# GRP, THREAD# THR, BYTES, 'YES' SRL FROM V$STANDBY_LOG ORDER BY 1; stmt VARCHAR2(2048); BEGIN FOR rlcRec IN rlc LOOP IF (rlcRec.srl = 'YES') THEN stmt := 'ALTER DATABASE ADD STANDBY LOGFILE THREAD ' || rlcRec.thr || ' SIZE ' || rlcRec.bytes; EXECUTE IMMEDIATE stmt; stmt := 'ALTER DATABASE DROP STANDBY LOGFILE GROUP ' || rlcRec.grp; EXECUTE IMMEDIATE stmt; ELSE stmt := 'ALTER DATABASE ADD LOGFILE THREAD ' || rlcRec.thr || ' SIZE ' || rlcRec.bytes; EXECUTE IMMEDIATE stmt; BEGIN stmt := 'ALTER DATABASE DROP LOGFILE GROUP ' || rlcRec.grp; DBMS_OUTPUT.PUT_LINE(stmt); EXECUTE IMMEDIATE stmt; EXCEPTION WHEN OTHERS THEN EXECUTE IMMEDIATE 'ALTER SYSTEM SWITCH LOGFILE'; EXECUTE IMMEDIATE 'ALTER SYSTEM CHECKPOINT GLOBAL'; EXECUTE IMMEDIATE stmt; END; END IF; END LOOP; END; /