一、物化视图
物化视图 (MATERIALIZED VIEW) 是目标表在特定时间点上的一个副本,占用存储空间,即将查询出来的数据存储在数据库中。当所依赖的一个或多个基表的数据发生更新,必须启用刷新机制才能保证数据是最新的。
物化视图可以用于数据复制(Data Replication),也可用于数据仓库缓存结果集以此来提升复杂查询的性能。
1.1、测试数据准备
CREATE USER DCP IDENTIFIED BY 123456789;
GRANT DBA TO DCP;
CREATE TABLE "DCP"."TEST"
(
"ID" INT PRIMARY KEY,
"TEST_DATE" DATE) STORAGE(ON "MAIN", CLUSTERBTR) ;
INSERT INTO "DCP"."TEST" SELECT LEVEL,SYSDATE() FROM DUAL CONNECT BY LEVEL<=10;
COMMIT;
1.2 参数介绍及实操
刷新模式:
1.2.1 FAST 根据相关表上的数据更改记录进行增量刷新。
普通 DML 操作生成的记录存在 于物化视图日志。使用 FAST 刷新之前,必须先建好物化视图日志。
例子:
CREATE MATERIALIZED VIEW LOG ON DCP.TEST
WITH primary key
PURGE START WITH SYSDATE NEXT SYSDATE+1;
CREATE MATERIALIZED VIEW DCP.MATERIALIZED_VIEW_10
BUILD immediate
REFRESH FAST
ON DEMAND
WITH primary key
DISABLE QUERY REWRITE
AS
SELECT * FROM DCP.TEST;
INSERT INTO DCP.TEST VALUES(14,SYSDATE);
COMMIT;
select * from "DCP".MATERIALIZED_VIEW_10;
REFRESH MATERIALIZED VIEW "DCP".MATERIALIZED_VIEW_10 FAST;
1.2.2. COMPLETE 通过执行物化视图的定义脚本进行完全刷新。
例子:
CREATE MATERIALIZED VIEW DCP.MATERIALIZED_VIEW_11
BUILD immediate
REFRESH complete
ON DEMAND
WITH primary key
DISABLE QUERY REWRITE
AS
SELECT * FROM DCP.TEST;
INSERT INTO DCP.TEST VALUES(15,SYSDATE);
COMMIT;
select * from "DCP".MATERIALIZED_VIEW_11;
1.2.3. FORCE 默认选项。当快速刷新可用时采用快速刷新,否则采用完全刷新。
例子:
CREATE MATERIALIZED VIEW DCP.MATERIALIZED_VIEW_12
BUILD immediate
REFRESH force
ON DEMAND
WITH primary key
DISABLE QUERY REWRITE
AS
SELECT * FROM DCP.TEST;
INSERT INTO DCP.TEST VALUES(16,SYSDATE);
COMMIT;
REFRESH MATERIALIZED VIEW "DCP".MATERIALIZED_VIEW_12 force;
select * from "DCP".MATERIALIZED_VIEW_12;
二、锁机制
2.1、锁概述
锁是一种防止相互数据破坏的机制。当在访问共享数据的事务之间,错误的更新数据或更改数据结构,将引起数据一致性被破坏。锁在维护数据库并发性和一致性方面起着至关重要的作用
DM 数据库支持多用户并发访问、修改数据,有可能出现多个事务同时访问、修改相同
数据的情况。若对并发操作不加控制,就可能会访问到不正确的数据,破坏数据的一致性和
正确性。
封锁机制是实现数据库并发控制的一个非常重要的技术。当事务在对某个数据库对象进
行操作前,需要先对其封锁。封锁后事务就对该数据库对象有了一定的控制,在该事务释放
锁之前,其他的事务不能对此数据库对象进行相应操作。
2.2、锁模式
锁模式指定并发用户如何访问锁定资源。DM 数据库使用四种不同的锁模式:共享锁、排他锁、意向共享锁和意向排他锁。
2.2.1 共享锁
共享锁(Share Lock ,简称 S 锁)用于读操作,防止其他事务修改正在访问的对象。
这种封锁模式允许多个事务同时并发读取相同的资源,但是不允许任何事务修改这个资源。
2.2.2 排他锁
排他锁(Exclusive Lock ,简称 X 锁)用于写操作,以独占的方式访问对象,不允许任
何其他事务访问被封锁对象;防止多个事务同时修改相同的数据,避免引发数据错误;防止
访问一个正在被修改的对象,避免引发数据不一致。一般在修改对象定义时使用。
2.2.3 意向锁
意向锁(Intent Lock )用于读取或修改被访问对象数据时使用,多个事务可以同时对
相同对象上意向锁, DM 支持两种意向锁:
SELECT * FROM V$LOCK;
可以看到有很多列,
addr: 该列表示锁所存储的内存地址
irx_id: 锁所属的事务 ID
ltype:锁类型,对象锁,tid锁
lmode:锁的模式,is,ix,s,x四种模式
BLOCKED :锁是否处于上锁等待状态,0 表示已上锁成功,1 表示处于上锁等待状态
table_id:表示表对象或字典对象的 ID,对于 TID 锁,表示封锁记录对应的表 ID
ROW_IDX :改列为 TID 锁封锁记录的行信息
tid:TID 锁对象事务 ID
文章
阅读量
获赞