Oracle笔记 Chapter 3.5-3.7

3.5.1 物化视图概念

视图(VIEW)是一种虚表,其目的仅仅是为了方便进行综合数据的查询而已,它并不能够帮助我们提高性能。在相应的场景下,可以使用物化视图提高查询效率。

物化视图是一种特殊的物理表,”物化”(Materialized)视图是相对普通视图而言的。物化视图的特点:

  • 物化视图在某种意义上说就是一个物理表(而且不仅仅是一个物理表),这通过其可以被user_tables查询出来,而得到佐证

  • 物化视图也是一种段(segment),所以其有自己的物理存储属性

  • 物化视图会占用数据库磁盘空间,这点从user_segment的查询结果,可得到佐证

3.5.2 物化视图的使用

物化视图的类型:Oracle提供了两种方式,手工刷新和自动刷新,默认为手工刷新。即:ON DEMANDON COMMIT,二者的区别在于刷新方法的不同

  • ON DEMAND顾名思义,仅在该物化视图”需要”被刷新了,才进行刷新(REFRESH),即更新物化视图,以保证和基表数据的一致性;

  • ON COMMIT是说,一旦基表有了COMMIT,即事务提交,则立刻刷新,立刻更新物化视图,使得数据和基表一致。

创建语句:

create materialized view mv_name [选项N] as select * from table_name;
  • [选项1] BUILD [IMMEDIATE, DEFERRED]是否在创建视图时生成数据,默认生成,DEFERRED为不生成数据,需要的时候生成。

  • [选项2] REFRESH [FAST, COMPLETE, FORCE, NEVER]

    • FAST是增量刷新,或者说叫快速刷新;

    • COMPLETE为全表刷新;

    • FORCE为如果增量刷新可以使用,则使用增量刷新,否则全表刷新;

    • NEVER则是不进行刷新(不使用)。

  • [选项3] ON [DEMAND, COMMIT]即手工刷新和提交时刷新。

  • [选项4] START WITH通知数据库完成从主表到本地表第一次复制的时间。

  • [选项5] NEXT说明了刷新的时间间隔,下一次刷新的时间=上一次执行完成的时间+时间间隔

3.5.3 COMMIT刷新

注意:基表必须要有主键

create table B (clsid int primary key, name varchar2(10));
create table A (id int prmary key, name varchar2(10),clsid int, constraint fk_cls id foreign key (clsid) references B(clsid));
insert into b values(1,'一班');
insert into b values(2,'二班');
insert into a values(1,'张三',1);
insert into a values(2,'李四',1);
insert into a values(3,'王五',2);
commit;

语法如下:

CREATE MATERIALIZED VIEW V_AB
REFRESH FORCE ON COMMIT
AS
SELECT A.ID, A.NAME, B.CLSID, B.NAME AS CLSNAME
FROM A,B
WHERE A.CLSID = B.CLSID;

3.5.4 DEMAND刷新

语法如下:

CREATE MATERIALIZED VIEW MV_AB
REFRESH FORCE ON DEMAND
	START WITH SYSDATE
	NEXT SYSDATE+1
AS
SELECT A.ID, A.NAME, B.CLSID, B.NAME AS CLSNAME
FROM A,B
WHERE A.CLSID = B.CLSID;

3.5.5 快速刷新的建立

语法如下:

CREATE MATERIALIZED VIEW LOG ON A WITH ROWID;
CREATE MATERIALIZED VIEW LOG ON B WITH ROWID;
CREATE MATERIALIZED VIEW MV_AB
REFRESH FAST ON DEMAND
	START WITH SYSDATE
	NEXT SYSDATE+1/1440
AS
SELECT A.ROWID AS AROWID, B.ROWID AS BROWID,A.ID, A.NAME, B.CLSID, B.NAME AS CLSNAME
FROM A,B
WHERE A.CLSID= B.CLSID;

3.6.1 同义词

从字面上理解就是别名的意思和视图的功能类似,就是一种映射关系。

私有同义词:一般是普通用户自己建立的同义词,用于创建这需要create synonym权限

grant create synonym to scott;
create synonym abc for emp;

公有同义词:一般是由DBA创建,所有的用户可以使用,创建者需要create public synonym权限

create public synonym to scott;
create public synonym xyz for emp;
drop public synonym xyz;

3.6.2 同义词使用要点

  • 私有同义词是模式对象,一般在自己的模式中使用,如其它模式使则必须用模式名前缀限定。

  • 公有同义词不是模式对象,不能用模式名做前缀。

  • 私有和公有同义词同名时,如果指向不同的对象,私有同义词优先。

  • 引用的同义词的对象(表或视图)被删除了,同义词仍然存在,这同视图类似,重新创建该对象名,下次访问同义词时自动编译。

例:

create synonym wyz for emp1;
drop table emp1;
select * from wyz; --已删除表,义词转换不再有效
flashback table emp1 to before drop;
select * from wyz; --利用闪回,同义词再次有效