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

[目次][索引][前へ][次へ]

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のデータ型の対応
(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,又はFLOAT1
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,又はTIME2
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 Version 9 SQLリファレンス」を参照してください。 INTEGER(4)
SMALLINT INTEGER(2)
DECIMAL1 CHAR
FLOAT FLOAT(8)
SMALLFLT
CHAR※7 1≦n≦255 CHAR(n)
MCHAR
NCHAR 1≦n≦127 CHAR(2n)
CHAR2※7 n≧256 LONG(n)
MCHAR2
NCHAR2 n≧128 LONG(2n)
VARCHAR3※7 1≦n≦4000 VARCHAR2(n)
MVARCHAR3
NVARCHAR3 1≦n≦2000 VARCHAR2(2n)
DATE4 データ長については,マニュアル「HiRDB Version 9 SQLリファレンス」を参照してください。 CHAR(10)
TIME4 CHAR(8)
INTERVAL YEAR TO DATE5 RAW(5)
INTERVAL HOUR TO SECOND5 RAW(4)
BLOB6 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 Version 9 SQLリファレンス」を参照してください。 SQL_INTEGER SQL_C_SLONG
SMALLINT SQL_SMALLINT SQL_C_SSHORT
DECIMAL1 SQL_DECIMAL SQL_C_CHAR
LARGE DECIMAL1
FLOAT SQL_FLOAT SQL_C_DOUBLE
SMALLFLT SQL_REAL SQL_C_FLOAT
CHAR6 1≦n≦254 SQL_CHAR SQL_C_CHAR
MCHAR
NCHAR
CHAR6 n≧255 SQL_LONGVARCHAR SQL_C_CHAR
MCHAR
NCHAR
VARCHAR6 データ長については,マニュアル「HiRDB Version 9 SQLリファレンス」を参照してください。
LONG VARCHAR
MVARCHAR
LONG MVARCHAR
NVARCHAR
LONG NVARCHAR
DATE2 SQL_DATE SQL_C_DATE
TIME2 SQL_TIME※5 SQL_C_TIME※5
INTERVAL YEAR TO DATE3 SQL_BINARY(5) SQL_C_BINARY
INTERVAL HOUR TO SECOND3 SQL_BINARY(4) SQL_C_BINARY
BLOB4 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
文字集合指定をした列はデータ連動できません。指定した場合,ポートチェックエラーとなります。