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

Oracle のデータ型と MicrosoftSQL Server のデータ型は、正確に一致するとは限りません。Oracle のテーブルをパブリッシュするときは、可能な限り、一致するデータ型が自動的に選択されます。単一のデータ型マッピングが明らかでない場合は、代替のデータ型マッピングが提供されます。代替マッピングの選択方法の詳細については、以下の「代替データ型マッピングの指定」を参照してください。

次の表に、Oracle パブリッシャから SQL Server ディストリビュータにデータを移動したときに、Oracle と SQL Server の間で、データ型が既定でどのようにマッピングされるかを示します。「代替」列は、代替マッピングが使用可能かどうかを示しています。

Oracle データ型

SQL Server データ型

代替

BFILE

VARBINARY(MAX)

BLOB

VARBINARY(MAX)

CHAR([1-2000])

CHAR([1-2000])

CLOB

VARCHAR(MAX)

DATE

DATETIME

FLOAT

FLOAT

不可

FLOAT([1-53])

FLOAT([1-53])

不可

FLOAT([54-126])

FLOAT

不可

INT

NUMERIC(38)

INTERVAL

DATETIME

LONG

VARCHAR(MAX)

LONG RAW

IMAGE

NCHAR([1-1000])

NCHAR([1-1000])

不可

NCLOB

NVARCHAR(MAX)

NUMBER

FLOAT

NUMBER([1-38])

NUMERIC([1-38])

不可

NUMBER([0-38],[1-38])

NUMERIC([0-38],[1-38])

NVARCHAR2([1-2000])

NVARCHAR([1-2000])

不可

RAW([1-2000])

VARBINARY([1-2000])

不可

REAL

FLOAT

不可

ROWID

CHAR(18)

不可

TIMESTAMP

DATETIME

TIMESTAMP(0-7)

DATETIME

TIMESTAMP(8-9)

DATETIME

TIMESTAMP(0-7) WITH TIME ZONE

VARCHAR(37)

TIMESTAMP(8-9) WITH TIME ZONE

VARCHAR(37)

不可

TIMESTAMP(0-7) WITH LOCAL TIME ZONE

VARCHAR(37)

TIMESTAMP(8-9) WITH LOCAL TIME ZONE

VARCHAR(37)

不可

UROWID

CHAR(18)

不可

VARCHAR2([1-4000])

VARCHAR([1-4000])

データ型マッピングに関する注意点

Oracle データベースからデータをレプリケートするときは、データ型に関する次の問題に注意してください。

サポートされていないデータ型

次のデータ型はサポートされていません。これらの型の列はレプリケートできません。

  • オブジェクト型

  • XML 型

  • Varray 型

  • 入れ子になったテーブル

  • REF を使用する列

DATE データ型

SQL Server の日付の範囲は 1753 A.D. から 9999 A.D. までですが、Oracle の日付の範囲は 4712 B.C. から 4712 A.D. までです。DATE 型の列に SQL Server の日付範囲を超える値が含まれている場合は、その列の代替データ型である VARCHAR(19) を選択してください。

FLOAT 型と NUMBER 型

FLOAT データ型と NUMBER データ型のマッピング時に指定される小数点以下桁数および有効桁数は、列に対して Oracle データベースのデータ型を使って指定された小数点以下桁数および有効桁数で決まります。有効桁数は、数値全体の桁数です。小数点以下桁数は、数値の中で小数点より右側の桁数です。たとえば、123.45 という値の場合、有効桁数は 5 で、小数点以下桁数は 2 になります。

Oracle では、NUMBER(4,5) のように、有効桁数よりも大きな小数点以下桁数の数値を定義できます。しかし、SQL Server では、有効桁数を小数点以下桁数と同じか、それ以上にする必要があります。データの切り捨てが発生しないようにするため、Oracle パブリッシャで小数点以下桁数が有効桁数よりも大きい場合は、データ型をマップするときに、有効桁数が小数点以下桁数と同じ値に設定されます。つまり、NUMBER(4,5) は NUMERIC(5,5) としてマップされます。

注意注意

NUMBER の小数点以下桁数および有効桁数を指定しない場合、SQL Server の既定値には、最大の小数点以下桁数 (8) および有効桁数 (38) が使用されます。データをレプリケートするときは、使用領域とパフォーマンスを向上させるために、Oracle で特定の小数点以下桁数と有効桁数を設定することをお勧めします。

Large Object 型

Oracle は最大 4 ギガバイト (GB) のデータをサポートします。一方、SQL Server は最大 2 GB のデータをサポートします。2 GB を超えてレプリケートされたデータは、切り捨てられます。

Oracle のテーブルに BFILE 列が含まれている場合、この列のデータはファイル システムに格納されます。レプリケーション管理ユーザー アカウントには、次の構文を使用して、このデータが格納されているディレクトリへのアクセスを許可する必要があります。

GRANT READ ON DIRECTORY <directory_name> TO <replication_administrative_user_schema>

Large Object 型に関する詳細については、「Oracle パブリッシャの設計上の注意点および制限」の「Large Object の注意点」を参照してください。

代替データ型マッピングの指定

通常、既定のデータ型マッピングは適切な設定です。しかし、多くの Oracle データ型に対して、既定のマッピングを使用しないで一連の代替マッピングからデータ型マッピングを選択することができます。代替マッピングを指定する方法は 2 つあります。

  • ストアド プロシージャまたはパブリケーションの新規作成ウィザードを使用して、アーティクルごとに既定値を上書きします。

  • ストアド プロシージャを使用して、以降のすべてのアーティクルの既定値をグローバルに変更します (既存のアーティクルの既定値は変更されません)。

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