如何在 PL-SQL 上更改之前获取视图/触发器?
Posted
技术标签:
【中文标题】如何在 PL-SQL 上更改之前获取视图/触发器?【英文标题】:How to get view/trigger before altered on PL-SQL? 【发布时间】:2018-07-01 11:36:53 【问题描述】:我有一个看法:
昨天 |我的观点 | select * from mat where bereich='AAA'
|
今天|我的观点 | select * from mat where bereich='BBB' AND typ='BR'
|
有人改变了我对 prod 的看法,或者我忘记备份之前的查询并且它已经提交
如何找回我昨天的查询/我的视图?
谢谢。
【问题讨论】:
hmmmm,您的系统似乎在没有模式脚本的源代码控制或对生产的受限/监控访问的情况下运行。全方位的坏习惯。我知道这对您现在没有帮助,但这是一个重要的学习点。没有以适当的尊重程度对待其生产数据库的应用程序不可避免地注定要失败。 你好吧,我的系统在没有源代码控制的情况下运行,这将与同事分享以讨论最佳实践。感谢朋友的回答 【参考方案1】:您可以使用user_views
数据字典视图查看您之前的@987654322@ 视图。为此,您需要一些特权,例如
SQL> sqlplus / as sysdba
SQL> grant flashback on user_views to myschema;
以及使用闪回技术的最低要求,例如
SQL> select p.value
from v$parameter p
where p.name = 'db_flashback_retention_target';
VALUE
-----
1440 -- should be set to 1440(minute) as minimum to get the value for the day before.
由您的DBA提供。
然后,连接到您的架构
SQL> conn myschema/mypwd
并使用以下查询
SQL> select t.text
from user_views
as of timestamp systimestamp - interval '1' day t
where t.view_name = 'MYVIEW';
重新创建您过去视图的text
。
P.S.根据您的需要或希望,关键字 day
可能会替换为 hour
、minute
或 second
。
【讨论】:
【参考方案2】:视图只是一个存储的查询,数据没有发生任何事情。只需使用旧查询重新创建视图:
create or replace myview as
select *
from mat
where bereich = 'AAA';
【讨论】:
我不知道旧查询,因为有人更改了视图。数据没有发生任何事情,但是我的用户用他们没有出现的数据大喊大叫,我的意思是有什么办法可以回滚视图? 您的源代码控制存储库中有您的查询副本,对吧?以上是关于如何在 PL-SQL 上更改之前获取视图/触发器?的主要内容,如果未能解决你的问题,请参考以下文章
对 SwiftUI FetchRequest 的更改不会触发视图刷新?