ALTER DATABASE ステートメント

ALTER DATABASE ステートメントは、自動ストレージ表スペースに使用されるパスのコレクションへ新規ストレージ・パスを追加したり、このコレクションから既存のストレージ・パスを除去したりします。

自動ストレージ表スペースとは、自動ストレージを使用して作成した表スペースのことです。つまり、CREATE TABLESPACE ステートメントに MANAGED BY AUTOMATIC STORAGE 節を指定して作成した表スペース、または MANAGED BY 節を一切指定しないで作成した表スペースのことです。 自動ストレージが使用可能なデータベースでは、その表スペースのコンテナーおよびスペース管理特性を、データベース・マネージャーがすべて決定できます。 データベースで、現在自動ストレージが使用可能になっていない場合は、ストレージ・パスの追加を実行することで使用可能になります。

重要: このステートメントは非推奨であり、将来のリリースで削除される可能性があります。 代わりに CREATE STOGROUP または ALTER STOGROUP ステートメントを使用してください。

呼び出し

このステートメントはアプリケーション・プログラムに組み込むことができ、また対話式に出すことができます。 これは、DYNAMICRULES の実行動作がパッケージに効力を持つ場合にのみ、動的に準備できる実行可能ステートメントです (SQLSTATE 42509)。

許可

このステートメントの許可 ID が持つ特権には、 SYSADM 権限か SYSCTRL 権限のいずれかが含まれている必要があります。

構文

Read syntax diagramSkip visual syntax diagramALTER DATABASEdatabase-name 1ADD STORAGE ON,'storage-path'DROP STORAGE ON,'storage-path'
Notes:
  • 1 Each clause can be specified only once.

説明

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 節を使用する場合、そうしたパスを一度指定すると、パスのすべて のインスタンスがデータベースからドロップされます。

  1. /db ディレクトリー (/db/filesystem1 および /db/filesystem2) の下に 2 つのパスをつ追加します。/filesystem3 という名前の 3 番目のパスを、現在接続されているデータベースに関連付けられている自動ストレージ表スペースのスペースに追加します。
       ALTER DATABASE ADD STORAGE ON '/db/filesystem1', '/db/filesystem2',
         '/filesystem3'
  2. SAMPLE データベースに関連付けられている自動ストレージ表スペースのスペースに、ドライブ D および E を追加します。
       ALTER DATABASE SAMPLE ADD STORAGE ON 'D:', 'E:\'
  3. 現在接続されているデータベースに関連付けられている自動ストレージ表スペースのスペースに、ディレクトリー F:\DBDATA およびドライブ G を追加します。
       ALTER DATABASE ADD STORAGE ON 'F:\DBDATA', 'G:'
  4. 各データベース・パーティション上のストレージ・パスを区別するために、データベース・パーティション式を使用するストレージ・パスを追加します。
       ALTER DATABASE ADD STORAGE ON '/dataForPartition $N'
    データベース・パーティション 0 で使用されるストレージ・パスは /dataForPartition0、データベース・パーティション 1 で使用されるストレージ・パスは /dataForPartition1というようになります。
  5. 自動ストレージが有効になっていないデータベースに、データベースで自動ストレージを有効にするためにストレージ・パスを追加します。
       CREATE DATABASE MYDB AUTOMATIC STORAGE NO
       CONNECT TO MYDB
       ALTER DATABASE ADD STORAGE ON '/db/filesystem1', '/db/filesystem2' 
    データベース MYDB が自動ストレージで使用できるようになりました。
  6. 現在接続されているデータベースから、パス /db/filesystem1 および /db/filesystem2 を除去します。
       ALTER DATABASE DROP STORAGE ON '/db/filesystem1', '/db/filesystem2'
    ストレージを正常にドロップした後で、これらのストレージ・パスを使用していた表スペースごとに、REBALANCE 節を指定した ALTER TABLESPACE ステートメントを使用して、表スペースを再平衡化します。
  7. データベース・パーティション式 (/dataForPartition $N) が含まれるストレージ・パスがデータベースに以前追加されていましたが、現在では除去されることになっています。
       ALTER DATABASE DROP STORAGE ON '/dataForPartition $N'
    ストレージを正常にドロップした後で、これらのストレージ・パスを使用していた表スペースごとに、REBALANCE 節を指定した ALTER TABLESPACE ステートメントを使用して、表スペースを再平衡化します。