物化视图又叫实体化视图,和普通视图不同的是,他可以当作基表使用。
物流系统中总库房和小公司库房物资编码库的同步,一直很麻烦,每次都要手工同步,因此采用物化视图技术实现同步。
当前现状如下:
在同一个oracle服务器上,并存着三个物流数据库,分别是总库房、龙虎泡、新肇,对应表空间和用户名分别是:JCWL ,LHP,XZHAO。都是普通用户权限。
建立物化视图步骤如下:
1、 提升JCWL用户权限
用管理员用户登录数据库,临时给JCWL用户DBA权限,使JCWL用户能够拥有建立用户的权限。
2、 删除小公司用户
删除小公司用户LHP和XZHAO。
Drop user LHP cascade;
删除用户时,会把用户所属的表连带删除,因此要记得备份相关用户下的数据库表。
3、 用JCWL用户建立用户
用JCWL用户建立LHP用户。
Create user LHP identified by LHP default tablespace LHP;
因为LHP用户是要读取用户JCWL下的T_WL_ZD_WZBM表,所以应该用JCWL用户新建用户LHP。
4、 建立物化视图日志
访问物化视图需要物化视图日志,在JCWL用户表下建立表T_WL_ZD_WZBM的日志,需要注意的是,表要有主键,物化视图日志也要有主键。
Create materialized view log on T_WL_ZD_WZBM with primary key;
物化视图日志的主键会在创建时自动从源表中获取。
如果日志已存在,需要先删除日志
Drop materialized view log on t_wl_zd_wzbm;
一定要用命令才能彻底删除,在pl/sql中不能彻底删除。
5、 给用户LHP赋权限
Grant connect to lhp;
Grant create session to LHP;
Grant create table to LHP;
Grant unlimited tablespace to LHP;
Grant create materialized view to LHP;
Grant select on t_wl_zd_wzbm to LHP;
Grant select on mlog$_t_wl_zd_wzbm to LHP;
Grant on commit refresh to LHP;
要想导入数据,则前4个权限是必须赋的,否则用户没有权限导入数据。
6、 导入数据库
Imp lhp/lhp@jcwl25 file=d:\database\lhp.dmp full=y
7、 用LHP登录
8、 用LHP用户建立物化视图
如果表T_WL_ZD_WZBM存在,先删除表
Drop table t_wl_zd_wzbm;
建立物化视图
Create materialized view t_wl_zd_wzbm refresh fast on commit as select * from jcwl.t_wl_zd_wzbm;
JCWL用户登录
SQL> drop user lhp cascade;
User dropped
SQL> create user lhp identified by lhp default tablespace lhp;
User created
SQL> grant connect to lhp;
Grant succeeded
SQL> grant create session to lhp;
Grant succeeded
SQL> grant create table to lhp;
Grant succeeded
SQL> grant unlimited tablespace to lhp;
Grant succeeded
SQL> create materialized view log on t_wl_zd_wzbm with primary key;
create materialized view log on t_wl_zd_wzbm with primary key
ORA-12000: 实体化视图日志已经存在于表 'T_WL_ZD_WZBM' 上
SQL> drop materialized view log on t_wl_zd_wzbm;
Materialized view log dropped
SQL> create materialized view log on t_wl_zd_wzbm with primary key;
Materialized view log created
SQL> Grant create materialized view to LHP;
Grant succeeded
SQL> Grant select on t_wl_zd_wzbm to LHP;
Grant succeeded
SQL> Grant select on mlog$_t_wl_zd_wzbm to LHP;
Grant succeeded
SQL> Grant on commit refresh to LHP;
Grant succeeded
LHP用户登录
SQL> Create materialized view t_wl_zd_wzbm refresh fast on commit as select * from jcwl.t_wl_zd_wzbm;
Materialized view created
删除物化视图
drop materialized view t_wl_zd_wzbm