Oracle パブリッシャーのデータ型マッピングの指定
適用対象: SQL Server
このトピックでは、SQL Server Management Studio や Transact-SQL を使用して SQL Server で Oracle パブリッシャーのデータ型マッピングを指定する方法について説明します。 Oracle パブリッシャーには一連の既定のデータ型マッピングが用意されていますが、パブリケーションによっては、こうした既定のマッピングとは異なるマッピングの指定が必要になる場合もあります。
このトピックの内容
Oracle パブリッシャーのデータ型マッピングを指定するために使用するもの:
SQL Server Management Studio を使用する
データ型マッピングは、[アーティクルのプロパティ - <アーティクル> ダイアログ ドロップダウン リストの [データのマッピング] タブで指定します。 このタブは、パブリケーションの新規作成ウィザードの [アーティクル] ページおよび [パブリケーションのプロパティ - <パブリケーション]> ダイアログ ドロップダウン リストから利用できます。 ウィザードの使用およびダイアログ ボックスへのアクセスの詳細については、「Oracle データベースからのパブリケーションの作成」および「パブリケーション プロパティの表示および変更」を参照してください。
データ型マッピングを指定するには
パブリケーションの新規作成ウィザードの [アーティクル] ページ、または [パブリケーションのプロパティ - <パブリケーション]> ダイアログ ドロップダウン リストでテーブルを選択し、[アーティクルのプロパティ] をクリックします。
[反転表示されたテーブル アーティクルのプロパティを設定]をクリックします。
[アーティクルのプロパティ - <アーティクル> ダイアログ ドロップダウン リストの [データのマッピング] タブで、[サブスクライバーのデータ型] 列からマッピングを選択します。
データ型によっては、可能なマッピングが 1 つしかない場合があります。このような場合、プロパティ グリッドの列は読み取り専用になります。
データ型によっては、複数のデータ型を選択できる場合があります。 アプリケーションに別のマッピングが必要でない限り、既定のマッピングを使うことをお勧めします。 詳しくは、「 Data Type Mapping for Oracle Publishers」をご覧ください。
[OK] を選択します。
Transact-SQL の使用
レプリケーションのストアド プロシージャを使用すると、カスタム データ型マッピングをプログラムから指定できます。 また、 Microsoft SQL Server と SQL Server 以外のデータベース管理システム (DBMS) 間でデータ型をマップする場合に使用する既定のマッピングを設定することもできます。 詳しくは、「 Data Type Mapping for Oracle Publishers」をご覧ください。
Oracle パブリケーションのアーティクル作成時にカスタム データ型マッピングを定義するには
Oracle パブリケーションが存在しない場合は、Oracle パブリケーションを作成します。
ディストリビューターで sp_addarticleを実行します。 @use_default_datatypes に 0を指定します。 詳しくは、「 アーティクルを定義」をご覧ください。
ディストリビューターで sp_helparticlecolumns を実行して、パブリッシュ対象アーティクルに含まれる列の既存のマッピングを表示します。
ディストリビューターで sp_changearticlecolumndatatypeを実行します。 @publisherに Oracle パブリッシャーの名前を指定し、 @publication、 @article、および @column を指定して、パブリッシュする列を定義します。 マップする SQL Server データ型名を @typeに指定し、該当する @length、 @precision、および @scaleを指定します。
ディストリビューターで sp_articleviewを実行します。 これにより、Oracle パブリケーションからスナップショットを生成するときに使用するビューが作成されます。
データ型に対する既定のマッピングを指定するには
(省略可) ディストリビューターから任意のデータベースで sp_getdefaultdatatypemappingを実行します。 @source_dbms、 @source_type、 @destination_dbms、 @destination_versionを指定します。また、マップ元 DBMS を識別するために必要なパラメーターが他にもあれば、それらを指定してください。 マップ先 DBMS で現在マップされているデータ型の情報は、出力パラメーターを使って返されます。
(省略可) ディストリビューター側の任意のデータベースに対して sp_helpdatatypemapを実行します。 @source_dbms を指定し、さらに、結果セットをフィルター選択するために必要なパラメーターが他にもあれば、それらを指定します。 目的のマッピングの mapping_id を結果セットで確認してください。
ディストリビューターから任意のデータベースで sp_setdefaultdatatypemappingを実行します。
手順 2. で mapping_id の値を確認できた場合は、その値を @mapping_idに指定します。
mapping_idがわからない場合は、 @source_dbms、 @source_type、 @destination_dbms、 @destination_typeの各パラメーターを指定し、さらに、既存のマッピングを識別するために必要なパラメーターが他にもあれば、それらを指定します。
特定の Oracle データ型に対して有効なデータ型を見つけるには
- ディストリビューターから任意のデータベースで sp_helpdatatypemapを実行します。 @source_dbms に ORACLE を指定し、さらに、結果セットをフィルター選択するために必要なパラメーターが他にもあれば、それらを指定します。
例 (Transact-SQL)
次の例では、Oracle のデータ型 NUMBER の列を SQL Server のデータ型にマップします。 numeric(38,38) データ型にマップされますが、ここでは、既定の floatを使用して、変更する方法について説明します。
EXEC sp_changearticlecolumndatatype
@publication = 'OraPublication',
@publisher = 'OraPublisher',
@article = 'OraArticle',
@column = 'OraArticleCol',
@type = 'numeric',
@scale = 38,
@precision = 38;
GO
次のクエリの例では、Oracle 9 データ型の CHARについて、既定のマッピングと代替マッピングを返します。
EXEC sp_helpdatatypemap
@source_dbms = N'ORACLE',
@source_version = 9,
@source_type = N'CHAR';
GO
次のクエリの例では、Oracle 9 データ型の NUMBER で、小数点以下桁数または有効桁数を指定しなかった場合に使用される既定のマッピングを返します。
EXEC sp_helpdatatypemap
@source_dbms = N'ORACLE',
@source_version = 9,
@source_type = N'NUMBER',
@defaults_only = 1;
GO