[size=small][align=center][b][color=red]关于物化刷新视图创建以及过程遇到的一些错误分析记录(偏重于增量刷新视图)[/color][/b][/align][/size]
[color=red][b]1、视图能添加多个约束吗?[/b][/color]
普通视图在创建过程中,不能设置多个约束 即 with read only和with check option只能二选一,若创建多个则不通过
[color=red][b]2、物化视图日志能在右侧目录右键drop吗?[/b][/color]
可以,但是再次创建视图日志时则会报已存在,所以必须通过手动sql删除,如下所示
[color=red][b]3、ORA-12006:a materialized view log for "xxxx"."xxx" does not record the primary key;[/b][/color]
这个问题纠结了好久才找到答案,真的是都快急的流鼻血了,在此记录一下
这个是因为 我们在建立物化增量刷新视图之前创建的物化视图日志是基于rowid,如下所示
而我们创建物化视图sql如下【错误示例】
该视图是默认是基于 primary key来建立的 所以不能创建成功,并且提示了以上的错误,那么我们应该怎么写才能不报错呢?,如下所示
注意上面的sql 加的注释,是需要注意的点,要with rowid,这样我们建立的视图则是基于rowid,而且需要给rowid起别名,否则依然创建不成功
那么既然有基于rowid的视图,其实也有基于primary key 的增量刷新视图
定义方法如下
以上是关于物化增量刷新视图的一些问题,后期遇到继续补充
[color=red][b]1、视图能添加多个约束吗?[/b][/color]
普通视图在创建过程中,不能设置多个约束 即 with read only和with check option只能二选一,若创建多个则不通过
[color=red][b]2、物化视图日志能在右侧目录右键drop吗?[/b][/color]
可以,但是再次创建视图日志时则会报已存在,所以必须通过手动sql删除,如下所示
drop materialized view log on teacher
[color=red][b]3、ORA-12006:a materialized view log for "xxxx"."xxx" does not record the primary key;[/b][/color]
这个问题纠结了好久才找到答案,真的是都快急的流鼻血了,在此记录一下
这个是因为 我们在建立物化增量刷新视图之前创建的物化视图日志是基于rowid,如下所示
create materialized view log on teacher with rowid;
而我们创建物化视图sql如下【错误示例】
create materialized view mv_teacher
refresh fast
as
select r.rowid ,r.name name1 from teacher r
该视图是默认是基于 primary key来建立的 所以不能创建成功,并且提示了以上的错误,那么我们应该怎么写才能不报错呢?,如下所示
create materialized view mv_teacher5
refresh fast with rowid -- 注意此块需要加with rowid
as
select r.rowid rr,r.*from teacher r--需要存在rowid,并且得有别名
注意上面的sql 加的注释,是需要注意的点,要with rowid,这样我们建立的视图则是基于rowid,而且需要给rowid起别名,否则依然创建不成功
那么既然有基于rowid的视图,其实也有基于primary key 的增量刷新视图
定义方法如下
create materialized view log on teacher with primary key;--创建视图日志
create materialized view mv_teacher8
refresh fast [ with primary key] --此处可省略,因为该视图默认就是基于主键
as
select * from teacher
以上是关于物化增量刷新视图的一些问题,后期遇到继续补充