当前位置: 老葡京网站娱乐 > 数据库 > Oracle教程 > 正文

Oracle 10g R2特性之数据仓库和集成特性

时间:2008-02-28 Oracle技术网

老葡京网站娱乐 www.sdguanhua.com 分区更改跟踪:不需要 MV 日志

要了解此增强功能,首先必须了解物化视图 (MV) 刷新过程中的分区修整概念。

假设基于列 ACC_MGR_ID 对表 ACCOUNTS 进行了分区,每个 ACC_MGR_ID 值一个分区。您根据 ACCOUNTS 创建了一个名为 ACC_VIEW 的 MV,该 MV 也根据列 ACC_MGR_ID 进行了分区,每个 ACC_MGR_ID 一个分区,如下图所示:

假设已经更新了表 ACCOUNTS 中的记录,但只在分区 P1 中进行了此更新。要快速刷新此 MV,您只需刷新分区 P1 而非整个表,这里正是与 ACC_MGR_ID 相关的数据所在的分区。Oracle 自动执行此任务,通过一个名为分区更改跟踪 (PCT) 的特性跟踪对分区的更改。但有一个问题需稍加注意:要在快速刷新的过程中启用 PCT,必须创建 MV 日志,当表中的行发生变化会填充这些日志。发出刷新命令后,刷新进程将读取 MV 日志以识别这些更改。

不用说,该要求增加了操作的总执行时间。此外,附加的插入操作将消耗 CPU 周期和 I/O 带宽。

幸好,在 Oracle 数据库 10g 第 2 版中,PCT 不需要 MV 日志即可工作。让我们看一看它的作用方式。首先,确认表 ACCOUNTS 中没有 MV 日志。SQL> select *
2 from dba_mview_logs
3 where master = 'ACCOUNTS';
no rows selected

现在,更新该表中的某个记录。update accounts set last_name = '...'
where acc_mgr_id = 3;

该记录位于分区 P3 中。

现在,您就可以刷新此 MV 了。但首先记录表 ACCOUNTS 所有段的段级统计信息。稍后,您将使用这些统计信息了解使用了哪些段。select SUBOBJECT_NAME, value from v$segment_statistics
where owner = 'ARUP'
and OBJECT_NAME = 'ACCOUNTS'
and STATISTIC_NAME = 'logical reads'
order by SUBOBJECT_NAME
/
SUBOBJECT_NAME           VALUE
------------------------------ ----------
P1                  8320
P10                 8624
P2                 12112
P3                 11856
P4                  8800
P5                  7904
P6                  8256
P7                  8016
P8                  8272
P9                  7840
PMAX                 256
11 rows selected.