Oracle パブリッシャのデータ型マッピングを指定する方法 (レプリケーション Transact-SQL プログラミング)
Oracle パブリッシャには一連の既定のデータ型マッピングが用意されていますが、パブリケーションによっては、こうした既定のマッピングとは異なるマッピングの指定が必要になる場合もあります。レプリケーションのストアド プロシージャを使用すると、カスタム データ型マッピングをプログラムから指定できます。また、Microsoft SQL Server のデータベース管理システム (DBMS) と SQL Server 以外のデータベース管理システム間でデータ型をマップする際に使用する既定のマッピングを設定することもできます。詳細については、「Oracle パブリッシャのデータ型マッピング」を参照してください。
Oracle パブリケーションのアーティクル作成時にカスタム データ型マッピングを定義するには
Oracle パブリケーションが存在しない場合は、Oracle パブリケーションを作成します。詳細については、「Oracle データベースからパブリケーションを作成する方法 (レプリケーション Transact-SQL プログラミング)」を参照してください。
ディストリビュータで sp_addarticle を実行します。@use_default_datatypes に 0 を指定します。詳細については、「アーティクルを定義する方法 (レプリケーション Transact-SQL プログラミング)」を参照してください。
ディストリビュータで 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 を指定し、さらに、結果セットをフィルタ選択するために必要なパラメータが他にもあれば、それらを指定します。
使用例
次の例では、Oracle のデータ型 NUMBER の列を SQL Server のデータ型にマップします。既定では、float データ型にマップされますが、ここでは、numeric(38,38) にマップしています。
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