表スペースの状態

このトピックでは、サポートされる表スペースの状態について説明します。

現在、 IBM® Db2® データベース製品でサポートされている表または表スペースの状態は 25 以上です。 それらの状態は、特定の環境下でのデータへのアクセスを制御したり、必要に応じて特定のユーザー・アクションを引き出して、データベースの整合性を保護するために使用されます。 そのほとんどは、Db2 データベース・ユーティリティーのいずれか (例えばロード・ユーティリティーやバックアップおよびリストア・ユーティリティー) の操作に関連したイベントの結果として発生します。 次の表では、サポートされているそれぞれの表スペースの状態について説明しています。 また、実施例も示し、データベースの管理中に遭遇する可能性のある状態の解釈および対応の仕方を正確に示しています。 これらの例は、 AIX®上で実行されたコマンド・スクリプトから取られたものです。コピー、貼り付け、および実行は、自分で行うことができます。 UNIX 以外のシステムで Db2 データベース製品を実行している場合は、ご使用のシステムにとって正しい形式のパス名があることを確認してください。 例のほとんどは、Db2 データベース製品に付属する SAMPLE データベースの表に基づいています。 SAMPLE データベースの一部ではないシナリオを必要とする例も少数ながら存在しますが、開始点としては SAMPLE データベースへの接続を使用することができます。

表 1. サポートされる表スペースの状態
State 16 進数の状態値 説明
バックアップ・ペンディング 0x0020 ポイント・イン・タイム表スペースのロールフォワード操作の後、または COPY NO オプションを指定した (リカバリー可能データベースに対する) ロード操作の後、表スペースはこの状態になります。 表スペースを使用するには、その前に表スペース (またはデータベース全体) をバックアップしておく必要があります。 表スペースをバックアップしないと、その表スペース内の表を照会することはできますが、更新することができません。
注: データベースは、ロールフォワード・リカバリーが有効になった直後にもバックアップする必要があります。 logarchmeth1 データベース構成パラメーターが OFF 以外の値に設定されている場合、データベースはリカバリー可能です。 そのデータベースをバックアップするまでは、アクティブ化または接続を行えません。 バックアップが取られた時点で、backup_pending 情報データベース構成パラメーターの値が NO に設定されます。
以下の内容の staff_data.del 入力ファイルがあるとします。
11,"Melnyk",20,"Sales",10,70000,15000:
以下のように、このデータを copy no を指定して staff 表にロードします。
update db cfg for sample using logarchmeth1 logretain; 
backup db sample; 
connect to sample; 
load from staff_data.del of del messages load.msg insert into staff copy no; 
update staff set salary = 69000 where id = 11;
list tablespaces; 
connect reset; 
USERSPACE1 について戻される情報は、この表スペースがバックアップ・ペンディング状態にあることを示します。
バックアップ進行中 0x800 これは、一時的な状態であり、バックアップ操作時のみ有効です。

以下のように、オンライン・バックアップを実行します。
backup db sample online;
別のセッションで、バックアップ操作の実行中に以下のいずれかのスクリプトを実行します。
  • connect to sample;
    list tablespaces show detail;
    connect reset;
  • connect to sample;
    get snapshot for tablespaces on sample;
    connect reset;
USERSPACE1 について戻される情報は、この表スペースがバックアップ進行中状態にあることを示します。
DMS 再平衡化進行中 0x10000000 これは、一時的な状態であり、データの再平衡化操作時のみ有効です。 データベース管理スペース (DMS) として定義されている表スペースに新しいコンテナーが追加されるか、または既存のコンテナーが拡張されたときに、表スペースのデータの再平衡化が発生することがあります。 再平衡化 とは、データのストライピングを維持する試みにおいて、表スペースのエクステントを 1 つの場所から別の場所に移動する処理のことです。 エクステント とは、コンテナー・スペースの単位 (測定基準はページ数) で、ストライプとは、表スペースの、コンテナーのセット全体にわたる エクステントの層のことです。

staffdata.del 入力ファイルに 20000 以上のレコードが含まれている場合は、表 newstaff を作成し、この入力ファイルを使用してその表をロードしてから、新しいコンテナーを表スペース ts1 に追加します。
connect to sample; 
create tablespace ts1 managed by database using
 (file '/home/melnyk/melnyk/NODE0000/SQL00001/ts1c1' 1024); 
create table newstaff like staff in ts1; 
load from staffdata.del of del insert into newstaff nonrecoverable; 
alter tablespace ts1 add
 (file '/home/melnyk/melnyk/NODE0000/SQL00001/ts1c2' 1024); 
list tablespaces; 
connect reset; 
TS1 について戻される情報は、この表スペースが DMS 再平衡化進行中状態にあることを示します。
使用不可ペンディング 0x200 データベースのロールフォワード操作時に表スペースはこの状態になる場合があります。ロールフォワード操作の終了までには表スペースのこの状態は解除されます。 この状態は、表スペースがオフラインになり、トランザクションの補正ログ・レコードが作成されなかった結果として生じる条件によってトリガーされます。 この表スペース状態になり、その後解除される過程は、ユーザーから認識されません。

この表スペース状態を示す例は、本書では扱われていません。

ドロップ・ペンディング 0x8000 データベースの再始動操作時に、表スペースの 1 つ以上のコンテナーで問題が見つかった場合に表スペースはこの状態になります (データベースの再始動は、このデータベースを用いた前のセッションが (例えば電源障害時に) 異常終了した場合に行う必要があります)。 表スペースがドロップ・ペンディング状態にある場合は使用することができず、ドロップ以外に何も行えません。

この表スペース状態を示す例は、本書では扱われていません。

ロード中 0x20000 これは一時的な状態で、COPY NO オプションを指定した (リカバリー可能データベースに対する) ロード操作時のみ有効です。 表のロード中状態も参照してください。

staffdata.del 入力ファイルに 20000 以上のレコードが入っているとして、以下のように表 newstaff を作成し、その表に COPY NO とこの入力ファイルを指定してロードします。
update db cfg for sample using logarchmeth1 logretain;
backup db sample; 
connect to sample; 
create table newstaff like staff; 
load from staffdata.del of del insert into newstaff copy no; 
connect reset;
別のセッションから、「バックアップ進行中」の例に示されているいずれかの サンプル・スクリプト を実行して、ロード操作の実行中に表スペースに関する情報を取得します。

USERSPACE1 について戻される情報は、この表スペースがロード中 (およびバックアップ・ペンディング) 状態にあることを示します。

移動進行中 0x80000 これは、エクステントの移動操作中にのみ当てはまる一時的な状態です。 この状態は、db2ExtMove が表スペースのエクステントの移動を処理中であることを示しています。
移動が開始済み 0x100000 これは、エクステントの移動操作中にのみ当てはまる一時的な状態です。 この状態は、表スペースでエクステントの移動が開始され、db2ExtMov スレッドが作成されたことを示します。 エクステントの移動処理はまだ開始されていない可能性があります。 connect to sample; create tablespace TS1; alter tablespace TS1 lower high water mark;
移動を終了中 0x200000 これは、エクステントの移動操作中にのみ当てはまる一時的な状態です。 この状態は、表スペースのエクステントの移動が終了処理中であることを示します。 connect to sample; create tablespace TS1; alter tablespace TS1 reduce max; alter tablespace TS1 reduce stop;
正常 0x0 表スペースが通常以外の状態 (異常な状態) にない場合はこの状態になります。 通常の状態は、表スペースが作成された後に置かれる最初の状態です。

以下のように、表スペースを作成してからその表スペースに関する情報を取得します。
connect to sample; 
create tablespace ts1 managed by automatic storage; 
list tablespaces show detail;
USERSPACE1 について戻される情報は、この表スペースが通常の状態にあることを示しています。
オフラインおよびアクセス不可 0x4000 表スペースの 1 つ以上のコンテナーに問題があった場合に表スペースはこの状態になります。 間違ってコンテナーの名前を変更したり、移動したり、損傷してしまうこともあり得ます。 問題を正し、表スペースに関連付けられているコンテナーに再びアクセスできるようになった後、すべてのアプリケーションをデータベースから切断し、データベースに再接続することによって、この異常な状態から抜け出すことができます。 別の方法として、SWITCH ONLINE 節を指定して ALTER TABLESPACE ステートメントを発行することによって、他のアプリケーションをデータベースから切断せずに表スペースのオフラインおよびアクセス不可状態を解除することができます。

以下のように、コンテナー tsc1 と tsc2 を使用して表スペース ts1 を作成し、表 staffemp を作成し、st_data.del ファイルからデータをインポートします。
connect to sample; 
create tablespace ts1 managed by database using
 (file '/home/melnyk/melnyk/NODE0000/SQL00001/tsc1' 1024); 
alter tablespace ts1 add
 (file '/home/melnyk/melnyk/NODE0000/SQL00001/tsc2' 1024); 
export to st_data.del of del select * from staff; 
create table stafftemp like staff in ts1; 
import from st_data.del of del insert into stafftemp; 
connect reset; 
表スペースのコンテナーの名前を tsc1 から tsc3 に変更し、STAFFTEMP 表の照会を試行します。
connect to sample; 
select * from stafftemp; 
照会は SQL0290N (表スペース・アクセスが許されていません) を戻し、LIST TABLESPACES コマンドによって TS1 の状態値 0x4000 (オフラインおよびアクセス不可) が戻されます。 表スペースのコンテナーの名前を tsc3 から tsc1 に戻します。 これで照会は正常に実行されます。
静止モードでの排他 0x4 表スペースの静止機能を呼び出すアプリケーションに表スペースへの排他 (読み取りまたは書き込み) アクセスがあると、表スペースはこの状態になります。 QUIESCE TABLESPACES FOR TABLE コマンドを使用して、表スペースを明示的に静止排他に設定します。

以下のように、表スペースを通常の状態に設定してから、静止モードでの排他状態に設定します。
connect to sample; 
quiesce tablespaces for table staff reset; 
quiesce tablespaces for table staff exclusive; 
connect reset; 
別のセッションで、以下のスクリプトを実行します。
connect to sample; 
select * from staff where id=60; 
update staff set salary=50000 where id=60; 
list tablespaces; 
connect reset; 
USERSPACE1 について戻される情報は、この表スペースが静止モードでの排他状態にあることを示します。
静止モードでの共有 0x1 表スペースの静止機能を呼び出すアプリケーションと同時アプリケーションの両方に表スペースへの読み取りアクセスがあると (書き込みアクセスはない)、表スペースはこの状態になります。 QUIESCE TABLESPACES FOR TABLE コマンドを使用して、表スペースを静止モードでの共有状態に明示的に設定します。

以下のように、表スペースを通常の状態に設定してから、静止モードでの共有状態に設定します。
connect to sample; 
quiesce tablespaces for table staff reset; 
quiesce tablespaces for table staff share; 
connect reset;
別のセッションで、以下のスクリプトを実行します。
connect to sample; 
select * from staff where id=40; 
update staff set salary=50000 where id=40; 
list tablespaces; 
connect reset;
USERSPACE1 について戻される情報は、この表スペースが静止モードでの共有状態にあることを示します。
静止モードでの更新 0x2 表スペースの静止機能を呼び出すアプリケーションに表スペースへの排他書き込みアクセスがあると、表スペースはこの状態になります。 QUIESCE TABLESPACES FOR TABLE コマンドを使用して、表スペースを「静止更新」状態に明示的に設定します。

以下のように、表スペースを通常の状態に設定してから、静止モードでの更新状態に設定します。
connect to sample; 
quiesce tablespaces for table staff reset; 
quiesce tablespaces for table staff intent to update; 
connect reset; 
別のセッションで、以下のスクリプトを実行します。
connect to sample; 
select * from staff where id=50; 
update staff set salary=50000 where id=50; 
list tablespaces; 
connect reset; 
USERSPACE1 について戻される情報は、この表スペースが静止モードでの更新状態にあることを示します。
REORG 進行中 0x400 これは、一時的な状態であり、REORG 操作時のみ有効です。

以下のように、staff 表を再編成します。
connect to sample; 
reorg table staff; 
connect reset;
別のセッションから、「バックアップ進行中」の例に示されているいずれかの サンプル・スクリプト を実行して、REORG 操作の実行中に表スペースに関する情報を取得します。
USERSPACE1 について戻される情報は、この表スペースが REORG 進行中状態にあることを示します。
注: SAMPLE データベースに関係する表の再編成操作は、短時間で完了する可能性があり、その結果、このアプローチを使用して Reorg の「進行中」状態を監視することが困難な場合があります。
リストア・ペンディング 0x100 データベースの表スペースは、リダイレクト・リストア操作の最初の部分の後 (つまり、SET TABLESPACE CONTAINERS コマンドを発行する前)、この状態になります。 表スペースを使用するには、その前に表スペース (またはデータベース全体) をリストアする必要があります。 リストア操作が正常に完了するまで、データベースに接続することはできません。正常に完了すると、restore_pending 情報データベース構成パラメーターの値が NO に設定されます。

「ストレージを定義可能」状態にあるリダイレクト・リストア操作の最初の部分が完了すると、すべての表スペースがリストア・ペンディング状態になります。

リストア進行中 0x2000 これは、一時的な状態であり、リストア操作時のみ有効です。

以下のように、sample データベースをロールフォワード・リカバリーできるようにしてから、sample データベースと USERSPACE1 表スペースをバックアップします。
update db cfg for sample using logarchmeth1 logretain; 
backup db sample; 
backup db sample tablespace (userspace1); 
USERSPACE1 表スペース・バックアップをリストアします (このバックアップ・イメージのタイム・スタンプが 20040611174124 であると想定しています)。
restore db sample tablespace (userspace1) online taken at 20040611174124; 
別のセッションから、「バックアップ進行中」の例に示されている サンプル・スクリプト のいずれかを実行して、リストア操作の実行中に表スペースに関する情報を取得します。

USERSPACE1 について戻される情報は、この表スペースがリストア進行中状態にあることを示します。

ロールフォワード・ペンディング 0x80 リカバリー可能データベースに対するリストア操作の後、表スペースはこの状態になります。 表スペースを使用するには、その前に表スペース (またはデータベース全体) をロールフォワードする必要があります。 logarchmeth1 データベース構成パラメーターを OFF 以外の値に設定すると、データベースはリカバリー可能になります。 ロールフォワード操作が正常に完了するまで、データベースをアクティブ化したりデータベースに接続したりすることはできません。正常に完了すると、rollfwd_pending 情報データベース構成パラメーターの値が NO に設定されます。

リストア進行中のオンライン表スペースのリストア操作が完了すると、表スペース USERSPACE1 はロールフォワード・ペンディング状態になります。

ロールフォワード進行中 0x40 これは、一時的な状態であり、ロールフォワード操作時のみ有効です。

staffdata.del 入力ファイルに 20000 以上のレコードがある場合は、表と表スペースを作成してから、データベース・バックアップを作成します。
update db cfg for sample using logarchmeth1 logretain; 
backup db sample; 
connect to sample; 
create tablespace ts1 managed by automatic storage;
create table newstaff like staff in ts1; 
connect reset; 
backup db sample tablespace (ts1) online; 
以下のようにデータベース・バックアップをリストアし、ログの終わりまでロールフォワードします (バックアップ・イメージのタイム・スタンプが 20040630000715 であると想定しています)。
connect to sample; 
load from staffdata.del of del insert into newstaff copy yes
 to /home/melnyk/backups; 
connect reset; 
restore db sample tablespace (ts1) online taken at 20040630000715; 
rollforward db sample to end of logs and stop tablespace (ts1) online; 
別のセッションから、「バックアップ進行中」の例に示されているいずれかの サンプル・スクリプト を実行して、ロールフォワード操作の実行中に表スペースに関する情報を取得します。

TS1 について戻される情報は、この表スペースがロールフォワード進行中状態にあることを示します。

ストレージを定義可能 0x2000000 データベースの表スペースは、リダイレクト・リストア操作の最初の部分の後 (つまり、SET TABLESPACE CONTAINERS コマンドを発行する前)、この状態になります。 これにより、コンテナーを再定義することができます。

以下のようにしてデータベース・バックアップをリストアします (バックアップ・イメージのタイム・スタンプが 20040613204955 であると想定しています)。
restore db sample taken at 20040613204955 redirect; 
list tablespaces;
LIST TABLESPACES コマンドによって戻される情報は、すべての表スペースが Storage May be Defined and Restore Pending 状態であることを示しています。
ストレージを定義する必要があります 0x1000 表スペース・コンテナーの設定フェーズが省略されるか、またはそのフェーズ中に指定のコンテナーを獲得できない場合、データベースの表スペースは新しいデータベースに対するリダイレクト・リストア操作時にこの状態になります。 表スペース・コンテナーの設定フェーズ中に指定のコンテナーを獲得できないという状況は、例えば無効なパス名が指定されたり、十分なディスク・スペースがない場合に発生する可能性があります。

以下のようにしてデータベース・バックアップをリストアします (バックアップ・イメージのタイム・スタンプが 20040613204955 であると想定しています)。
restore db sample taken at 20040613204955 into mydb redirect; 
set tablespace containers for 2 using (path 'ts2c1'); 
list tablespaces; 
LIST TABLESPACES コマンドによって戻される情報は、表スペース SYSCATSPACE および表スペース TEMPSPACE1 が「ストレージの定義が必要」、「ストレージの定義が可能」、および「リストア・ペンディング」状態であることを示しています。 「ストレージを定義する必要があります」状態は、「ストレージを定義可能」状態よりも優先されます。
書き込み中断 0x10000 書き込み操作が中断した後、表スペースはこの状態になります。

この表スペース状態を示す例は、本書では扱われていません。

表スペース作成の進行中 0x40000000 これは、一時的な状態であり、表スペースの作成操作時のみ有効です。

以下のように、表スペース ts1、ts2、ts3 を作成します。
connect to sample; 
create tablespace ts1 managed by automatic storage;
create tablespace ts2 managed by automatic storage;
create tablespace ts3 managed by automatic storage;
別のセッションから、「バックアップ進行中」の例に示されている サンプル・スクリプト のいずれかを実行して、表スペース作成操作の実行中に表スペースに関する情報を取得します。

TS1、TS2、および TS3 について戻される情報は、これらの表スペースが表スペース作成の進行中状態にあることを示します。

表スペース削除の進行中 0x20000000 これは、一時的な状態であり、表スペースの削除操作時のみ有効です。

以下のように、表スペース ts1、ts2、ts3 を作成してから、それらをドロップします。

connect to sample; 
create tablespace ts1 managed by automatic storage;
create tablespace ts2 managed by automatic storage; 
create tablespace ts3 managed by automatic storage; 
drop tablespaces ts1, ts2, ts3; 
別のセッションから、「バックアップ進行中」の例に示されている サンプル・スクリプト のいずれかを実行して、表スペースのドロップ操作の実行中に表スペースに関する情報を取得します。

TS1、TS2、および TS3 について戻される情報は、これらの表スペースが表スペース削除の進行中状態にあることを示します。