このチュートリアルでは、Oracle SQL Developerを使用してSybaseデータベースをOracle Database 11gに移行する方法について説明します。
約45分
このチュートリアルでは、以下のトピックについて説明します。
このアイコンの上にカーソルを置くと、すべてのスクリーンショットがロードし、表示されます。(警告:すべてのスクリーンショットが同時にロードされるため、ご使用のインターネット接続によってはレスポンス・タイムが遅くなる場合があります。)
注:各手順に関連したスクリーンショットのみを表示する場合は、それぞれの手順にあるアイコンの上にカーソルを置いてください。スクリーンショットをクリックすると、非表示になります。
Oracle SQL Developerについて
Oracle SQL Developerは、生産性を強化し、データベース開発作業を簡素化する無償のグラフィカル・ツールです。Oracle SQL Developerを使用すると、データベース・オブジェクトの参照、SQL文の実行、PL/SQL文の編集とデバッグ、組込みレポートや独自に作成したレポートの実行ができます。
Sybaseの移行の概要
Oracle SQL Developer Migration Workbenchを使用すると、短時間でサード・パーティ製データベースをOracleに移行できます。
データベースの移行手順は大きく4つの手順に分かれています。
| ソース・データベースの取得 |
最初の手順は、Sybaseデータベースの"スナップショット"の取得です。これは、次の2つの方法で実行できます。
このチュートリアルでは、2つ目の方法を実行します。 Oracle SQL Developerのオフライン取得機能を使用して、Sybase Northwindサンプル・データベースをオフライン・データファイルに抽出してあります。 取得機能により生成されたSybase15.ocpファイルには、Sybase pubs2データベースのデータベース・スキーマ情報が含まれています。 Oracle SQL Developer Migration Workbenchでは、このファイルを元に、ソースであるSybaseデータベースの構造表現を構築します。 この構造のことを取得モデルと呼びます。 |
| 取得したデータベースの変換 | Oracle SQL Developer Migration Workbenchは、取得モデルを使用して、取得したオブジェクトをOracle形式のオブジェクトに変換し、移行先データベースの構造表現を構築します。 この構造のことを変換モデルと呼びます。 |
| Oracleデータベースの生成 | Oracle SQL Developer Migration Workbenchは、変換モデル・オブジェクトに基づいて、新しいOracleデータベースを作成するDDL文を生成します。 DDL文を実行すると、Oracleデータベースにオブジェクトが作成されます。 |
| データの移行 |
プロセスの最後の手順は、データの移行です。 データは、次の2つのうちのいずれかの方法で移行できます。
このチュートリアルでは、2つ目の方法を実行します。 |
このチュートリアルでは、オフライン移行に必要なスクリプトの生成と変更がすでに済んでいます。 このチュートリアルを実行する時間がなければ、こちらをクリックしてオフライン方式を確認することもできます。
このチュートリアルでは、pubs2サンプル・データベースに変更を加えたバージョンを使用します。 このサンプル・データベースには、移行時に問題が発生するように仕掛けがしてあるため、より複雑な移行を実演できます。
取り扱う問題は以下のとおりです。
Oracle SQL Developer Migration Workbenchを使い慣れていない方は、先に『Migrating a Microsoft SQL Server Database to Oracle Database 11g』というチュートリアルを実行してください。
オンラインの移行手順を参照するには、こちらをクリックしてください。
このチュートリアルを始める前に以下のことを確認してください。
| 1. | Oracle Database 10g以降、またはOracle Database XEをインストールしていること。 |
|
| 2. | こちらからOracle SQL Developerをダウンロードして解凍していること。 |
|
| 3. | 作業ディレクトリ(wkdir)にsybasemigration.zipファイルをダウンロードして解凍していること。 |
|
新しいデータベース・ユーザーを作成するには、以下の手順を実行します。
注: すでにsystem_orcl接続とmwrepユーザーがある場合は、これらの手順を省略できます。
| 1. |
デスクトップ上のアイコンをクリックして、Oracle SQL Developerを開きます。
|
|
| 2. |
「View」→「Connections」の順に選択します。
|
|
| 3. |
Connectionsタブで、「Connections」を右クリックし、「New Connection」を選択します。 New / Select Database Connectionウィンドウが表示されます。
|
|
| 4. |
Connection Nameフィールドにsystem_orcl(または使用する接続を識別するその他の任意の名前)、Usernameフィールドにsystem、Passwordフィールドに<your password>を入力します。「Save Password」チェック・ボックスを選択します。 Hostnameフィールドに<hostname>、SIDフィールドにorclを入力します。「Test」をクリックします。
|
|
| 5. |
左下(Helpボタンの上)に表示される接続ステータスを確認します。 Successと表示されている必要があります。接続を保存するには、「Connect」をクリックします。ウィンドウを閉じます。
|
|
| 6. |
接続が保存され、ConnectionsタブのConnectionsの下に表示されます。
|
|
| 7. |
「system_orcl」接続を展開します。 注:接続を開くと、自動的にSQL Worksheetが開きます。SQL Worksheetを使用すると、上記で作成した接続に対してSQLを実行できます。
|
|
| 8. |
SQL Worksheetに以下のコードを入力して移行リポジトリのユーザーを作成します。 CREATE USER MWREP
IDENTIFIED BY mwrep
DEFAULT TABLESPACE USERS
TEMPORARY TABLESPACE TEMP;
GRANT CONNECT, RESOURCE, CREATE SESSION, CREATE VIEW TO MWREP;
|
|
| 9. |
"Run Script(F5)"アイコンを使用して、スクリプトを実行します。
|
|
| 10. |
mwrepユーザーが正しく作成されました。
|
|
SybaseデータベースをOracleに変換するには、必要なリポジトリ表およびPL/SQLパッケージを保存するためのリポジトリを作成する必要があります。以下の手順を実行します。
注: すでにmwrep_orcl接続と接続用の移行リポジトリがある場合は、これらの手順を省略できます。
| 1. |
リポジトリを作成する前に、mwrepユーザーへの接続を作成する必要があります。Connectionsタブで、「Connections」を右クリックし、「New Connection」を選択します。 New / Select Database Connectionウィンドウが表示されます。 注: Connectionsタブが表示されていない場合は、「View」→「Connections」の順に選択してください。
|
| 2. |
Connection Nameフィールドにmwrep_orcl(または使用する接続を識別するその他の任意の名前)、UsernameフィールドおよびPasswordフィールドにmwrepを入力します。「Save Password」チェック・ボックスを選択します。 Hostnameフィールドに<hostname>、SIDフィールドにorclを入力します。「Test」をクリックします。
|
| 3. |
左下(Helpボタンの上)に表示される接続ステータスを確認します。 Successと表示されている必要があります。接続を保存するには、「Connect」をクリックします。ウィンドウを閉じます。
|
| 4. |
接続が保存され、ConnectionsタブのConnectionsの下に表示されます。
|
| 5. |
「mwrep_orcl」接続を右クリックし、「Migration Repository」→「Associate Migration Repository」の順に選択します。
|
| 6. |
進捗ウィンドウが表示されます。
|
| 7. |
リポジトリが作成されたら、「Close」をクリックします。
|
| 8. |
「OK」をクリックします。
|
Sybaseデータベース・スクリプトの作成手順はすでに完了しており、ファイルはC:\hol08\migration\Sybase\files\Captureディレクトリに用意されています。作成手順を表示するには、こちらをクリックしてください。
取得済みのSybaseデータベース・スクリプトをOracle SQL Developerにロードするには、以下の手順を実行します。
| 1. |
「Migration」→「Third Party Database Offline Capture」→「Load Database Capture Script Output」の順に選択します。
|
| 2. |
Captureディレクトリを参照して「sybase15.ocp」ファイルを選択します。
|
| 3. |
オブジェクトが取得されます。取得が完了したら、「Close」をクリックします。
|
| 4. |
Sybase15はCaptured Modelsタブにリストされます。 「Sybase15」を展開します。
|
| 5. |
「dbo」を展開して、取得されたオブジェクトのリストを表示します。
|
変換の設定をこの時点で確認しておくことが大切です。そのために以下の手順を実行してください。
| 1. |
「Tools」→「Preferences」の順に選択します。
|
| 2. |
「Migration」を展開して「Identifier Options」を選択します。
|
| 3. |
"Is Quoted Identifier On"が選択されていないことを確認します。 Sybase pubs2データベースでは二重引用符が文字列リテラルとして認識されるためです。 これを正しく設定しないと、プロシージャ、トリガーおよびビューの変換が失敗することがあります。「OK」をクリックします。
|
| 4. | Captured Modelタブから「Procedures」を展開し、「storename_proc」を選択します。 "%"が使用されていることに注意してください。
|
取得したモデルをOracleモデルに変換するには、以下の手順を実行してください。
| 1. |
取得したモデル「Sybase15」を右クリックし、「Convert to Oracle Model」を選択します。
|
| 2. |
Set Data Mapウィンドウが表示されます。ここには、ソース・データ型と、Oracleモデルで変換された後の型が表示されます。「Apply」をクリックします。
|
| 3. |
変換が実行されます。変換が完了したら、「Close」をクリックします。
|
| 4. |
Converted Modelsタブにリストされている「Converted:Sybase15」を展開します。
|
| 5. |
「dbo_pubs2」を展開し、変換されたオブジェクトを表示します。
|
エラーは、オブジェクトの変換の失敗を表すものです。 エラーは通常、T-SQLで定義されたオブジェクト(プロシージャ、トリガー、ファンクション、およびビュー)にしか影響しません。 変換後に変換済みモデルでこれらのオブジェクトを使用できますが、Sybase T-SQLで定義されたままであり、Oracle PL/SQLには変換されていません。
オブジェクトの変換が失敗するのは、通常、T-SQLの一部が認識されないためです。 T-SQLのその部分を特定してしまえば、そこを回避することができるため、ほとんどの変換を自動的に実行できます。 手動変換が必要になるのは、T-SQLのほんの一部です。
このチュートリアルで使用するサンプル・データベースには、変換に失敗するプロシージャが1つ含まれています。 以降の手順では、問題を特定して変換を完了させる方法の概要を説明します。 ここで使用する手順は、変換の失敗の種類に関係なく使用できます。
エラーを解決するには、以下の手順を実行します。
| 1. |
Converted Modelナビゲータで「Converted:Sybase15」を選択し、「dbo_pubs2」を展開します。
|
| 2. |
「Procedures」を展開し、「expectedToFail」を選択します。 Migration Log - Logタブには、変換中に発生したエラーと警告のリストが含まれています。
|
| 3. |
「Failed To Convert Stored Procedure」エラーを右クリックし、「View Details」を選択します。
|
| 4. |
この例では、問題がありそうな構文の特定に役立つ行の詳細が、エラー・メッセージに含まれています。 すべてのエラーにこのような情報が含まれているわけではありません。 このチュートリアルではこの情報を無視しますが、実際の移行時にはこの情報が役立ちます。「OK」をクリックします。
|
| 5. |
ここでエラーを修正します。 expectedToFailファイルの内容をコピーして、「Migration」→「Translation Scratch Editor」の順に選択します。
|
| 6. |
「Scratch Editor」をダブルクリックしてエディタを拡大します。
|
| 7. |
2つのテキスト・ボックスを調節します。
|
| 8. |
expectedToFailファイルからコピーしたテキストを、Enter 3rd Party SQL:テキスト・ボックスに入力します。
|
| 9. |
ドロップダウン・リストをクリックして、「Sybase T-SQL To PL/SQL」を選択します。
|
| 10. |
「Translate」アイコンをクリックします。
|
| 11. |
予想どおりのエラーが発生します。「OK」をクリックします。
|
| 12. |
DDLの文および句をコメント・アウトし、問題のある文または句が判明するまで変換を繰り返します。 問題の特定が困難な場合は、こちらを参照してください。
|
| 13. | "where lower(title) ! = @title"という句が問題だったことが特定されるはずです。
感嘆符(!)と等号(=)の間の空白が認識されませんでした。 空白を削除するのが手っ取り早い解決方法ですが、あらゆる問題に対応できるより包括的な方法では、TODOコメントで句をコメント・アウトします。 その後、Oracleに移行してから手動でTODOコメントを置き換えます。
|
| 14. |
Generated PL/SQL:テキスト・ボックスの内容を選択してコピーします。
|
| 15. |
「Scratch Editor」タブをダブルクリックします。
|
| 16. |
「expectedToFail」ファイルをクリックします。
|
| 17. |
「Edit」アイコンをクリックします。
|
| 18. |
コピーした内容を、新しく開いたexpectedToFailタブに貼り付けます。
|
| 19. |
コメント・アウトしたwhere句が表示されるまで下にスクロールします。
|
| 20. |
TODOコメントを解決します。 コメントを削除して、where句を以下のように変更します。 where lower(title) != v_title;
|
| 21. |
「Save」ボタンをクリックします。
|
| 22. |
変換に失敗したオブジェクトは、生成スクリプトに自動的に配置されません。 そのため、変換されていないT-SQLをOracleデータベースに対して実行する処理は停止します。 expecteToFailプロシージャが生成スクリプトに追加されるようにするには、環境設定を設定する必要があります。「Tools」→「Preferences」の順に選択します。
|
| 23. |
「Migration」を展開して「Generation Options」を選択します。
|
| 24. |
「Generate Failed Objects」チェック・ボックスを選択して「OK」をクリックします。
|
Sybase T-SQLを使用して定義したオブジェクト(プロシージャ、トリガー、ファンクション、およびビュー)の変換中に、制限事項が生成されます。 制限事項には、現状では自動的に変換されないSybase T-SQL構文に関する情報が含まれています。 Sybase T-SQL言語の大半は自動的に認識されて変換されますが、特定の構文構造については変換方法を定義する必要があります。 この構文は変換中に認識され、"制限事項"の情報メッセージがログに記入されます。 これらの制限事項を見直して、手動変更が必要かどうか確認する必要があります。 Oracleでは意味を持たない構文が制限事項として特定されることがありますが、それは無視して構いません。 それ以外の制限事項は、手動作業で解決する必要があります。
このチュートリアルで使用しているサンプル・データベースには、制限事項が2つあるプロシージャexpectLimitationsが1つ含まれています。これらの制限を解決するには、以下の手順に従います。
| 1. |
Migration Log - Logタブで、「Multiple Limitations...」というメッセージをダブルクリックします。
|
| 2. | 「Translation Limitation 'Set' encountered」をダブルクリックします。
変換されたプロシージャ(expectLimitations)が以下の行の位置で開きます。 /*TODO:SET QUOTED_IDENTIFIER OFF*/
|
| 3. |
「Edit」アイコンをクリックします。 新しいexpectLimitationsタブが開きます。
|
| 4. |
Oracleにはこの文に相当するものがないため、変換は不要です。 TODOコメントを削除します。「Save」をクリックします。
|
| 5. |
「Translation Limitation 'VALID_NAME' encountered」をダブルクリックします。 変換されたプロシージャ(expectLimitations)が以下の行の位置で開きます。 SELECT VALID_NAME(v_identifierName)
|
| 6. |
「Edit」アイコンをクリックします。
|
| 7. |
VALID_NAMEはSybaseのシステム・ファンクションです。 変換の制限事項は、このファンクションが自動変換されていないことを知らせています。 VALID_NAMEファンクションを移行する最善の方法は変換の担当者が決定できます。 このチュートリアルでは、後から実装できるVALID_NAMEファンクションをsybase_utilitiesパッケージに作成します。 VALID_NAME(v_identifierName)の前に、テキストsybase_utilitiesを追加します。
|
| 8. |
ファイルを保存します。 sybase_utilitiesパッケージは、Oracleデータベースで作成した後に更新します。
|
実行するとOracle Databaseにオブジェクトが作成されるDDL文を含むSQLスクリプトを生成するには、以下の手順を実行します。
| 1. |
「Converted:Sybase15」を右クリックして「Generate」を選択します。
|
| 2. |
Oracle SQLが生成されます。生成されたら、「Close」をクリックします。
|
| 3. |
スクリプトのSQLが表示されます。 右のドロップダウンから「system_orcl」を選択します。
|
| 4. |
「Run Script (F5)」をクリックします。
|
| 5. |
スクリプトを実行した結果が表示されます。
|
| 6. |
スクリプトが正常に実行されたので、dbo_pubs2ユーザーへの接続を作成できます。「Connection」を右クリックして「New Connection」を選択します。
|
| 7. |
Connection Nameフィールドにdbo_pubs2_orcl(または使用する接続を識別するその他の任意の名前)、UsernameフィールドおよびPasswordフィールドにdbo_pubs2を入力します。「Save Password」チェック・ボックスを選択します。 Hostnameフィールドに<hostname>、SIDフィールドにorclを入力します。「Test」をクリックします。
|
| 8. |
左下(Helpボタンの上)に表示される接続ステータスを確認します。 Successと表示されている必要があります。接続を保存するには、「Connect」をクリックします。ウィンドウを閉じます。
|
| 9. |
「dbo_pubs2_orcl」接続を展開します。
|
| 10. |
「Tables」を展開します。
|
| 11. |
Oracleに変換されたデータベース表がリストされます。「AUTHORS」表を選択します。
|
| 12. |
「Data」タブを選択します。 現在は表にデータが含まれていないことを確認してください。 データは後から移行します。
|
SybaseからOracleデータベースへの移行は簡単です。 ただし、自動的に移行されないオブジェクトおよび構文がある点に注意してください。 そのため、手動介入が必要になります。
取得モデルを分析し、オブジェクトの数、型および複雑さを把握しておくと、手動タスクに必要な推定時間の計算に役立ちます。
以下のレポートは、実際のタスクおよびプロジェクトの見積りに使用できます。
以下のタスクに必要な時間を見積ります。
エクスポートされたデータファイルに含まれるSybaseのDATETIME値およびSMALLDATETIME値をOracleに認識させるには、日付書式マスクを指定する必要があります。 環境設定で日付書式マスクを指定すると、オフライン・データ移動スクリプトと、特にOracle SQL*Loaderの制御ファイルから正しい書式を参照できます。そのためには、以下の手順を実行してください。
| 1. |
「Tools」→「Preferences」の順に選択します。
|
| 2. |
「Migration」を展開して「Data Move Options」を選択します。
|
| 3. |
Date Maskを以下のように変更します。 これはSybaseのSMALLDATETIME列に使用されます。 Mon dd yyyy HH:mi:ssAM
|
| 4. |
Timestamp Maskを以下のように変更します。 これはSybaseのDATETIME列に使用されます。 Mon dd yyyy HH:mi:ss:ff3AM 「OK」をクリックします。
注: SybaseのDATETIME値の認識にはTIMESTAMPが使用されますが、データ・ロード中は必要に応じて暗黙的にDATEに変換されます。 |
データはすでにSybaseデータベースから生成されています。 この手順を表示するには、こちらをクリックしてください。
用意されているスクリプトを使用してデータをインポートするには、以下の手順を実行します。
| 1. |
DOSコマンド・プロンプトを開いて、次のコマンドを実行します。 <prompt> cd <location where files are> <prompt> oracle_ctl ファイルは、前提条件の項で解凍したファイルが存在するDataディレクトリにあります。 oracle_ctlは、データをロードするための文が含まれるbatファイルです。 データのロードにはsqlldrが使用されます。
|
| 2. |
コマンドは正常に実行されます。
|
| 3. |
Oracle SQL Developerに切り替えて、接続を更新します。 表のデータが正しくロードされています。
|
変換したデータベースをdbo_pubs2_migrated_orcl接続経由で参照すると、1つのプロシージャ(expectedLimitation)に無効を示すアイコンが付いているのが分かります。 VALID_NAMEファンクションをまだ解決していなかったために、コンパイルが失敗したのです。 Oracleデータベースの本当のインスタンスで作業をしているため、このような問題の解決には、Oracle SQL Developerのツールを最大限に使用できます。 問題を解決するには、以下の手順を実行します。
| 1. |
Connectionsナビゲータで「Procedures」ノードを展開し、「EXPECTLIMITATIONS」を選択します。
|
| 2. |
「EXPECTLIMITATIONS」を右クリックして、「Compile」を選択します。
|
| 3. |
Compiler - Logタブにいくつかのエラーが表示されます。 VALID_NAMEはまだ定義されていません。 手動で作成する必要があります。
|
| 4. |
Packagesの下にある「Sybase_Utilities」ノードをダブルクリックします。 Sybase_Utilitiesが新しいタブで開きます。
|
| 5. |
以下のファンクションを追加します。 FUNCTION valid_name(p_identifierName IN VARCHAR2) RETURN NUMBER;
|
| 6. |
「Compile」アイコンをクリックします。
|
| 7. |
「Sybase_Utilities Body」ノードをダブルクリックします。
|
| 8. |
「Edit」アイコンをクリックします。
|
| 9. |
ファンクションに以下の定義を追加します。 FUNCTION valid_name(p_identifierName IN VARCHAR2)
|
| 10. |
「Compile」アイコンをクリックします。
|
| 11. |
「EXPECTLIMITATIONS」タブをダブルクリックします。
|
| 12. |
「Compile」アイコンをクリックします。 プロシージャは正しくコンパイルされます。
|
移行したデータベースのテスト中に問題が見つかることがあります。 たとえば、ファンクションsybase_utilities.valid_nameは、論理的に正しくなるように完成させる必要があります。. 手動作業が必要になるもう1つの問題は、動的SQLの変換です。 文字列リテラル内のT-SQLは、自動的に変換されません。 すべての動的SQLの検証が必要であり、手動変換が必要になることもあります。 以下の例は、手動で解決するのは簡単ですが、このチュートリアルでは、より包括的な方法で解決します。以下の手順を実行します。
| 1. |
Proceduresノードの下で「DYNAMICSQL」プロシージャを選択します。
|
| 2. |
以下のT-SQLが、変換済みのプロシージャ内にまだ存在しています。 TOP n構文はOracleでは無効であるため、変換が必要です。 EXECUTE IMMEDIATE 'SELECT TOP 10 ' || v_selectList || ' FROM ' || v_tableName || ' WHERE ' || v_condition;
|
| 3. |
select文をコピーして、Translation Scratch Editorを開きます(「Migration」→「Translation Scratch Editor」)。
|
| 4. |
ドロップダウン・リストから「Sybase T-SQL To PL/SQL」を選択します。
|
| 5. |
コピーしたテキストを、Enter 3rd Party SQL:テキスト・ボックスに入力します。
|
| 6. |
文を修正し、有効な"ダミー"のT-SQL文を作成します。 この文は有効なSybase T-SQLである必要があります。 以下に示すテキストを使用できます。「Translate」アイコンをクリックします。 SELECT TOP 10 dummylist/* v_selectList*/
|
| 7. |
変換されたPL/SQLが右側のウィンドウに表示されます。 これは、OracleでエミュレートできるSybase T-SQLのTOP n句の処理を、ROWNUM条件を使用して定義するのに役立ちます。
|
| 8. |
上記の変換を使用して、動的SQLを以下のように作成し直します。 ' SELECT '|| v_selectList ||
' FROM ' || v_tableName ||
' WHERE ' || v_condition ||
' AND ROWNUM <= 10';
|
| 9. |
DYNAMICSQLタブで「Edit」アイコンをクリックします。
|
| 10. |
コピーしたテキストを置き換えます。 これは動的問合せであるため、結果セットを戻す必要がある点に注意してください。 完全なプロシージャは以下を参照してください。 正しく変更したら、「Compile」アイコンをクリックします。
|
| 11. |
プロシージャは正しくコンパイルされます。
|
移行しようとしているデータベースの複雑さにもよりますが、移行プロジェクトの大部分がテスト可能です。
現在のところオラクルは、移行したデータベースをユーザーの代わりに自動的に検証してくれるツールを用意していません。 移行のこのフェーズは、移行を開始する前に計画して考慮しておく必要があります。
プロジェクト計画には、以下の工程を含める必要があります。
このチュートリアルで学習した内容は、次のとおりです。