ALTER DATABASE ステートメント
ALTER DATABASE ステートメントは、自動ストレージ表スペースに使用されるパスのコレクションへ新規ストレージ・パスを追加したり、このコレクションから既存のストレージ・パスを除去したりします。
自動ストレージ表スペースとは、自動ストレージを使用して作成した表スペースのことです。つまり、CREATE TABLESPACE ステートメントに MANAGED BY AUTOMATIC STORAGE 節を指定して作成した表スペース、または MANAGED BY 節を一切指定しないで作成した表スペースのことです。 自動ストレージが使用可能なデータベースでは、その表スペースのコンテナーおよびスペース管理特性を、データベース・マネージャーがすべて決定できます。 データベースで、現在自動ストレージが使用可能になっていない場合は、ストレージ・パスの追加を実行することで使用可能になります。
呼び出し
このステートメントはアプリケーション・プログラムに組み込むことができ、また対話式に出すことができます。 これは、DYNAMICRULES の実行動作がパッケージに効力を持つ場合にのみ、動的に準備できる実行可能ステートメントです (SQLSTATE 42509)。
許可
このステートメントの許可 ID が持つ特権には、 SYSADM 権限か SYSCTRL 権限のいずれかが含まれている必要があります。
構文
説明
- database-name
- 変更するデータベースの名前を指定するオプションの値。 この値を指定する場合は、アプリケーションが現在接続しているデータベースの名前 (クライアントがカタログした別名ではない) と一致していなければなりません。そうでないとエラーが戻されます (SQLSTATE 42961)。
- ADD STORAGE ON
- 自動ストレージ表スペースに使用されるストレージ・パスのコレクションに、1 つ以上の新しいストレージ・パスを追加するよう指定します。
- 「ストレージ・パス」
- 自動ストレージ表スペースのコンテナーが作成される場所を指定するストリング定数。 以下の表に示すとおり、ストリングの形式はオペレーティング・システムによって異なります。
オペレーティング・システム ストリング・フォーマット Linux®
AIX®
Solaris の場合
HP-UX絶対パス。 Windows ドライブ・レター名。
- DROP STORAGE ON
- 自動ストレージ表スペースに使用されるストレージ・パスのコレクションから、1 つ以上のストレージ・パスを除去するよう指定します。 表スペースがアクティブに使用しているストレージ・パスをドロップすると、そのストレージ・パスの状態は
「使用中」
から「ドロップ・ペンディング」
に変更され、今後そのストレージ・パスを使用できなくなります。- 「ストレージ・パス」
- ストレージ・パスが削除される場所を指定するストリング定数。 以下の表に示すとおり、ストリングの形式はオペレーティング・システムによって異なります。
オペレーティング・システム ストリング・フォーマット Linux
AIX
Solaris の場合
HP-UX絶対パス。 Windows ドライブ・レター名。
ルール
- バージョン 10.1 以降で実行されているデータベースの場合、このステートメントの操作は、データベースのデフォルト・ストレージ・グループに適用されます。 ストレージ・グループがデータベースに定義されていない場合は、IBMSTOGROUP という名前が使用されます。
- 追加するストレージ・パスは、パスの命名規則に照らして有効でなければなりませんし、アクセス可能であることも必要です (SQLSTATE 57019)。 同様に、パーティション・データベース環境では、ストレージ・パスが存在し、各データベース・パーティションごとにアクセス可能でなければなりません (SQLSTATE 57019)。
- ドロップするストレージ・パスは、現在データベースに存在していなければならず (SQLSTATE 57019)、既に
ドロップ・ペンディング
状態であってはなりません (SQLSTATE 55073)。 - 自動ストレージが使用可能なデータベースには、少なくとも 1 つのストレージ・パスがなければなりません。 データベースからすべてのストレージ・パスをドロップすることはできません (SQLSTATE 428HH)。
- ALTER DATABASE ステートメントは、データベース・パーティション・サーバーの追加中には実行できません (SQLSTATE 55071)。
- DROP STORAGE ON は、 Db2® pureScale® 環境では指定できません (SQLSTATE 56038)。
注
- 新規ストレージ・パスを追加する際には、
- 自動ストレージを使用する既存の REGULAR および LARGE 表スペースは、最初、これらの新規パスを使用しません。 データベース・マネージャーは、スペース不足状態が発生した場合にのみ、これらのパスに新しい表スペース・コンテナーを作成する可能性があります。
- 自動ストレージによって管理される既存の TEMPORARY 表スペースが、新しいストレージ・パスを自動的に使用することはありません。 これらの表スペース内のコンテナーが 1 つ以上の新しいストレージ・パスを使用するには、データベースを通常どおり停止してから再始動しなければなりません。 代わりに、TEMPORARY 表スペースをドロップして再作成することもできます。 これらの表スペースを作成すると、十分なフリー・スペースがあるすべてのストレージ・パスを自動的に使用します。
- ストレージ・パスをデータベースに追加して自動ストレージを有効にしても、データベースが、非自動ストレージが有効になっている既存の表スペースを、自動ストレージを使用するように変換することはありません。
- ADD STORAGE および DROP STORAGE はログに記録される操作ですが、ロールフォワード操作中にそれらの操作が再実行されるかどうかは、データベースをリストアした方法によって異なります。 データベースに関連したストレージ・パスがリストア操作によって再定義されない場合、ストレージ・パスの変更が含まれるログ・レコードが再実行され、ログ・レコードに記述されたストレージ・パスがロールフォワード操作中に追加またはドロップされます。 ただし、リストア操作中にストレージ・パスが再定義される 場合、ストレージ・パスはセットアップ済みと見なされるため、ロールフォワード操作で ADD STORAGE または DROP STORAGE ログ・レコードが再実行されることはありません。
- データベース・パーティション上のストレージ・パス用のフリー・スペースの計算時には、ストレージ・パス内で以下のディレクトリーまたはマウント・ポイントが存在するかどうかがデータベース・マネージャーによって検査され、最初に見つかったものが使用されます。
<storage path>/<instance name>/NODE####/<database name> <storage path>/<instance name>/NODE#### <storage path>/<instance name> <storage path>
説明:- <storage path> は、データベースに関連付けられたストレージ・パスです。
- <instance name> は、データベースが存在するインスタンスです。
- NODE#### は、データベース・パーティション番号 (例えば、NODE0000 または NODE0001) に対応します。
- <database name> は、データベースの名前です。
ファイル・システムは、ストレージ・パスの下の地点にマウントすることができます。すると、表スペース・コンテナーに使用できる実際のフリー・スペース量が、ストレージ・パス・ディレクトリーそのものに関連付けられている量と同量ではないことがデータベース・マネージャーで認識されます。
1 つの物理マシン上に 2 つの論理データベース・パーティションが存在し、1 つのストレージ・パス (
/dbdata
) が存在する例を考えてみます。各データベース・パーティションはこのストレージ・パスを使用します。しかし、独自のファイル・システム内の各パーティションからデータを分離することもできます。 この場合、パーティションごとに別個のファイル・システムを作成し、/dbdata/<instance>/NODE####
にマウントすることができます。 ストレージ・パス上にコンテナーを作成し、フリー・スペースを決定する場合、データベース・マネージャーは/dbdata
のフリー・スペース情報を取得せず、代わりに対応する/dbdata/<instance>/NODE####
ディレクトリーの情報を取得します。 - 一般的に、パーティション・データベース環境では、 どのパーティションにも同じストレージ・パスを使用する必要があります。 その例外の 1 つは、ストレージ・パス内でデータベース・パーティション式が使用される場合です。 そうすることで、ストレージ・パスにデータベース・パーティション番号を反映することができ、その結果のパス名が各パーティションごとに異なることになります。
- 1 つ以上の表スペースによって使用されているストレージ・パスをドロップすると、パスの状態が
「使用中」
から「ドロップ・ペンディング」
に変わります。 このパスでその後増加が生じることはありません。 そのパスをデータベースから完全に除去できるようにするには、その前に影響を受けるそれぞれの表スペースを (ALTER TABLESPACE ステートメントの REBALANCE 節を使用して) 再平衡化し、そのコンテナー・データを該当するストレージ・パスから送出しなければなりません。 再平衡化がサポートされているのは、REGULAR および LARGE 表スペースだけです。 ドロップされるパスからコンテナーを除去するには、一時表スペースをいったんドロップしてから再作成する必要があります。 いずれの表スペースによっても使用されていないパスの場合、データベースから物理的に除去されます。パーティション・データベースの場合、パスは各パーティション上に個別に維持されます。 あるデータベース・パーティションでパスが使用されなくなると、そのパーティションから物理的に除去されます。 他のパーティションでは、パスがまだ
「ドロップ・ペンディング」
状態であると示される場合があります。ドロップ・ペンディング状態のストレージ・パスを使用している自動ストレージ表スペースのリストについては、以下の SQL ステートメントを発行すると判別できます。SELECT DISTINCT A.TBSP_NAME, A.TBSP_ID, A.TBSP_CONTENT_TYPE FROM TABLE(MON_GET_TABLESPACE(NULL,-2)) AS A WHERE A.TBSP_PATHS_DROPPED = 1
- データベース・パーティション式を使用してもともと指定されたストレージ・パスをドロップする場合、そのデータベース・パーティション式を含む同じストレージ・パス・ストリングを、ドロップでも使用する必要があります。 データベース・パーティション式が指定された場合、このパス・ストリングは、データベース・スナップショットの
「DB パーティション式によるパス」
エレメント (db_storage_path_with_dpe) にあります。 このエレメントは、指定された元のパスにデータベース・パーティション式が含まれていなかった場合には表示されません。 - ある特定のストレージ・パスを 1 つのデータベースに複数回追加することも可能です。 DROP STORAGE ON 節を使用する場合、そうしたパスを一度指定すると、パスのすべて のインスタンスがデータベースからドロップされます。
例
/db
ディレクトリー (/db/filesystem1
および/db/filesystem2
) の下に 2 つのパスをつ追加します。/filesystem3
という名前の 3 番目のパスを、現在接続されているデータベースに関連付けられている自動ストレージ表スペースのスペースに追加します。ALTER DATABASE ADD STORAGE ON '/db/filesystem1', '/db/filesystem2', '/filesystem3'
- SAMPLE データベースに関連付けられている自動ストレージ表スペースのスペースに、ドライブ
D
およびE
を追加します。ALTER DATABASE SAMPLE ADD STORAGE ON 'D:', 'E:\'
- 現在接続されているデータベースに関連付けられている自動ストレージ表スペースのスペースに、ディレクトリー
F:\DBDATA
およびドライブG
を追加します。ALTER DATABASE ADD STORAGE ON 'F:\DBDATA', 'G:'
- 各データベース・パーティション上のストレージ・パスを区別するために、データベース・パーティション式を使用するストレージ・パスを追加します。
データベース・パーティション 0 で使用されるストレージ・パスはALTER DATABASE ADD STORAGE ON '/dataForPartition $N'
/dataForPartition0
、データベース・パーティション 1 で使用されるストレージ・パスは/dataForPartition1
というようになります。 - 自動ストレージが有効になっていないデータベースに、データベースで自動ストレージを有効にするためにストレージ・パスを追加します。
データベース MYDB が自動ストレージで使用できるようになりました。CREATE DATABASE MYDB AUTOMATIC STORAGE NO CONNECT TO MYDB ALTER DATABASE ADD STORAGE ON '/db/filesystem1', '/db/filesystem2'
- 現在接続されているデータベースから、パス
/db/filesystem1
および/db/filesystem2
を除去します。
ストレージを正常にドロップした後で、これらのストレージ・パスを使用していた表スペースごとに、REBALANCE 節を指定した ALTER TABLESPACE ステートメントを使用して、表スペースを再平衡化します。ALTER DATABASE DROP STORAGE ON '/db/filesystem1', '/db/filesystem2'
- データベース・パーティション式 (/dataForPartition $N) が含まれるストレージ・パスがデータベースに以前追加されていましたが、現在では除去されることになっています。
ストレージを正常にドロップした後で、これらのストレージ・パスを使用していた表スペースごとに、REBALANCE 節を指定した ALTER TABLESPACE ステートメントを使用して、表スペースを再平衡化します。ALTER DATABASE DROP STORAGE ON '/dataForPartition $N'