格納構造定義の変更の指定方法について説明します。
表定義の追加後に、表のDSO定義を追加する場合には、CREATE DSO文を使用します。表のDSO定義の追加例を以下に示します。CREATE DSO文の指定方法の詳細については、“2.7 格納構造の定義”を参照してください。
製品表のDSOとして製品表DSOを追加
CREATE DSO 製品表DSO FROM STOCKS.製品表
↑ ↑ 追加対象のDSO名 表名 TYPE SEQUENTIAL(PAGESIZE(4),ORDER(1))
↑ データ構造
実表から表のDSO定義を削除する場合には、DROP DSO文を使用します。なお、削除対象のDSOに対して、インデックスのDSOが定義されているとき、あるいは表のDSIが定義されている場合には、当該DSO定義を削除することはできません。あらかじめ、関連するインデックスのDSO定義、あるいは表のDSI定義を削除しておく必要があります。
ただし、CASCADEを指定した場合、削除するDSOに関連するDSIはすべて削除されます。
表のDSO定義の削除例を以下に示します。
在庫管理DBに属するすべての表のDSOを削除
DROP DSO 在庫表DSO; ↑ 削除対象のDSO名 DROP DSO 発注表DSO; ↑ 削除対象のDSO名
表のDSO定義が済んでいる実表にインデックスのDSO定義を追加する場合には、CREATE DSO文を使用します。インデックスのDSO定義の追加例を以下に示します。CREATE DSO文の指定方法の詳細については、“2.7 格納構造の定義”を参照してください。
在庫表の倉庫番号の上に、インデックスのDSOとして在庫番号IXDSOを追加
CREATE DSO 在庫番号IXDSO INDEX ON STOCKS.在庫表 (倉庫番号) ↑ ↑ ↑ 追加対象のインデックスのDSO名 スキーマで修飾 列名 された表名 TYPE BTREE (PAGESIZE1(16), PAGESIZE2(1), REALIGNMENT)
実表からインデックスのDSO定義を削除する場合には、DROP DSO文を使用します。
インデックスのDSIが定義されている場合には、当該インデックスのDSO定義を削除することはできません。前もって、関連するインデックスのDSIを削除しておく必要があります。
ただし、CASCADEを指定した場合、削除するDSOが実表の場合に、それに関連するインデックスのDSOおよびそれに関連するDSIはすべて削除されます。
インデックスのDSO定義の削除例を以下に示します。
在庫管理DBに属するすべてのインデックスのDSOを削除
DROP DSO 製品番号IXDSO; ↑ 削除対象のインデックスのDSO名 DROP DSO 在庫番号IXDSO; ↑ 削除対象のインデックスのDSO名
DSO定義済みの実表にDSI定義を追加する場合には、CREATE DSI文を使用します。CREATE DSI文の各項目の指定方法は、格納構造定義時の指定と同じです。
また、運用中のデータベースに対して表のDSI定義の追加が必要な場合は、アプリケーションを停止せずに表のDSI定義を追加することができます。
アプリケーション実行中に表のDSI定義を追加する場合は、rdbddlexコマンドの準備モード(lオプション)で定義します。
参照
rdbddlexコマンドの詳細については、“コマンドリファレンス”を参照してください。
表のDSI定義の追加例を以下に示します。CREATE DSI文の指定方法の詳細については、“2.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が表の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文を使用します。
rdbddlexコマンドの準備モード(lオプション)で追加した表のDSIに関連するインデックスのDSIを定義する場合は、rdbddlexコマンドの準備モード(lオプション)で定義します。
参照
rdbddlexコマンドの詳細については、“コマンドリファレンス”を参照してください。
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コマンドの詳細については、“コマンドリファレンス”を参照してください。
表のDSI定義の分割キー値を変更する場合には、ALTER DSI文を使用します。表の格納構造がSEQUENTIAL構造およびRANDOM構造の場合に分割キー値を変更することができます。以下に分割キー値の変更例を示します。
兵庫データを大阪データに統合したい場合の例を以下に示します。
CREATE DSO DSO01 FROM SCH01.TABLE01 TYPE SEQUENTIAL(PAGESIZE(4),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 … :
DROP DSI 兵庫DSI;
ALTER DSI 大阪DSI ALTER USING(N'大阪'), (N'兵庫');
↑
変更する分割値
(1) 兵庫データをファイルに出力します。------------- rdbunlコマンド (2) 兵庫データのDSIを削除します。----------------- rdbddlexコマンド またはrdbexecsqlコマンド (3) ALTER DSIにより分割値の変更を行います。------ rdbddlexコマンド またはrdbexecsqlコマンド (4) 大阪データのバックアップをファイルに出力します。---- rdbunlコマンド (5) (1)のデータを追加ロードします。--------------- rdbsaloaderコマンド
$ rdbunl -i 在庫管理DB.兵庫DSI /rdb2/backup/HyogoDSI.dat $ rdbddlex -d 在庫管理DB /home3/ddl/drop.ddl $ rdbddlex -d 在庫管理DB /home3/ddl/alter.ddl $ rdbunl -i 在庫管理DB.大阪DSI /rdb2/backup/OsakaDSI.dat $ rdbsaloader -ma -i 在庫管理DB.大阪DSI -E OUTER_SPLIT_VALUE /rdb2/backup/HyogoDSI.dat
ポイント
rdbsaloaderコマンドは、入力ファイル内に分割値範囲外のデータが含まれている場合、該当データを処理対象とせずに処理を続行し、正常終了します。この場合、Eオプションを使用して、分割値の変更ミスや入力ファイルの指定ミスによるデータ抜けをチェックすることができます。
参照
rdbsaloaderコマンドの詳細については、“コマンドリファレンス”を参照してください。
保存期間を3年としている売上データについて、保存対象となる年を変更する例を以下に示します。
CREATE DSO 売上表DSO FROM STOCKS.売上表 TYPE SEQUENTIAL(PAGESIZE(4),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) … :
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文を使用します。DSIの定義を非圧縮から圧縮に変更する例を以下に示します。
(1) 既存データベースにおいて、圧縮指定を変更するDSIの ――― rdbunlコマンド データを抽出します。 (2) (1)でデータを抽出したDSIの定義を削除します。 ――― rdbddlexコマンド (3) (2)で削除したDSIを圧縮指定で再定義します。 ――― rdbddlexコマンド (4) (3)で定義したDSIに対して、(1)で抽出したデータを ――― rdbsloaderコマンド 格納します。
$ rdbunl -i 在庫管理DB.在庫表DSI /home/rdb1/stock3.data $ rdbddlex -d 在庫管理DB /home/rdb1/drop.data $ rdbddlex -d 在庫管理DB /home/rdb1/create.data $ rdbsloader -mi -i 在庫管理DB.在庫表DSI /home/rdb1/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文の指定方法の詳細については、“2.7.6 スコープ定義”を参照してください。
スコープ“大阪スコープ”の追加
CREATE SCOPE 大阪スコープ ↑ スコープ名 DSI (大阪在庫表DSI, 大阪発注表DSI) ↑ DSI名リスト
追加したスコープ定義を適用する場合は、APPLY SCOPE文を使用します。スコープ定義を適用する例を、以下に示します。APPLY SCOPE文の指定方法の詳細については、“2.7.7.1 スコープ定義の適用”を参照してください。
利用者“SUZUKI”にスコープ“大阪スコープ”を適用
APPLY SCOPE 大阪スコープ TO SUZUKI ↑ ↑ スコープ名 認可識別子
スコープ定義の解除は、RELEASE SCOPE文を使用します。APPLY SCOPE文により、利用者に適用されているスコープ定義を解除します。
RELEASE SCOPE文とAPPLY SCOPE文の実行者は、同じでなければなりません。
RELEASE SCOPE文の例を、以下に示します。
利用者“SUZUKI”に適用しているスコープ“大阪スコープ”を解除
RELEASE SCOPE 大阪スコープ FROM SUZUKI ↑ ↑ スコープ名 認可識別子
スコープ定義の削除は、DROP SCOPE文を使用します。APPLY SCOPE文により、利用者に適用されているスコープ定義も削除します。
DROP SCOPE文とCREATE SCOPE文は、同じ実行者でなければなりません。
DROP SCOPE文の例を、以下に示します。
スコープ“東京スコープ”の定義を削除
DROP SCOPE 東京スコープ
↑
スコープ名