Amazon Web Services ブログ

AWS DMS を使用して Oracle ASM からAWSに移行する方法

Oracle 自動ストレージ管理 (ASM) データベースフレームワークは、Oracleデータベースファイル用のボリュームマネージャとファイルシステムを提供し、シングルインスタンスの Oracle Database と Oracle Real Application Clusters (Oracle RAC) をサポートしています。ASMにはファイルシステムとデータベース内のボリュームを直接管理するためのツールがあります。これらのツールを使用すると、データベース管理者 (DBA) は標準的なOracle環境で使いなれたSQL文を使用してボリュームやディスクを制御できます。

データベースフレームワークの管理は、効率的なビジネスを維持するための基本的な機能です。最近まで、DBAはデータベースフレームワークを作成する前に、必要な機器とライセンスを取得するための多大な作業を行わなければなりませんでした。クラウドコンピューティングとオープンソースフレームワークの革新により、多くの企業がプロプライエタリな (OLTP) データベースエンジンやフレームワークからオープンソースフレームワークに移行しています。

あるデータベースフレームワークを別のデータベースフレームワークに移行するには、適切な計画と努力が必要です。対象のOLTPワークロードの内容についてよく理解していたとしても、それらを別のデータベースエンジンに動かすことは難しいことです。移行プロセスの各ステップには、テストと検証に時間の掛かる作業が必要です。

AWS Schema Conversion Tool (AWS SCT) はOracleのディクショナリとセカンダリオブジェクトを、サポート対象のターゲットデータベースに最小限の作業で変換するのに役立ちます。AWS SCT では、手動での変更や再作成が必要なオブジェクトやコードを識別するための移行評価レポートを作成できます。

このブログ記事では、ストレージインフラストラクチャが Oracle ASM のOracleソースエンドポイントでの AWS Database Migration Service (AWS DMS) の Change Data Capture (CDC) の使い方について説明します。

ソースであるOracleのログを読み取るための AWS DMS の方式

Oracleをソースとして使用する場合、進行中の変更をレプリケートするために、AWS DMS はログを読み取る2つの方法を提供します。Oracle LogMiner と Oracle Binary Reader です。

デフォルトでは、AWS DMS は Change Data Capture (CDC) に Oracle LogMiner を使用しますが、Oracle Binary Reader を使用することもできます。Oracle Binary Reader はLogMinerをバイパスし、ログを直接読み取ります。LogMinerの代わりに AWS DMS で Binary Reader を使用する利点は次のとおりです:

  • 変更量が多いデータベースの移行の場合、LogMinerはOracleソースデータベースをホストするコンピューターのI/OまたはCPUに影響を与える可能性があります。Binary Reader はI/OやCPUに影響を与える可能性が低いです
  • 変更量が多いデータベースの移行の場合、Oracle LogMiner を使用するより Binary Leader を使用するほうが、CDCのパフォーマンスは通常かなり優れています
  • Binary Reader は Oracle 12c でのLOBのCDCをサポートしています。LogMinerはサポートしません
  • Binary Reader はフルロードと継続的レプリケーション (CDC) の両方で以下のHCC圧縮タイプをサポートしています
    • QUERY HIGH
    • ARCHIVE HIGH
    • ARCHIVE LOW
  • Binary Reader はフルロード移行の場合にのみ QUERY LOW 圧縮タイプをサポートします

Binary Reader はLogMinerと比較してパフォーマンスが大幅に向上し、Oracleサーバーの負荷を軽減します。

AWS DMS は、アーカイブログが作成および格納される一時ディレクトリをファイルシステムに作成して Binary Reader を使用します。ほとんどの場合、これはUSE_DB_RECOVERY_FILE_DESTで示されるディレクトリの場所です。このディレクトリは移行タスクが「停止」のときに削除されます。

ASMアーキテクチャの詳細は、OracleのWebサイトの「Oracle自動ストレージ管理 (ASM) の概要」を参照してください。

AWS DMS のセットアップ

Oracle ASM のアーキテクチャとは対照的に、DMSのセットアップの一環として、変更を処理するための Binary Reader を構成するために一時ディレクトリを作成する必要があります。ディスクグループとデータのエクステントは別個のASMインスタンスで管理されているため、ASM DMS はこのインスタンスにも接続する必要があります。さらに、このASMインスタンスはDMSレプリケーションインスタンスからのトラフィックも許可する必要があります。AWS DMS は移行に関するディレクトリを作成します。

Oracleを AWS DMS のソースとして設定する際のドキュメントにあるように、ASMでの変更を処理する Binary Reader を構成するには、次の追加接続属性を使用します。

Js
useLogminerReader=N;useBfile=Y

上記の属性を Oracle ASM のソースで使用すると、テスト接続は成功しますが、移行は成功しません。この場合、移行タスクログに次のようなエラーが表示されます:

Bash
00031609: 2016-12-05T22:21:05 [SOURCE_CAPTURE ]E: OCI error 'ORA-12162: TNS:net service name is incorrectly specified' [122307] OCI error. (oradcdc_redoutil.c:362)
00031609: 2016-12-05T22:21:05 [SOURCE_CAPTURE ]E: Cannot attach OCI server [120414] Failed to connect to database. (oradcdc_redoutil.c:363)
00031609: 2016-12-05T22:21:05 [SOURCE_CAPTURE ]E: Cannot connect to server ''(user '', thread 1) [120414] Failed to connect to database. (oradcdc_io.c:380)

Oracle ASM ソースのための追加接続属性フィールドは次のとおりです:

Js
useLogminerReader=N;useBfile=Y;asm_user=<asm_username>;asm_server=<server_address>/+ASM

server_addressの値はエンドポイントを作成するときのサーバー名の値と同じです。

さらに、ASMインスタンスで作業するときにはパスワードフィールドに移行するOracleインスタンスのパスワードを指定する必要があります。また、ASMインスタンスに接続するためのパスワードも提供します。フィールド内の2つのパスワードをカンマで区切ります:

Js
my_oracle_pw,my_asm_pw

最速のCDC処理性能を実現する方法

REDOログが Oracle ASM に格納されていると、REDOログへのアクセスはしばしば遅くなります。この速度遅延は、ASMのAPIが1回の呼び出しで最大32KBしか読み取れないために発生します。さらに、進行中のレプリケーションのためにLogMinerを使用した AWS DMS をASM用に構成すると、パフォーマンス低下がより大きな遅延を発生させる可能性があります。また、接続に問題がある場合や、ソースインスタンスが停止した場合に、移行が正常に復旧できないことがあります。

AWS DMS で Oracle ASM ソースの速度を向上させ、移行をより最適にするには、DMSコピー機能を Binary Reader に使用することを推奨します。この方法では、DMSはアーカイブログをASMからOracleサーバー上のローカルディレクトリにコピーします。そのあと、DMSは Binary Reader を使用してコピーされたログを読み込みます。

ここでの唯一の要件は、ローカルディレクトリがASMインスタンス上ではなく、Linuxファイルシステム上にあることです。

DMSコピーを使用する Binary Reader のセットアップ方法

DMSコピー機能を使用して Binary Reader を設定する詳細な手順を以下で確認できます。

Oracleマシン上に一時フォルダーを作成します。Oracleが Oracle RAC として構成されている場合、すべてのRACノードがそのフォルダーにアクセスできる必要があります。また、そのフォルダーにはOracleユーザーおよびOracleグループ(たとえばdba)が読み取り、書き込み、削除できる権限が必要です。

DMSがOracleに接続するために使用するユーザーに対して、次の権限を付与します。以下にリストの最後の権限は、アーカイブREDOログをCOPY_FILEメソッドを使用して一時フォルダーにコピーできるようにします。

SQL
CREATE SESSION
SELECT ON v_$transportable_platform
EXECUTE ON DBMS_FILE_TRANSFER

AWS DMS でOracleディレクトリを作成および管理したい場合は、次の権限を付与する必要があります。前述のように、AWS DMS はREDOログを一時フォルダーにコピーし、一時フォルダーから削除するためにディレクトリオブジェクトを使用する必要があります。次の権限を付与すると、AWS DMS はDMSREP_プリフィックスを持つOracleディレクトリを作成します。この権限を付与しない場合、対応するディレクトリを手動で作成する必要があります。これらのディレクトリはアーカイブREDOログと一時フォルダーのパスを指している必要があります。ディレクトを手動で作成する場合には、DMSREP_プリフィックスをディレクトリ名を追加する必要はありません。

SQL
CREATE ANY DIRECTORY

Oracleソースエンドポイント作成時に指定されたDMSユーザーがOracleディレクトリを作成したユーザーでない場合は、次の権限が追加で必要です。

  • ソースディレクトリ(一時フォルダーから読むためにBFILE方式を使用する場合は、REDOログのパスや一時フォルダーがアーカイブされたASM領域)として定義されたOracleディレクトリオブジェクトへのREAD権限
  • コピープロセス中のターゲットディレクトリ(一時フォルダー)として定義されたディレクトリオブジェクトへのWRITE権限
SQL
GRANT READ, WRITE ON DIRECTORY bfile_dir TO userName;

 

SQL
GRANT SELECT ON DBA_FILE_GROUPS to DMS_user;
GRANT EXECUTE ON SYS.DBMS_FILE_GROUP to DMS_user;
EXECUTE DBMS_FILE_GROUP.GRANT_SYSTEM_PRIVILEGE (DBMS_FILE_GROUP.MANAGE_ANY_FILE_GROUP, 'DMS_user', FALSE);

古いREDOログが一時フォルダーに溜まり続けないようにするために、処理されたREDOログが一時フォルダーから削除されるように AWS DMS を構成する必要があります。削除操作はOracleファイルグループと Oracle DBMS_FILE_GROUP パッケージによって実行されます。

補足: DMS_userはソースエンドポイントで定義したユーザーと同じものを想定しています。

ASMからオンラインREDOログを読むためのASMアクセス権限(SYSASMまたはSYSADM特権)が AWS DMS に必要です。Oracle DBMS_DISKGROUP パッケージ内の機能を使用してASMからオンラインREDOログを読み、このパッケージがSYSASMまたはSYSADM特権を必要とするため、この権限が必要です。コマンドプロンプトを開き、次の文を発行することによってASMアカウントアクセスを検証することもできます。

SQL
sqlplus asmuser/asmpassword@+asmserver as sysasm
------------OR-----------------------------
sqlplus asmuser/asmpassword@+asmserver as sysdba

補足: Oracle 11g Release 2 (11.2.0.2) から、ASMアカウントにアクセスするにはSYSASM特権が AWS DMS ユーザーに付与されている必要があります。より古いサポートされているバージョンでは、SYSDBA特権の付与で十分です。

アーカイブREDOログの宛先識別子を選択します。この番号はレプリケーションで読み取られるアーカイブREDOログの宛先IDです。値はv$archived_log内のDEST_ID番号と同じにする必要があります。それから、ソースエンドポイントに次の属性を追加します:

Js
archivedLogDestId=nn

ここでのnnはDMSの接続文字列の宛先IDです。

追加接続属性フィールドが次のようになるように Oracle ASM ソースエンドポイントを設定します:

Js
useLogminerReader=N;copyToTempFolder=/dms_temp;archivedLogDestId=nn;accessTempFolderDirectly=N;useBfile=Y;asm_user=asmuser;asm_server=asmserver.company.com/+asmserver;deleteProccessedArchiveLogs=Y

例:

Js
useLogminerReader=N;copyToTempFolder=/backups/dms;archivedLogDestId=1;accessTempFolderDirectly=N;useBfile=Y;asm_user=bjanshego;asm_server=10.61.4.41/+ASM;deleteProccessedArchiveLogs=Y;archivedLogsOnly=Y

その他の重要なポイント

Oracleデータベースは一時フォルダーへの書き込みと、そこからの削除ができる必要があります。OracleソースデータベースがRACクラスターの一部である場合、Oracle RAC のすべてのノードからアクセス可能なファイル共有された場所に一時フォルダーを配置する必要があります。一時フォルダーのアクセスにBFILE方式を選択した場合、そのフォルダーは共有ネットワークフォルダーである必要はありません。

複数のタスクが同じ一時フォルダーを使用している場合、あるタスクがすでに削除したREDOログに別のタスクがアクセスするなどの競合が発生する可能性があります。このような競合を避けるために、同じ一時フォルダーには1つのDMSタスクのみが常にアクセスする必要があります。ただし、同じルートフォルダーの下にタスクごとのサブフォルダーを作成することはできます。たとえば、2つのタスクの一時フォルダーとして /mnt/dms を指定するのではなく、あるタスクに対しては /temp/dms/task1 を指定し、もう一方に対しては /temp/dms/task2 を指定します。

一時フォルダーで作業する場合は、処理されたアーカイブREDOログファイルがDMSによって削除されることを確認してください。これらが削除されていけば、REDOログが一時フォルダーに溜まりつづけることはありません。一時フォルダーが作成されるファイルシステムに十分な空き容量があることを確認することは重要です。複数のタスクが実行されている場合には、各タスクごとに独自の一時フォルダーがあるため、タスクの数だけ必要なディス容量を積算します。

まとめ

この記事では、Oracle ASM を AWS DMS のソースとして構成および使用する方法を説明しました。このOracleインフラストラクチャを移行する際の変更を処理する速度を改善する方法についても説明しました。

それでは、より良いデータベース移行を!


著者について

Abhinav SinghAbhinav Singh は Amazon Web Services の Database Migration Service チームのデータベースエンジニアです。彼はデータベース移行プロジェクトに関するガイダンスと技術支援をお客様に提供し、AWSを使用したソリューションの価値を向上させています。

翻訳はソリューションアーキテクトの柴田(シバタツ)が行いました。原文は How to Migrate from Oracle ASM to AWS using AWS DMS です。