差分同期を使ったデータベースの移行方法
データベースの移行方法にはいくつか選択肢があります。差分適用が必要な場合には GoldenGate のようなツールを使う場合や、同一バージョンの環境では Data Guard 環境を構築して新しい環境にスイッチオーバー(またはフェイルオーバー)することもあります。本記事ではスタンバイ・データベースを使いながら、RMAN の RECOVER STANDBY DATABASE FROM SERVICE コマンドを使って Data Guard 設定を使わずに差分適用を行う方法について記載しています。
スタンバイ・データベースの作成
スタンバイ・データベースの作成方法は Data Guard 環境と同じです。スタンバイ・データベースは制御ファイルがスタンバイ用になっている以外は元となるデータベースの物理コピーです。ここでは RMAN の DUPLICATE コマンドで稼働中のデータベース・インスタンスからスタンバイ・データベースを作成しています。tnsnames.ora ファイルには以下の設定が記載されています。
名前 | 説明 |
---|---|
SRCDB | コピー元となるデータベース |
DSTDB | コピー先(移行先)データベース |
NOLOGGING 操作でもREDOログが出力されるように元データベースで ALTER DATABASE FORCE LOGGING 文を実行しています。コピー元となるデータベースに必要な変更はこれだけです。
$ sqlplus SYS/<<password>>@SRCDB as sysdba
SQL> ALTER DATABASE FORCE LOGGING;
データベースが変更されました。
SQL> EXIT
$
$ rman target SYS/<<password>>@SRCDB auxiliary SYS/<<password>>@DSTDB
Recovery Manager: Release 19.0.0.0.0 - Production on 月 1月 30 11:35:55 2023
Version 19.14.0.0.0
Copyright (c) 1982, 2019, Oracle and/or its affiliates. All rights reserved.
ターゲット・データベース: O19X (DBID=377954733)に接続されました
補助データベース: O19Xに接続されました(マウントされていません)
RMAN> DUPLICATE TARGET DATABASE FOR STANDBY FROM ACTIVE DATABASE DORECOVER NOFILENAMECHECK;
Duplicate Dbを23-01-30で開始しています
リカバリ・カタログのかわりにターゲット・データベース制御ファイルを使用していま す
チャネル: ORA_AUX_DISK_1が割り当てられました
... <<途中省略>> ...
5オブジェクトを削除しました
Duplicate Dbを23-01-30で終了しました
RMAN> EXIT
$
DUPLICATE コマンドが正常に終了したらスタンバイ・データベースの完成です。インスタンスは MOUNT 状態で起動しています。
差分適用
Data Guard 設定を行っているわけではないので元データベースの更新処理はスタンバイ・データベースに伝播しません。RMAN で移行先データベースに接続し、RECOVER STANDBY DATABASE FROM SERVICE コマンドを実行します。移行元データベースを指すサービス(下記の例では SRCDB)を指定します。
$ rman target SYS/<<password>>@DSTDB
Recovery Manager: Release 19.0.0.0.0 - Production on 月 1月 30 12:48:20 2023
Version 19.14.0.0.0
Copyright (c) 1982, 2019, Oracle and/or its affiliates. All rights reserved.
ターゲット・データベース: O19X (DBID=377954733、未オープン)に接続されました
RMAN> RECOVER STANDBY DATABASE FROM SERVICE SRCDB;
recoverを23-01-30で開始しています
リカバリ・カタログのかわりにターゲット・データベース制御ファイルを使用していま す
Oracleインスタンスが起動しました
... <<途中省略>> ...
メディア・リカバリを開始しています
メディア・リカバリが完了しました。経過時間: 00:00:00
recoverを23-01-30で終了しました
RMAN> EXIT
$
差分の適用が完了しました。
フェイルオーバー
差分適用が完了したらスタンバイ・データベースをプライマリ・データベースに移行します。下記の例では状態を確認し、フェイルオーバーを実行しています。ALTER DATABASE FAILOVER 文は失敗しているので、ALTER DATABASE ACTIVATE PHYSICAL STANDBY DATABASE 文を実行して強制的に昇格処理を実行しています。その後、データベースをオープンして移行完了です。
$ sqlplus SYS/<<password>>@DSTDB as sysdba
SQL*Plus: Release 19.0.0.0.0 - Production on 火 1月 31 10:58:36 2023
Version 19.14.0.0.0
Copyright (c) 1982, 2021, Oracle. All rights reserved.
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.14.0.0.0
に接続されました。
SQL> SELECT name, open_mode, database_role FROM v$database;
NAME OPEN_MODE DATABASE_ROLE
--------- -------------------- ----------------
O19X MOUNTED PHYSICAL STANDBY
SQL> ALTER DATABASE FAILOVER TO O19U;
ALTER DATABASE FAILOVER TO O19U
*
行1でエラーが発生しました。:
ORA-00283: recovery session canceled due to errors
ORA-16436: ALTER DATABASE ... RECOVER FINISH could not start
SQL> ALTER DATABASE ACTIVATE PHYSICAL STANDBY DATABASE;
データベースが変更されました。
SQL> ALTER DATABASE OPEN;
データベースが変更されました。
Author: Noriyoshi Shinoda / Date: February 3, 2023