oracle - MV 刷新不删除数据
问题描述
专家们,
我需要帮助才能在 Oracle 中创建一个物化视图,该视图在从基表中删除时不会从 MV 中删除数据。
我的基表:
1) create table one11 (aa INT, bb INT, cc varchar2(10));
2) alter table one11 add primary key(aa);
3) insert into one11 values(1,1,'AA');
4) insert into one11 values(2,1,'BB');
5) insert into one11 values(3,1,'CC');
6)CREATE MATERIALIZED VIEW LOG ON ONE11
WITH PRIMARY KEY, SEQUENCE, ROWID(BB, CC)
INCLUDING NEW VALUES;
7)CREATE MATERIALIZED VIEW one11_mv
REFRESH FAST
START WITH (SYSDATE) NEXT (SYSDATE + interval '1' minute) AS
select * from one11;
8)select * from one11_mv; --After 1 min
AA BB CC
1 1 AA
2 1 BB
3 1 CC
9) delete from one11 where aa= 3; --After 1 min
AA BB CC
1 1 AA
2 1 BB
----
The expected result from MV after delete statement
AA BB CC
1 1 AA
2 1 BB
3 1 CC
TIA
解决方案
否。要刷新 MV 中的数据,您有两个选择:
- 完全刷新:重新运行MV中的查询
- 快速刷新:应用 MV 日志中的所有更改
无论哪种方式,您都会丢失已删除的行。因此,如果您想从基表中删除行,但将它们保留在 MV 中,则必须更改策略。
您可以这样做的方法包括:
- 滚动你自己的 MV:在插入/更新时将所有内容复制到另一个表
- 更改为软删除:
is_deleted
向表中添加一个标志并将所有更改deletes
为updates
设置此标志。然后 MV 可以包含这些“已删除”的行,而所有其他应用程序代码将它们隐藏起来
推荐阅读
- batch-file - 如何制作随机数/字母生成器?
- javascript - iFrame 交互在 WKWebView 中无法正常工作
- angular - 如何使用角度显示highCharts中每个点的唯一名称
- r - 如何在 R 中取消对合并表的分组?
- ios - #AudioKit AudioKit 和 CoreAudio 可以在同一个 iOS 应用程序中互通吗?
- javascript - 这个javascript代码有效吗?它有效率吗?试图创建一个 javascript 用户 ID 和一个会话 ID。不确定我是否有有效的代码
- nlp - 在不平衡引文数据集上使用 LSTM 进行情感分析
- julia - 如何从我的模块中的子模块导出相同功能的多个方法?
- android-studio - 如何在 Android Studio 中使用 Ucanaccess 库?
- javascript - 如何在 html 中使用 jQuery 正确显示下拉菜单