IBM Data Movement Tool

他社DBMSからDB2にデータを簡単に移行

本記事は、他社DBMSのデータをIBM DB2 9.7 for Linux, UNIX, and Windows上で起動させることが簡単にできる強力なツールについて説明したものです。本ツールは、他のさまざまなデータベース管理システムからDB2 for Linux, UNIX, and WindowsおよびDB2 for z/OSにデータを移行することも可能です。

Vikram S Khatri, Certified Consulting I/T Specialist, IBM

Vikram S Khatri works for IBM in the Sales and Distribution Division and is a member of the DB2 Migration team. Vikram has 24 years of IT experience and specializes in enabling non-DB2 applications to DB2. Vikram supports the DB2 technical sales organization by assisting with complex database migration projects as well as with database performance benchmark testing.



2012年 2月 29日 (初版 2012年 2月 29日)

はじめに

本ツールは、他のさまざまなデータベース管理システムからDB2にデータを移行することができます。

DB2 9.7 for Linux, UNIX, and Windowsより、Migration Toolkit (MKT)はDB2製品上でOracleやSybase (Fixpack 3以降)を移行するために必要ありません。本ツールは素晴らしく簡潔なワークフローに基づいてMTKの機能を置き換えるものです。

その他のケースの場合、例えばあるデータベースからDB2 for z/OSにデータを移行する場合には、本ツールは高速でデータを移行できる点でMTKをサポートします。本ツールを使用することにより、4TBものデータがたった3日で移行できた例があります。

上級ユーザーはコマンドラインAPIを使用したいと考えるものですが、本ツールのGUIは初心者ユーザーにも使いやすいインターフェースを提供します。

準備

ダウンロード

こちらからツールを移行先(ターゲット)のDB2サーバーにダウンロードしてください。DB2 for z/OSにデータを移行するには追加のステップが必要です。(ツールの最新バージョンをチェックしてください。

インストール

IBMDataMovementTool.zipファイルをダウンロードした後、移行先(ターゲット)のDB2サーバーのIBMDataMovementToolという名前のディレクトリにファイルを解凍してください。データ移行のパフォーマンスを効率化するために、ターゲットとなるDB2サーバー上でのインストールをおすすめします。

前提条件

  • DB2 for Linux, UNIX, and Windows上でOracle アプリケーションのイネーブリングを行うためには、DB2 9.7が移行先(ターゲット)のサーバーにインストールされている必要があります。
  • Java version 1.5以降が移行先(ターゲット)のサーバーにインストールされている必要があります。現在のJavaのバージョンを確認するには、java -versionコマンドを起動してください。標準では、JavaはDB2 for Linux, UNIX, and Windowsの一部として以下にインストールされています。<install_dir>\SQLLIB\java\jdk (Windowsの場合)、または/opt/ibm/db2/V9.7/java/jdk(Linuxの場合)
表1. ソース・データベースおよびDB2のJDBCドライバのロケーション
データベースJDBCドライバ
Oracleojdbc5.jar or ojdbc6.jar or ojdbc14.jar, xdb.jar, xmlparserv2.jar or classes12.jar or classes111.jar for Oracle 7 or 8i
SQL Serversqljdbc5.jar or sqljdbc.jar
Sybasejconn3.jar and antsjconn2.jar for DB2 SKIN feature
MySQLmysql-connector-java-5.0.8-bin.jar or latest driver
PostgreSQLpostgresql-8.1-405.jdbc3.jar or latest driver
DB2 for Linux, UNIX, and Windowsdb2jcc.jar, db2jcc_license_cu.jar or db2jcc4.jar,db2jcc4_license_cu.jar
DB2 for zdb2jcc.jar, db2jcc_license_cisuz.jar or db2jcc4.jar,db2jcc4_license_cisuz.jar
DB2 for ijt400.jar
Teradatraterajdbc4.jar and tdgssconfig.jar
MS AccessOptional Access_JDBC30.jar

環境の設定

  • UNIXの場合: DB2インスタンス・オーナーとしてサーバーにログインしてください。
  • Windowsの場合: DB2のコマンド・ウィンドウを立ち上げてください。
  • IBMDataMovementToolディレクトリに移動してください。本ツールはJARファイルで提供され、ツールを起動するための2つのドライバスクリプトが提供されます。
    IBMDataMovementTool.cmd - Command script to run the tool on Windows.
    IBMDataMovementTool.sh - Command script to run the tool on UNIX.
    IBMDataMovementTool.jar - JAR file of the tool.
    Pipe.dll - A DLL required on Windows if pipe option is used.

DB2の移行先(ターゲット)データベースの作成

ツールを起動するためには移行先(ターゲット)データベースへの接続が必要となるため、まずDB2データベースを作成する必要があります。DB2 9.7については、デフォルトの自動ストレージを使用し、32KBのページサイズを選ぶことをおすすめします。DB2 9.7へのアプリケーションの容易な移行のために、インスタンスとデータベースを互換モードで稼動させます。また、10進浮動小数点の丸めモードをOracleの四捨五入ロジックに合わせることをお勧めします。また、revalidation セマンティクスをdeferred_forceに設定することにより、オブジェクトを従属オブジェクトの順序に関係なくデプロイすることができます。

UNIXシステムの場合

$ db2set DB2_COMPATIBILITY_VECTOR=ORA
$ db2set DB2_DEFERRED_PREPARE_SEMANTICS=YES
$ db2stop force
$ db2start
$ db2 "create db testdb automatic storage yes on /db2data1,
/db2data2,/db2data3 DBPATH ON /db2system PAGESIZE 32 K"
$ db2 update db cfg for testdb using auto_reval deferred_force
$ db2 update db cfg for testdb using decflt_rounding round_half_up

Windowsシステムの場合

C:\> db2set DB2_COMPATIBILITY_VECTOR=ORA
C:\> db2set DB2_DEFERRED_PREPARE_SEMANTICS=YES
C:\> db2stop force
C:\> db2start
C:\> db2 "create db testdb automatic storage yes on C:,D: DBPATH ON E: PAGESIZE 32 K"
C:\> db2 update db cfg for testdb using auto_reval deferred_force
C:\> db2 update db cfg for testdb using decflt_rounding round_half_up

オブジェクトとデータの抽出について

本ツールを起動する前に、移行元(ソース)のサーバーとDB2のサーバーに関する以下の情報を準備してください。

  • 移行元(ソース)のサーバーとDB2サーバーのIPアドレスとホスト名
  • 接続するポート番号
  • データベース名、SID、サブシステム名等
  • 移行元(ソース)データベースに関するデータベース管理権限を持つユーザーID
  • 上記ユーザーのパスワード
  • 移行元(ソース)データベースとDB2のJDBCドライバのロケーション
  • データを保存するための十分なディスクスペースおよびボリューム・ポイントおよびマウント・ポイントの情報

WindowsシステムではIBMDataMovementTool.cmdを起動し、UNIXシステムでは./IBMDataMovementTool.sh を起動します。サーバーがグラフィックを表示できる場合、本ツールによりGUIが提供されます。グラフィックを表示できない場合は、コマンド入力モードに変わります。

Windowsシステムの場合
IBMDataMovementTool.cmd

UNIXシステムの場合
chmod +x IBMDataMovementTool.sh
./IBMDataMovementTool.sh

DB2_COMPATIBILITY_VECTORとは?

DB2_COMPATIBILITY_VECTORは、DB2 9.7のインスタンスとデータベースをOracleと互換性のあるモードに変換するために使用されます。詳細については、DB2 9.7のインフォメーションセンターを参照ください。

GUIウィンドウが表示されます。一部のメッセージはシェルウィンドウにも表示されます。エラーメッセージが表示されていないことを確認のうえ、GUIを使用してください。

DB2_COMPATIBILITY_VECTORを設定していない場合は、ツールによって警告が表示されます。以下のステップに基づいてcompatibility vectorを設定してください。

[2010-01-10 17.08.58.578] INPUT Directory = .
[2010-01-10 17.08.58.578] Configuration file loaded: 'jdbcdriver.properties'
[2010-01-10 17.08.58.593] Configuration file loaded: 'IBMExtract.properties'
[2010-01-10 17.08.58.593] appJar  : 'C:\IBMDataMovementTool\IBMDataMovementTool.jar'
[2010-01-10 17.08.59.531] DB2 PATH is C:\Program Files\IBM\SQLLIB
[2010-01-10 17.35.30.015] *** WARNING ***. The DB2_COMPATIBILITY_VECTOR is not set.
[2010-01-10 17.35.30.015] To set compatibility mode, discontinue this program and 
                          run the following commands
[2010-01-10 17.35.30.015] db2set DB2_COMPATIBILITY_VECTOR=FFF
[2010-01-10 17.35.30.015] db2stop force
[2010-01-10 17.35.30.015] db2start

GUIの使用

図1のGUI画面には、移行元(ソース)とDB2のデータベース接続に関する情報をインプットするフィールドが表示されています。この画面では、以下の順序にしたがって入力します。

  1. 移行元(ソース)とDB2の接続に関する情報を入力します。
  2. Connect to Oracle」をクリックして、接続できるかテストします。
  3. Connect to DB2」をクリックして、接続できるかテストします。
  4. DDLとデータが保存される作業ディレクトリーを指定します。
  5. DDLとデータの両方が必要か、またはそのいずれかが必要かを選択します。DDLのみを選択した場合、genddlスクリプトが追加で生成されます。
  6. Extract DDL/Data」ボタンをクリックしてください。コンソールウィンドウで状況を確認することができます。
  7. 7. データの抽出が完了した後、出力ファイルを確認して、データの移行のステイタスを確認し、エラーや警告やその他の問題が発生していないか確認します。
  8. 8. または、「View Script/Output」ボタンをクリックして、生成されたスクリプト、DDL、データ、または出力されたログファイルを確認します。
  9. Deploy DDL/Data」ボタンをクリックして、DB2のテーブル、インデックス、および移行元(ソース)のデータベースから抽出されたデータをロードします。
  10. Execute DB2 Script」ボタンをクリックして、コマンドラインからスクリプトを実行するのではなく、生成されたDB2スクリプトを実行することができます。データ移行は対話型で行うことができます。新規に移行する際に全てのテーブルをドロップしたい場合は、drop tableスクリプトを選択して実行できます。このボタンを使って、複数のスクリプトを一定の順序にしたがって実行することもできます。
図1: 移行元(ソース)およびDB2のデータベースのパラメータ入力画面
Extract and deploy data

Extract DDL/Data」ボタンをクリックした後、図2のとおり「View File」タブにメッセージが表示されます。

図2: DDLとデータの抽出
Extract DDL / Data

DDLとデータの抽出を完了すると、作業ディレクトリに新しくファイルが生成されます。これらのファイルはコマンドラインでDB2に対し実行することができます。

コンフィギュレーション・ファイル

T以下のコマンドスクリプトは、GUIモードで本ツールを動かすたびに再生成されます。しかし、これらのスクリプトGUIを使用せずにデータ移行を行うためにも使用することができます。本ツールをバッチプロセスに組み込み自動的にデータ移行を行う際に役立ちます。

表2. コマンド・スクリプト
ファイル名説明
IBMExtract.propertiesこのファイルには、GUIまたはコマンドラインで指定した全ての入力パラメータが含まれています。このファイルを手作業で編集して、パラメータを変更または修正することができます。注意: このファイルはGUIを起動するたびに上書きされます。
unloadこのスクリプトはツールにより作成されます。DDLとDataオプションをクリックすると、移行元(ソース)データベースのデータをフラットファイルにアンロードします。中間フラットファイルを省きたい場合は、GUIのPipeオプションをチェックすると、同じスクリプトが移行元(ソース)データベースからDB2へpipeを使ってデータを移動します。Pipeオプションは、IBMExtract.propertiesファイルのusePipeオプションによりコントロールされます。
rowcountこのスクリプトはツールにより作成されます。データを移行した後に、移行元(ソース)と移行先(ターゲット)のデータベースのテーブルの行数を確認するために使用できます。
図3: データの抽出後作成されるファイル
Step-2. 作成されるファイル

コマンドライン・モードの使用

GUI機能がサーバーで提供されない場合、本ツールをコマンドライン・モードで使用できます。GUIが起動しない場合は、本ツールは自動的にモードを変更します。コマンドラインの対話型モードで本ツールを起動したい場合は、IBMDataMovementToolコマンドで-consoleオプションを指定します。

Windowsシステムの場合:
IBMDataMovementTool -console
UNIXシステムの場合:
./IBMDataMovementTool.sh	-console


移行元(ソース)とDB2の接続パラメータをステップに基づいて設定する対話型のオプションが表示されます。コンソールウィンドウの出力サンプルは以下のとおりです。

[2010-01-10 20.08.05.390] INPUT Directory = .
[2010-01-10 20.08.05.390] Configuration file loaded: 'jdbcdriver.properties'
[2010-01-10 20.08.05.390] Configuration file loaded: 'IBMExtract.properties'
[2010-01-10 20.08.05.390] appJar  : 'C:\IBMDataMovementTool\IBMDataMovementTool.jar'
Debug (Yes)        : 1
Debug (No)         : 2
Enter a number (Default=2) :
IS TARGET DB2 LOCAL (YES)   : 1
IS TARGET DB2 REMOTE (NO)   : 2
Enter a number (Default=1) :
Extract DDL (Yes)        : 1
Extract DDL (No)         : 2
Enter a number (Default=1) :
Extract Data (Yes)        : 1
Extract Data (No)         : 2
Enter a number (Default=1) :
Enter # of rows limit to extract.  (Default=ALL) :
Enter # of rows limit to load data in DB2.  (Default=ALL) :
Compress Table in DB2 (No)     : 1
Compress Table in DB2 (YES)    : 2
Enter a number (Default=1) :
Compress Index in DB2 (No)     : 1
Compress Index in DB2 (YES)    : 2
Enter a number (Default=1) :
******* Source database information: *****
Oracle                  : 1
MS SQL Server           : 2
Sybase                  : 3
MS Access Database      : 4
MySQL                   : 5
PostgreSQL              : 6
DB2 z/OS                : 7
DB2 LUW                 : 8
Enter a number (Default 1) :
DB2 Compatibility Feature (DB2 V9.7 or later)  : 1
No Compatibility feature                       : 2
Enter compatibility feature (Default=1) :

オブジェクトのデプロイとデータのロード

データベースのターゲット・オブジェクトの作成

DDLとデータを抽出後、DB2に抽出したオブジェクトをデプロイする方法が3種類あります。

  • GUI画面から「Deploy DDL/DATA」ボタンをクリックする。
  • Interactive Deploy」タブで、オブジェクトをステップバイステップでデプロイする。
  • コマンドラインスクリプト db2genを使用して、DDLとデータをデプロイする。

データをデプロイするためにどのオプションを選択するかは、データとオブジェクトの移行要件によります。PL/SQLではないDDLオブジェクトとデータのみを移行する場合は、db2genスクリプトを使用するか、GUI画面から「Deploy DDL/Data」ボタンをクリックするだけで十分です。

PL/SQLオブジェクト、例えば、トリガー、関数、プロシージャー、およびPL/SQLパッケージをデプロイする場合は、対話型のデプロイオプションを使用することになります。

図4のGUI画面はDDLおよび他のデータベース・オブジェクトの対話型のデプロイの際に使用されるものです。この画面を使用するステップは以下のとおりです。

  1. Extract/Deploy」タブを使用してDB2に接続していることを確認してください。
  2. Interactive Deploy」タブをクリックしてください。
  3. Open Directory」ボタンを使用して、以前に抽出したオブジェクトを含む作業ディレクトリを選択してください。オブジェクトはツリー構造のビューで表示されます。
  4. ツールバーの「Deploy All Objects」ボタンを押すことにより、全てのオブジェクトをデプロイすることができます。ほとんどのオブジェクトはスムーズにデプロイされますが、場合によってはデプロイされないオブジェクトもあります。
  5. ツリー構造のビューでデプロイに失敗したオブジェクトをクリックすると、エディタウィンドウでオブジェクトのソースを見ることができます。デプロイに失敗した原因は下のデプロイメントログに表示されます。
  6. Oracle互換モードにより、通常は現状のままでオブジェクトのデプロイが可能です。しかし、オブジェクトによってはそのままスムーズにデプロイができないようなサポートされないフィーチャを持つものがあります。エディタを使用することにより、これらのオブジェクトのソースコードを修正し、問題を解決することが可能です。変更したオブジェクトをデプロイすると、新しいソースコードは古いソースコードとともに保存されます。
  7. CTRLキーを使って1つ以上のオブジェクトを選択し、ツールバーの「Deploy Selected Objects」ボタンをクリックすることで、編集された後のオブジェクトをデプロイすることができます。あるオブジェクトのデプロイが成功した後にそのオブジェクトに依存する別のオブジェクトがデプロイされなくてはいけない場合に、デプロイのエラーが発生することがあります。
  8. 全てのオブジェクトがデプロイされるまで、5から7のステップを繰り返してください。
図4: オブジェクトの対話型ステップによるデプロイ
Step-3. Interactive Deploy

行数の比較

  • データを移行したルートディレクトリーでrowcountスクリプトを起動してください。
  • 「"<移行元(ソース)データベース名>.tables.rowcount」ファイルでレポートが生成されます。本レポートでは、移行元(ソース)と移行先(ターゲット)データベースの行数が表示されます。
oracle                      :       db2
"TESTCASE"."CALL_STACKS"    : 123   "TESTCASE"."CALL_STACKS"      : 123
"TESTCASE"."CLASSES"        : 401   "TESTCASE"."CLASSES"          : 401
"TESTCASE"."DESTINATION"    : 513   "TESTCASE"."DESTINATION"      : 513

Use pipes to move data

(※こちらのセクションは原文を参照ください)

On Windows systems

(※こちらのセクションは原文を参照ください)

On UNIX systems

(※こちらのセクションは原文を参照ください)

Figure 5. Use of pipe to move data
Step-4. Use of pipe

z/OSで起動するDB2のための追加のステップ

z/OSにおけるUNLOADのプロセス

  • このツールはUSSを必要としますが、z/OSにおけるDB2 LOADはデータをロードするためにHFSファイルを使用することができません。そのため、JZOSツールキットを使用して、Unix System Servicesよりz/OS上にPSデータセットを作成する必要があります。しかし、DB2 LOADはUSS(またはHFS)ファイルを使用して、DB2にCLOB/BLOBをロードすることができます。そのため、ソース・データベースからz/OSにデータを移動するためにPSデータセットを作成し、Unix System ServicesのHFSファイルをCLOB/BLOBの保存に使用しています。
  • LOADステートメントはUSSからは起動できません。SYSPROC.DSNUTILSストアドプロシージャを使用して、LOAD、CHECK DATA、およびRUNSTATSを起動してください。
  • PSデータセットは各テーブルに割り当てる必要があるため、PSデータセットを作成することは困難です。テーブルのサイズが不明なため、一定のサイズを事前に割り当てることはできません。z/OS上のディスクスペースを無駄にする可能性があります。スペースの問題を回避するために、サイズを割り当てるアルゴリズムを使用してください。

移行元(ソース)データベースからDB2 for z/OSにデータを移動する際に、z/OSから本ツールを使用することができます。ただし、その際は以下の追加のステップが必要になります。

  1. 本リンクからJZOSをダウンロードのうえインストールしてください。
  2. ZIPファイルにはjzos.paxという名称のファイルが含まれています。このファイルをUnix System Servicesを使用してバイナリーモードでJZOSをインストールしたいディレクトリーにFTP転送してください。
  3. .paxファイルを保存したディレクトリに移動してください。
  4. pax -rvfコマンドを起動してください。これにより、現在の作業ディレクトリに.jzosという名称のサブディレクトリが作成されます。このサブディレクトリを<JZOS_HOME>とします。
  5. ユーザーのホームディレクトリで、以下で提供されるテンプレートに基づいて、z/OS DB2インストールに基づいて変更を加えて.profileという名称のファイルを作成してください。
    export JZOS_HOME=$HOME/jzos
    export JAVA_PATH=/usr/lpp/java/J1.5
    export PATH=$JAVA_HOME/bin:$PATH		        
    export CLPHOME=/usr/lpp/db2/db2910/db2910_base/lib/IBM                  
    export CLASSPATH=$CLASSPATH:/usr/lpp/db2/db2910/db2910_base/lib/clp.jar 
    export CLPPROPERTIESFILE=$HOME/clp.properties                           
    export LIBPATH=$LIBPATH:<JZOS_HOME<                               
    alias db2="java com.ibm.db2.clp.db2"
  6. CLPHOMEおよびCLASSPATHは環境に応じて修正する必要があります。<JZOS_HOME>を適切なディレクトリ名で置き換えてください。
  7. ユーザーのホームディレクトリーにて、以下のテンプレートに基づいてclp.propertiesという名称のファイルを作成してください。
    #Specify the value as ON/OFF or leave them blank              
    DisplaySQLCA=ON                                               
    AutoCommit=ON                                                 
    InputFilename=                                                
    OutputFilename=                                               
    DisplayOutput=                                                
    StopOnError=                                                  
    TerminationChar=                                              
    Echo=                                                         
    StripHeaders=                                                 
    MaxLinesFromSelect=                                           
    MaxColumnWidth=20                                             
    IsolationLevel=                                               
    <SUBSYSTEM_NAME>=<IP address>:<port number>/<location name>,USER,PASSWD
    
    最後の行に含まれる項目は適宜修正してください。
  8. chmod 777 <JZOS_HOME>/*.so コマンドを起動してください。
  9. IBMDataMovementTool.sh -console コマンドを起動し、対話型のインターフェースでパラメータ値を指定してください。
  10. IBMExtract.properties, geninputおよびunloadスクリプトが作成されます。
  11. IBMExtract.properties のzdb2tableseriesパラメータは、PSデータセットの一連の名前を指定するためのものです。例えば、TSO IDがDNET777であり、このパラメータがRに指定されている場合、最初のテーブルのために作成されるPSデータセットの名前はDNET777.TBLDATA.R0000001となります。
  12. znocopypendパラメータは、LOADステートメントにNOCOPYPENDパラメータを付け加えるために使用されます。このパラメータによってテーブルがCOPYペンディングモードにならないため、z/OS DB2のデータベース管理者はバックアップ処理を行うことができます。
  13. zoverallocパラメータによって、ファイルの割り当て容量をどれくらい増やしたいか指定することができます。「1」の値は容量を全く増やさないことを意味します。十分なストレージの空きがある場合には、これでよいかもしれません。現実的な環境においては、「15/11 (1.3636)」を設定するのが適切かもしれません。「1.3636 (15/11)」の値で始めて、ファイルの書き込みエラーが出るまで徐々に値を下げて、それから値を少し上げてください。SMSパラメータのREDUCE SPACE UP TOの値がわかっている場合は、ファイルの割り当て容量の増大値を「1 / (1 – (X/100))」の値に設定することで正確な値を計算することができます。(XはREDUCE SPACE UP TOの値で、0から100までの整数を指します。)REDUCE SPACE UP TOはパーセンテージを指すことに注意してください。
  14. zsecondaryパラメータは、修正されたセカンダリー・エクステントを割り当てるために使用されます。「0」の値から始めて、ファイル・エラーが発生するまで徐々に値を増やし、その後値を下げてください。
  15. geninputスクリプトを起動し、unloadプロセスのための入力ファイルを作成してください。
  16. unloadスクリプトを起動し、DDLとデータを生成してください。
  17. generatedスクリプトを起動し、DDLを生成しデータをz/OSのDB2にロードしてください。
  18. データセットを削除しない限り、DSNUTILSは失敗します。以下のJavaプログラムはこれらの中間データセットを削除することができます。
    java -cp /u/dnet770/migr/IBMDataMovementTool.jar:$JZOS_HOME/ibmjzos.jar \
    -Djava.ext.dirs=${JZOS_HOME}:${JAVA_HOME}/lib/ext ibm.Cleanup
  19. データがz/OS上のDB2テーブルにロードされた後、削除すべきデータセットが見つかることがあります。以下のJavaプログラムを使用して、クリーンアップの一環でこれらのデータセットを削除してください。

    以下のとおりスクリプトjdを作成してください。

    JZOS_HOME=$HOME/jzos
    JAVA_HOME=/usr/lpp/java/J1.5
    CLASSPATH=$HOME/migr/IBMDataMovementTool.jar:$JZOS_HOME/ibmjzos.jar
    LIBPATH=$LIBPATH:$JZOS_HOME
    
    $JAVA_HOME/bin/java -cp $CLASSPATH \
    -Djava.ext.dirs=${JZOS_HOME}:${JAVA_HOME}/lib/ext ibm.Jd $1

    ファイルパーミッションを755に変更し、起動してください。その後、以下のとおりアウトプットが表示されます。

    DNET770:/u/dnet770/migr: >./jd
    USAGE: ibm.Jd <filter_key>
    USAGE: ibm.Jd "DNET770.TBLDATA.**"
    USAGE: ibm.Jd "DNET770.TBLDATA.**.CERR"
    USAGE: ibm.Jd "DNET770.TBLDATA.**.LERR"
    USAGE: ibm.Jd "DNET770.TBLDATA.**.DISC"

    「DNET770.TBLDATA」の全てのデータセットを削除したい場合は、以下のコマンドを使用してください。

    DNET770:/u/dnet770/migr: >./jd "DNET770.TBLDATA.**"

大量のデータ移行の計画

本ツールのメリットは大量のデータ移行が可能なことです。本ツールの利用により、適切な計画およびプロセスに基づいて、4TBのOracleデータベースのデータをたった3日で移行した実績があります。大量のデータを時間的な制限のある中で実現するための手法とヒントについては、以下を参照してください。

ハードウェア要件およびキャパシティ・プランニング

ハードウェア要件とデータベース・キャパシティ・プランニングについて説明することは、本記事の目的ではありませんが、大量のデータを移行するための時間を見積もる際に留意すべき点は以下のとおりです。

  • 移行元(ソース)サーバーとDB2サーバーの間のネットワーク接続が良好である必要があります。できれば1GBPS以上の回線速度があることが望ましい。ネットワークの帯域幅によって、一定の時間内にデータ移行が完了するかどうかが影響を受けます。
  • 移行元(ソース)サーバーのCPU数により、複数のテーブルを同時並行でアンロードできるかどうかが影響を受けます。データベースの容量が1TB以上の場合は、移行元(ソース)サーバーのCPU数が4以上である必要があります。
  • DB2サーバー上のCPU数により、LOADプロセスの速度が決定されます。経験則では、データをロードするために4分の1から3分の1の時間が必要で、残りの時間はアンロードすることに費やされます。
  • DB2データベースのレイアウトを事前に計画しておいてください。IBMによるDB2に関するベストプラクティスを説明した文書を参照してください。

手法とヒント

  • コマンドライン・モードのツールについて理解を深めてください。GUIを使用してデータ移行のためのスクリプト(geninputおよびunload)を生成し、コマンドラインからunloadスクリプトを起動することでデータをアンロードしてください。
  • unloadスクリプトにてGENDDL=trueおよびUNLOAD=falseと指定することにより、移行元(ソース)データベースからDDLのみを抽出してください。生成されたDDLを使用して、テーブルスペースとテーブルのマッピングを計画してください。unloadスクリプトの-DOUTPUT_DIRパラメータを使用してターゲット・ディレクトリを指定し、生成されたDDLとデータを保存する別の出力ディレクトリーを使用してください。DDLの生成は最終のデータ移行の前に実施する必要があります。
  • geninputスクリプトを使用して、移行元(ソース)サーバーからDB2へ移行するテーブルの一覧を生成してください。geninputスクリプトのSRCSCHEMA=ALLおよびDSTSCHEMA=ALLを指定し、全てのテーブルの一覧を生成してください。本ファイルを編集し、不要なファイルを削除し、いつくかの入力ファイルに分割してください。これにより、移行元(ソース)サーバーからのアンロードと移行先(ターゲット)サーバーへのロードを交互に同時に行うための準備ができます。
  • geninputスクリプトによって生成されたテーブル入力ファイルをいくつかのファイルに分割した後、unloadスクリプトを同様に別のファイルに複製し、入力ファイルの名称を変更し、個々のunloadプロセスに別のディレクトリを指定してください。例えば、各unloadスクリプトから500のテーブルをアンロードする10のunloadスクリプトを作成した場合、合計で5000のテーブルをアンロードすることになります。
  • DDLとデータを別々のプロセスで処理してください。このように大容量の移行を行う際には、この2つをひとつのステップで処理しないでください。
  • unloadスクリプトのNUM_THREADSパラメータの制御によって、ソーステーブルのデータが同時並行でアンロードされます。デフォルト値は「5」で、この値を移行元(ソース)サーバーのCPU使用率が90%になる程度まで上げることができます。
  • 入力テーブルファイルに含まれるテーブルに注意してください。geninputスクリプトはテーブルを一定の順序に並べる機能はありませんが、アンロード時間を最短にするためにテーブルの順序を調整する必要があります。入力ファイルに含まれるテーブルは一連のスレッドにラウンドロビン方式でフィードされます。全てのスレッドがアンロードプロセスを完了したにもかかわらず、あるスレッドがまだ動いている場合があります。全てのスレッドをビジー状態にするために、入力ファイルを調整し、行数が少ないテーブルから順に並べてください。
  • 全てのテーブルがアンロードされたものの、いくつかのスレッドが非常に容量の大きいファイルのアンロードを続けている場合があります。以下のように、入力ファイルでWHEREクローズを適切に指定することができれば、同じテーブルを複数のスレッドでアンロードできます。
    "ACCOUNT"."T1":SELECT * FROM "ACCOUNT"."T1" WHERE id between 1 and 1000000
    "ACCOUNT"."T1":SELECT * FROM "ACCOUNT"."T1" WHERE id between 1000001 and 2000000
    "ACCOUNT"."T1":SELECT * FROM "ACCOUNT"."T1" WHERE id between 2000001 and 3000000
    "ACCOUNT"."T1":SELECT * FROM "ACCOUNT"."T1" WHERE id between 3000001 and 4000000

    WHEREクローズで正しいキー(プライマリーキーまたはユニークインデックスのいずれかが好ましい)を使用するようにしてください。本ツールでは、適切なDB2 LOADスクリプトを作成することで、本ツールによって生成された複数のファイルからデータをロードします。異なるWHEREクローズを追加する以外に、複数のスレッドに同じテーブルをアンロードするためのセットアップは不要です。

  • アンロードプロセスをいくつかのステップに分けて行った後、バッチによりデータのアンロードが完了した時点で、DB2にデータを同時に入力することを開始できます。ここで重要なのは、各アンロードバッチに異なる出力ディレクトリを設定することです。出力ディレクトリーにDB2にデータを入力するために必要な全てのファイルが生成されます。DDLについては、生成されたdb2ddlスクリプトを使用してテーブルの定義を作成します。データついては、db2loadスクリプトを使用してデータをDB2にロードします。DDLとデータをひとつのステップで組み合わせる場合は、スクリプトの名前はdb2genになります。
  • シェルスクリプトを作成し、全てのプロセスを自動化して、アンロードとロードのプロセスがシンクロナイズするように設定してください。Oracleやその他のデータベース上にある大量のデータをDB2に移行することは、どのような場合でも非常にユニークなプロセスです。自己のスキルを検証してどのようにしてこれら全てのジョブを自動化できるか検討してください。進行状況を監視しながらアウトプットがログファイルに保存されるように、teeコマンドを使用してジョブのアウトプットをファイルに保存してください。

Mockテストの実施

必ずテスト環境でテストを実施し、自動化したジョブのテストを行い、計画した方法によって移行元(ソース)データベースからのアンロードとDB2へのロードが交互に発生することを確認してください。カスタマイズする必要があるのは、これらのタスクを正しい順序で起動するためのシェルスクリプトの作成に関してのみです。以下のステップに従い、テストを実施してください。

  1. データ移行のためのスクリプトと自動化のためのシェルスクリプトをテストディレクトリに複製してください。
  2. いくつかの大容量のテーブルを複数のスレッドでアンロードして所要時間を見積もり、それに基づいてデータ移行のタイミングをずらしてください。
  3. WHEREクローズを追加して、データの移行をテストするための行数を制限してください。例えば、ROWNUMクローズを加えてOracleの行数を制限したり、TOPクローズを使用してSQL Serverの行数を制限してください。
    "ACCOUNT"."T1":SELECT * FROM "ACCOUNT"."T1" WHERE rownum < 100
    "ACCOUNT"."T2":SELECT * FROM "ACCOUNT"."T2" WHERE rownum < 100
    "ACCOUNT"."T3":SELECT * FROM "ACCOUNT"."T3" WHERE rownum < 100
    "ACCOUNT"."T4":SELECT * FROM "ACCOUNT"."T4" WHERE rownum < 100
  4. スクリプトを確認し、必要な修正を行ったうえで、最終起動の準備をしてください。

最終起動

  1. あなたはすでに、DDLの抽出を行い、テーブルとテーブルスペースのマッピングについて必要な変更を手作業で実施しています。
  2. データ移行の間のダウンタイムを設定してください。
  3. 移行元(ソース)がOracleの場合、Oracleデータベースのために10000程度のオープンカーソルが設定されていることを確認してください。
  4. ログファイルのアウトプットを確認してください。

大量のデータを移行するには、何よりもジョブを自動化するための計画、経験、能力が必要です。本ツールにより、このようなデータ移行に必要な機能が提供されます。本ツールは、大容量のデータベースからDB2にデータ移行を行った実績があります。

本ツールのサポート

本ツールはIBMのサポート部門ではサポートされません。しかしながら、バグ、問題、提案、機能強化リクエストについては、サポートフォーラムで報告することが可能です。

よく寄せられる質問

表3: よく寄せられる質問
質問:回答:
このツールを稼働させるために、移行元(ソース)のデータベース・サーバーに何かインストールする必要がありますか。このツールのために、移行元(ソース)のデータベースに何もインストールする必要はありません。
このツールでサポートされているプラットフォームは何ですか。Windows、z/OS、AIX、Linux、UNIX、HP-UX、Solaris、Mac、またはJVMが稼働するその他のプラットフォームが対象です。
このツールをLinux/UNIXプラットフォームのセキュアなシェルウィンドウから起動すると、コマンドライン・シェルにメッセージが表示され、GUIが表示されずツールが停止しているように見えます。DISPLAYの設定によっては、GUIウィンドウがディスプレイ可能サーバー上で開いている可能性があります。DISPLAYの設定を適切にエクスポートする必要があります。Unixシステム担当者と相談してください。
PostgreSQLからデータを移行したいのですが、PostgreSQLのJDBCドライバが本ツールに添付されていません。ライセンス契約上の問題から、本ツールではJDBCドライバは提供されません。ライセンスされたソフトウェアより、データベースのJDBCドライバを入手してください。
Oracleデータベースからデータを抽出するユーザーにgrant DBAをすることができません。ツールを使うにはどのようにしたらよいでしょうか?ユーザーに、最低でもSELECT_CATALOG_ROLEをgrantする必要があり、各テーブルへのSELECT特権が必要です。
このツールが接続できるデータベースの種類は何ですか。Type 4のJDBCドライバが適用されるデータベースであれば接続可能です。MySQL、PostgreSQL、Ingres、SQL Server、Sybase、Oracle、DB2等にも接続が可能です。ODBC-JDBCコネクタのあるデータベースにも接続できるため、Accessデータベースからもデータの移行が可能です。
このツールを起動するには、どのJavaのバージョンが必要ですか。このツールの起動には少なくともJava 1.5が必要です。Java 1.5に依存するのは、主に本ツールのGUI部分です。Java 1.4.2をサポートする必要がある場合は、私にメールを送付してください。Java 1.4.2用のツールをコンパイルします。しかし、データ移行のためのドライバスクリプトを作成するためのGUIは機能しません。

以下のコマンドによりJavaのバージョンを確認可能です。

$ java -version
C:\>java –version
本ツールのバージョンはどのようにして確認できますか。WindowsではIBMDataMovementTool -versionを起動し、Linux/UNIXでは./IBMDataMovementTool.sh -versionを起動してください。
本ツールを起動すると、「Unsupported major.minor version 49.0」、または「(.:15077): Gtk-WARNING **: cannot open display:」というエラーメッセージが出ます。Java 1.5より低いバージョンが使用されています。Java 1.4.2より高いバージョンをインストールすることでこの問題を解決できます。IBM Javaをインストールすることをお勧めします。
本ツールを起動するために、移行元(ソース)とDB2のデータベース・サーバーについてどんな情報が必要ですか。移行元(ソース)とDB2のデータベースに関して、IPアドレス、ポート番号、データベース名、ユーザーID、およびパスワードが必要です。移行元(ソース)のデータベースについては、DBA権限のあるユーザーIDが必要となり、DB2のデータベースについては、SYSADM権限のあるユーザーIDが必要です。
本ツールをWindowsワークステーションで起動すると、動きが非常に遅くなります。IBMDataMovementTool.cmdまたはIBMDataMovementTool.shコマンドスクリプトから本ツールに割り振られたメモリのデフォルトは、JVMへの-Xmxスイッチにより900MBとなります。ワークステーションのメモリが足りない可能性があるため、このメモリ容量を縮小してください。
SQL ServerからDB2にデータを移行しようとしており、テキストフィールドをDB2のVARCHARに移行したいのですが。IBMExtract.propertiesファイルにおいて、mssqltexttoclob=trueと指定してください。
SybaseからDB2へデータを移行しようとしていますが、T-SQLプロシージャがDB2に移行しません。本ツールの目的は、DDLとデータのみを移行することです。プロシージャおよびトリガーを移行するためには、MTKを使用してください。
SybaseからDB2へDDLを移行しようとしていますが、Sybaseオブジェクトはファイルに入っています。DDLファイルをデータソースとして指定する方法がわかりません。本ツールの目的は高速でデータを移行することにあるため、ファイルのDDLからDB2のDDLへ変換する機能はありません。しかしながら、IBM InfoSphere Data Architectを使用すると、移行元(ソース)データベースから移行先(ターゲット)データベースに対してDDLの変換を行うことができます。
MS AccessからDB2へデータを移行しようとしていますが、全てのインデックス等が生成されたDDLに含まれていません。MS Accessデータベースに接続するのに、基本的なODBC-JDBCコネクタを使用します。完全なDDLを入手するには、商業的に提供されるJDBCドライバが必要です。MS Access用のHXTT JDBCドライバを試してください。HXTTドライバを使用している場合は、生成されたunload スクリプトにおいてDBVENDOR=hxtt(accessではなく)と指定してください。
本ツールを使用してSybaseからDB2へデータを移行しようとしていますが、多くのエラーが表示されます。使用しているSybaseがJDBC enableになっていない可能性があります。Sybaseのデータベース管理者に相談し、正しいJDBCのストアドプロシージャがSybaseデータベースにインストールされていることを確認してください。
MySQLからDB2へデータを移行しようとしていますが、メモリ不足になります。生成されたuploadスクリプトにおいてFETCHSIZE=nnnの数値を変更し、コマンドラインからデータ移行を起動してください。GUIツールを使用すると、uploadスクリプトが上書きされます。
OracleからDB2へデータを移行しようとしていますが、データ移行には3つのJARファイルが必要です。データの移行にはJDBCドライバのみが必要だと考えていたのですが、なぜ追加のJARファイルが必要なのですか。追加のJARファイルは、Oracle XMLのデータタイプのために必要です。これらのファイルはOracleのインストールディレクトリから取得してください。
OracleのCLOBのデータタイプをDB2のDBCLOBに移行したいのですが。IBMExtract.propertiesファイルでDBCLOB=trueと設定してください。
本ツールを使用してOracleからDB2へデータを移行しようとしていますが、テーブルが見つからない旨のOracle SQLエラーが多く表示されます。Oracleに接続するユーザーIDは、SELECT_CATALOG_ROLEおよび各テーブルへのSELECTの権限が必要です。
NCHARとNVARCHAR2をDB2のGRAPHICまたはVARGRAPHICに移行したくありません。DB2データベースをUTF-8として構築したため、これらをCHARおよびVARCHAR2に移行したいのですが。IBMExtract.propertiesファイルでGRAPHIC=falseと設定してください。
OracleデータベースのデータをDB2の9.7/9.5の前のバージョンに移行することはできますか。可能です。IBMExtract.propertiesファイルでdb2_compatibility=falseと設定してください。
このツールでは、OracleのNUMBER(38)がNUMBER(31)に移行されます。DB2では31桁までしかサポートされないことはわかっています。桁数の切捨てを行いたくないため、これをDOUBLEに変換したいのですが。IBMExtract.propertiesファイルでroundDown_31=falseと設定してください。
大量のデータの移行が拒否されます。拒否されたデータをファイルに入れて、拒否された理由を分析したいのですが。IBMExtract.propertiesファイルでdumpfile=trueと設定してください。
ワークステーションからDB2サーバーにデータをロードしようとしますが、エラーが表示されます。このツールはサーバーからのみ起動すべきでしょうか。DB2サーバーから本ツールを起動し、移行元(ソース)のサーバーからデータを抽出し、中継サーバーは避けることをお勧めします。しかし、本ツールを中継サーバーから起動したい場合は、生成されたunloadスクリプトにおいてREMOTELOAD=TRUEと設定してください。DB2 LOADユーティリティでは、BLOBS/CLOBS/XMLデータがサーバーに存在することが必要です。これらのディレクトリを同じ名称で移行先(ターゲット)のDB2サーバーにmountしてください。
DB2サーバーへのログインをSSHシェルから行わなければならず、DB2サーバー上でX-Windowsを起動することはできません。このGUIツールを使用してDDLとデータを移行するにはどうしたらいいでしょうか。SSHからIBMDataMovementTool.shを起動してください。GUIがサポートされない場合は、ツールは自動的にコマンドライン入力に変わります。コマンドライン入力に変わらない場合は、IBMDataMovementTool.shコマンドにて-consoleオプションを指定すると、ツールが対話型のコマンドライン・モードで起動します。このコマンドライン・モードは入力データを収集し、データ移行のために必要なスクリプトを生成する手段にすぎません。GUIはスクリプトを生成するための手段にすぎず、実際の機能はスクリプトにより提供されます。
データベース名を入力する必要がありますが、スクリプトを通じてDB2のデータベースが作成されないのはなぜでしょうか。データベース管理者は、通常ストレージのパス情報に基づいてデータベースを作成しているためです。しかしながら、DB2においてテーブルが適切なテーブルスペースに生成されるように、必要なテーブルスペースは作成しています。IBMのベストプラクティスを説明した文書を一読のうえ、データベースについて注意深く計画を立ててください。デフォルトのページサイズが32KのDB2データベースを作成することをお勧めします。
Oracle JDBCドライバに加えて、xdb.jarとxmlparserv2.jarが必要なのはなぜでしょうか。xdb.jar と xmlparserv2.jarは、OracleデータがXMLを含む場合に必要となります。xdb.jar は server/RDBMS/jlibフォルダに、 xmlparserv2.jar を lib フォルダに配置されます。これらにない場合、Oracle XDK for Javaをダウンロードできます。
「java.lang.UnsatisfiedLinkError: Pipe Pipe.dll is not a valid Win32 application」が出ます。どのようにしたらよいでしょうか?このエラーは、Windows 64-bitプラットフォーム上で、Java 32-bit JVM.を稼働させている場合に出ます。Java 64-bit JVMを導入して、ツールを起動してください。

注:
本ツールの新しいビルドは日々IBMのダウンロードサイトにおいて更新されています。データを移行する際には、最新のビルドをダウンロードしてください。ビルド番号については、Help > Aboutメニュー・オプション、またはIBMDataMovementTool -versionコマンドで確認可能です。本ツールは、GUIインターフェースのために、JGoodies Forms 1.2.1、JGoodies Look 2.2.2、およびJSyntaxPane 0.9.4パッケージを使用しています。

参考文献

学ぶために

製品や技術を入手するために

議論するために

その他のダウンロード

  • IBM Data Movement Tool (A new build of the tool is uploaded very frequently, after bug fixes and new enhancements. Click on Help > Check New Version from the GUI or enter the command ./IBMDataMovementTool.sh -check to check if a new build is available for download. You can find the Tool's build number from the Help > About menu option or by entering the ./IBMDataMovementTool.sh -version command. This tool uses JGoodies Forms 1.2.1, JGoodies Look 2.2.2, and JSyntaxPane 0.9.4 packages for the GUI interface.)

コメント

developerWorks: サイン・イン

必須フィールドは(*)で示されます。


IBM ID が必要ですか?
IBM IDをお忘れですか?


パスワードをお忘れですか?
パスワードの変更

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む

 


お客様が developerWorks に初めてサインインすると、お客様のプロフィールが作成されます。会社名を非表示とする選択を行わない限り、プロフィール内の情報(名前、国/地域や会社名)は公開され、投稿するコンテンツと一緒に表示されますが、いつでもこれらの情報を更新できます。

送信されたすべての情報は安全です。

ディスプレイ・ネームを選択してください



developerWorks に初めてサインインするとプロフィールが作成されますので、その際にディスプレイ・ネームを選択する必要があります。ディスプレイ・ネームは、お客様が developerWorks に投稿するコンテンツと一緒に表示されます。

ディスプレイ・ネームは、3文字から31文字の範囲で指定し、かつ developerWorks コミュニティーでユニークである必要があります。また、プライバシー上の理由でお客様の電子メール・アドレスは使用しないでください。

必須フィールドは(*)で示されます。

3文字から31文字の範囲で指定し

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む

 


送信されたすべての情報は安全です。


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=60
Zone=Information Management
ArticleID=787725
ArticleTitle=IBM Data Movement Tool
publish-date=02292012