Oracle表结构修改触发视图无法正常使用问题

一.问题描述

当对视图使用的基表进行表结构修改后,会触发视图的无效以及编译出错问题,必须重建视图解决。

二.问题再现

1.Oracle10g环境

1.1 创建视图测试用两张基表:TestTable和TestUser

1.2  创建测试视图VW_TABLEUSERALL和VW_TABLEUSER

前者使用了TestTable.*, 后者显示指定列。

 查询视图的状态如下:全部是Valid状态

1.3 修改TestTable表结构:增加一列Col1

 再次查询视图的状态如下:全部是INVALID状态

 

 

1.4 重新编译两张视图

 重新查询视图的状态如下:全部是Valid状态:

查询视图的数据:VW_TableUserAll查询出错。

1.5 视图重建

重新查询视图的数据:VW_TableUserAll查询正常: 新增的Col1出现了!

2. Oracle11g环境

2.1 环境准备

和Orale10g下的1.1 和1.2 步骤一致

2.2 修改TestTable表结构:增加一列Col1

查询视图的状态如下:全部是VALID状态

   

2.3 查询视图VW_TableUserAll,没有新增的Col1这一列!

但是基表TestTable中存在Col1这一列

2.4 重新编译视图,依旧查不到Col1这一列

2.5 重建视图,问题解决

3. 问题结论

Oracle10g环境下:

对视图基表的修改会触发view的无效。如果视图中使用了修改的基表表结构,重新编译视图无法解决问题,视图需要重建。

Oracle11g环境下:

对视图基表的修改不会触发view的无效。如果视图中使用了修改的基表表结构,重新编译视图无法解决问题,视图需要重建。

因此:

如果修改了视图使用到的基表的表结构被修改了,恰如视图中涉及了修改后的表结构,重新编译视图操作,仍无法查询到修改的列,必须进行视图重建。

Oracle表结构修改触发视图无法正常使用问题

时间: 2024-10-08 16:53:12

Oracle表结构修改触发视图无法正常使用问题的相关文章

oracle中使用物化视图实现表的同步

表的同步可以使用物化视图来实现,可以是同库的也可以是不同数据库之间进行数据同步,建议在同库的数据同步可以使用实时的同步,如果使用db link建议使用增量的刷新方式,防止dblink导致原库的性能急剧下降. 主要步骤: 1.在原表上建立物化视图日志 2.在创建目标表 3.创建与目标表同名的物化视图日志 1.创建原表和物化视图日志 SQL> conn bre/bre Connected. SQL> create table t1(id int,name varchar2(30)); Table

oracle下常用的系统表和系统视图

此处,在此列出一些Oracle下常用的视图,用于查询Oracle下的一些配置属性,要注意的是在select的时候要在DBA的用户下,不然是没有权限调阅这些表和视图. ----------DBA_ Dba_Tab_Comments   表注释      Dba_Col_Comments 列注释 DBA_2PC_NEIGHBORS                包含待处理事务进入连接和退出连接信息. DBA_2PC_PENDING                 包含等待恢复的分布式事务的信息. D

ORACLE主要的系统表和系统视图

ORACLE主要的系统表和系统视图 1.系统表 ORACLE数据库的系统参数都存储在数据库中,可以通过SQLPLUS,以用户SYS进行查询.几个重要的表或者视图如下: v$controlfile:控制文件的信息: v$datafile:数据文件的信息: v$log:日志文件的信息: v$process:处理器的信息: v$session:会话信息: v$transaction:事务信息: v$resource:资源信息: v$sga:系统全局区的信息. 上面的视图名中的‘v$’,只是视图名字中的

从oracle数据库导出数据(表结构,表数据,视图,存储过程,序列)

package com.ahzysoft.export; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.PrintStream; import java.sql.Connection; import java.sql.ResultSet; import java.sql.ResultSetMetaData; import java

oracle表和对象基础维护笔记

一 oracle表和对象基础维护笔记 1.1 常见概念 1.2 创建表 1.3 表常见字段 1.4 增加或删除字段 1.5 更新字段 1.6 重命名表 1.7 改变表存储表空间和存储参数 1.8 删除表 1.9 表注释 1.10 分区表的管理 1.11 常用数据字典 二 约束 2.1 非空约束 2.2 主键约束 2.3 唯一性约束 2.4 外键约束 2.5 约束管理 三 索引 3.2 创建索引 3.3 改变索引存储参数 3.4 重建索引 3.5 索引碎片整理 3.6 删除索引 3.7 数据字典

Oracle查询转换之视图合并

一.简单视图合并:指针对那些不含外连接,以及所带视图定义sql语句中不含distinct,group by等聚合函数的目标sql的视图合并. create or replace view view_1 as SELECT t2.prod_id   FROM sales t2, customers t3  WHERE t2.cust_id = t3.cust_id    AND t3.cust_gender = 'M'; 视图合并:   SELECT t1.prod_id, t1.prod_nam

44.oracle表空间的使用

要给下属充分的发挥空间,要允许下属犯错,下属犯错自己能顶下来就顶着,不要盯得让下属觉得"这不是我的事,我只是个小打工的",团建要放在首位.不可在下属面前"装B",别人也不傻. Oracle数据库开创性地提出了表空间的设计理念,这为Oracle数据库的高性能做出了不可磨灭的贡献.可以这么说,Oracle中很多优化都是基于表空间的设计理念而实现的. ORACLE数据库被划分成称作为表空间[1]  的逻辑区域--形成ORACLE数据库的逻辑结构.一个ORACLE数据库能够

Oracle表空间,用户,用户授权

一:Oracle表空间 1,Oracle表空间与SQL Server文件组对比 SQL Server的文件组(文件组包括若干MDF,NDF数据文件)对我们来说并不陌生,前段时间我在博客"怎样玩转千万级别的数据"提到了过表分区的概念,其实表分区说到本质上就是按一定条件把不同数据放在不同的数据文件里,这些数据文件在物理上是相对独立的,在逻辑上又是一个整体.特别强调一下,在SQL Server中,建表时是默认把所有的表都保存在PRIMARY默认文件组 ,当数据库中表很多,并且数据量很大时,会

zabbix自动发现oracle表空间并监控其使用率

监控需求 Oracle表空间使用率实时监控,当表空间使用率达到95%时触发告警机制.Oracle表空间分为系统默认表空间和用户创建的表空间,而表空间又有自动扩展和非自动扩展两种类型,用户(DBA)在创建表空间时可以根据应用需求指定是否开启表空间自动扩展.那么在这里我们需要分析一个监控策略,就是当zabbix监控到某个表空间使用率达到95%,那么就让触发器触发警告(Warning)信息,并发送邮件给DBA或管理者.当检测到表空间没有开启自动扩展时,则触发Information信息.说明一下:ora