ODBC 経由での SQL ゲートウェイへの接続
この章では、SQL ゲートウェイ用の ODBC 論理接続の定義の作成方法、およびデータ移行ウィザードの使用方法を説明します。InterSystems ODBC の使用方法の詳細は、”InterSystems ODBC ドライバの使用法" を参照してください。
以下の項目について説明します。
-
外部ソースへの接続の作成 — SQL ゲートウェイ用の ODBC 論理接続の定義の作成方法を説明します。
-
[データ移行ウィザード] の使用法 — 外部の ODBC ソースからデータを移行し、適切な InterSystems IRIS クラス定義を作成してデータを格納する方法について説明します。
外部ソースへの接続の作成
InterSystems IRIS では、外部データ・ソースへの接続の論理名である、SQL ゲートウェイ接続定義のリストが管理されます。各接続定義は、論理名 (InterSystems IRIS 内で使用するため)、データ・ソースへの接続情報、および接続を確立するときに使用するユーザ名とパスワードで構成されます。これらの接続は、%Library.sys_SQLConnection テーブルに格納されます。このテーブルのデータをエクスポートして、同じバージョンの InterSystems IRIS の別のインスタンスにインポートできます。
このセクションで説明する項目は以下のとおりです。
DSN を作成するための OS 固有の手順は、"InterSystems ODBC ドライバ の使用法" の以下のセクションを参照してください。
-
“Windows での ODBC データ・ソースの定義”
-
“UNIX® での ODBC データ・ソースの定義”
管理ポータルでの論理接続の定義
ODBC 準拠のデータ・ソースに接続を定義するには、以下の手順を実行します。
-
外部データベースの ODBC データ・ソース名 (DSN) を定義します (手順は、データベースのドキュメントで説明されています)。
-
管理ポータルで、System Administration > Configuration > Connectivity > SQL Gateway Connections ページに移動します。
-
[新規接続作成] をクリックします。
-
[ゲートウェイ接続] ページで、以下のフィールドの値を入力または選択します。
-
[接続の種類] で [ODBC] を選択します。
-
[接続名] — InterSystems IRIS 内で使用する、接続の識別子名を指定します。
-
[DSN を選択してください] — 前に作成した DSN を選択します。ODBC SQL ゲートウェイでは DSN を使用しない接続はサポートされていないため、DSN を使用する必要があります。
-
[ユーザ] — 必要に応じて、接続の確立時に既定値として機能するアカウントの名前を指定します。
-
[パスワード] — 既定のアカウントに関連付けられたパスワードを指定します。
例えば、一般的な接続は以下の値を使用します。
設定 値 [タイプ] ODBC [接続名] ConnectionODBC1 [DSN を選択してください] MyAccessPlayground [ユーザ] DBOwner [パスワード] DBPassword その他のオプションについては、このセクションの後半の “実装固有の ODBC 接続オプション” を参照してください。
-
-
オプションで、値が有効かどうかをテストします。テストするには、[テスト接続] ボタンをクリックします。画面に、前の手順で入力した値を、有効な接続で使用できるかどうかを示すメッセージが表示されます。
-
名前付き接続を作成するには、[保存] をクリックします。
-
[閉じる] をクリックします。
SQL ゲートウェイの ODBC データ・ソースとしての使用
InterSystems IRIS は、ODBC ドライバを備えており、ODBC データ・ソースとして使用できます。つまり、InterSystems IRIS インスタンスは、それ自体または別の InterSystems IRIS インスタンスに ODBC および SQL ゲートウェイ経由で接続できます。具体的には、この接続は、1 つの InterSystems IRIS のネームスペースから別の InterSystems IRIS のネームスペースへの接続です。この方法で接続する場合は、他の外部データベースに接続するときと同じように、使用するデータベース・ドライバに関する接続詳細が必要です。このセクションでは基本的な情報を示します。
別の InterSystems IRIS インスタンス (InterSystems IRIS_B) を ODBC データ・ソースとして使用するように InterSystems IRIS インスタンス (InterSystems IRIS_A) を構成するには、以下の操作を実行します。
-
InterSystems IRIS_A を実行しているマシン上で、使用する InterSystems IRIS_B のネームスペースを表す DSN を作成します
Tip:InterSystems IRIS をインストールするとインストーラによって自動的に DSN が作成されるため、InterSystems IRIS_B をこのマシンにインストールしたときに、既に適切な DSN が使用可能になっている場合があります。
-
InterSystems IRIS_A 内で、SQL ゲートウェイを使用して、DSN を使用する ODBC 接続を作成します。以下の詳細を指定します。
-
[タイプ] で [ODBC] を選択します。
-
[接続名] — InterSystems IRIS_A 内で使用する、接続の識別子を指定します。
-
[DSN を選択してください] — InterSystems IRIS_B で前に作成した DSN を選択します。
例えば、一般的な接続は以下の値を使用します。
設定 値 [タイプ] ODBC [接続名] TestConnection [DSN を選択してください] TestConnection Tip:[ユーザ] と [パスワード] の情報は DSN の一部なので、これらを指定する必要はありません。
-
-
[保存] をクリックします。
-
[閉じる] をクリックします。
実装固有の ODBC 接続オプション
SQL ゲートウェイ接続を定義する前に、外部データベースとデータベース・ドライバの要件を理解しておく必要があります。これらの要件が接続の定義方法に影響を及ぼすためです。以下のオプションは、すべてのドライバ実装に適用されるわけではありません。
[レガシー outer join (Sybase) を有効に] オプションは、接続でレガシーな外部結合の使用を有効にするかどうかを制御します。レガシーな外部結合では、SQL-92 規格より前の SQL 構文が使用されます。外部データベースがこのような結合をサポートしているかどうかを確認するには、そのデータベースのドキュメントを参照してください。
[長いデータ長が必要] オプションは、接続でデータを結合する方法を制御します。このオプションの値は、データベース・ドライバの SQL_NEED_LONG_DATA_LEN 設定と一致している必要があります。この設定の値を確認するには、ODBC SQLGetInfo 関数を使用します。SQL_NEED_LONG_DATA_LEN が Y の場合は [長いデータ長が必要] オプションを選択し、それ以外の場合は選択を解除します。
[Unicode ストリームのサポート] オプションは、ストリームで接続が Unicode データをサポートするかどうかを制御します。これらは、LONGVARCHAR または LONGVARBINARY タイプのフィールドです。
-
Sybase の場合はこのチェック・ボックスのチェックを外します。Sybase データベースを使用している場合は、SQL ゲートウェイ経由でアクセスするすべてのフィールドに UTF-8 データのみが含まれるようにする必要があります。
-
その他のデータベースの場合は、このチェック・ボックスにチェックを付けます。
[デフォルトで区切り識別子を使用しない] オプションは、生成されたルーチン内の識別子の形式を制御します。
SQL 区切り識別子をサポートしないデータベースを使用する場合は、このチェック・ボックスにチェックを付けます。これには現在、以下のデータベースが含まれます。
-
Sybase
-
Informix
-
MS SQL Server
他のデータベースを使用する場合は、チェック・ボックスのチェックを外します。すべての SQL 識別子が区切られます。
[COALESCE 使用] オプションは、クエリにパラメータ (?) が含まれる場合のクエリの処理方法を制御します。これは、クエリ・パラメータが NULL の場合にのみ適用されます。
-
[COALESCE 使用] を選択しない場合に、クエリ・パラメータが NULL のとき、クエリは対応する値が NULL となっているレコードのみを返します。例えば、以下の形式のクエリを考えてみます。
SELECT ID, Name from LinkedTables.Table WHERE Name %STARTSWITH ?
指定されたパラメータが NULL のとき、クエリは、値が NULL の名前を持つ行のみを返します。
-
[COALESCE 使用] を選択した場合、クエリは、COALESCE 関数呼び出し内の各パラメータを折り返します。これにより、NULL 値の処理方法が制御されます。
ここで、クエリ・パラメータが NULL のとき、クエリは基本的にはパラメータをワイルドカードとして扱います。前の例では、指定されたパラメータが NULL のとき、このクエリはすべての行を返します。これには、通常の ODBC クライアントの動作との一貫性があります。
このオプションを選択するかどうかは、ユーザの判断と COALESCE 関数が外部データベースでサポートされているかどうかによります。
外部データベースで COALESCE 関数がサポートされているかどうかを確認するには、そのデータベースのドキュメントを参照してください。
[複合 Row ID 内で変換] オプションでは、複合 ID を形成するときの文字以外の値の処理方法を制御します。データベースでサポートされているオプションを選択します。
-
[非文字値を変換しない] — このオプションでは、変換は実行されません。このオプションは、データベースで文字以外の値の文字値への連結がサポートされる場合にのみ適切です。
-
[CAST を使用する] — このオプションでは、CAST を使用して、文字以外の値が文字値に変換されます。
-
[{fn convert ...} を使用] — このオプションでは、{fn convert ...} を使用して、文字以外の値が文字値に変換されます。
すべての場合に、ID (または変換後の ID) の間に || を使用して ID が連結されます。
外部データベースでサポートされるオプションを確認するには、外部データベースのドキュメントを参照してください。
[データ移行ウィザード] の使用法
管理ポータルには、外部テーブルまたは外部ビューからのデータの移行に使用できるウィザードがあります。
外部ソースのテーブルまたはビューからデータを移行する場合、そのテーブルまたはビューのデータを格納する永続クラスが生成され、データがコピーされます。このウィザードには、クラスの名前が移行元のテーブルまたはビューの名前と同じであり、同様にプロパティ名もテーブルやビューのものと同じであるという前提があります。クラスが生成されると、そのクラスには、外部データ・ソースとの接続はありません。
-
外部データベースへの SQL ゲートウェイ接続をまだ作成していない場合は、開始する前に作成してください (“外部ソースへの SQL ゲートウェイ接続の作成” を参照)。
-
管理ポータルで、[システム・エクスプローラ]、[SQL] の順に選択します。必要に応じて、ページ上部に表示されている現在のネームスペースをクリックして、ネームスペースを変更します。利用可能なネームスペースのリストが表示されます。
ページ上部の [ウィザード] ドロップダウン・リストをクリックし、[データ移行] を選択します。
-
ウィザードの最初のページで、以下のようにテーブルまたはビューを選択します。
-
[宛先のネームスペースを選択してください] — データのコピー先の InterSystems IRIS ネームスペースを選択します。
-
[スキーマ・フィルタ] — テーブルまたはビューを含むスキーマ (クラス・パッケージ) 名を指定します。ワイルドカードを使用して名前を指定し、複数のスキーマを返すことや、% を使用してすべてのスキーマを返すことができます。例えば、C% は、先頭文字が C であるネームスペース内のすべてのスキーマを返します。選択元となるスキーマの返されるリストが短くなることでロード速度が向上するため、このフィルタを使用することをお勧めします。
-
[テーブル・フィルタ] — テーブルまたはビューの名前を指定します。ワイルドカードを使用して名前を指定し、複数のテーブルまたはビューを返すことや、% を使用してすべてのテーブル/ビューを返すことができます。
-
[テーブルタイプ] — [テーブル]、[ビュー]、[システムテーブル]、または [すべて] を選択します。既定は [テーブル] です。
-
[SQL ゲートウェイ接続を選択してください] — 使用する SQL ゲートウェイ接続を選択します。
-
-
[次へ] をクリックします。
-
次のページでは、必要に応じて、クラスごとに以下の情報を指定することができます。
-
[新規スキーマ] — クラスを含むパッケージを指定します。長さ制限も含め、ObjectScript 識別子のルールに従う必要があります ("クラスの定義と使用" の "名前付け規約" のセクションを参照)。
Tip:すべてのクラスのパッケージ名を変更するには、この列の一番上に値を入力し、[すべて変更] をクリックします。
-
[定義をコピーする] — 外部ソースのテーブル定義に基づいてこのクラスを生成する場合は、このチェック・ボックスにチェックを付けます。クラスが既に生成されている場合は、このチェック・ボックスのチェックを外すことができます。
-
[データをコピーする] — 外部ソースからこのクラスのデータをコピーする場合は、このチェック・ボックスにチェックを付けます。データをコピーするときに、ウィザードによって、InterSystems IRIS クラスの既存データが上書きされます。
-
-
[次へ] をクリックします。ウィザードに以下のオプション設定が表示されます。
-
[妥当性検証無効] — チェックを付けると、INSERT コマンドの restriction パラメータで %NOCHECK が指定されて、データがインポートされます。
-
[インポート・プロセスのジャーナリングを無効化] — チェックを付けると、データ移行 (システム規模ではない移行) の実行プロセスについてジャーナリングが無効化されます。これにより、移行を高速化できますが、システム障害で移行が中断された場合、移行されたデータが不確定の状態で残される可能性があります。ジャーナリングは、実行が成功したかどうかにかかわらず、実行終了時に再有効化されます。
-
[インデックスを延期] — チェックを付けると、データの挿入後にインデックスが構築されます。ウィザードはクラスの %SortBegin() メソッドをテーブルへのデータ挿入の前に呼び出します。これにより、インデックス・エントリが並べ替えのための一時的な場所に書き込まれます。すべての行が挿入された後でウィザードが %SortEnd() を呼び出すと、インデックス・エントリは実際のインデックス位置に書き込まれます。テーブルにユニーク・インデックスが定義されており、一意の制約に対する違反を移行時にすべて検出したい場合は、[インデックスを延期] を使用しないでください。[インデックスを延期] を使用すると、一意の制約に対する違反は検出されません。
-
[トリガ無効] — チェックを付けると、INSERT コマンドの restriction パラメータで %NOTRIGGER が指定されて、データがインポートされます。
-
[インポート前にテーブルの既存データを削除する] — チェックを付けると、既存のデータは新しいデータにマージされずに削除されます。
-
-
[完了] ボタンをクリックします。新しいウィンドウが開き、[バックグラウンドジョブ] ページに、バックグラウンド・タスクのページへのリンクが表示されます。直ちにインポートを開始する場合は [閉じる] をクリックし、バックグラウンド・タスクのページを表示する場合は特定のリンクをクリックします。いずれの場合も、ウィザードによって、インポートはバックグラウンド・タスクとして開始されます。
-
[データ移行ウィザード] ウィンドウで [完了] をクリックして、管理ポータルのホーム・ページに戻ります。
%SQL.Migration.ImportOpens in a new tab クラスには、データ移行ウィザードのラッパが含まれます。詳細は、クラス・ライブラリのドキュメントを参照してください。
Microsoft Access と外部キーの制約
データ移行ウィザードを Microsoft Access で使用する場合、Access のテーブルに定義されている外部キー制約のコピーが試行されます。これを実行するために、ウィザードでは、Access の MSysRelationships テーブルをクエリします。既定では、このテーブルは非表示であり、読み取りアクセス権がありません。ウィザードが MSysRelationships にアクセスできないと、ウィザードは、外部キー制約なしでデータ・テーブル定義を InterSystems SQL に移行します。
このユーティリティによって外部キー制約をテーブル定義と共に移行するには、以下のように Microsoft Access で MSysRelationships に対する読み取りアクセスを付与するよう設定する必要があります。
-
Microsoft Access で、そのシステム・オブジェクトが表示されることを確認します。
-
[ツール]→[オプション] をクリックして、[ビュー] タブで設定を選択します。
-
[ツール]→[セキュリティ]→[ユーザー/グループの権限] をクリックします。テーブル名の隣の [読み取り] チェック・ボックスにチェックを付けます。