5.6.5 SDBデータベースの定義変更
SDBデータベースの定義変更をするには,次の2つの方法があります。
-
SDBデータベースの定義変更をする方法
-
SDBデータベースを再定義する方法
1.の方法では次の操作ができます。
-
最下位のレコード型とその親子集合の定義追加
-
格納するRDエリアの変更
そのほかの定義変更をする場合は,2.の方法で実施してください。
最下位のレコード型とその親子集合の定義追加の例については,4V FMBのSDBデータベースの場合は「11.5.1(4) *ALTER DICTIONARY文によるSDBデータベースの定義変更」を参照してください。4V AFMのSDBデータベースの場合は「11.6.1(4) *ALTER DICTIONARY文によるSDBデータベースの定義変更」を参照してください。
- 注意事項
-
SD FMBのSDBデータベースの定義変更は,「2.SDBデータベースを再定義する方法」で実施してください。「1.SDBデータベースの定義変更をする方法」は実施できません。
(1) SDBデータベースの定義変更をする方法
*ALTER DICTIONARY文および*ALTER DIRECTORY文で,SDBデータベースの定義変更ができます。手順を次に示します。
手順
-
データベース定義を作成する
定義変更するSDBデータベースのSDBデータベース定義およびSDBデータベース格納定義を作成します。
なお,SDBデータベース定義およびSDBデータベース格納定義を作成する際は,変更個所だけを指定するのではなく,変更後のSDBデータベース定義およびSDBデータベース格納定義をすべて指定する必要があります。
SDBデータベース定義およびSDBデータベース格納定義については,次の個所を参照してください。
-
4V FMBのSDBデータベースの定義を変更する場合
-
4V AFMのSDBデータベースの定義を変更する場合
-
-
レコードをアンロードする
格納RDエリアの変更をする場合は,pdsdbrogコマンドで,変更対象のRDエリアに格納されたレコードをアンロードします。
-
SDBディクショナリ情報およびSDBディレクトリ情報を変更する
pdsdbdefコマンドで*ALTER DICTIONARY文および*ALTER DIRECTORY文を実行し,ディクショナリ表に登録されているSDBディクショナリ情報およびSDBディレクトリ情報を変更します。1.で作成したSDBデータベース定義およびSDBデータベース格納定義を*ALTER DICTIONARY文に指定します。
SDB定義文の参照先を次に示します。
-
*ALTER DICTIONARY文:「11.4.3 *ALTER DICTIONARY文(SDBディクショナリ情報の変更)【4V FMB,4V AFM】」
-
*ALTER DIRECTORY文:「11.4.7 *ALTER DIRECTORY文(SDBディレクトリ情報の変更)【4V FMB,4V AFM】」
- 注意事項
-
*ALTER DICTIONARY文および*ALTER DIRECTORY文は,1回のpdsdbdefコマンドで実行してください。
- 理由:
-
*ALTER DIRECTORY文の実行時にはデータベース定義のチェックが実行されます。
*ALTER DICTIONARY文および*ALTER DIRECTORY文を1回のpdsdbdefコマンドで実行した場合,データベース定義の不整合が検知されると,SDBディクショナリ情報およびSDBディレクトリ情報はディクショナリ表に追加されません。この場合,データベース定義を修正して,pdsdbdefコマンドを再実行することで対処できます。
*ALTER DICTIONARY文と*ALTER DIRECTORY文を別々に実行した場合,*ALTER DIRECTORY文の実行時には,すでにSDBディクショナリ情報はディクショナリ表に追加されています。そのため,データベース定義の不整合が検知された場合に,データベース定義を修正するには,*DELETE DICTIONARY文を実行してSDBディクショナリ情報を削除してから,pdsdbdefコマンドを再実行することになります。
1回のpdsdbdefコマンドで,*ALTER DICTIONARY文で追加または削除できるRDエリア数は15個までとなります。
-
-
レコードをデータロードする
格納RDエリアを変更した場合は,変更したRDエリアに対してpdsdblodコマンドを実行して,2.でアンロードしたレコードをデータロードします。
- ■SDBデータベースの定義変更を誤った場合の対処
-
名称の誤りなど,SDBデータベースの定義変更を誤った場合,次に示す手順で対処してください。
-
pdsdbrogコマンドで,レコードをアンロードします。
-
pdsdbdefコマンドで,定義変更を誤ったSDBデータベースの定義削除を行います。
-
pdsdbdefコマンドで,SDBデータベースの定義追加を行います。
-
pdsdbdefコマンドで,SDBディレクトリ情報ファイルを作成して,全ユニットに配布します。
-
HiRDBを再起動します。
-
pdsdblodコマンドを使用して,1.でアンロードしたレコードをデータロードします。分割したRDエリアを元に戻した場合は,追加データロードを実行してください。
詳細な手順については,「5.6.3 SDBデータベースの定義追加,定義変更,または定義削除の手順(各手順の詳細)」を参照してください。
- 参考
-
上記手順の2.〜4.は,1回のpdsdbdefコマンドで実行できます。
-
(2) SDBデータベースを再定義する方法
*DELETE DICTIONARY文および*DELETE DIRECTORY文でSDBデータベースの定義をいったん削除し,*ENTRY DICTIONARY文と*ENTRY DIRECTORY文でSDBデータベースを再定義することで,SDBデータベースの定義変更を行います。手順を次に示します。
手順
-
データベース定義を作成する
定義変更するSDBデータベースのSDBデータベース定義およびSDBデータベース格納定義を作成します。
-
SDBディクショナリ情報およびSDBディレクトリ情報をいったん削除し,追加し直す
SDBディクショナリ情報およびSDBディレクトリ情報を,*DELETE DICTIONARY文と*DELETE DIRECTORY文でいったん削除し,*ENTRY DICTIONARY文と*ENTRY DIRECTORY文で再度追加します。1.で作成したSDBデータベース定義およびSDBデータベース格納定義を*ENTRY DICTIONARY文に指定します。
なお,*DELETE DICTIONARY文および*DELETE DIRECTORY文を実行するためにpdsdbdefコマンドを実行する際,-iオプションを指定する必要があります。-iオプションを指定しないと,pdsdbdefコマンドの実行がエラーになります。
- 注意事項
-
SDBディレクトリ情報およびSDBディクショナリ情報を削除する際は,必ず*DELETE DIRECTORY文,*DELETE DICTIONARY文の順にSDB定義文を指定してください。
SDB定義文の参照先を次に示します。
-
*DELETE DICTIONARY文:「11.4.4 *DELETE DICTIONARY文(SDBディクショナリ情報の削除)」
-
*DELETE DIRECTORY文:「11.4.8 *DELETE DIRECTORY文(SDBディレクトリ情報の削除)」
-
*ENTRY DICTIONARY文:「11.4.2 *ENTRY DICTIONARY文(SDBディクショナリ情報の追加)」
-
*ENTRY DIRECTORY文:「11.4.6 *ENTRY DIRECTORY文(SDBディレクトリ情報の追加)」