物化视图和dbms_refresh

本文介绍了Oracle数据库中物化视图的创建及管理方法,包括如何使用dbms_refresh包进行刷新组的添加,并强调了提交操作的重要性。此外,还列举了用于查询物化视图及其刷新组的相关数据字典。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

物化视图,旧称快照,其内容可以周期的刷新.可以更好的帮助我们管理远程


materilized view in oracle

该文档中有一点需要提及: 创建物化视图以及使用 dbms_refresh.make() 添加刷新组和 dbms_refresh.add 添加物化视图时,  

所有的dbms_refresh包中语句皆为为 dml操作, 因此 要确保

提交语句 commit,  刷新组才算添加成功.


查看刷新组以及所包含的物化视图的数据字典包括:

*_refresh

*_refresh_children

dba_rgroup -- dba_refresh

dba_rchild   -- dba_refresh_children

etc...

物化视图 相关数据字典包括:

*_mview

*_mview_refresh_time

etc...

相关链接: Materialized View and Refresh Group Views

<think>我们正在讨论Oracle数据库中的DBMS_MVIEW.REFRESH过程。用户的问题集中在理解这个过程的作用以及特定语句`DBMS_MVIEW.REFRESH('$fundDividendTransferMV')`的功能。 根据之前的对话历史,我们已经解释了DBMS_MVIEW.REFRESH是用于刷新物化视图的,并介绍了不同的刷新方法(完全刷新、快速刷新、强制刷新)。现在用户要求更具体地解释这个语句的功能。 注意:用户提供的语句中有一个变量`$fundDividendTransferMV`,这可能是实际使用中会被替换为具体物化视图名称的占位符。在真实环境中,这个变量会被实际物化视图名替换。 核心解释: 1. **作用**:DBMS_MVIEW.REFRESH用于手动刷新一个或多个物化视图,使其数据与基表保持同步。 2. **参数**:这里只有一个参数`'$fundDividendTransferMV'`,它指定了要刷新的物化视图的名称(注意实际使用时变量会被替换)。 3. **刷新方式**:由于没有指定方法(method)参数,将使用默认的刷新方式。默认方式是“FORCE”,即Oracle会尝试快速刷新(FAST),如果不可行则使用完全刷新(COMPLETE)[^2]。 4. **执行方式**:这个语句通常以匿名PL/SQL块的形式执行,如: ```sql BEGIN DBMS_MVIEW.REFRESH('fundDividendTransferMV'); END; ``` 或者使用EXEC命令(在SQL*Plus等工具中): ```sql EXEC DBMS_MVIEW.REFRESH('fundDividendTransferMV'); ``` 附加说明: - 如果物化视图名称是大小写敏感的(例如创建时用了双引号),则参数中必须使用相同的大小写并用双引号包裹,例如:`"FundDividendTransferMV"`。 - 权限问题:执行该过程的用户需要具有刷新该物化视图的权限,否则会出现ORA-01031错误(如引用[1]所示)[^1]。 因此,语句`DBMS_MVIEW.REFRESH('$fundDividendTransferMV')`的功能是:刷新名为`fundDividendTransferMV`(实际替换变量后)的物化视图,使用默认的FORCE刷新方式。 接下来,按照要求生成相关问题。这些问题应围绕物化视图刷新展开,并参考之前的讨论(如权限、刷新方式、并行性等)。</think>### DBMS_MVIEW.REFRESH 的作用详解 `DBMS_MVIEW.REFRESH('$fundDividendTransferMV')` 是 Oracle 数据库中用于**手动刷新物化视图**的核心操作。其核心功能是**强制更新物化视图中的数据,使其与源表保持同步**。具体作用如下: 1. **数据同步机制** - 物化视图Materialized View)存储的是查询结果的物理副本 - 当源表数据变化时,物化视图不会自动更新 - 该过程强制将物化视图数据更新为最新状态 - 示例:`fundDividendTransferMV` 是基金分红转移相关物化视图 2. **刷新模式(默认 FORCE)** | 刷新模式 | 说明 | 适用场景 | |---------|------|---------| | `FORCE` (默认) | 先尝试快速刷新,失败则完全刷新 | 大多数场景 | | `FAST` | 仅增量更新变化数据 | 有物化视图日志时 | | `COMPLETE` | 全量重建物化视图 | 数据结构变更后 | ```sql -- 显式指定刷新模式示例 BEGIN DBMS_MVIEW.REFRESH('fundDividendTransferMV', 'C'); -- C=COMPLETE END; ``` 3. **执行过程解析** ```mermaid graph LR A[执行REFRESH命令] --> B{检查刷新模式} B -->|FORCE| C[尝试FAST刷新] C -->|成功| D[增量更新] C -->|失败| E[执行COMPLETE刷新] B -->|COMPLETE| E E --> F[全量重建MV] D --> G[更新完成] F --> G ``` 4. **关键特性** - **权限要求**:需要`CREATE MATERIALIZED VIEW`权限[^1] - **并行限制**:Oracle 10g+版本中`parallelism`参数可能不生效[^2] - **事务控制**:刷新操作在独立事务中完成 - **命名规范**:`$fundDividendTransferMV`中的`$`可能是变量占位符,实际应为有效物化视图名 ### 典型应用场景 1. **报表系统预计算** ```sql -- 每日收盘后刷新基金报表 BEGIN DBMS_MVIEW.REFRESH('fund_daily_report_mv'); END; ``` 2. **数据仓库ETL过程** ```sql -- 数据加载后刷新聚合视图 EXEC DBMS_MVIEW.REFRESH('sales_agg_mv', 'F'); ``` 3. **应用启动时初始化** ```sql -- 系统启动时确保数据最新 DBMS_MVIEW.REFRESH('user_portfolio_mv'); ``` ### 注意事项 1. 出现 **ORA-01031** 错误时,需检查执行用户权限: ```sql GRANT CREATE MATERIALIZED VIEW TO report_user; -- 授权语句 ``` 2. 大表刷新建议使用`ATOMIC_REFRESH => FALSE`避免长事务: ```sql BEGIN DBMS_MVIEW.REFRESH( list => 'large_mv', atomic_refresh => FALSE -- 非原子刷新 ); END; ``` 3. 快速刷新需满足条件: - 源表创建物化视图日志 - SELECT 语句符合快速刷新限制 - 包含主键或ROWID
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值