Linux には、ブロック・デバイスにバインドしなければロー入出力を実行できない、 ロー・デバイス・ノードのプールがあります。 ロー・デバイスをブロック・デバイスにバインドするための情報の中央リポジトリーとして 機能するロー・デバイス・コントローラーがあります。 バインドは、一般的に Linux ディストリビューターによって提供されている ユーティリティー raw を使用して実行されます。
Linux でロー入出力をセットアップするには、以下が必要になります。
# ln -s /dev/your_raw_dev_ctrl /dev/rawctl
配布版 ロー・デバイス・ノード ロー・デバイス・コントローラー ------------ -------------------- --------------------- RedHat 6.2 /dev/raw/raw1 〜 255 /dev/rawctl SuSE 7.0 /dev/raw1 〜 63 /dev/raw
DB2 は、これら 2 つのロー・デバイス・コントローラー、および ロー・デバイス・ノードのその他ほとんどの名前をサポートしています。 ロー・デバイスは、Linux/390 での DB2 ではサポートされていません。
Linux でロー入出力を構成するには:
この例では、使用されるロー区分は /dev/sda5 です。 この区分には、重要なデータは含まれていないと想定します。
ステップ 1. | この区分の 4 096 バイト・ページの数を計算します。端数が出た場合は切り捨てます。 例: # fdisk /dev/sda Command (m for help): p Disk /dev/sda: 255 heads, 63 sectors, 1106 cylinders Units = cylinders of 16065 * 512 bytes Device Boot Start End Blocks Id System /dev/sda1 1 523 4200997 83 Linux /dev/sda2 524 1106 4682947+ 5 Extended /dev/sda5 524 1106 4682947 83 Linux Command (m for help): q # /dev/sda5 のページ数: num_pages = floor( ((1106-524+1)*16065*512)/4096 ) num_pages = 11170736 |
ステップ 2. | 未使用のロー・デバイス・ノードをこの区分にバインドします。 マシンをリブートするたびに行う必要があり、ルート・アクセスが必要です。 raw -a を使用して、どのロー・デバイス・ノードが使用されているかを調べます。 # raw /dev/raw/raw1 /dev/sda5 /dev/raw/raw1: bound to major 8, minor 5 |
ステップ 3. | ロー装置コントローラーおよびディスク区分にグローバル読み取りアクセス権を設定します。 ロー・デバイスには、グローバル読み取り/書き込みアクセス権を設定します。 # chmod a+r /dev/rawctl # chmod a+r /dev/sdb1 # chmod a+rw /dev/raw/raw1 |
ステップ 4. | ディスク区分ではなくロー・デバイスを指定して、DB2 に表スペースを作成します。 例: CREATE TABLESPACE dms1 MANAGED BY DATABASE USING (DEVICE '/dev/raw/raw1' 11170736)
|
ロー・デバイスの表スペースは、DB2 でサポートされているその他すべてのページ・サイズでも サポートされています。
「"新しい表に識別列を定義"」セクションの後に、以下の「シーケンスの作成」セクションを追加してください。
シーケンス とは、値の自動生成を可能にするデータベース・オブジェクトです。 シーケンスは、固有キー値を生成するタスクに最も適しています。 アプリケーションはシーケンスを使用し、データベースの外部に固有カウンターを生成したことによって 発生する可能性のある、並列性およびパフォーマンスの問題を回避することができます。
識別列属性とは異なり、シーケンスは特定の表列に関連付けられたり、固有の表列にバインドされることはなく、 その表列からのみアクセス可能です。
以下の方法のいずれかでシーケンスが値を生成するよう、シーケンスを作成または変更することができます。
シーケンス・オブジェクト作成の例:
CREATE SEQUENCE order_seq START WITH 1 INCREMENT BY 1 NOMAXVALUE NOCYCLE CACHE 24
この例で、シーケンスは order_seq です。 1 から始まり、上限なしで 1 ずつ増えていきます。 上限が割り当てられていないため、先頭に戻って循環することはありません。 CACHE パラメーターに関連する数値は、データベース・マネージャーが事前割り当てし、 メモリーに保管するシーケンス値の最大数を指定します。
生成されるシーケンス番号のプロパティー:
シーケンスを含むデータベースを以前の状態にリカバリすると、いくつかのシーケンスで 値が重複する場合があります。 値の重複を回避するため、シーケンスを含むデータベースを以前の状態にリカバリしないでください。
シーケンスは単一ノード・データベースでのみサポートされています。
PREVVAL 式は、現行セッション内の直前のステートメントに指定されたシーケンスについて 最後に生成された値を返します。
NEXTVAL 式は、指定されたシーケンスの次の値を返します。 NEXTVAL 式がシーケンスの名前を指定していれば、新しいシーケンス番号が生成されます。 ただし、照会の中に同じシーケンス名を指定している NEXTVAL 式のインスタンスが 複数ある場合、シーケンスのカウンターは結果の行ごとに 1 つずつ増えていきます。
同じシーケンス番号は、先頭の表の NEXTVAL 式およびその他の表の PREVVAL 式を 使用してシーケンス番号を参照することによって、2 つの異なる表内の固有キー値として使用することができます。
たとえば:
INSERT INTO order (orderno, custno) VALUES (NEXTVAL FOR order_seq, 123456); INSERT INTO line_item (orderno, partno, quantity) VALUES (PREVVAL FOR order_seq, 987654, 1)
NEXTVAL または PREVVAL 式は、以下の項目で使用することができます。
「"シーケンスの作成"」セクションの後に、以下のセクションを追加します。
IDENTITY 列とシーケンスは類似していますが、異なる点もあります。 それぞれの特性は、データベースおよびアプリケーションの設計時に利用することができます。
識別列の特性:
シーケンス・オブジェクトの特性:
以上がこれら 2 つの特性のすべてではありませんが、このような特性を考慮することによって、 データベース設計やデータベースで使用するアプリケーションに応じてどちらを使用すればよいか 判断するために役立ちます。
「"索引の作成、索引拡張子、または索引の指定"」セクションで、 文章「"索引キーに含まれる列は 255 バイトに制限されています。"」で始まる段落に以下の注釈を 追加します。