リリース情報


7.3 第 3 章 データベースの作成

7.3.1 表スペースの作成

7.3.1.1 Linux でのロー入出力の使用

Linux には、ブロック・デバイスにバインドしなければロー入出力を実行できない、 ロー・デバイス・ノードのプールがあります。 ロー・デバイスをブロック・デバイスにバインドするための情報の中央リポジトリーとして 機能するロー・デバイス・コントローラーがあります。 バインドは、一般的に Linux ディストリビューターによって提供されている ユーティリティー raw を使用して実行されます。

Linux でロー入出力をセットアップするには、以下が必要になります。

注:
ロー・デバイス・ノード名は、 現在ロー入出力をサポートしている配布版によって異なります。
配布版        ロー・デバイス・ノード  ロー・デバイス・コントローラー
------------  --------------------  --------------------- 
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 でサポートされているその他すべてのページ・サイズでも サポートされています。

7.3.2 シーケンスの作成

「"新しい表に識別列を定義"」セクションの後に、以下の「シーケンスの作成」セクションを追加してください。

シーケンス とは、値の自動生成を可能にするデータベース・オブジェクトです。 シーケンスは、固有キー値を生成するタスクに最も適しています。 アプリケーションはシーケンスを使用し、データベースの外部に固有カウンターを生成したことによって 発生する可能性のある、並列性およびパフォーマンスの問題を回避することができます。

識別列属性とは異なり、シーケンスは特定の表列に関連付けられたり、固有の表列にバインドされることはなく、 その表列からのみアクセス可能です。

以下の方法のいずれかでシーケンスが値を生成するよう、シーケンスを作成または変更することができます。

シーケンス・オブジェクト作成の例:

   CREATE SEQUENCE order_seq
      START WITH 1
      INCREMENT BY 1
      NOMAXVALUE
   NOCYCLE
      CACHE 24

この例で、シーケンスは order_seq です。 1 から始まり、上限なしで 1 ずつ増えていきます。 上限が割り当てられていないため、先頭に戻って循環することはありません。 CACHE パラメーターに関連する数値は、データベース・マネージャーが事前割り当てし、 メモリーに保管するシーケンス値の最大数を指定します。

生成されるシーケンス番号のプロパティー:

シーケンスを含むデータベースを以前の状態にリカバリすると、いくつかのシーケンスで 値が重複する場合があります。 値の重複を回避するため、シーケンスを含むデータベースを以前の状態にリカバリしないでください。

シーケンスは単一ノード・データベースでのみサポートされています。

シーケンスで使用される式には、以下の 2 つがあります。

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 式は、以下の項目で使用することができます。

7.3.3 IDENTITY 列とシーケンスの比較

「"シーケンスの作成"」セクションの後に、以下のセクションを追加します。

IDENTITY 列とシーケンスは類似していますが、異なる点もあります。 それぞれの特性は、データベースおよびアプリケーションの設計時に利用することができます。

識別列の特性:

シーケンス・オブジェクトの特性:

以上がこれら 2 つの特性のすべてではありませんが、このような特性を考慮することによって、 データベース設計やデータベースで使用するアプリケーションに応じてどちらを使用すればよいか 判断するために役立ちます。

7.3.4 索引の作成、索引拡張子、または索引の指定

「"索引の作成、索引拡張子、または索引の指定"」セクションで、 文章「"索引キーに含まれる列は 255 バイトに制限されています。"」で始まる段落に以下の注釈を 追加します。

注:
DB2_INDEX_2BYTEVARLEN レジストリー変数を使用すると、 255 バイトを超える長さの列を索引キーの一部として指定することができます。


[ ページのトップ | 前ページ | 次ページ | 目次 | 索引 ]