Oracle 如何在MV上重新创建触发器
我们有两个Oracle DB实例:ORIG和REPL,它们之间有一个DB链接 ORIG中有一些表,每个表都有一个实体化视图日志(MVL)。MVL用于刷新位于REPL中的实体化视图(MV) REPL中的其他用户有权从MVs中进行选择。REPL中的某些mv包含after-insert触发器 如果我们需要更改ORIG中的表(例如,添加一个新列),有一个程序可以执行以下操作(以确保REPL中的MV与ORIG中的表具有相同的结构):Oracle 如何在MV上重新创建触发器,oracle,plsql,triggers,materialized-views,Oracle,Plsql,Triggers,Materialized Views,我们有两个Oracle DB实例:ORIG和REPL,它们之间有一个DB链接 ORIG中有一些表,每个表都有一个实体化视图日志(MVL)。MVL用于刷新位于REPL中的实体化视图(MV) REPL中的其他用户有权从MVs中进行选择。REPL中的某些mv包含after-insert触发器 如果我们需要更改ORIG中的表(例如,添加一个新列),有一个程序可以执行以下操作(以确保REPL中的MV与ORIG中的表具有相同的结构): 更改原始表格 更改原始版本中的MVL 在REPL中删除并重新创建MV(
- 更改原始表格
- 更改原始版本中的MVL
- 在REPL中删除并重新创建MV(使其与ORIG中的表格具有相同的结构)
- 授予REPL中MV的权限
if table_name = 'tableA' then
create triggerA
...
但我相信有更好的解决办法
有什么建议吗?一种解决方案是将触发器的定义从所有触发器字典表存储到临时表,然后读取该表以重新创建触发器。巴努·亚达夫:好主意,谢谢。明天我会考虑一下。如果源表和MV结构发生了变化,触发代码也会发生变化吗?无论是哪种方式,看起来你都开始着手编写一个数据库部署过程:也许你应该考虑一个产品,比如Liquibase,它使用源代码管理和构建工具(Maven,TeaveCase:Actudio)。APC:不,即使源表发生变化,触发器代码仍然是相同的。