oracle如何创建基表,创建本地基表的物化视图

本文详细介绍了在Oracle数据库中创建和管理物化视图的过程,包括授予用户权限、创建物化视图日志、建立物化视图以及验证数据刷新。通过一个具体的例子展示了如何为HR Schema的employees表创建一个oncommitrefresh的物化视图,以提高查询性能,并在插入新数据后自动刷新物化视图。
摘要由CSDN通过智能技术生成

Oracle的物化视图(Materialized View)是包括一个查询结果的数据库对像,它是远程数据的的本地副本,或者是用来生成基于数据表求和的汇总表。

物化视图可以用于预先计算并保存表连接或聚集等耗时较多的操作的结果,这样,在执行查询时,就可以避免进行这些耗时的操作,提高查询性能。

物化视图需要占用存储空间,物化视图由于是物理真实存在的,故可以创建索引。当基表发生变化时,物化视图也应当刷新。

在以下创建物化视图的例子中,基表是Oracle数据库所带的HR Schema中的employees表。拥有基表的用户是hr,创建物化视图的用户是george。

==================================================================

创建本地基表的on commit refresh物化视图

==================================================================

SQL> select * from v$version;

BANNER

--------------------------------------------------------------------------------

Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production

PL/SQL Release 11.2.0.3.0 - Production

CORE    11.2.0.3.0    Production

TNS for Linux: Version 11.2.0.3.0 - Production

NLSRTL Version 11.2.0.3.0 - Production

SQL> conn george/george

Connected.

SQL> select * from user_sys_privs;

USERNAMEPRIVILEGEADM

------------------------ --------------------------------------

GEORGE                   UNLIMITED TABLESPACENO

创建物化视图需要的权限 以sysdba授权

SQL> conn sys/welcome1 as sysdba

Connected.

SQL> grant create any materialized view to george;

Grant succeeded.

创建物化视图日志

视图的刷新将采用增量刷新的方式,为配合增量刷新,ORACLE要求要在基表上建立物化视图日志。

SQL> create materialized view log on employees with primary key including new values;

创建on commit refresh物化视图

SQL> conn george/george

Connected.

SQL> select * from user_sys_privs;

USERNAMEPRIVILEGEADM

------------------------- ---------------------------------- ---

GEORGE                   CREATE ANY MATERIALIZED VIEW        NO

GEORGE                   UNLIMITED TABLESPACENO

SQL> create materialized view mv_employees build immediate refresh fast with primary key on commit as select * from hr.employees;

create materialized view mv_employees build immediate refresh fast with primary key on commit as select * from hr.employees

*

ERROR at line 1:

ORA-01031: insufficient privileges

授予用户george基表的ON COMMIT REFRESH权限

SQL> conn hr/hr

Connected.

SQL> grant ON COMMIT REFRESH on employees to george;

SQL> grant select on mlog$_employees to george;

SQL> conn george/george

Connected.

SQL> create materialized view mv_employees build immediate refresh fast with primary key on commit as select * from hr.employees;

Materialized view created.

在基表中插入测试数据

SQL> conn hr/hr

Connected.

SQL> select count(*) from employees;

COUNT(*)

----------

107

SQL> INSERT INTO employees VALUES

( 208

, 'Heather'

, 'Wang'

, 'hw@bds.com'

, '515.123.8181'

, TO_DATE('07-JUN-1994', 'dd-MON-yyyy')

, 'AC_ACCOUNT'

, 8300

, NULL

, 205

, 110

);  2    3    4    5    6    7    8    9   10   11   12   13

1 row created.

SQL> commit;

commit

*

ERROR at line 1:

ORA-12008: error in materialized view refresh path

ORA-00942: table or view does not exist

SQL> grant select on employees to george;

SQL> INSERT INTO employees VALUES

( 208

, 'Heather'

, 'Wang'

, 'hw@bds.com'

, '515.123.8181'

, TO_DATE('07-JUN-1994', 'dd-MON-yyyy')

, 'AC_ACCOUNT'

, 8300

, NULL

, 205

, 110

);  2    3    4    5    6    7    8    9   10   11   12   13

1 row created.

SQL> commit;

Commit complete.

SQL> select count(*) from employees;

COUNT(*)

----------

108

SQL>

在物化视图中验证数据已刷新

SQL> conn george/george

Connected.

SQL> select count(*) from mv_employees;

COUNT(*)

----------

108

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值