ユーザログテーブルの実表は、列と行から構成されており、デバッグ用、稼動履歴管理などの利用目的ごとに表を定義できます。
レコード形式は以下のとおりです。
実表の定義は、CREATE TABLE文を使用して行います。
表定義では、以下を定義します。
表名
実表を構成する列の定義
LOG_TYPE
SEQUENCE_NO
TRANSACTION_ID
SYSTEM_NAME
CONTEXT_ID
分割キー
任意列
ユーザログ本文
ユーザログテーブルの実表の定義の例を以下に示します。スキーマ“ULOG”に属する業務ログ表を定義するものとします。
例
業務ログ表を定義するCREATE TABLE文を、以下に示します。
CREATE TABLE ULOG.業務ログ表 ↑ 表名 (LOG_TYPE CHAR(1) DEFAULT LOG_TYPE, ↑ (1) SEQUENCE_NO CHAR(30) DEFAULT ULOG_SEQUENCE, ↑ (2) TRANSACTION_ID CHAR(20) DEFAULT TRANSACTION_ID, ↑ (3) SYSTEM_NAME CHAR(8) DEFAULT SYSTEM_NAME, ↑ (4) CONTEXT_ID VARCHAR(1024), ↑ (5) 分割キー CHAR(10) NOT NULL, ↑ (6) 任意列1 DECIMAL(4,0), ↑ (7) 任意列2 VARCHAR(5), ユーザログ本文 BLOB(長さは任意)またはVARCHAR(長さは任意) ↑ (8) ); |
■表名
実表につける名前を指定します。表名には、36文字以内の先頭が英字で始まる英数字、または18文字以内の日本語文字列を指定します。表名は、スキーマ内で一意です。ほかのスキーマに同じ表名の表が定義されていてもかまいません。
スキーマ定義の要素として表定義を記述する場合、スキーマ名で修飾して表名を記述するときは、スキーマ定義で指定したスキーマ名と同じ名前を指定しなければなりません。スキーマ名での修飾を省略して表名を記述するときは、スキーマ定義で指定したスキーマ名で修飾したとみなされます。
表名は、データ操作のSQL文において、操作の対象となる表を指定するために使用します。
■実表を構成する列の定義
実表を構成する各列について、以下の事項を定義します。
LOG_TYPE
SEQUENCE_NO
TRANSACTION_ID
SYSTEM_NAME
CONTEXT_ID
分割キー
任意列
ユーザログ本文
高信頼性ログ機能を制御するための値を格納する列です。列名は固定です。本列は必ず1つだけ定義し、“DEFAULT LOG_TYPE”を指定してください。値は、Symfoware/RDBが以下のように自動設定します。指定可能な長さは、固定長で1バイトです。
種別 | LOG_TYPEの値 | 説明 |
---|---|---|
ユーザログレコード | U | ユーザログ本文であることを示します |
トランザクション情報レコード | C | コミットしたトランザクションであることを示します |
A | アボート(ロールバックしたトランザクション)であることを示します | |
P | プリペア状態のトランザクションであることを示します | |
制御情報レコード | G | Symfoware/RDBが起動・再起動されたことを示します |
ユーザログの格納順番号を格納する列です。列名は固定です。本列は必ず1つだけ定義し、“DEFAULT ULOG_SEQUENCE”を指定してください。値はSymfoware/RDBが自動設定します。指定可能な長さは、固定長で30バイトです。
ユーザログを識別するためのトランザクション識別子を格納する列です。列名は固定です。本列は必ず1つだけ定義し、“DEFAULT TRANSACTION_ID”を指定してください。値はSymfoware/RDBが自動設定します。指定可能な長さは、固定長で20バイトです。
ユーザログを出力するRDBシステム名を格納する列です。列名は固定です。本列は必ず1つだけ定義し、“DEFAULT SYSTEM_NAME”を指定してください。値はSymfoware/RDBが自動設定します。指定可能な長さは、固定長で8バイトです。
ユーザログと業務との関連を示すフレームワーク側で設定される識別子(コンテキストID)を格納する列です。列名は固定です。本列は必ず1つだけ定義してください。値はフレームワークによって設定されます。指定可能な長さは、固定長で1024バイトです。
DSI分割を行う場合のキー値を格納する列です。本列には、APIで指定した値が格納され、その値によって該当するDSIに振り分けて格納します。
本列は、DSI分割を行う列数に応じて、最大64個まで記述することができます。指定する列名は、識別子として任意の名前を定義します。
本列を指定するには、以下の制限があります。
DSO定義で定義する分割条件で指定する列名リストと一致しなければなりません。
NOT NULL制約を指定しなければなりません。
NOT NULL以外の制約や規定値を付加することはできません。
列名リストに指定可能な列のデータ型は、以下のとおりです。
属性 | 精度 | 位取り | 長さ | 備考 |
---|---|---|---|---|
SMALLINT | - | - | - |
|
INTEGER | - | - | - |
|
NUMERIC | 1~18 | 0~精度 | - |
|
DECIMAL | 1~18 | 0~精度 | - |
|
CHARACTER | - | - | 1~254 | VARYINGは指定不可 |
NATIONAL CHARACTER | - | - | 1~127 | VARYINGは指定不可 |
DATE | - | - | - |
|
TIME | - | - | - |
|
TIMESTAMP | - | - | - |
|
INTERVAL | 1~9 | - | - |
|
列名リストに指定する列には、NOT NULLが指定されている必要があります。なお、分割条件で指定された列名リストを、分割キーとも呼びます。
別データベースでの分析のため、検索などの目的で任意の列を設定することができます。本列には、APIで指定した値が格納されます。
本列は、最大1024個まで記述することができます。
指定する列名は、識別子として任意の名前を定義します。
本列には、制約や規定値を付加することはできません。
指定可能な列のデータ型は、以下のとおりです。
属性 | 精度 | 位取り | 長さ | 備考 |
---|---|---|---|---|
SMALLINT | - | - | - |
|
INTEGER | - | - | - |
|
NUMERIC | 1~18 | 0~精度 | - |
|
DECIMAL | 1~18 | 0~精度 | - |
|
CHARACTER | - | - | 1~1000 | VARYINGも指定可 |
NATIONAL CHARACTER | - | - | 1~500 | VARYINGも指定可 |
DATE | - | - | - |
|
TIME | - | - | - |
|
TIMESTAMP | - | - | - |
|
INTERVAL | 1~9 | - | - |
|
ユーザまたはフレームワークで組み立てたユーザログ本文を格納する列です。属性はBLOBまたはVARCHARが選択できます。本列は必ず1つだけ定義し、列名の指定は任意です。それぞれ指定可能な長さおよび属性の指定は、下表を参照し定義してください。
項目属性 | 使用用途 | ユーザログ本文の長さ |
---|---|---|
BLOB型 | バイナリ形式のログを対象とする場合 | 1キロバイト~10メガバイト |
VARCHAR型 | テキスト形式のログを対象とする場合 | 1バイト~31,000バイト |
注意
ユーザログテーブルには、表制約や列制約を付加することはできません。ただし、列の定義にCOMMENTを付加することは可能です。
分割キー以外の列をDSO/DSI定義で分割対象の列に指定することはできません。
上記の列定義の定義順番を変更することはできません。
このため、LOG_TYPE、SEQUENCE_NO、TRANSACTION_ID、SYSTEM_NAME、CONTEXT_IDのあとに分割キー(n個)、任意列(n個)の順番で指定し、ユーザログ本文は必ず最後に1つだけ指定してください。これ以外の列を定義することはできません。
ユーザログ本文、分割キー、任意列のデータは、利用者側での意識が必要です。
ユーザログ本文の属性は必要な容量分を指定してください。
VARCHAR型のユーザログ本文の長さはDSO定義で指定するページ長に依存するため、ログレコード全体の長さをページ長以下にする考慮が必要です。なお、32KBのページ長の場合31,000バイトよりも若干大きな値が指定可能となります。
LOG_TYPEがユーザログレコード(LOG_TYPE=U)の場合、それぞれの値は以下のようになります。
項目 | 設定内容 |
---|---|
LOG_TYPE | Uが設定されます。 |
SEQUENCE_NO | 格納順番号が設定されます。 |
TRANSACTION_ID | トランザクション識別子が設定されます。 |
SYSTEM_NAME | RDBシステム名が設定されます。 |
CONTEXT_ID | コンテキストIDが設定されます。LOG_TYPE=Gの場合は、NULLが設定されます。 |
分割キー | APIで指定した値が設定されます。 |
任意列 | APIで指定した値が設定されます。 |
ユーザログ本文 | APIで指定した値が設定されます。 |
LOG_TYPEがトランザクション情報または制御情報レコード(LOG_TYPE=C/A/P/G)の場合、それぞれの値は以下のようになります。
項目 | 設定内容 |
---|---|
LOG_TYPE | トランザクション状態に合わせてC/A/P/Gが設定されます。 |
SEQUENCE_NO | 格納順番号が設定されます。 |
TRANSACTION_ID | トランザクション識別子が設定されます。LOG_TYPEがGの場合、NULL値が設定されます。 |
SYSTEM_NAME | RDBシステム名が設定されます。 |
CONTEXT_ID | コンテキストIDが設定されます。LOG_TYPEがGの場合、NULL値が設定されます。 |
分割キー | 分割キー値が設定されます。DSIごとの分割条件を複数の条件や範囲指定で定義した場合は、該当DSIの分割条件範囲内の任意の値が設定されます。 |
任意列 | NULL値が設定されます。 |
ユーザログ本文 | NULL値が設定されます。 |
LOG_TYPEがユーザログレコード(LOG_TYPE=U)の場合、APIで指定した分割キー値のDSIにユーザログが出力されます。
LOG_TYPEがトランザクション情報(LOG_TYPE=C/A/P)の場合、該当トランザクションの状態が変化したタイミングで、ユーザログを出力したすべてのDSIに出力されます。
LOG_TYPEが制御情報(LOG_TYPE=G)の場合、Symfoware/RDBを再起動した後の最初のユーザログを出力したタイミングで、ユーザログを出力したDSIに制御情報が出力されます。