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言語のOCI(Oracle 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

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