Hitachi

Hitachi Advanced Data Binder システム構築・運用ガイド


11.2.8 ビュー表の無効化を解除する方法

ビュー表の無効化を解除する方法は,ビュー表が無効化された原因によって異なります。それぞれの方法について説明します。

メモ
ビュー表の無効化要因がわからなくなってしまった場合

ビュー表にALTER VIEW文を実行すると,ALTER VIEW文がエラーになります。そのとき出力されるエラーメッセージを参照すると,ビュー表が無効化された要因を特定できます。

〈この項の構成〉

(1) ALTER TABLE文で表の種別を変更したことによってビュー表が無効化された場合

次に示す場合は,種別を変更した表に依存するすべてのビュー表が無効化されます。

ビュー表の無効化を解除する手順を次に示します。

例題

CUSTOMER表をレギュラーマルチチャンク表からアーカイブマルチチャンク表に変更したため,CUSTOMER表に依存するすべてのビュー表が無効化されました。CUSTOMER表に依存するすべてのビュー表の無効化を解除します。

手順

  1. 無効化されたビュー表の一覧を確認する

    ディクショナリ表を検索すると,無効化されたビュー表の一覧を取得できます。ディクショナリ表の検索については,「付録B.22 ディクショナリ表の検索」の「(33) 依存するビュー表の一覧を調べる場合」を参照してください。

    この例では,ビュー表CUSTOMER30sCUSTOMER40s,およびCUSTOMER50sが無効化されたとします。

  2. 無効化されたビュー表をALTER VIEW文で再作成する

    ALTER VIEW "CUSTOMER30s" RECREATE

    同様に,ビュー表CUSTOMER40sおよびCUSTOMER50sも,ALTER VIEW文で再作成してください。ビュー表の無効化を解除できます。

    ヒント

    再作成するビュー表が複数ある場合,ビューレベルの値が小さい順にALTER VIEW文を実行してください。

(2) ALTER TABLE文で表の列名を変更したことによってビュー表が無効化された場合

ALTER TABLE文で表の列名を変更した場合,列名を変更した表に依存するすべてのビュー表が無効化されます。ビュー表の無効化を解除する手順を次に示します。

なお,変更対象の列名をCREATE VIEW文中に指定しているかどうかによって,ビュー表の無効化を解除する手順が異なります。

例題

CUSTOMER表の列名を変更したため,CUSTOMER表に依存するすべてのビュー表が無効化されました。CUSTOMER表に依存するすべてのビュー表の無効化を解除します。

手順(変更対象の列名をCREATE VIEW文中に指定していない場合)

  1. 無効化されたビュー表の一覧を確認する

    ディクショナリ表を検索すると,無効化されたビュー表の一覧を取得できます。ディクショナリ表の検索については,「付録B.22 ディクショナリ表の検索」の「(33) 依存するビュー表の一覧を調べる場合」を参照してください。

    この例では,ビュー表CUSTOMER30sCUSTOMER40s,およびCUSTOMER50sが無効化されたとします。

  2. 無効化されたビュー表をALTER VIEW文で再作成する

    ALTER VIEW "CUSTOMER30s" RECREATE

    同様に,ビュー表CUSTOMER40sおよびCUSTOMER50sも,ALTER VIEW文で再作成してください。ビュー表の無効化を解除できます。

    ヒント

    再作成するビュー表が複数ある場合,ビューレベルの値が小さい順にALTER VIEW文を実行してください。

手順(変更対象の列名をCREATE VIEW文中に指定している場合)

  1. 無効化されたビュー表の一覧と,それらのビュー表の定義情報を確認する

    ディクショナリ表を検索すると,無効化されたビュー表の一覧と,それらのビュー表の定義情報を取得できます。ディクショナリ表の検索については,「付録B.22 ディクショナリ表の検索」の「(32) 依存するビュー表の一覧,およびそれらのビュー表の定義情報を調べる場合」を参照してください。

    この例では,ビュー表CUSTOMER30sCUSTOMER40s,およびCUSTOMER50sが無効化されたとします。

  2. 無効化されたビュー表をDROP VIEW文で削除する

    DROP VIEW "CUSTOMER30s"
    DROP VIEW "CUSTOMER40s"
    DROP VIEW "CUSTOMER50s"

    手順1.で確認した無効化されたビュー表をすべて削除してください。

  3. CREATE VIEW文の指定内容を修正する

    手順1.で調べたCREATE VIEW文の指定内容のうち,列名変更に該当する個所を修正します。

    (例)表T1の列名をC3からC33に変更した場合

    <修正前>

    CREATE VIEW "VT1" ("VC1","VC2","VC3")
        AS SELECT "C1","C2","C3" FROM "T1"

    <修正後>

    CREATE VIEW "VT1" ("VC1","VC2","VC3")
        AS SELECT "C1","C2","C33" FROM "T1"
  4. 無効化されたビュー表をCREATE VIEW文で再定義する

    CREATE VIEW "CUSTOMER30s" ("AGE","SEX","GNO","PNAME","PRICE")
      AS SELECT "CUSTOMER"."AGE",
                "CUSTOMER"."SEX",
                "CUSTOMER"."GNO",
                "STOCK"."PNAME",
                "STOCK"."PRICE"
           FROM "CUSTOMER","STOCK"
             WHERE "CUSTOMER"."AGE"=30 AND "CUSTOMER"."GNO"="STOCK"."GNO"

    同様に,CUSTOMER40sおよびCUSTOMER50sCREATE VIEW文でビュー表を再定義してください。

    ヒント

    再定義するビュー表が複数ある場合,ビューレベルの値が小さい順にCREATE VIEW文を実行してください。

(3) ALTER TABLE文で表の表名を変更したことによってビュー表が無効化された場合

ALTER TABLE文で表の表名を変更した場合,表名を変更した表に依存するすべてのビュー表が無効化されます。ビュー表の無効化を解除する手順を次に示します。

例題

店舗表(SHOPSLIST)の表名を,STORELISTに変更したため,SHOPSLIST表に依存するすべてのビュー表が無効化されました。SHOPSLIST表に依存するすべてのビュー表を削除し,STORELIST表のビュー表を作成します。

手順

  1. 無効化されたビュー表の一覧と,それらのビュー表の定義情報を確認する

    ディクショナリ表を検索すると,無効化されたビュー表の一覧と,それらのビュー表の定義情報を取得できます。ディクショナリ表の検索については,「付録B.22 ディクショナリ表の検索」の「(32) 依存するビュー表の一覧,およびそれらのビュー表の定義情報を調べる場合」を参照してください。

    この例では,ビュー表VLIST01VLIST02,およびVLIST03が無効化されたとします。

  2. 無効化されたビュー表をDROP VIEW文で削除する

    DROP VIEW "VLIST01"
    DROP VIEW "VLIST02"
    DROP VIEW "VLIST03"

    手順1.で確認した無効化されたビュー表をすべて削除してください。

  3. CREATE VIEW文の指定内容を修正する

    手順1.で調べたCREATE VIEW文の指定内容のうち,表名変更に該当する個所を修正します。

    (例)

    <修正前>

    CREATE VIEW "VLIST01" ("VC1","VC2","VC3")
        AS SELECT "C1","C2","C3" FROM "SHOPSLIST"

    <修正後>

    CREATE VIEW "VLIST01" ("VC1","VC2","VC3")
        AS SELECT "C1","C2","C3" FROM "STORELIST"
  4. 無効化されたビュー表をCREATE VIEW文で再定義する

    手順3.の修正後のCREATE VIEW文を実行します。

    ヒント

    再定義するビュー表が複数ある場合,ビューレベルの値が小さい順にCREATE VIEW文を実行してください。

(4) ALTER TABLE文で配列型の列の最大要素数を変更したことによってビュー表が無効化された場合

ALTER TABLE文で配列型の列の最大要素数を変更した場合,最大要素数を変更した表に依存するすべてのビュー表が無効化されます。ビュー表の無効化を解除する手順を次に示します。

例題

CUSTOMER表に定義されている配列型の列の最大要素数を変更したため,CUSTOMER表に依存するすべてのビュー表が無効化されました。CUSTOMER表に依存するすべてのビュー表の無効化を解除します。

手順

  1. 無効化されたビュー表の一覧を確認する

    ディクショナリ表を検索すると,無効化されたビュー表の一覧を取得できます。ディクショナリ表の検索については,「付録B.22 ディクショナリ表の検索」の「(33) 依存するビュー表の一覧を調べる場合」を参照してください。

    この例では,ビュー表CUSTOMER30sCUSTOMER40s,およびCUSTOMER50sが無効化されたとします。

  2. 無効化されたビュー表をALTER VIEW文で再作成する

    ALTER VIEW "CUSTOMER30s" RECREATE

    同様に,ビュー表CUSTOMER40sおよびCUSTOMER50sも,ALTER VIEW文で再作成してください。ビュー表の無効化を解除できます。

    ヒント

    再作成するビュー表が複数ある場合,ビューレベルの値が小さい順にALTER VIEW文を実行してください。

(5) 基表に対するSELECT権限を誤って取り消したことによってビュー表が無効化された場合

基表に対するSELECT権限を誤って取り消してしまった場合,その表に依存するすべてのビュー表が無効化されます。ビュー表の無効化を解除する手順を次に示します。

例題

基表に対するSELECT権限を誤って取り消してしまったため,基表に依存するすべてのビュー表が無効化されました。ビュー表と基表を特定し,基表に依存するすべてのビュー表の無効化を解除します。

手順

  1. 無効化されたビュー表の一覧を確認する

    ディクショナリ表を検索すると,無効化されたビュー表の一覧を取得できます。ディクショナリ表の検索については,「付録B.22 ディクショナリ表の検索」の「(33) 依存するビュー表の一覧を調べる場合」を参照してください。

    この例では,ビュー表CUSTOMER30sが無効化されたとします。

  2. 無効化されたビュー表の基表を確認する

    手順1.で確認した無効化されたビュー表を基に,ディクショナリ表を検索すると,無効化されたビュー表の基表を取得できます。ディクショナリ表の検索については,「付録B.22 ディクショナリ表の検索」の「(35) ビュー表の基表である実表とビュー表を調べる場合」を参照してください。

    この例では,無効化されたビュー表CUSTOMER30sの基表が,CUSTOMER表であるとします。

  3. 基表に対するSELECT権限をGRANT文で付与する

    手順2.で確認した基表のCUSTOMER表に対して,GRANT文でSELECT権限を付与します。

    GRANT SELECT ON "CUSTOMER" TO "ADBUSER01"

    下線部分は,ビュー表CUSTOMER30sを所有しているHADBユーザの認可識別子を指定します。

  4. 無効化されたビュー表をALTER VIEW文で再作成する

    ALTER VIEW "CUSTOMER30s" RECREATE

    ビュー表CUSTOMER30sALTER VIEW文で再作成してください。ビュー表の無効化を解除できます。

    ヒント

    再作成するビュー表が複数ある場合,ビューレベルの値が小さい順にALTER VIEW文を実行してください。

(6) 表を誤って削除してしまったことによってビュー表が無効化された場合

表を誤って削除してしまった場合,削除してしまった表に依存するすべてのビュー表が無効化されます。ビュー表の無効化を解除する手順を次に示します。

注※

削除動作の指定を省略したDROP TABLE文,またはDROP VIEW文を実行した場合が該当します。

例題

実表のCUSTOMER表を誤って削除してしまったため,削除してしまった表に依存するすべてのビュー表が無効化されました。実表を再定義して,依存するすべてのビュー表の無効化を解除します。

手順

  1. 無効化されたビュー表の一覧を確認する

    ディクショナリ表を検索すると,無効化されたビュー表の一覧を取得できます。ディクショナリ表の検索については,「付録B.22 ディクショナリ表の検索」の「(33) 依存するビュー表の一覧を調べる場合」を参照してください。

    この例では,ビュー表CUSTOMER30sが無効化されたとします。

  2. 誤って削除してしまった表を再定義する

    • 削除してしまった表が実表の場合は,実表をCREATE TABLE文で再定義してください。

    • 削除してしまった表がビュー表の場合は,ビュー表をCREATE VIEW文で再定義してください。

    この例では,実表のCUSTOMER表をCREATE TABLE文で再定義します。

  3. ほかのHADBユーザが再定義した表に対するSELECT権限をGRANT文で付与してもらう

    手順2.で再定義した表がほかのHADBユーザの表である場合,その表に対するSELECT権限をGRANT文で付与してもらってください。

    なお,自分で表を再定義した場合は,この手順は実施不要です。

    GRANT SELECT ON "CUSTOMER" TO "ADBUSER01"

    下線部分は,ビュー表CUSTOMER30sを所有しているHADBユーザの認可識別子を指定します。

  4. 無効化されたビュー表をALTER VIEW文で再作成する

    ALTER VIEW "CUSTOMER30s" RECREATE

    ビュー表CUSTOMER30sALTER VIEW文で再作成してください。ビュー表の無効化を解除できます。

    ヒント

    再作成するビュー表が複数ある場合,ビューレベルの値が小さい順にALTER VIEW文を実行してください。

(7) ALTER VIEW文で基表であるビュー表を再作成したことによってビュー表が無効化された場合

ALTER VIEW文で基表であるビュー表を再作成した場合,再作成したビュー表に依存するすべてのビュー表が無効化されます。ビュー表の無効化を解除する手順を次に示します。

なお,基表であるビュー表の列名が変更されているかどうか,および変更対象の列名をCREATE VIEW文中に指定しているかどうかによって,ビュー表の無効化を解除する手順が異なります。

手順(基表であるビュー表の列名が変更されていない場合,または変更対象の列名をCREATE VIEW文中に指定していない場合)

基表であるビュー表の列名が変更されていない場合は,次の手順でビュー表の無効化を解除してください。また,基表であるビュー表の列名が変更されているが,変更対象の列名をCREATE VIEW文中に指定していない場合も,次の手順でビュー表の無効化を解除してください。

  1. 無効化されたビュー表の一覧を確認する

    ディクショナリ表を検索すると,無効化されたビュー表の一覧を取得できます。ディクショナリ表の検索については,「付録B.22 ディクショナリ表の検索」の「(33) 依存するビュー表の一覧を調べる場合」を参照してください。

    この例では,ビュー表CUSTOMER30sCUSTOMER40s,およびCUSTOMER50sが無効化されたとします。

  2. 無効化されたビュー表をALTER VIEW文で再作成する

    ALTER VIEW "CUSTOMER30s" RECREATE

    同様に,ビュー表CUSTOMER40sおよびCUSTOMER50sも,ALTER VIEW文で再作成してください。ビュー表の無効化を解除できます。

    ヒント

    再作成するビュー表が複数ある場合,ビューレベルの値が小さい順にALTER VIEW文を実行してください。

手順(変更対象の列名をCREATE VIEW文中に指定している場合)

基表であるビュー表の列名が変更されて,かつ変更対象の列名をCREATE VIEW文中に指定している場合は,次の手順でビュー表の無効化を解除してください。

  1. 無効化されたビュー表の一覧と,それらのビュー表の定義情報を確認する

    ディクショナリ表を検索すると,無効化されたビュー表の一覧と,それらのビュー表の定義情報を取得できます。ディクショナリ表の検索については,「付録B.22 ディクショナリ表の検索」の「(32) 依存するビュー表の一覧,およびそれらのビュー表の定義情報を調べる場合」を参照してください。

    この例では,ビュー表CUSTOMER30sCUSTOMER40s,およびCUSTOMER50sが無効化されたとします。

  2. 無効化されたビュー表をDROP VIEW文で削除する

    DROP VIEW "CUSTOMER30s"
    DROP VIEW "CUSTOMER40s"
    DROP VIEW "CUSTOMER50s"

    手順1.で確認した無効化されたビュー表をすべて削除してください。

  3. CREATE VIEW文の指定内容を修正する

    手順1.で調べたCREATE VIEW文の指定内容のうち,列名変更に該当する個所を修正します。

    (例)表T1の列名をC3からC33に変更した場合

    <修正前>

    CREATE VIEW "VT1" ("VC1","VC2","VC3")
        AS SELECT "C1","C2","C3" FROM "T1"

    <修正後>

    CREATE VIEW "VT1" ("VC1","VC2","VC3")
        AS SELECT "C1","C2","C33" FROM "T1"
  4. 無効化されたビュー表をCREATE VIEW文で再定義する

    CREATE VIEW "CUSTOMER30s" ("AGE","SEX","GNO","PNAME","PRICE")
      AS SELECT "CUSTOMER"."AGE",
                "CUSTOMER"."SEX",
                "CUSTOMER"."GNO",
                "STOCK"."PNAME",
                "STOCK"."PRICE"
           FROM "CUSTOMER","STOCK"
             WHERE "CUSTOMER"."AGE"=30 AND "CUSTOMER"."GNO"="STOCK"."GNO"

    同様に,CUSTOMER40sおよびCUSTOMER50sCREATE VIEW文でビュー表を再定義してください。

    ヒント

    再定義するビュー表が複数ある場合,ビューレベルの値が小さい順にCREATE VIEW文を実行してください。

(8) バージョンアップ時に行われるビュー表の再作成が失敗した場合

HADBサーバのバージョンアップ時にビュー表が再作成されることがあります。その際,ビュー表の再作成に失敗すると,対象のビュー表は無効化されます。詳細については,「8.6.5 バージョンアップ時の注意事項」の「(5) バージョンアップ時に行われるビュー表の再作成」を参照してください。

再作成に失敗したビュー表の無効化を解除する手順を次に示します。

手順

  1. 無効化されたビュー表の一覧と,それらのビュー表の定義情報を確認する

    ディクショナリ表を検索すると,無効化されたビュー表の一覧と,それらのビュー表の定義情報を取得できます。ディクショナリ表の検索については,「付録B.22 ディクショナリ表の検索」の「(32) 依存するビュー表の一覧,およびそれらのビュー表の定義情報を調べる場合」を参照してください。

  2. 無効化されたビュー表をDROP VIEW文で削除する

    手順1.で確認した,無効化されたビュー表をすべて削除してください。

  3. CREATE VIEW文を作成する

    手順1.で確認した,無効化されたビュー表のCREATE VIEW文を作成してください。

  4. 出力されたメッセージを基に,CREATE VIEW文の指定内容を修正する

    手順3.で作成したCREATE VIEW文を修正し,ビュー表の無効化要因を取り除いてください。

    バージョンアップ時に行われるビュー表の再作成に失敗した場合,ビュー表の再作成に失敗したことを知らせるKFAA51312-Wメッセージが出力されます。KFAA51312-Wメッセージの直前に出力されているメッセージに,ビュー表の無効化要因と対処方法が説明されています。それに従って,CREATE VIEW文を修正してください。

  5. 無効化されたビュー表をCREATE VIEW文で再定義する

    手順4.で修正したCREATE VIEW文で,無効化されたビュー表を再定義してください。

    ヒント

    再定義するビュー表が複数ある場合,ビューレベルの値が小さい順にCREATE VIEW文を実行してください。