テーブルやビューに定義したスキーマを変更しようとする場合、従属ビューに対して変更による影響があるかどうかをデータベース・サーバが検討する必要があります。スキーマ変更操作の例を次に示します。
テーブル、ビュー、マテリアライズド・ビュー、またはカラムの削除
テーブル、ビュー、マテリアライズド・ビュー、またはカラムの名前変更
カラムの追加、削除、または変更
カラムのデータ・タイプ、サイズ、または NULL 入力属性の変更
ビュー、またはテーブルのビューの依存性の無効化
スキーマ変更操作を試みると、次のイベントが発生します。
データベース・サーバは、変更するテーブルやビューに直接的または間接的に依存するビューのリストを生成します。DISABLED ステータスのビューは無視されます。
いずれかの従属ビューがマテリアライズド・ビューである場合、要求は失敗し、エラーが返され、残りのイベントは発生しません。従属したマテリアライズド・ビューを明示的に無効にしてから、スキーマ変更操作を続行してください。マテリアライズド・ビューの有効化と無効化を参照してください。
データベース・サーバは、変更するオブジェクトとすべての従属した通常のビューに対して、排他スキーマ・ロックを取得します。
データベース・サーバはすべての従属した通常のビューのステータスを INVALID に設定します。
データベース・サーバはスキーマ変更操作を実行します。操作が失敗すると、ロックは解放され、従属した通常のビューのステータスは VALID にリセットされます。さらにエラーが返され、残りの手順は発生しません。
データベース・サーバは従属した通常のビューを再コンパイルし、成功した場合は各ビューのステータスを VALID に設定します。いずれかの通常のビューでコンパイルが失敗した場合も、そのビューのステータスは INVALID のままです。INVALID である通常のビューに対する以後の要求により、データベース・サーバはビューを再コンパイルしようとします。それらの試行に失敗した場合は、INVALID ビューまたはそのビューが依存するオブジェクトを変更する必要があります。
通常のビューは、マテリアライズド・ビューを含め、テーブルやビューを参照できる。
テーブルまたはビューのスキーマを変更すると、データベースはすべての参照元の通常ビューを自動的に再コンパイルしようとする。
ビューまたはテーブルを無効にするか削除すると、すべての従属した通常のビューが自動的に無効になる。
ALTER TABLE 文の DISABLE VIEW DEPENDENCIES 句を使用して、従属した通常のビューを無効にできる。
マテリアライズド・ビューは、ベース・テーブルだけを参照する。
有効なマテリアライズド・ビューが参照している場合は、ベース・テーブルに対するスキーマ変更は許可されない。ただし、テーブルに外部キーを追加することはできる (ALTER TABLE、ADD FOREIGN KEY など)。
テーブルを削除する前に、すべての従属マテリアライズド・ビューを無効にするか削除する必要がある。
ALTER TABLE 文の DISABLE VIEW DEPENDENCIES 句は、マテリアライズド・ビューには影響しない。マテリアライズド・ビューを無効にするには、ALTER MATERIALIZED VIEW ... DISABLE 文を使用する必要がある。
マテリアライズド・ビューを無効にすると、ALTER MATERIALIZED VIEW ... ENABLE 文を実行するなどして、再度明示的に有効にする必要がある。
Copyright © 2009, iAnywhere Solutions, Inc. - SQL Anywhere 11.0.1 |