11.1.15 実表の表定義を変更する方法(別表を定義して動作検証したあとに運用中の実表の表定義を変更する場合)
ここでは,次の内容で運用中の実表の表定義を変更する方法を説明します。
-
変更後の表定義を使用して,動作検証用の表を新たに定義する。
-
動作検証用の表を使用して動作検証を行う。
-
表定義を変更する表を削除し,動作検証用の表の名称を削除した表の名称に変更する。
上記の方法で,表定義を変更すると,表定義を変更する表にアクセスできなくなる時間を極力短くできます。
表定義を変更する際の流れと手順を以降で説明しますが,表定義を変更する表をT1,動作検証用の表をT2としています。
運用中の表T1の表定義を変更する手順を次に示します。
手順
-
表T1に格納されているすべてのデータを出力する
adbexportコマンドで,表T1に格納されているすべてのデータをファイルに出力してください。
表T1がマルチチャンク表の場合,adbexportコマンドを実行する際の留意事項を次に示します。
-
マルチチャンク表のチャンクの状態・構成を維持する必要がない場合
留意事項は特にありません。表T1に格納されているすべてのデータをファイルに出力してください。
-
マルチチャンク表のチャンクの状態・構成を維持する必要がある場合
表T1に格納されているすべてのデータを,チャンク単位でファイルに出力する必要があります。チャンク単位でデータを出力しないと,チャンクの状態・構成を維持したまま,表にデータを格納できません。そのため,チャンク数分,エクスポートを行ってください。
チャンク単位でデータを出力する場合は,「11.4.5 チャンク単位にデータをエクスポートする方法」を参照してください。
-
-
表T1の定義情報を確認する
表T1を定義したときのCREATE TABLE文の指定内容を確認してください。動作検証用の表T2を定義する際に使用します。
表T1を定義したときのCREATE TABLE文の指定内容がわからない場合は,「付録B.22 ディクショナリ表の検索」の「(28) 実表の定義情報を調べる場合」を参照してください。ディクショナリ表を検索すると,表T1を定義したときのCREATE TABLE文の指定内容が確認できます。
-
表T1に定義されているインデクスの定義情報を確認する
表T1にインデクスを定義している場合,インデクスを定義したときのCREATE INDEX文の指定内容を確認してください。表T2にインデクスを定義する際に使用します。
インデクスを定義したときのCREATE INDEX文の指定内容がわからない場合は,「付録B.22 ディクショナリ表の検索」の「(29) インデクスの定義情報を調べる場合」を参照してください。ディクショナリ表を検索すると,インデクスを定義したときのCREATE INDEX文の指定内容が確認できます。
-
表T1の表定義を変更して,動作検証用の表(表T2)を定義する
CREATE TABLE文で表T2を定義してください。
手順2.で確認した表T1を定義したときのCREATE TABLE文の指定内容を流用して,CREATE TABLE文を作成してください。
-
表T2にインデクスを定義する
表T1にインデクスが定義されている場合,表T2にCREATE INDEX文でインデクスを定義してください。
手順3.で確認したインデクスを定義したときのCREATE INDEX文の指定内容を流用して,CREATE INDEX文を作成してください。
-
表T2にデータを格納する
adbimportコマンドで,表T2に手順1.で出力したすべてのデータを格納してください。
表T2がマルチチャンク表の場合,adbimportコマンドを実行する際の留意事項を次に示します。
-
マルチチャンク表のチャンクの状態・構成を維持する必要がない場合
adbimportコマンドには,-dオプションおよび-bオプションは指定しないでください。
-
マルチチャンク表のチャンクの状態・構成を維持する必要がある場合
手順1.でチャンク単位に出力したデータを,チャンク単位にインポートする必要があります。
-
手順1.でカレントチャンクだったチャンクのデータは,必ず最後に格納してください。
-
最初に格納するデータの場合は,-dオプションおよび-bオプションを指定しないで,adbimportコマンドを実行してください。
-
2回目以降に格納するデータの場合は,バックグラウンドインポートで格納してください。-bオプションを指定してadbimportコマンドを実行してください。手順1.でカレントチャンクだったチャンクのデータも,バックグラウンドインポートで格納してください。
-
- メモ
-
表T2を定義する際,列を新たに追加したり,列定義を変更したりした場合,列の追加,または列定義の変更に合わせて入力データファイルを修正してください。そのあとに,adbimportコマンドで,表T2にデータを格納してください。
例えば,次のケースなどが該当します。
-
列を新規に追加し,追加した列にデータを格納する場合
-
列定義を変更し,変更した列定義に合わせたデータを格納する場合
-
-
-
表T2を使用して動作検証を行う
動作検証の結果,問題がない場合は,次の手順に進んでください。
表T2の表定義に問題がある場合は,削除動作にCASCADEを指定してDROP TABLE文を実行し,表T2を削除してください。そのあと,手順4.に戻り,表T2の表定義を変更して,表T2を定義し直してください。
-
表T1を削除する
削除動作の指定を省略してDROP TABLE文を実行し,表T1を削除してください。
-
表T2の表名をT1に変更する
ALTER TABLE文で,表T2の表名をT1に変更してください。
-
ビュー表の無効化を解除する
手順8.で表T1を削除したため,表T1を基表とするビュー表が無効化されています。次のどちらかの方法でビュー表の無効化を解除してください。
-
表T1の列定義を変更した場合
DROP VIEW文で無効化されたビュー表を削除してください。そのあと,列定義の変更内容を基にCREATE VIEW文を作成して実行し,ビュー表を再作成してください。
-
表T1の列定義以外の表定義を変更した場合
ALTER VIEW文でビュー表を再作成し,ビュー表の無効化を解除してください。
- ヒント
-
-
無効化されたビュー表の特定方法,および無効化されたビュー表の削除方法については,「11.2.9 無効化されたビュー表を削除する方法」を参照してください。
-
無効化を解除するビュー表が複数ある場合,ビューレベルの値が小さい順にCREATE VIEW文またはALTER VIEW文を実行してください。
-
-
- メモ
-
-
adbexportコマンドおよびadbimportコマンドについては,マニュアルHADB コマンドリファレンスを参照してください。
-
DROP TABLE文,CREATE TABLE文,およびCREATE INDEX文については,マニュアルHADB SQLリファレンスを参照してください。
-