Oracle パブリッシャーのデータ型マッピングの指定

適用対象: はいSQL Server (サポートされているすべてのバージョン)

このトピックでは、 SQL Server で SQL Server Management Studio または Transact-SQLを使用して、Oracle パブリッシャーのデータ型マッピングを指定する方法について説明します。 Oracle パブリッシャーには一連の既定のデータ型マッピングが用意されていますが、パブリケーションによっては、こうした既定のマッピングとは異なるマッピングの指定が必要になる場合もあります。

このトピックの内容

SQL Server Management Studio の使用

データ型マッピングは、 [アーティクルのプロパティ - <Article>] ダイアログ ボックスの [データのマッピング] タブで指定します。 このタブは、パブリケーションの新規作成ウィザードの [アーティクル] ページおよび [パブリケーションのプロパティ - <Publication>] ダイアログ ボックスから利用できます。 ウィザードの使用およびダイアログ ボックスへのアクセスの詳細については、「Oracle データベースからのパブリケーションの作成」および「パブリケーション プロパティの表示および変更」を参照してください。

データ型マッピングを指定するには

  1. パブリケーションの新規作成ウィザードの [アーティクル] ページ、または [パブリケーションのプロパティ - <Publication>] ダイアログ ボックスでテーブルを選択し、 [アーティクルのプロパティ] をクリックします。

  2. [反転表示されたテーブル アーティクルのプロパティを設定] をクリックします。

  3. [アーティクルのプロパティ - <Article>] ダイアログ ボックスの [データのマッピング] タブで、 [サブスクライバーのデータ型] 列からマッピングを選択します。

    • データ型によっては、可能なマッピングが 1 つしかない場合があります。このような場合、プロパティ グリッドの列は読み取り専用になります。

    • データ型によっては、複数のデータ型を選択できる場合があります。 Microsoft では、アプリケーションに別のマッピングが必要でない限り、既定のマッピングを使うことをお勧めします。 詳しくは、「 Data Type Mapping for Oracle Publishers」をご覧ください。

  4. [OK] をクリックします。

Transact-SQL の使用

レプリケーションのストアド プロシージャを使用すると、カスタム データ型マッピングをプログラムから指定できます。 また、Microsoft SQL Server のデータベース管理システム (DBMS) と SQL Server 以外のデータベース管理システム間でデータ型をマップする場合に使用する既定のマッピングを設定することもできます。 詳しくは、「 Data Type Mapping for Oracle Publishers」をご覧ください。

Oracle パブリケーションのアーティクル作成時にカスタム データ型マッピングを定義するには

  1. Oracle パブリケーションが存在しない場合は、Oracle パブリケーションを作成します。

  2. ディストリビューターで sp_addarticleを実行します。 @use_default_datatypes0 を指定します。 詳しくは、「 アーティクルを定義」をご覧ください。

  3. ディストリビューターで sp_helparticlecolumns を実行して、パブリッシュ対象アーティクルに含まれる列の既存のマッピングを表示します。

  4. ディストリビューターで sp_changearticlecolumndatatypeを実行します。 @publisher に Oracle パブリッシャーの名前を指定し、 @publication@article、および @column を指定して、パブリッシュする列を定義します。 マップする SQL Server データ型名を @type に指定し、該当する @length@precision、および @scale を指定します。

  5. ディストリビューターで sp_articleviewを実行します。 これにより、Oracle パブリケーションからスナップショットを生成するときに使用するビューが作成されます。

データ型に対する既定のマッピングを指定するには

  1. (省略可) ディストリビューターから任意のデータベースで sp_getdefaultdatatypemappingを実行します。 @source_dbms@source_type@destination_dbms@destination_version を指定します。また、マップ元 DBMS を識別するために必要なパラメーターが他にもあれば、それらを指定してください。 マップ先 DBMS で現在マップされているデータ型の情報は、出力パラメーターを使って返されます。

  2. (省略可) ディストリビューター側の任意のデータベースに対して sp_helpdatatypemapを実行します。 @source_dbms を指定し、さらに、結果セットをフィルター選択するために必要なパラメーターが他にもあれば、それらを指定します。 目的のマッピングの mapping_id を結果セットで確認してください。

  3. ディストリビューターから任意のデータベースで sp_setdefaultdatatypemappingを実行します。

    • 手順 2. で mapping_id の値を確認できた場合は、その値を @mapping_id に指定します。

    • mapping_id がわからない場合は、 @source_dbms@source_type@destination_dbms@destination_type の各パラメーターを指定し、さらに、既存のマッピングを識別するために必要なパラメーターが他にもあれば、それらを指定します。

特定の Oracle データ型に対して有効なデータ型を見つけるには

  1. ディストリビューターから任意のデータベースで sp_helpdatatypemapを実行します。 @source_dbmsORACLE を指定し、さらに、結果セットをフィルター選択するために必要なパラメーターが他にもあれば、それらを指定します。

例 (Transact-SQL)

次の例では、Oracle のデータ型 NUMBER の列を SQL Server のデータ型にマップします。既定では、 numeric データ型にマップされますが、ここでは、 float を使用して、Oracle パブリッシャーのデータ型マッピングを指定する方法について説明します。

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

参照

Data Type Mapping for Oracle Publishers
異種データベース レプリケーション
Replication System Stored Procedures Concepts
Oracle パブリッシャーの構成