Hitachi

HiRDB データ連動拡張機能 HiRDB Datareplicator Extension Version 10


4.1.2 データ型の対応の設計

抽出処理で抽出側DBから抽出された更新データのデータ型は,抽出側Datareplicator Extensionによって反映側DBに反映できるデータ型に変換され,抽出情報キューファイルに格納されます。

このとき,抽出側DBから抽出されたデータは,まずHiRDBデータ型に変換されます。そして,HiRDBデータ型から反映側DBに合ったデータ型に変換されて,抽出情報キューファイルに格納されるという流れになります。

図4‒1 データ型の変換

[図データ]

Datareplicator Extensionが対応している抽出側DBMSと反映側DBMSの組み合わせを次の表に示します。

表4‒1 Datareplicator Extensionが対応している抽出側DBMSと反映側DBMSの組み合わせ

抽出側DB

反映側DB

HiRDB(UNIX,Windows)

Oracle(UNIX,Windows※2

SQL Server(Windows)

HiRDB(UNIX,Windows)

※1

Oracle(UNIX,Windows)

×

×

SQL Server(Windows)

×

×

(凡例)

○:データ連動可能

×:データ連動不可

注※1

Datareplicator Extensionは不要です。

注※2

データ連動にODBCを使用します。

以降では,各DBMSのデータ型とHiRDBデータ型との対応について説明します。抽出側DBで使用するデータ型が反映側でどのデータ型に変換されるかは,「(1)抽出側DBのデータ型の対応」及び「(2)反映側DBのデータ型の対応」を比較して調べてください。

〈この項の構成〉

(1) 抽出側DBのデータ型の対応

ここでは,抽出側DBのデータ型とHiRDBデータ型との対応について説明します。

(a) Oracleデータ型からHiRDBデータ型への変換

Oracleからデータを抽出した場合,HiRDBデータ型には次の表のように変換されます。

抽出対象外のデータを抽出対象として抽出定義に指定した場合は,抽出定義プリプロセスファイルの作成処理でエラーとなります。

表4‒2 Oracleから抽出するデータのデータ型対応

Oracleデータ型

対応するHiRDBデータ型

データ属性

データの長さ

VARCHAR2(n)

1≦n≦4000

MVARCHAR(n)

NVARCHAR2(n)

1≦n≦4000

NVARCHAR(n)

NUMBER(p,s)

1≦p≦38

−84≦s≦127

SMALLINT,INTEGER,DECIMAL,又はFLOAT※1

LONG

抽出対象外

ROWID

抽出対象外

DATE

固定長の日付+時間データ。

DATE,TIME,又はCHAR(19)※2

RAW(n)

1≦n≦2000

BLOB(n)

LONG RAW

抽出対象外

CHAR(n)

1≦n≦2000

MCHAR(n),DATE,又はTIME※2

NCHAR(n)

1≦n≦2000

NCHAR(n)

CLOB

抽出対象外

NCLOB

抽出対象外

BLOB

抽出対象外

BFILE

抽出対象外

UROWID

抽出対象外

ユーザ定義型

抽出対象外

(凡例)

−:該当しません。

注1

抽出対象のデータのnは,データ長(バイト数)を表します。ただし,NCHAR及びNVARCHARについては文字数を表します。

また,pは精度,sは位取りを表します。

注2

反映対象表のデータ型のnは,データ長(バイト数)を表します。

ただし,NCHAR及びNVARCHARについては文字数を表します。

注※1

精度及び位取りを基に,次の表に従ってデータ型を決定します。

指定分類

Oracleのデータ

decimal_max_precisionオペランド指定値

条件

HiRDBデータ型

精度及び位取りの指定なし

NUMBER

REAL

DOUBLE PRECISION

なし

FLOAT

INTEGER

SMALLINT

DECIMAL

NUMERIC

なし

INTEGER

精度だけ指定

NUMBER(p)

DECIMAL(p)

NUMERIC(p)

m≧p

p≦4

SMALLINT

5≦p≦9

INTEGER

10≦p≦m

[LARGE] DECIMAL(p)

m<p

FLOAT

FLOAT(p)

FLOAT

精度及び位取りを指定

NUMBER(p,s)

DECIMAL(p,s)

NUMERIC(p,s)

m≧p

p≧m+1,

s≧m+1,

又はp−s≧m+1

FLOAT

p<s

かつp<m+1

かつs<m+1

かつp−s<m+1

[LARGE] DECIMAL(s,s)

s<0

かつp<m+1

かつp−s<m+1

[LARGE] DECIMAL(p−s,0)

上記以外

[LARGE] DECIMAL(p,s)

m<p

FLOAT

(凡例)

−:依存しません。

m:抽出システム定義decimal_max_precisionオペランドの指定値です。省略した場合は,29が仮定されます。mの範囲は,29から38です。

注※2

どのデータ型で抽出するかは,抽出定義でユーザが指定します。

抽出定義の詳細については,「5.1.4 抽出定義」を参照してください。

(b) SQL Serverデータ型からHiRDBデータ型への変換

SQL Serverからデータを抽出した場合,HiRDBデータ型には次の表のように変換されます。

抽出対象外のデータを抽出対象として抽出定義に指定した場合は,抽出定義プリプロセスファイルの作成処理でエラーとなります。

表4‒3 SQL Serverから抽出するデータのデータ型対応

SQL Serverデータ型

対応するHiRDBデータ型

データ属性

データの長さ

BIGINT

LARGE DECIMAL(19,0)

p=19,s=0

INT

INTEGER

SMALLINT

SMALLINT

TINYINT

SMALLINT

BIT

CHAR(1)

DECIMAL(p,s)

0<p<m

0≦s≦p

  • p≦mの場合,LARGE DECIMAL(p,s)

    pとsは抽出対象表定義に指定したものと同じです。

  • p>mの場合,FLOAT

NUMERIC(p,s)

MONEY

LARGE DECIMAL(19,4)

SMALLMONEY

DECIMAL(10,4)

FLOAT

FLOAT

REAL

SMALLFLT

DATETIME

DATE,TIME,又はCHAR(19)※1

SMALLDATETIME

CHAR(n)

CHAR(n)※1

VARCHAR(n)

VARCHAR(n)

TEXT

抽出対象外

NCHAR(n)

※2

NCHAR(n)

NVARCHAR(n)

※2

NVARCHAR(n)

NTEXT

抽出対象外

BINARY

BLOB,又はVARCHAR※1※3

VARBINARY

IMAGE

抽出対象外

SQL_VARIANT

VARCHAR(8000)

TIMESTAMP

抽出対象外

UNIQUEIDENTIFIER

ユーザ定義データ型(ADT)

ベースデータ型マッピングに従います。

(凡例)

m:抽出システム定義decimal_max_precisionオペランドの指定値です。省略した場合は,29が仮定されます。mの範囲は,29から38です。

注※1

どのデータ型で抽出するかは,抽出定義でユーザが指定します。

抽出定義の詳細については,「5.2.4 抽出定義」を参照してください。

注※2

偶数長のシングルバイトデータ,又はマルチバイトデータである必要があります。

注※3
  • バイナリデータの最後の情報が「81」から「9F」までの場合,抽出情報キューファイルへの出力時点でこれらがNULL文字に変換されます。

  • BINARY又はVARBINARY以外のデータ型の列にバイナリデータを反映する場合,抽出情報キューファイルへの出力時点で「00」以降のデータは破棄されます。例えば,「0x006162630000」というデータをCHAR型の列に反映した場合,「0x000000…00」というデータになります。

(2) 反映側DBのデータ型の対応

ここでは,反映側DBのデータ型とHiRDBデータ型との対応について説明します。

(a) HiRDBデータ型からOracle(UNIX)データ型への変換

UNIX版Oracleのデータ型には,DB内部のデータ形式を表す内部データ型と,AP内のデータ形式を表す外部データ型があります。外部データ型は,内部データ型より種類が多く,OracleはAP内の外部データ型のデータを内部データ型の列へ変換する多種のデータ変換パターンを持っています。

Datareplicator Extensionは,HiRDBから抽出したデータをOracleの外部データ型へデータ変換してOracleのデータベースへ反映します。このため,反映対象表の作成時には,外部データ型から変換できる内部データ型を使用してください。

HiRDBからOracleへデータ連動する場合の,抽出対象表と反映対象表のデータ型の対応を次の表に示します。

注意事項

Windows版のOracleへの反映には,ODBCを使用します。「(b)HiRDBデータ型からODBCのデータ型への変換(SQL Server,Oracle)」を参照してください。

表4‒4 Oracleに反映するデータのデータ型対応

HiRDBデータ型

対応するOracle

データ型

データ属性

データの長さ

INTEGER

データ長については,マニュアル「HiRDB SQLリファレンス」を参照してください。

INTEGER(4)

SMALLINT

INTEGER(2)

DECIMAL※1

CHAR

FLOAT

FLOAT(8)

SMALLFLT

CHAR※7

1≦n≦255

CHAR(n)

MCHAR

NCHAR

1≦n≦127

CHAR(2n)

CHAR※2※7

n≧256

LONG(n)

MCHAR※2

NCHAR※2

n≧128

LONG(2n)

VARCHAR※3※7

1≦n≦4000

VARCHAR2(n)

MVARCHAR※3

NVARCHAR※3

1≦n≦2000

VARCHAR2(2n)

DATE※4

データ長については,マニュアル「HiRDB SQLリファレンス」を参照してください。

CHAR(10)

TIME※4

CHAR(8)

INTERVAL YEAR TO DATE※5

RAW(5)

INTERVAL HOUR TO SECOND※5

RAW(4)

BLOB※6

1≦n≦2147483647

LONG RAW(n)

注1

データの長さのnは,データ長(バイト数)を表します。

ただし,NCHAR及びNVARCHARについては文字数を表します。

注2

反映対象表のデータ型は,Oracleの外部データ型を表します。

また,( )内はデータ長(バイト数)を表します。

注※1

OracleのC言語のOCIOracle Call Interface)では,DECIMAL型のデータを扱えないので,数値文字列として文字型で反映します。なお,この場合のDECIMAL型の精度の最大値は38です。

数値文字列へ変換する場合は,符号を正規化します。符号の正規化手順を次に示します。

符号の正規化手順
X'A'→X'C'
X'B'→X'D'
X'C'→X'C'
X'D'→X'D'
X'E'→X'C'
X'F'→X'F'
注※2

LONG型は探索条件に指定できません。

注※3

HiRDBには0バイトのデータを格納できますが,Oracleには0バイトのデータを格納できません。そのため,Datareplicatorでは反映先Oracleに対して0x00を格納します。

したがって,0バイトのデータを検索するためには,「0x00」を検索条件とする必要があります。このような検索差異を生じさせないために,Oracleへデータ連動する場合は,抽出側で0バイトのデータを扱わない運用をお勧めします。

注※4

TIME型はOracleに存在しないデータ型です。また,DATE型は,Oracleに存在するデータ型ですが,HiRDBとはデータ形式が異なり,日付及び時間の情報を持ちます。

Datareplicator Extensionでは,TIME型の抽出データをHH:MM:SS形式の文字列データとして,OracleのCHAR型で反映します。また,DATE型の抽出データをYYYY-MM-DD形式の文字列データとして,OracleのCHAR型で反映します。

ユーザは,TIME又はDATE型のどちらかのフォーマットをOracleの初期化パラメタNLS_DATE_FORMATに指定することで,抽出データをDATE型の列へ反映できます。その場合,内部的には列値にフォーマットされていない部分にOracleが仮定値を入れます(仮定値は,SQL実行日時によって変化します)。

Oracleは日付及び時間を含めた(システムの仮定値を含めた)条件判定をするため,Oracleが仮定値を入れた状態でその列をキー値とした条件検索を実行すると,条件が合わないことがあります。したがって,TIME及びDATE型のマッピングキーをDATE型の列へ反映しないでください。

注※5

バイナリデータとして反映します。

注※6
  • OracleのLONG RAW型への反映はできますが,OracleのBLOB型へは反映できません。

  • BLOB型を追加更新又は後方削除更新している場合は,データ連動しないでください。抽出側DBと反映側DBで不整合が発生します。

注※7

文字集合指定をした列はデータ連動できません。指定した場合,ポートチェックエラーとなります。

(b) HiRDBデータ型からODBCのデータ型への変換(SQL Server,Oracle)

ODBCドライバを使用してOracle又はSQL Serverへデータ連動する場合は,HiRDBデータ型をODBCのデータ型に変換してODBC関数を発行します。このため,反映対象表の作成時には,ODBCのデータ型から変換できるデータ型を使用してください。

HiRDBからODBCドライバを使用してデータ連動する場合の,抽出対象表と反映対象表のデータ型の対応を次の表に示します。

表4‒5 ODBCを使用して反映するデータのデータ型の対応

HiRDBデータ型

対応するODBCのデータ型

データ属性

データの長さ

ODBC SQLデータ型

ODBC Cデータ型

INTEGER

データ長については,マニュアル「HiRDB SQLリファレンス」を参照してください。

SQL_INTEGER

SQL_C_SLONG

SMALLINT

SQL_SMALLINT

SQL_C_SSHORT

DECIMAL※1

SQL_DECIMAL

SQL_C_CHAR

LARGE DECIMAL※1

FLOAT

SQL_FLOAT

SQL_C_DOUBLE

SMALLFLT

SQL_REAL

SQL_C_FLOAT

CHAR※6

1≦n≦254

SQL_CHAR

SQL_C_CHAR

MCHAR

NCHAR

CHAR※6

n≧255

SQL_LONGVARCHAR

SQL_C_CHAR

MCHAR

NCHAR

VARCHAR※6

データ長については,マニュアル「HiRDB SQLリファレンス」を参照してください。

LONG VARCHAR

MVARCHAR

LONG MVARCHAR

NVARCHAR

LONG NVARCHAR

DATE※2

SQL_DATE

SQL_C_DATE

TIME※2

SQL_TIME※5

SQL_C_TIME※5

INTERVAL YEAR TO DATE※3

SQL_BINARY(5)

SQL_C_BINARY

INTERVAL HOUR TO SECOND※3

SQL_BINARY(4)

SQL_C_BINARY

BLOB※4

SQL_LONGVARBINARY

SQL_C_BINARY

注1

データの長さのnは,データ長(バイト数)を表します。

ただし,NCHARについては文字数を表します。

注2

反映対象表のデータ型の( )内は,データ長(バイト数)を表します。

注※1

HiRDBのDECIMAL型の精度は29けたまでですが,ODBCのSQL_DECIMAL型は15けたまでです。16けた以上のデータを反映したときの処理は,使用するODBCドライバの仕様に従います。

注※2

ODBCドライバがSQL Serverの場合は,DATE及びTIME型はSQL_CHARに変換されます。

注※3

バイナリデータとして反映します。

注※4

BLOB型を追加更新又は後方削除更新している場合は,データ連動しないでください。抽出側DBと反映側DBで不整合が発生します。

注※5

反映先がOracleの場合は,データ型をDate型にしてください。

注※6

文字集合指定をした列はデータ連動できません。指定した場合,ポートチェックエラーとなります。