内容
•
Oracleから移行する際の主なタスク
•
移行をサポートするツール
•
IBM Data Movement ToolによるDDL/データの移行
Oracleから移行する際の主なタスク
OracleからDB2へ移行する際の主なタスク
• プロジェクトのアセスと計画
•
DB関連リソースの移行
•
オブジェクトの移行
•
データの移行
•
アプリケーションの移行
• テスト
• 本番システムの移行
オブジェクト移行のタスク
• 各種オブジェクトDDLの抽出
•
IBM Data Movement Tool, IBM Optim Development Studioが使用可能
• 移行先データベースの作成
•
事前にDB2_COMPATIBILITY_VECTORをセットする
•
DB2にあわせたスキーマの更新
•
データ・タイプのマッピング
•
DDLフォーマットの変更
•
論理設計を変更する場合はその対応
• データタイプ・マッピングの例(1)
•
IBM Optim Development Studioでのデフォルトのマッピング
ソース 桁数 ターゲット 備考 NUMBER 1-4,0 SMALLINT NUMBER 5-9,0 INTEGER NUMBER 10-18,0 BIGINT NUMBER 19-31,0 NUMBER(p,s) NUMBER 32-38,0 DECFLOAT 34桁以上では桁落ちが発生。文字列としての保持を検討 NUMBER 1-31,1-31 NUMBER(p,s) NUMBER 32-38,1-38 DECFLOAT 34桁以上では桁落ちが発生。文字列としての保持を検討 NUMBER NUMBER DECIMAL p,s DECIMAL(p,s) BINARY_FLOAT FLOAT BINARY_DOUBLE DOUBLE TIMESTAMP p TIMESTAMP(p) タイムゾーン付きは未サポート
Note:
• データタイプ・マッピングの例(2)
ソース 桁数 ターゲット 備考 NCHAR 1-127 GRAPHIC NCHAR 128-2000 VARGRAPHIC NVARCHAR2 VARGRAPHIC CHAR 1-254 CHAR CHAR 255-2000 VARCHAR VARCHAR2 VARCHAR2 ROWID CHAR UROWID CHARDATE TIMESTAMP DATEも選択可 BFILE BLOB
LONG RAW BLOB BLOB BLOB
データ移行のタスク
• データの抽出
•
Oracleは、デフォルトではCSV等への出力機能を持たない
•
IBM Data Movement Toolを使用してCSVへの抽出が可能
•
論理設計を変更する場合、データフォーマットの変換を実施
• データをテスト環境へ投入
•
移行先の表へのデータ投入が可能かどうかをチェック
•
特に論理設計の変更が行われている場合
•
アプリケーションのテスト環境を提供
• 本番データ移行の計画、準備
データの抽出、転送、投入のプロセスを検証し、本番データ移行での所要
アプリケーション移行のタスク
• 移行先のアプリケーション・インターフェースの構成
•
JDBC, 組み込みSQL, .NET, ODBC, CLI等適切なドライバを選定、構成
する
• アプリケーション・コードの変更
•
DBへの接続ストリング
•
互換性のないSQLやエラーハンドリングを検出
•
分離レベルやロッキングの要件を確認
•
基本的にはDB2 9.7で提供されるCurrently Committedを使用可能
•
未サポートのAPI、Build-in-package使用、ディクショナリー参照等があれ
ば修正
•
UDFやPROCEDUREの定義で回避可能か検討
• 検証テストの実施
DB2 V9.7 FP4レベルでの主要な非互換/未サポート機能
一階層のパッケージ等に移行。名前
の衝突に注意する。
Function / procedure定義のネスト
は不可(複数階層の定義)
パッケージ内部で宣言し、タイプの参
照にパッケージの接頭辞を追加
独立したType宣言は未サポート
は
カラムのNOT NULL化や非UNIQUE
INDEXへの定義変更を検討
DB2では、UNIQUE INDEXは複数
のNULL値を許容しない
移行をサポートするツール
移行をサポートするツール
移行をサポートするツール
• データオブジェクトを移行する
•
IBM Data Movement Tool
•
IBM Optim Development Studio
• データを移行する
•
IBM Data Movement Tool
• アプリケーションを移行する
•
IBM Optim Development Studio
• スクリプトの移行を容易にする
• 他社DBMSからのDDL/データ抽出をサポートするツール
•
Oracle, SQL Server, Sybase, MySQL, PostgreSQL等多数のデータソースをサポート
•
OracleはCSVでのデータ抽出機能を持たないため、当ツールの活用が重要
• 主な機能
•
GUI及び、コマンドラインによるDDL/データの抽出
•
GUIによるターゲット・データベースでのオブジェクト作成
•
抽出、投入をコマンドラインから実施するための各種スクリプトの生成
•
Oracleソースの場合にサポートされているオブジェクト
•
表、ビュー、シーケンス、制約、索引、シノニム(ALIAS)
•
Procedure, Function, Trigger
•
権限情報(Role, Privilege)
• マルチ・スレッド動作による高速なデータの抽出が可能
•
DB2へのLOAD用スクリプトも生成
• 前提
•
JDK 1.5以降
•
Oracleと接続する場合、Oracle JDBCドライバ要
•
必要なドライバは、ojdbc14.jar, xmlparserv2.jar, xdb.jar の3つ
• 入手方法
•
DeveloperWorksにて配布
•
http://www.ibm.com/developerworks/db2/library/techarticle/dm-0906datamovement/
•
ツールの詳細な使用方法の解説もあり
IBM Data Movement Tool
•
Data Studio Developerの後継
•
2009年6月にOptimを統合したV2.2が登場
•
Oracle移行関連の機能強化
•
Data Source ExplorerがOracleへの接続をサポート
•
Copy & Pasteによるデータオブジェクトの移行をサポート
•
SELECT/INSERTによるデータ移動も可能
•
互換性のないデータタイプは自動的にマッピング
•
PL/SQLの移行及び、デバッグ機能を提供
CLPPlus
•
OracleのSQL*Plusに似たインターフェースを持ち、SQLを実行
するためのユーティリティ
•
SQL、PL/SQL、SQL PLの実行
•
対話式でのSQLの実行
•
ファイルに保存したSQLの実行
•
主要なSQL*Plusコマンドをサポート
•
OracleのSQL*Plusと同じような動作をする
•
サポートされているコマンドは、HELP INDEXコマンドで確認
•
CLPの一部のコマンドもサポート
CLPPlusの起動方法 1
•
clpplus 起動コマンド
>>-clpplus--+---+---> '-user-id--+---+-' '-/password-' >--+---+---+----+---+--+---+-+->< | +-@host-name-+ '-:port-number-' '-/database-name-' | | '-@localhost-' | | | '-script-filename---起動例: C:¥work>clpplus db2admin/db2admin@localhost:50000/testdb データベース接続情報 ホスト名 = localhost データベース・サーバー = DB2/NT SQL09070 SQL 許可 ID = db2admin ローカル・データベース別名 = TESTDB ポート = 50000 CLPPlus: バージョン 1.0CLPPlusの起動方法 2
•
SQL*Plusでの「sqlplus userid/password@ネットサービス名」と似た形式で接続可能
•
login.sqlファイルに接続で使用する変数を定義し、接続時にその変数を使用可能
•
clpplus userid/passwod@変数
• 例
C:¥work>type login.sql define test21=localhost:50000/test21 define testdb=localhost:50000/testdb C:¥work>clpplus db2admin/db2admin@testdb データベース接続情報 ホスト名 = localhost データベース・サーバー = DB2/NT SQL09070 SQL 許可 ID = db2admin ローカル・データベース別名 = TESTDB login.sqlにconnect_idintifierを記述 login.sqlでdefineし た変数を指定CLPPlusコマンド
• ファイルに記述されたSQLを読み込み実行
• 置換変数の使用
SQL> host dir | findstr sql10
2009/05/12 01:48 306 sql10.sql SQL> get sql10.sql
1 BEGIN
2 for cur1 in (SELECT * FROM dept WHERE deptno = &depno) 3 LOOP
4 DBMS_OUTPUT.PUT_LINE('========================'); 5 DBMS_OUTPUT.PUT_LINE(' DEPTNO:'||cur1.deptno); 6 DBMS_OUTPUT.PUT_LINE(' DNAME :'||cur1.dname ); 7 DBMS_OUTPUT.PUT_LINE(' LOC :'||cur1.loc ); 8 END LOOP;
9* END;
SQL> set serveroutput on SQL> /
変数 depno の値を入力してください: 10
元のステートメント:: for cur1 in (SELECT * FROM dept WHERE deptno = &depno) 置換された新規ステートメント:: for cur1 in (SELECT * FROM dept WHERE deptno = 10) ======================== DEPTNO:10 DNAME :ACCOUNTING 置換変数 実行前に置き 換えができる
CLPPlusコマンドで出力形式を整形
•
CLPPlusコマンドで出力形式を整えることも可能
SQL> select table_schema,table_name,num_rows,blocks from user_tables; TABLE_SCHEMA ---TABLE_NAME NUM_ROWS --- ---BLOCKS ---DB2ADMIN DEPT 5033 1004 DB2ADMIN SALGRADE 5 1 TABLE_SCHEMA ---TABLE_NAME NUM_ROWS --- ---BLOCKS ---DB2ADMIN BONUS 0 0 DB2ADMIN EMP 6790032 100234 SQL> set linesize 150
SQL> col table_schema format a30 SQL> col table_name format a30
SQL> set linesize 150
SQL> col table_schema format a30 SQL> col table_name format a30
SQL> col num_rows format 999,999,999 SQL> col blocks format 999,999,999 SQL> l 1* select table_schema,table_name,num_rows,blocks from user_tables デフォルトでは80バイトで 行が折り返される
CLPPlusでDB2 CLPコマンドが使用可能!
•
CLPコマンドのExportとImportをCLPPlusから実行
SQL> export to c:¥work¥emp.del of del select * from emp; エクスポートされる行数の合計: 12
DB250000I: コマンドは正常に完了しました。 SQL> host type c:¥work¥emp.del
+7369.,"SMITH","CLERK",+7902.,"1980-12-17-00.00.00",+00800.00,,+20.
+7499.,"ALLEN","SALESMAN",+7698.,"1981-02-20-00.00.00",+01600.00,+00300.00,+30. ・・・省略・・・
SQL> create table emp2 like emp;
DB250000I: コマンドは正常に完了しました。
SQL> import from c:¥work¥emp.del of del replace into emp2; 読み取り行数の合計: 12 スキップされた行数の合計: 0 挿入された行数の合計: 12 更新行数の合計: 0 拒否された行数の合計: 0 コミットされた行数の合計: 12 DB250000I: コマンドは正常に完了しました。 SQL> select * from emp2;
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
デリミタ形式でファイルにExportされて いる
IBM Data Movement Tool
を利用したDDL/データの移行
IBM Data Movement Tool
を利用したDDL/データの移行
• 2つのレジストリー変数
•
DB2_COMPATIBILITY_VECTOR
•
Oracle互換機能の有効化
•
DB作成前にセットすることが必須
•
DB2_DEFERRED_PREPARE_SEMANTICS
•
型無しパラメータマーカーのサポート
•
db2setにてレジストリー変数を設定
• インスタンスを再起動して設定を反映
データベース作成前の設定
$ db2set DB2_COMPATIBILITY_VECTOR=ORA
$ db2set DB2_DEFERRED_PREPARE_SEMANTICS=YES
$ db2stop force
$ db2start
• データベース作成時の一般的な推奨
•
自動ストレージを活用しストレージ管理をシンプルに
•
表スペース単位の初期サイズ、上限設定が不要
•
ストレージ・パス単位での容量管理のみ実施
•
32KBページサイズの使用
•
Oracleと異なり、DB2は各レコードが1ページに収まる必要がある。移行をシンプルにする場
合、なるべく大きなページサイズを使用する
•
高トランザクションのOLTP環境では、4KB等のより小さなページサイズも考慮
•
複数ページサイズを使用する場合、ページサイズごとにバッファープールが必要
•
STMMを活用し、各バッファープールのサイズを最適化(デフォルト)
•
LOBを格納する表スペースは分割する
•
インライン格納されていないLOBはバッファープールに載らないため、データ部と表スペース
を分割し、ファイル・キャッシュの使用を有効化することとを推奨
データベースを作成
•
CREATE DATABASEコマンドの例
•
/db2data1, /db2data2, /db2data3を自動ストレージパスとして設定
•
各ストレージ・パスは、独立したファイルシステム、物理ディスク上に配置
•
データベースディレクトリーは/db2systemに配置
•
デフォルトページサイズとして32KBページを指定
データベースを作成
CREATE DB TESTDB AUTOMATIC STORAGE YES
ON /db2data1,
/db2data2,
/db2data3
DBPATH ON /db2system
PAGESIZE 32 K
•
IBM Data Movement Toolを起動
•
Linux/UnixではIBMDataMovementTool.shを起動(Windowsでは~.cmdを使用)
•
Connection Informationの入力
•
GUI画面の起動後にソース、ターゲットDBへの接続情報を入力
IBM Data Movement Toolの起動
$ ls -l total 889 -rw-r--r-- 1 db2inst1 db2grp 410 ... IBMDataMovementTool.cmd -rw-r--r-- 1 db2inst1 db2grp 897647 ... IBMDataMovementTool.jar -rwxr--r-- 1 db2inst1 db2grp 919 ... IBMDataMovementTool.sh $ cat IBMDataMovementTool.sh ...
java -Xmx990m -jar IBMDataMovementTool.jar $1
IBM Data Movement Toolの起動
•
データベースへの接続
•
ボタン1,2を押下し、ソース/ターゲットDBへ接続する
1
2
•
DDL/データの抽出
•
出力先ディレクトリーを設定
•
抽出の対象を選択
•
抽出対象のデータが少量の場合、リモートでの抽出も可能
•
大量データの抽出は、DDLの抽出とは独立してソースDBサーバ上で行うこ
とを推奨
•
「Extract DDL/Data」ボタンを押し、抽出を実行
• 必要に応じてDDLを修正
•
データ/索引/LOBの格納先表スペースの分割
•
ページサイズの指定
•
データタイプの再マッピング等々
•
DDL/データの投入
•
IBM Data Movement ToolのGUI画面から実施
•
「Deploy DDL/Data」ボタンから一括作成
•
「Interactive Deploy」機能を使用して個別に作成
•
ツールが生成するdb2ddl.sh / db2gen.shを手動で実行
•
生成対象のオブジェクト
•
バッファープール、表スペース、表、制約、シーケンス、シノニム(ALIAS)
IBM Data Movement Toolの起動
Note:
•
IBM Data Movement Toolが生成する設定ファイル、スクリプト
ファイル名 内容
IBMExtract.properties IBM Data Movement Toolのプロパティファイル。データベースへ
の接続情報や、前回実行時のオプションを保持する。 geninput ソースDBに接続し、<SID>.tableファイルを生成する <SID>.table 移行対象のテーブル一覧。ソースDB上のテーブルを元に生成され る。このファイルの内容を編集することで、ツールによる移行対象の 表を制御可能。<SID>はオラクルのシステム識別子を表す unload ソースDBに接続し、DDL/データの抽出を実行するスクリプト。抽出 の対象(DDLのみ、データのみ、DDL及びデータ)は、プロパティファ イル(IBMExtract.properties)の設定内容で決定される。 db2ddl.sh ターゲットDBに接続し、DDL中に含まれたオブジェクトを作成するス クリプト(PL/SQLを含むオブジェクトは対象外)。DDLのみを抽出対 象としたときに生成される。 db2gen.sh ターゲットDBに接続し、DDLの実行とデータの投入を行う(PL/SQL
Note:
• 前述した設定ファイル、スクリプト以外のファイル
オブジェクトのDDL db2tsbp.sql db2udf.sql db2tables.sql db2default.sql db2sequences.sql db2synonyms.db2 db2check.sql db2cons.sql db2uniq.sql db2fkeys.sql PL/SQLを含むDDL db2plsql_function.db2 db2plsql_package.db2 db2plsql_package_body.db2 db2plsql_procedure.db2 db2plsql_trigger.db2 db2plsql_type.db2 db2plsql_type_body.db2 db2plsql_views.db2 データロード用スクリプト db2load.sql db2loadterminate.db2 db2checkRemoval.sh その他 db2tabcount.sql db2tabstatus.sql db2checkpending.sql db2droptables.db2 db2fkdrop.sql db2objprivs.db2 db2roleprivs.db2 db2runstats.sql 権限情報 db2objprivs.db2 db2roleprivs.db2• 「Interactive deploy mode」によるオブジェクトの作成
•
GUI画面からのオブジェクト作成も可能
•
"Interactive Deploy" タブから“Refresh Objects to be deploy“を選択
•
抽出したDDLを読み込み、オブジェクトのツリーが表示される。
•
個別に対象オブジェクトを選択して作成可能
•
一括作成も可能
• コマンドラインからのツール実行
•
IBM Data Movement Toolはコマンドライン環境からも実行可能
•
テキストによる対話式のメニューから実行する
• コンソール・モードでの起動
•
TELNET/SSH等のコマンドライン環境から起動した場合、自動的にコ
ンソール・モードで起動
•
“-console” オプションを付加することで、強制的にコンソール・モードを選択
することも可能
• コンソール・モードでの抽出のステップ
•
コンソール・モードでの起動
•
動作設定、接続情報の入力
•
テーブル一覧の生成
•
テーブル一覧の編集(オプション)
•
コンソールモードでの起動後、抽出対象の選択や接続情報の入力を実施。
入力する情報はGUIモードと同様
•
下記メッセージが出力されたタイミングで、テーブル一覧の生成が完了
•
テーブル一覧を編集する場合は、ツールの実行を一旦保留して、別セッションから
ファイルの編集を行う
•
コンソール・モードの場合、全スキーマのテーブルを含んだテーブル一覧が生成され
るため、必要な表のみに絞ることを推奨
コンソールモードによる
IBM Data Movement Tool の実行
$ ./IBMDataMovementTool.sh -console
Switching to Console Mode of operation
[2009-06-07 10.11.04.838] INPUT Directory = . ...
Extract DDL (Yes) : 1 Extract DDL (No) : 2
Enter a number (Default=1) : 1
Extract Data (Yes) : 1 Extract Data (No) : 2
Enter a number (Default=1) : 2
You can remove tables that you do not want to migrate by editing .tables file
•
テーブル一覧の編集
•
行単位で必要な表のみ残すよう編集
•
DDL抽出の再開
•
テーブル一覧の編集完了後に、保留していたツールの実行を再開する
•
このタイミングでDDL、データファイルの抽出が実行される
•
IBMExtract.propertiesも同時に出力される
•
DDL/データの投入
•
抽出完了後に、DDL/データの投入を実行するかを選択する
コンソールモードによる
IBM Data Movement Tool の実行
$ cat orcl.tables
"TUKI11G"."ACCOUNTS":SELECT * FROM "TUKI11G"."ACCOUNTS"
"TUKI11G"."CUSTOMERS":SELECT * FROM "TUKI11G"."CUSTOMERS"