m-s*_*ith 3 oracle view alter-table upgrade
我为许多客户提供了一个数据库系统。该数据库本地安装在 Oracle 上。
随着产品的增长,我们会定期升级数据库结构(添加新字段、重命名旧字段、更改内容)。
我的一位客户希望将他们自己的自定义视图添加到数据库中。他们向我保证,他们会将视图添加到实时模式的不同模式中。但是,我担心包含视图可能会影响未来的升级脚本。
如果视图引用了要更改的表,视图的存在是否会阻止表被更改?
不,它不应该阻止表被更改。但是,如果您删除视图所依赖的基础表,或者更改/删除视图使用的表中的列,则视图可能会变得无效。您可以使用以下查询检查系统中哪些视图无效:
sql> select name from dba_objects where object_type = 'VIEW' and status = 'INVALID';
Run Code Online (Sandbox Code Playgroud)
您应该在创建视图之前解决问题VALID
。该视图可以手动编译:
sql> alter view foo compile;
Run Code Online (Sandbox Code Playgroud)
或者您可以允许系统在有人尝试查询视图时自动编译它。然而,手动编译是推荐的方式,因为它减少了第一次查询的执行时间。通常使用提供的脚本批量重新编译视图和其他无效对象(过程、触发器等)utlrp
,这是 DBA 的例行任务。
如果要创建视图但基表尚不存在,则可以使用选项FORCE
:
sql> create force view foo as select * from moo;
Run Code Online (Sandbox Code Playgroud)