1.本次文档主要为大家分享在数据仓库中同步对表和物化视图的更改的方法。此方法基于对表和物化视图的同步更新,称为Synchronous Refresh,我们主要通过
以下示例演示此功能,具体的概念描述可以通过:https://docs.oracle.com/database/121/DWHSG/sync.htm#DWHSG-GUID-14730F6C-D96D-4AA3-A91E-9FBF456EC889
1.1DBMS_SYNC_REFRESH包提供一个接口来执行物化视图的同步刷新
1.2同步刷新是Oracle数据库版本12c中引入的一种刷新方法,它使我们能够保持一组数据字典表和在它们上定义的物化视图始终保持同步的方法。
1.3这个包的execute权限被授予PUBLIC,因此所有用户都可以执行这个包中的过程,对他们拥有的对象执行同步刷新。DBA可以对数据库中的所有表和物化视图执行同步刷新操作
----------------分割线----------------
2.初始化相关表和测试数据:
2.1环境测试依托于oracle官方提供的五个脚本: syncref_setup.sql syncref_run.sql syncref_run.log syncref_cst.sql syncref_cleanup.sql
2.2具体目录在ORACLE_HOME/rdbms/demo/syncref_*.* scripts
2.3用于创建DBMS_SYNC_REFRESH.CAN_SYNCREF_TABLE() API所使用的SYNCREF_TABLE脚本对应utlsrt.sql
2.4我的本地笔记本目录为:C:\app\wangrong\product\12.1.0\dbhome_1\RDBMS\ADMIN\utlsrt.sql




----------------分割线----------------
3.创建staging logs,用于上一步同步刷新的三张测试表

----------------分割线----------------
4.创建物化视图,并且注册物化视图用于同步更新操作


----------------分割线----------------
5.使用change-data填充staging-logs



----------------分割线----------------
6.开始做prepare_staging_log,分段日志表

----------------分割线----------------
7.以上操作完成后准备后检查分段日志的状态




----------------分割线----------------
8.开始执行刷新操作,并且显示状态信息






----------------分割线----------------
9.做一些delete操作,看看是否能够成功刷新

----------------分割线----------------
10.以下会话显示了使用register_mviews进行注册





----------------分割线----------------
11.
SQL>
SQL> -- 注册这个表然后进行分区交换





----------------分割线----------------
12.






注意:我的笔记本在C:\app\wangrong\product\12.1.0\dbhome_1\RDBMS\ADMIN\utlsrt.sql这个目录
----------------分割线----------------
13.

----------------分割线----------------
14.对应日志信息如下:









----------------分割线----------------
15.总结:
15.1本文档主要展示了如何为同步刷新设置基表和mv,创建和填充staging logs以及使用同步刷新 包括刷新组的操作。 同步刷新目录视图在此过程中的每个步骤及其后面显示有用的状态信息
主要用法包括如下:
15.1.1运行syncref_setup.sql
15.1.2连接到新用户syncref_user
15.1.3创建TIME,STORE和FACT基表。
15.1.4使用数据填充表。
15.1.5创建staging logs - 这将为同步刷新注册三个表
15.1.6创建物化视图 - mview被分区的同步刷新要求
15.2CREATE MATERIALIZED VIEW mv1 PARTITION BY RANGE ...
15.2.1注册mview for Synchronous Refresh,它隐式创建一组称为同步刷新组的相关对象。
15.3dbms_sync_refresh.register_mviews('MV1')
15.3.1从字典视图USER_SR_OBJ显示已注册的对象
15.3.2使用更改数据填充暂存日志 - 此数据将在同步刷新期间应用于基表和MV。
15.3.3准备分段日志。 如果检测到错误,则会在异常表USER_SR_STLOG_EXCEPTIONS中捕获它们。
15.3.4准备后,从字典视图USER_SR_ST_LOG_STATS检查分段日志的状态
15.3.5在刷新操作之前显示基表和物化视图内容
15.4执行准备刷新操作 dbms_sync_refresh.prepare_refresh(...)
15.4.1从数据字典视图中显示分段日志,对象和组的状态USER_SR_ST_LOG_STATS,USER_SR_OBJ_STATUS,USER_SR_ST_GRP_STATUS执行同步刷新
15.5dbms_sync_refresh.execute_refresh(...)
15.5.1从Data Distionary视图USER_SR_OBJ_STATUS,USER_SR_ST_GRP_STATUS检查组中对象的状态以及组本身的状态
刷新后检查基表的内容和MV
15.6以下会话显示如何在与mv1相同的组中注册其他mv,因为它们共享相同的基表
15.6.1 execute dbms_sync_refresh.register_mviews('mv2, mv2_year, mv1_halfmonth');




