ページの先頭行へ戻る
PRIMEFLEX for HA Database 業務開発ガイド(Native SQL編)
FUJITSU Integrated System

3.4.1 データベースの定義変更

データベースの定義変更として、以下の操作をすることができます。

参照

本節で説明しているSQL文の詳細な文法については、“Symfoware Server SQLリファレンス”を参照してください。

論理構造定義変更

格納構造定義変更

追加した定義にする最適化情報の設定

表やインデックスを追加した場合、それらに対する最適化情報の設定を行います。

権限変更

データベースの定義変更で、データベース定義を削除または変更すると、単に定義情報が削除または変更されるだけでなく、データ本体 (表、インデックス) も同時に削除または変更されることに注意する必要があります。データベース定義の削除および変更の指定を誤ると、大切なデータを消してしまうことにもなりかねません。データベース定義の削除および変更は、十分に注意して行うことが必要です。

この節で使用する例として、以下のデータベースを想定します。

データベース:

在庫管理DB

スキーマ:

STOCKS

順序:

順序1

表:

在庫表、発注表

ビュー表:

大量在庫表

表のDSO:

在庫表DSO、発注表DSO

表のDSI:

在庫表DSI、関西発注表DSI

インデックスのDSO:

製品番号IXDSO

インデックスのDSI:

製品番号IXDSI

定義の間に依存関係があるため、データベースの定義変更の際には、それらの依存関係に従って変更順序を守る必要があります。基本的な変更順序については、“定義変更の順序関係”を参照してください。

定義変更の順序関係

定義変更には、定義体の依存関係にそった順序があります。“表3.10 定義変更の基本順序(追加系) ”に追加系の変更の基本的な順序関係を、“表3.11 定義変更の基本順序(削除系) ”に削除系の変更の基本的な順序関係を示します。

表3.10 定義変更の基本順序(追加系)

  

定義変更操作

データベーススペース追加

スキーマ定義追加

順序定義追加

表定義追加

表定義変更(列定義追加)

ビュー定義追加

トリガ定義追加

プロシジャルーチン定義追加

権限情報定義追加

表のDSO定義追加

表のDSI定義追加

インデックスのDSO定義追加

インデックスのDSI定義追加

スコープの定義追加

スコープの適用

前提となる操作

データベース定義

データベーススペース定義

  

  

  

  

  

  

  

  

  

  

  

  

  

スキーマ定義

  

  

  

  

順序定義

  

  

  

  

  

  

  

  

  

  

表定義

  

  

  

  

4(注)

4(注)

4(注)

4(注)

  

  

ビュー定義

  

  

  

  

  

5(注)

5(注)

5(注)

5(注)

  

  

  

  

  

  

トリガ定義

  

  

  

  

  

  

  

  

7 (注)

  

  

  

  

  

  

プロシジャルーチン定義

  

  

  

  

  

  

6 (注)

6 (注)

6 (注)

  

  

  

  

  

  

権限情報定義

  

  

  

  

  

  

  

  

  

  

  

  

  

  

  

表のDSO定義

  

  

  

  

  

  

  

  

  

  

  

  

表のDSI定義

  

  

  

  

  

  

  

  

  

  

  

  

  

  

インデックスのDSO定義

  

  

  

  

  

  

  

  

  

  

  

  

  

  

インデックスのDSI定義

  

  

  

  

  

  

  

  

  

  

  

  

  

  

  

スコープ定義

  

  

  

  

  

  

  

  

  

  

  

  

  

  

注) 定義文に前提となる資源が指定されている場合

備考.数字は操作の順番を示します。同じ値をもつ操作は、どちらが先でもかまいません。

表3.11 定義変更の基本順序(削除系)

  

  

定義変更操作

データベース名の登録削除

データベーススペース削除

スキーマ定義削除

順序定義削除

表定義削除

表定義変更(列定義削除)(注1)

ビュー定義削除

トリガ定義削除

プロシジャルーチン定義削除

権限情報定義削除(注3)

表のDSO定義削除

表のDSI定義削除

インデックスのDSO定義削除

インデックスのDSI定義削除

スコープ定義削除

スコープ解除

前提となる操作

データベーススペース削除

  

  

  

  

  

  

  

  

  

  

  

  

  

  

  

スキーマ定義削除

  

  

  

  

  

  

  

  

  

  

  

  

  

  

  

順序定義削除


(注2)

  


(注2)

  

  

  

  

  

  

  

  

  

  

  

  

  

表定義削除

  

  

  

  

  

  

  

  

  

  

  

  

  

ビュー定義削除


(注2)

  


(注2)


(注2)


(注2)


(注2)


(注2)

  

  


(注2)

  

  

  

  

  

  

トリガ定義削除

  

  

  

  

  

  

  

  

プロシジャルーチン定義削除


(注2)

  


(注2)


(注2)


(注2)


(注2)


(注2)

  


(注2)


(注2)

  

  

  

  

  

  

権限情報定義削除

  

  

  

  

  

  

  

  

  

  

  

  

  

  

  

  

表のDSO定義削除

  

  

  

  

  

  

  

  

  

  

  

  

表のDSI定義削除

  

  

  

  

  

  

  

  

  

  

インデックスのDSO定義削除

  

  

  

  

  

  

  

  

  

  

  

インデックスのDSI定義削除

  

  

  

  

  

  

  

  

スコープ定義削除

  

  

  

  

  

  

  

  

  

  

  

  

  

  

  

注1) 定義文で列を参照している場合

注2) 定義文で前提となる資源を指定している場合

注3) 前提の権限を削除する場合

備考.数字は操作の順番を示します。同じ値をもつ操作はどちらが先でもかまいません。

3.4.1.1 論理構造定義の変更

論理構造定義の変更の指定方法について説明します。

スキーマ定義の追加CREATE SCHEMA

既存のデータベースの定義に新たにスキーマ定義を追加することができます。スキーマ定義を追加する場合は、スキーマ定義時と同様に、CREATE SCHEMA文で指定します。CREATE SCHEMA文の指定方法の詳細については、“3.3.6 論理構造の定義”を参照してください。

在庫管理DBに属するスキーマを追加

CREATE SCHEMA  STOCKS
                 ↑
             スキーマ名

スキーマ定義の削除DROP SCHEMA

スキーマ定義の削除をする場合は、DROP SCHEMA文を使用します。以下に指定例を示します。

在庫管理DBに属するスキーマを削除

DROP SCHEMA  STOCKS    RESTRICT
               ↑
      削除対象のスキーマ名

スキーマ定義を削除するときに、そのスキーマの配下に下記の定義がされている場合は、削除できません。スキーマ定義を削除する前に、これらの定義を削除しておくことが必要です。

  • 順序定義

  • 表定義

  • ビュー定義

  • 一時表定義

  • トリガ定義

  • インデックス定義

  • 格納構造定義

    • 表のDSO定義

    • インデックスのDSO定義

    • 表のDSI定義

    • インデックスのDSI定義

  • プロシジャルーチン定義

ただし、CASCADE指定をした場合は、上記の定義がなされていても無条件に関連する定義すべてを削除します。

順序定義の追加CREATE SEQUENCE文

スキーマに順序定義を追加する場合は、CREATE SEQUENCE文を使用します。以下に指定例を示します。CREATE SEQUENCE文の指定方法の詳細については、“3.3.6 論理構造の定義”を参照してください。

スキーマSTOCKSに順序2の定義を追加

CREATE SEQUENCE  STOCKS.順序2
                   ↑     ↑
               スキーマ名 |
                        順序名

        INCREMENT  BY  1  START  WITH  1
                       ↑              ↑
                     増分値          初期値

順序定義の削除DROP SEQUENCE文

順序定義の削除は、DROP SEQUENCE文を使用します。当該順序を参照している実表、ビュー表、プロシジャルーチンまたはトリガがある場合は、順序定義を削除することはできません。あらかじめ、当該順序を参照している実表、ビュー表、プロシジャルーチンまたはトリガの定義を削除しておく必要があります。以下に削除例を示します。

順序1を削除

DROP SEQUENCE  STOCKS.順序1
                ↑       ↑
           スキーマ名   順序名

表定義の追加CREATE TABLE

スキーマに表定義を追加する場合は、CREATE TABLE文を使用します。以下に指定例を示します。CREATE TABLE文の指定方法の詳細については、“3.3.6 論理構造の定義”を参照してください。

スキーマSTOCKSに製品表の定義を追加

CREATE TABLE
      STOCKS.製品表 (品番 SMALLINT NOT NULL, 品名 NATIONAL CHAR(10),…)
        ↑      ↑
   スキーマ名  表名
          ↑
  追加の対象とする実表の表名指定 

表定義の削除DROP TABLE

表の定義の削除は、DROP TABLE文を使用します。当該実表を参照しているビュー表、プロシジャルーチンまたはトリガがある場合は、表定義を削除することはできません。あらかじめ当該実表を参照しているビュー表、プロシジャルーチンまたはトリガの定義を削除しておく必要があります。当該実表を参照するビュー定義、プロシジャルーチン定義またはトリガ定義も一緒に削除する場合は、CASCADEを指定します。同様に、実表に対して格納構造定義がある場合も、実表と一緒に格納構造定義を削除する場合は、CASCADEを指定することが必要です。

DROP TABLE文によって表定義を削除すると、同時にデータベースのデータの実体も削除されます。したがって、表定義で誤ってほかの表名を指定すると、定義情報だけでなく大切なデータの本体を失うことになります。DROP TABLE文の使用にあたっては十分な注意が必要です。

表定義の削除例を以下に示します。

在庫表の定義情報および在庫表を削除

DROP TABLE     STOCKS.在庫表      CASCADE
↑ ↑ ↑ スキーマ名 表名 CASCADE指定 ↑ 削除の対象とする実表の表名指定

表定義の変更ALTER TABLE

表の定義の変更は、ALTER TABLE文を使用します。ALTER TABLE文で以下の変更を行うことができます。

列定義の追加

実表に列を新たに追加する場合は、ALTER TABLE文に列定義の追加を指定します。1つの表定義変更文で追加できるのは、1列です。追加する列の定義順は、既存の列の後になります。SEQUENTIAL構造の場合は、BLOB型の列の追加により、表の1行に対応するデータが1ページを超えても問題ありません。

追加する列に対する制約は、“NOT NULL”だけ指定可能です。NOT NULLを指定した場合、列定義にはDEFAULT句を指定する必要があります。

既存のデータには、DEFAULT値が設定されます。

列定義の追加の指定例を以下に示します。

発注表に“販売価格”列を追加

ALTER TABLE    STOCKS.発注表    ADD  販売価格 INTEGER
↑ ↑ ↑ スキーマ名 表名 列定義 ↑ 変更対象表の指定

この結果を以下に示します。

図3.18 [表への列の追加]

列定義の削除

実表から列を削除する場合は、ALTER TABLE文で列定義削除を指定します。1つの表変更文で1列しか削除できません。削除する列を参照しているビュー定義がある場合は、列削除はできません。また、列に対してインデックスのDSO定義がある場合は、列削除はできません。あらかじめインデックスのDSO定義を削除しておく必要があります。ただし、列に対して一意性制約がある場合は、インデックスのDSO定義を削除していても、削除することはできません。また、列定義の削除で表の列数をゼロにすることはできません。全列を削除する場合は、DROP TABLE文を使用します。列定義の削除の指定例を以下に示します。

発注表から仕入価格を削除

ALTER TABLE    STOCKS.発注表    DROP  仕入価格
                 ↑     ↑               ↑
          スキーマ名   表名           削除列名
                    ↑
              変更対象表の指定

この結果を以下に示します。

図3.19 [表からの列削除]

ビュー定義の追加CREATE VIEW

定義済みのスキーマにビュー定義を追加する場合は、CREATE VIEW文を使用します。ビュー表の定義の変更はできません。ビュー表の定義の変更は、一度ビュー定義を削除しておいて、あらためてビュー定義を追加する方法で行います。

ビュー定義の追加例を以下に示します。CREATE VIEW文の指定方法の詳細については、“3.3.6 論理構造の定義”を参照してください。

スキーマSTOCKSに“電話”ビュー表を追加

CREATE VIEW    STOCKS.電話 (社名, 電話番号)
                 ↑    ↑           ↑
         スキーマ名  ビュー表名   ビュー表の列名
                      ↑
              追加対象のビュー表名

               AS SELECT  会社名, 電話番号 FROM  STOCKS.会社表

ビュー定義の削除DROP VIEW

定義済みのスキーマからビュー定義を削除する場合は、DROP VIEW文を使用します。削除対象のビュー表を参照する別のビュー表、プロシジャルーチンまたはトリガの定義がある場合は、当該ビュー定義を削除することはできません。あらかじめ、削除対象のビュー表を参照するビュー表、プロシジャルーチンまたはトリガの定義を削除しておく必要があります。削除対象のビュー表の定義と、それを参照するビュー表、プロシジャルーチンまたはトリガの定義も一緒に削除する場合は、CASCADEを指定します。

ビュー定義の削除例を以下に示します。

ビュー表“在庫ビュー”の定義を削除

DROP VIEW  STOCKS.在庫ビュー   CASCADE
             ↑       ↑          ↑
       スキーマ名  ビュー表名  CASCADE指定
                  ↑
         削除対象のビュー表名

トリガ定義の追加CREATE TRIGGER

トリガ定義を追加する場合には、トリガ定義文を使用します。トリガ定義文の指定方法の詳細については、“3.3.6 論理構造の定義”を参照してください。

トリガ“発注トリガ”を定義

CREATE TRIGGER  STOCKS.発注トリガ …
                       ↑
                    トリガ名

トリガ定義の削除DROP TRIGGER

トリガ定義を削除する場合には、DROP TRIGGER文を使用します。

トリガ“発注トリガ”の定義を削除

DROP TRIGGER  STOCKS.発注トリガ
↑ トリガ名

プロシジャルーチン定義の追加CREATE PROCEDURE文)

プロシジャルーチンを追加する場合には、プロシジャルーチン定義文を使用します。プロシジャルーチン定義文の指定方法の詳細については、“3.3.6 論理構造の定義”を参照してください。

スキーマSTOCKSにプロシジャルーチンPROC002を追加

CREATE PROCEDURE  STOCKS.PROC002 ( IN PARAM1 INT )
                        ↑              ↑
                    ルーチン名      パラメタ宣言
  BEGIN                                                      -+
    DECLARE 発注数量変数 INTEGER;                             |
    SELECT  発注数量  INTO  発注数量変数  FROM  STOCKS.発注表;|→複合文
          :                                                  |
  END                                                        -+

プロシジャルーチン定義の削除DROP PROCEDURE

プロシジャルーチンを削除する場合には、プロシジャルーチン削除文を使用します。削除対象のプロシジャルーチンを呼び出す別のプロシジャルーチンがある場合は、当該プロシジャルーチンを削除することはできません。ただし、CASCADEを指定すると、関連するプロシジャルーチンはすべて削除されます。

スキーマSTOCKSからプロシジャルーチンPROC002を削除

DROP PROCEDURE  STOCKS. PROC002
                       ↑
                   ルーチン名

注釈定義の変更

注釈定義のうち、表および列の注釈定義は、ALTER TABLE文で変更することができます。以下に例を示します。

例1

表の注釈定義の変更例

ALTER TABLE   STOCKS.在庫表
              COMMENT '製品名, 在庫数量, 格納倉庫, 販売価格の表'
↑ 変更する注釈定義
例2

列の注釈定義の変更例

ALTER TABLE   STOCKS.在庫表
              MODIFY   製品番号  COMMENT '製品のコード番号'
↑ 変更する注釈定義

表の交換SWAP TABLE

表の交換は、表名を交換することにより、DSOとの関係も交換します。表の交換を行う場合には、SWAP TABLE文を使用します。これにより、以下の効果を得ることができます。

表の交換の例を、以下に示します。

毎日のデータを本日、1日前、2日前・・・という形態で管理する場合、日が変わる契機で、本日のデータを1日前に、1日前のデータを2日前にと順番にデータを移動する運用に表の交換を使用する例を示します。新しい日のデータは初期化して使います。

SWAP TABLE  STOCKS.表00  STOCKS.表01;                 (1)
SWAP TABLE  STOCKS.表00  STOCKS.表02;                 (2)
              :
              :
              :
SWAP TABLE  STOCKS.表00  STOCKS.表29;                (29)
SWAP TABLE  STOCKS.表00  STOCKS.表30;                (30)

3.4.1.2 格納構造定義の変更

格納構造定義の変更の指定方法について説明します。

表のDSO定義の追加CREATE DSO

表定義の追加後に、表のDSO定義を追加する場合には、CREATE DSO文を使用します。表のDSO定義の追加例を以下に示します。CREATE DSO文の指定方法の詳細については、“3.3.7 格納構造の定義”を参照してください。

製品表のDSOとして製品表DSOを追加

CREATE DSO    製品表DSO    FROM  STOCKS.製品表
↑ ↑ 追加対象のDSO名 表名 TYPE SEQUENTIAL(PAGESIZE(32),ORDER(1))
↑ データ構造

表のDSO定義の削除DROP DSO

実表から表のDSO定義を削除する場合には、DROP DSO文を使用します。なお、削除対象のDSOに対して、インデックスのDSOが定義されているとき、あるいは表のDSIが定義されている場合には、当該DSO定義を削除することはできません。あらかじめ、関連するインデックスのDSO定義、あるいは表のDSI定義を削除しておく必要があります。

ただし、CASCADEを指定した場合、削除するDSOに関連するDSIはすべて削除されます。

表のDSO定義の削除例を以下に示します。

在庫管理DBに属するすべての表のDSOを削除

DROP DSO    在庫表DSO;
                 ↑
          削除対象のDSO名

DROP DSO    発注表DSO;
                 ↑
           削除対象のDSO名

インデックスのDSO定義の追加CREATE DSO

表のDSO定義が済んでいる実表にインデックスのDSO定義を追加する場合には、CREATE DSO文を使用します。インデックスのDSO定義の追加例を以下に示します。CREATE DSO文の指定方法の詳細については、“3.3.7 格納構造の定義”を参照してください。

在庫表の倉庫番号の上に、インデックスのDSOとして在庫番号IXDSOを追加

CREATE DSO    在庫番号IXDSO  INDEX ON   STOCKS.在庫表 (倉庫番号)
                      ↑                           ↑           ↑
         追加対象のインデックスのDSO名       スキーマで修飾    列名
                                             された表名

            TYPE BTREE (PAGESIZE1(8), PAGESIZE2(8), REALIGNMENT)

インデックスのDSO定義の削除DROP DSO

実表からインデックスのDSO定義を削除する場合には、DROP DSO文を使用します。

インデックスのDSIが定義されている場合には、当該インデックスのDSO定義を削除することはできません。前もって、関連するインデックスのDSIを削除しておく必要があります。

ただし、CASCADEを指定した場合、削除するDSOが実表の場合に、それに関連するインデックスのDSOおよびそれに関連するDSIはすべて削除されます。

インデックスのDSO定義の削除例を以下に示します。

在庫管理DBに属するすべてのインデックスのDSOを削除

DROP DSO    製品番号IXDSO;
                   ↑
       削除対象のインデックスのDSO名

DROP DSO    在庫番号IXDSO;
                    ↑
       削除対象のインデックスのDSO名

表のDSI定義の追加CREATE DSI

DSO定義済みの実表にDSI定義を追加する場合には、CREATE DSI文を使用します。CREATE DSI文の各項目の指定方法は、格納構造定義時の指定と同じです。

表のDSI定義の追加例を以下に示します。CREATE DSI文の指定方法の詳細については、“3.3.7 格納構造の定義”を参照してください。

在庫管理DBに東海発注表DSIを追加

CREATE DSI  東海発注表DSI  DSO  発注表DSO   USING  (80, 89)
                   ↑                   ↑                  ↑
            追加対象のDSI名            DSO名            分割キー値

            ALLOCATE  DATA  ON   DBSP_3  SIZE  2000M ← スペース割付け
↑ ↑ データベース 割付け量 スペース名

この東海発注表DSIは、発注表DSOの配下に属し、かつデータベーススペースDBSP_3上に定義されるものとします。

表のDSI定義の削除DROP DSI

実表からDSI定義を削除する場合には、DROP DSI文を使用します。対象のDSIが表のDSIであり、それに関係するインデックスのDSIが存在する場合、当該DSI定義を削除することはできません。あらかじめ、関連するインデックスのDSIのDSI定義を削除しておく必要があります。

ただし、CASCADEを指定した場合、削除するDSIによる格納対象が表の場合に、それに関連するインデックスのDSIはすべて削除されます。

DSI定義の削除例を以下に示します。

在庫管理DBに属するすべてのDSIを削除

DROP DSI    製品番号IXDSI;
                  ↑
           削除対象のDSI名

DROP DSI    在庫表DSI;
                  ↑
           削除対象のDSI名

DROP DSI    関西発注表DSI;
                  ↑
           削除対象のDSI名

DROP DSI    関東発注表DSI;
                  ↑
           削除対象のDSI名

インデックスのDSI定義の追加CREATE DSI

インデックスのDSIを追加する場合には、CREATE DSI文を使用します。

CREATE  DSI  在庫番号IXDSI INDEX  DSO 在庫番号IXDSO
                     ↑                            ↑
            インデックスのDSI名           インデックスのDSO名

      BASE  在庫表DSI
↑ 表のDSI名 ALLOCATE INDEX ON DBSP_4 SIZE 1M, ← スペース割付け BASE ON DBSP_4 SIZE 100M ← スペース割付け

インデックスのDSI定義を追加した場合は、rdbsloaderコマンドのxオプションを使用して、インデックスのDSIの創成を実施してください。

参照

rdbsloaderコマンドの詳細については、“Symfoware Server コマンドリファレンス”を参照してください。

DSI定義の分割キー値の変更ALTER DSI

表のDSI定義の分割キー値を変更する場合には、ALTER DSI文を使用します。以下に分割キー値の変更例を示します。

DSIを統合する

兵庫データを大阪データに統合したい場合の例を以下に示します。

[変更前]
CREATE DSO  DSO01  FROM SCH01.TABLE01
            TYPE SEQUENTIAL(PAGESIZE(32),ORDER(1))
            WHERE(所在) = (?);

CREATE DSI  東京DSI DSO  DSO01
                       USING(N'東京')  ALLOCATE DATA  ON …
CREATE DSI  大阪DSI DSO  DSO01
                       USING(N'大阪')  ALLOCATE DATA  ON …
CREATE DSI  兵庫DSI DSO  DSO01
                       USING(N'兵庫')  ALLOCATE DATA  ON …
          :
[DSI変更の例]
DROP DSI  兵庫DSI;

ALTER DSI  大阪DSI  ALTER      USING(N'大阪'), (N'兵庫');
                                                ↑
                                          変更する分割値

操作の手順
(1) 兵庫データをファイルに出力します。------------- rdbunlコマンド
(2) 兵庫データのDSIを削除します。----------------- rdbddlexコマンド
(3) ALTER DSIにより分割値の変更を行います。------ rdbddlexコマンド
(4) 大阪データのバックアップをファイルに出力します。---- rdbunlコマンド
(5) (1)のデータを追加ロードします。--------------- rdbsaloaderコマンド
操作例
$ rdbunl -i 在庫管理DB.兵庫DSI /disk3/rdb/data/HyogoDSI.dat
$ rdbddlex -d 在庫管理DB /disk3/rdb/data/drop.ddl
$ rdbddlex -d 在庫管理DB /disk3/rdb/data/alter.ddl
$ rdbunl -i 在庫管理DB.大阪DSI /disk3/rdb/data/OsakaDSI.dat
$ rdbsaloader -ma -i 在庫管理DB.大阪DSI -E OUTER_SPLIT_VALUE /disk3/rdb/data/HyogoDSI.dat

ポイント

rdbsaloaderコマンドは、入力ファイル内に分割値範囲外のデータが含まれている場合、該当データを処理対象とせずに処理を続行し、正常終了します。この場合、Eオプションを使用して、分割値の変更ミスや入力ファイルの指定ミスによるデータ抜けをチェックすることができます。

参照

rdbsaloaderコマンドの詳細については、“Symfoware Server コマンドリファレンス”を参照してください。

DSIの格納範囲を変更する

保存期間を3年としている売上データについて、保存対象となる年を変更する例を以下に示します。

[変更前]
CREATE DSO 売上表DSO  FROM   STOCKS.売上表
           TYPE SEQUENTIAL(PAGESIZE(32),ORDER(1))
           WHERE(年度, 月) = (?, ?);

CREATE DSI 1月DSI DSO 売上表DSO
                      USING (2004, 1),(2005, 1),(2006, 1) …
CREATE DSI 2月DSI DSO 売上表DSO
                      USING (2004, 2),(2005, 2),(2006, 2) …
CREATE DSI 3月DSI DSO 売上表DSO
                      USING (2004, 3),(2005, 3),(2006, 3) …
        :
[DSI変更の指定例]
ALTER DSI  1月DSI  ALTER  USING(2005, 1),(2006, 1),(2007, 1);
ALTER DSI  2月DSI  ALTER  USING(2005, 2),(2006, 2),(2007, 2);
ALTER DSI  3月DSI  ALTER  USING(2005, 3),(2006, 3),(2007, 3);
                                                ↑
                :                        変更する分割値

表のデータ圧縮の定義変更(CREATE DSI文

表のデータ圧縮の定義を変更する場合は、CREATE DSI文を使用します。DSIの定義を非圧縮から圧縮に変更する例を以下に示します。

圧縮指定への変更手順
(1) 既存データベースにおいて、圧縮指定を変更するDSIの     ――― rdbunlコマンド
    データを抽出します。
(2) (1)でデータを抽出したDSIの定義を削除します。          ――― rdbddlexコマンド
(3) (2)で削除したDSIを圧縮指定で再定義します。            ――― rdbddlexコマンド
(4) (3)で定義したDSIに対して、(1)で抽出したデータを       ――― rdbsloaderコマンド
    格納します。
操作例
$ rdbunl -i 在庫管理DB.在庫表DSI /disk3/rdb/data/stock3.data 

$ rdbddlex -d 在庫管理DB  /disk3/rdb/data/drop.data 

$ rdbddlex -d 在庫管理DB  /disk3/rdb/data/create.data 

$ rdbsloader -mi -i 在庫管理DB.在庫表DSI /disk3/rdb/data/stock3.data

drop.dataの内容を以下に示します。

DROP DSI 在庫表DSI
                       削除対象のDSI

create.dataの内容を以下に示します。

CREATE DSI 在庫表DSI DSO 在庫表DSO COMPRESS ALLOCATE DATA ON DBSPACE001 SIZE 500M
                  ↑                         ↑
          再定義するDSI名                 圧縮指定

DSIの圧縮指定を圧縮から非圧縮に変更する場合は、圧縮を行わないDSI定義を行ってください。

スコープ定義の追加CREATE SCOPE

スコープ定義を追加する場合は、CREATE SCOPE文を使用します。スコープ定義を追加する例を、以下に示します。CREATE SCOPE文の指定方法の詳細については、“3.3.7.6 スコープ定義”を参照してください。

スコープ“大阪スコープ”の追加

CREATE SCOPE    大阪スコープ
                     ↑
                  スコープ名

        DSI (大阪在庫表DSI, 大阪発注表DSI)
                            ↑
                        DSI名リスト

スコープ定義の適用APPLY SCOPE

追加したスコープ定義を適用する場合は、APPLY SCOPE文を使用します。スコープ定義を適用する例を、以下に示します。APPLY SCOPE文の指定方法の詳細については、“3.3.7.7.1 スコープ定義の適用”を参照してください。

利用者“SUZUKI”にスコープ“大阪スコープ”を適用

APPLY SCOPE    大阪スコープ      TO      SUZUKI
                    ↑                     ↑
                スコープ名             認可識別子

スコープ定義の解除(RELEASE SCOPE)

スコープ定義の解除は、RELEASE SCOPE文を使用します。APPLY SCOPE文により、利用者に適用されているスコープ定義を解除します。

RELEASE SCOPE文とAPPLY SCOPE文の実行者は、同じでなければなりません。

RELEASE SCOPE文の例を、以下に示します。

利用者“SUZUKI”に適用しているスコープ“大阪スコープ”を解除

RELEASE SCOPE    大阪スコープ      FROM      SUZUKI
                      ↑                       ↑
                  スコープ名               認可識別子

スコープ定義の削除DROP SCOPE

スコープ定義の削除は、DROP SCOPE文を使用します。APPLY SCOPE文により、利用者に適用されているスコープ定義も削除します。

DROP SCOPE文とCREATE SCOPE文は、同じ実行者でなければなりません。

DROP SCOPE文の例を、以下に示します。

スコープ“東京スコープ”の定義を削除

DROP SCOPE  東京スコープ
                 ↑
             スコープ名

3.4.1.3 追加した定義に対する最適化情報の設定(SET STATISTICS文

表やインデックスを追加した場合、それらに対する最適化情報の設定は、SET STATISTICS文を使用します。SET STATISTICS文の例を以下に示します。

東海発注表DSIを追加した場合、このDSIに対する最適化情報を設定

SET STATISTICS FOR DSI  東海発注表DSI  RECORD(200)
                               ↑                 ↑
                      最適化情報を設定する    レコード件数
                      DSI名

3.4.1.4 権限の変更

権限情報の追加GRANT

権限情報を追加する場合には、GRANT文を使用します。

削除権を追加

GRANT DELETE  ON    STOCKS.在庫表    TO  SATO, SUZUKI, TANAKA
↑ ↑ ↑ 権限 対象名 権限受領者

権限情報の削除REVOKE

権限情報を削除する場合には、REVOKE文を使用します。

削除権を削除

REVOKE DELETE  ON  STOCKS.在庫表  FROM  SATO, SUZUKI, TANAKA
↑ ↑ ↑ 権限 対象名 権限受領者

CASCADEを指定して権限を削除した場合、権限受領者がその権限を使って定義した実表、ビュー表、一時表、プロシジャルーチンおよびトリガは、削除されます。たとえば、“SUZUKI”が会社表からビュー表“電話”を作っていたとします。

CREATE VIEW  STOCKS.電話 (社名, 電話番号)
             AS SELECT  会社名, 電話番号 FROM  STOCKS.会社表

“SUZUKI”の会社表に対するSELECT権を削除した場合、“SUZUKI”が作成したビュー表“電話”も削除されます。

REVOKE SELECT  ON  STOCKS.会社表  FROM  SUZUKI  CASCADE

ロール定義の追加CREATE ROLE

ロール定義を追加する場合には、CREATE ROLE文を使用します。ロールに表の権限を付与する、およびロールを利用者に付与する場合はGRANT文で行います。

新たにロールを追加する場合は、以下の手順で行います。

  1. CREATE ROLE文でロールを定義

  2. GRANT文でロールに権限を付与

  3. GRANT文でロールの権限を利用者に付与

ロール“STOCKS_A2”を追加

CREATE ROLE STOCKS_A2 ;

ロール“STOCKS_A2”に権限を付与

GRANT SELECT ON STOCKS.在庫表 TO ROLE STOCKS_A2 ;
GRANT SELECT,INSERT,UPDATE ON STOCKS.発注表
        TO ROLE STOCKS_A2 ;
GRANT SELECT,UPDATE,INSERT,DELETE ON STOCKS.会社表
        TO ROLE STOCKS_A2 ;

ロール“STOCKS_A2”の権限を利用者に付与

GRANT STOCKS_A2 TO SUZUKI,TANAKA,SATO ;

ロールの権限情報の変更GRANT

ロールの表に対する権限を変更する場合は、GRANT文で行います。

ロール“STOCKS_A2”に在庫表の権限を追加

GRANT INSERT,UPDATE ON STOCKS.在庫表 TO ROLE STOCKS_A2 ;

ロール定義の削除DROP ROLE

ロール定義を削除する場合には、DROP ROLE文を使用します。ロールを削除すると、GRANT文でロールに付与した権限や、利用者に付与したロールの権限も削除されます。

ロール“STOCKS_A2”を削除

DROP ROLE STOCKS_A2 ;

ロールの権限の削除REVOKE

ロールから権限を削除する場合、および利用者からロールの権限を削除する場合は、REVOKE文で行います。

例1

ロール“STOCKS_A2”から在庫表のSELECT権を削除

REVOKE SELECT ON STOCKS.在庫表 FROM ROLE STOCKS_A2 ;
例2

利用者“TANAKA”からロールの権限を削除

REVOKE STOCKS_A2 FROM TANAKA ;