固定点数の精度およびスケール
異なるデータベースでは、固定点数タイプに対して異なる最大精度またはスケールがサポートされます。
ソースの固定ポイント数値型がターゲットより大きい精度またはスケール値をサポートしており、非KEY列に対してデータ切捨てが予測される場合、警告メッセージが表示され、データ切捨てを回避するために適切な文字列データ型がターゲットで使用されます。ただし、固定ポイント番号タイプのKEY列のデータ切捨てが予測される場合、Replicatは対応するエラー・メッセージとともに異常終了します。続行するには、AUTOSCHEMAOPTIONS TYPEMAPを選択するか、AUTOSCHEMAOPTIONS IGNORE_DATA_TRUNCATIONを使用する必要があります。
次のシナリオでは、これらのオプションの使用方法について説明します。
-
ユーザーが指定したオプション(
AUTOSCHEMAOPTIONS TYPEMAPまたはAUTOSCHEMAOPTIONS IGNORE_DATA_TRUNCATION)を使用してデータの切捨てが予測される場合、対応する警告メッセージとともにデータが切り捨てられます。たとえば:
MySQLの最大小数点精度は65ですが、Oracleは38です。したがって、
DECIMAL(65,10)はOracleのVARCHAR2にマップされます。ソース・スケールがターゲット精度より長い場合、ターゲット・スケールは精度/スケール比を維持して自動的に調整されます。
たとえば:
AUTOSCHEMAOPTIONS IGNORE_DATA_TRUNCATIONでは、MySQLのDECIMAL(65,40)がOracleのNUMBER(38,23)にマップされ、MySQLのDECIMAL(65,64)がOracleのNUMBER(38,37)にマップされます。 -
明示的な精度およびスケールを持たない
NUMBER型は、次の方法で処理されます。NUMBER型は、OracleおよびTimesTenでのみサポートされています。プレビュー・リリースでは、TimesTenはサポートされていません。ソース・データ型がNUMBER(明示的な精度またはスケールなし)で、ターゲット・データベースでNUMBERデータ型もサポートされている場合は、ターゲットでターゲットのNUMBER型が使用されます。ターゲット・データベースで
NUMBERデータ型がサポートされていない場合は、ターゲットで適切な文字列型(VARCHARやVARCHAR2など)が使用されます。例:
NUMBER(5,-2)はDECIMAL(7,0)にマップされます。NUMBER(1,2)はDECIMAL(2,2)にマップされます。 -
ソース列で使用される精度またはスケールがターゲットでサポートされる精度を超える場合、および対応する列がキーの一部である場合は、ターゲットで文字列タイプを使用して、ターゲット表の一意性プロパティを破る可能性があるターゲットでのデータの切捨てを回避できます。これは、
AUTOSCHEMAOPTIONSパラメータによって制御できます。