Oracle パブリッシャーのデータ型マッピングの指定
このトピックでは、SQL Server 2012 で SQL Server Management Studio または Transact-SQL を使用して、Oracle パブリッシャーのデータ型マッピングを指定する方法について説明します。 Oracle パブリッシャーには一連の既定のデータ型マッピングが用意されていますが、パブリケーションによっては、こうした既定のマッピングとは異なるマッピングの指定が必要になる場合もあります。
このトピックの内容
Oracle パブリッシャーのデータ型マッピングを指定するために使用するもの:
SQL Server Management Studio
Transact-SQL
SQL Server Management Studio の使用
データ型マッピングは、[アーティクルのプロパティ - <Article>] ダイアログ ボックスの [データのマッピング] タブで指定します。 このタブは、パブリケーションの新規作成ウィザードの [アーティクル] ページおよび [パブリケーションのプロパティ - <Publication>] ダイアログ ボックスから利用できます。 このウィザードの使用とダイアログ ボックスへのアクセスの詳細については、「Oracle データベースからのパブリケーションの作成」および「パブリケーション プロパティの表示および変更」を参照してください。
データ型マッピングを指定するには
パブリケーションの新規作成ウィザードの [アーティクル] ページ、または [パブリケーションのプロパティ - <Publication>] ダイアログ ボックスでテーブルを選択し、[アーティクルのプロパティ] をクリックします。
[反転表示されたテーブル アーティクルのプロパティを設定] をクリックします。
[アーティクルのプロパティ - <Article>] ダイアログ ボックスの [データのマッピング] タブで、[サブスクライバーのデータ型] 列からマッピングを選択します。
データ型によっては 1 つのマッピングのみ可能な場合があります。この場合、プロパティ グリッドの列は読み取り専用になります。
データ型によっては、複数のデータ型を選択できる場合があります。 Microsoft では、アプリケーションで別のマッピングが必要でない限り、既定のマッピングを使用することをお勧めします。 詳細については、「Oracle パブリッシャーのデータ型マッピング」を参照してください。
[OK] をクリックします。
[Top]
Transact-SQL の使用
レプリケーションのストアド プロシージャを使用すると、カスタム データ型マッピングをプログラムから指定できます。 また、Microsoft SQL Server のデータベース管理システム (DBMS) と SQL Server 以外のデータベース管理システム間でデータ型をマップする際に使用する既定のマッピングを設定することもできます。 詳細については、「Oracle パブリッシャーのデータ型マッピング」を参照してください。
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 のデータ型にマップします。既定では、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
[Top]