ORACLE物化视图 Query Rewrite的一般理解之二
在Oracle的Query Rewrite中主要有三点, 第一是要使用CBO; 第二是要设置query rewrite enabled参数为TRUE; 第三是要先择设置query rewrite integrity参数的值(stale_tolerated, trusted, enforced). 对于第一点, 我们最好analyze相关的表及索引及MV; 对于第二点,这个参数只有两个值(true, false), 很简单; 对于第三点, 我们先来看Oracle的官方对于这个参数的解释:
ENFORCED
Oracle enforces and guarantees consistency and integrity
TRUSTED
Oracle allows rewrites using relationships that have been declared, but that are not enforced by Oracle.
STALE_TOLERATED
Oracle allows rewrites using unenforced relationships. Materialized views are eligible for rewrite even if they are known to be inconsistent with the underlying detail data.
这个参数有点难于理解一些, 但主要和数据的一致性有关, 在Oracle的Query Rewrite中, 一些约束的声明或状态和Oracle决于可否Query Rewrite有很大的关系. ENFORCED表示Oracle只相信Enabled和Validated的约束, 而Trusted则相信RELY的约束, 就算这个约束没有Enabled和Validated, 这两种都要求MVIEW中的数据是及时刷新的,而STALE_TOLERATED则可以容忍一切, 就算中间表的数据是旧的, 指基表有新数据修改而MVIEW还没有刷新的情况下, Oracle也会选择使用Query Rewrite来作查询, 在这种情况下, 查出来的数据可能是不准的. 下面我们来作一个例子来显示enforced与trusted的不同:
接着前面的例子,我们创建这样一个实体化视图:
CREATE MATERIALIZED VIEW MV_TABLE
ENABLE QUERY REWRITE
AS
SELECT U.USER#,COUNT(*) OBJCNT from USR_TABLE U,OBJ_TABLE O
WHERE U.USER#=O.USER#
group by u.user#
接下来我们创建这样的两个约束:
ALTER TABLE USR_TABLE ADD PRIMARY KEY (USER#) RELY DISABLE;
ALTER TABLE OBJ_TABLE ADD FOREIGN KEY (USER#)
REFERENCES USR_TABLE(USER#) RELY DISABLE;
下接来创建一个USR_LEVEL的表, 如下所示:
CREATE TABLE USR_LEVLEL AS SELECT USER#, TRUNC(USER#/10) ULEVEL from USR_TABLE;
实验所需要的表都建起来了, 对三个表和一个MVIEW进行分析后, 下面来做测试:
SQL> SHOW PARAMETE
相关文档:
实践第一讲:
名词解释:
dataguard:呵呵 ORACLE高可用体系中三架马车之一(RAC、STREAM)。干嘛用???就是异地备份、容灾什么的。什么原理??==聊哈。
primary:数据母体
standby:数据母体的拷贝或备份或克隆(只能克9个 为什么 要问ORACLE 为什么 log_archive_dest_n 这个你N的上限是10喽)
实践第二件:
实践检 ......
当你在数据库中创建数据表的时候,你需要定义表中所有字段的类型。ORACLE有许多种数据类型以满足你的需要。数据类型大约分为:character, number, date, LOB, 和RAW等类型。虽然ORACLE8i也允许你自定义数据类型,但是它们是最基本的数据类型。在下面的文章中你将了解到他们在oracle 中的用法、限制以及允许值。
......
1 oracle 实例
安装--全局数据库名:可以加扩展名:比如test.com.cn(而数据库实例名为test)
数据库口令:为数据库系统帐户:sys,system,sysman,dbsnmp提供密码
高级安装:为每个用户提供不同的密码
sys: change_on_install
system:manager
sysman:oem_temp
dbsnmp:dbsnmp
internal: orcale
scott:tiger
demo: ......
oracle断电后重启出现的问题已经解决方法
一、ORA-00132
问题描述 :syntax error or unresolved network name ''
第1步:复制一份pfile参数文件(注意:oracle中的pfile指的就是init<sid>.ora文件)
$sqlplus '/as sysdba';
SQL> create pfile from spfile='/u01/oracle/product/10.2.0/db_1/dbs/spf ......
DECODE函数相当于一条件语句(IF).它将输入数值与函数中的参数列表相比较,根据输入值返回一个对应值。函数的参数列表是由若干数值及其对应结果值组成的若干序偶形式。当然,如果未能与任何一个实参序偶匹配成功,则函数也有默认的返回值。区别于SQL的其它函数,DECODE函数还能识别和操作空值.
其具体的语法格式如下:
DE ......