如何在 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 可能会替换为 hourminutesecond

【讨论】:

【参考方案2】:

视图只是一个存储的查询,数据没有发生任何事情。只需使用旧查询重新创建视图:

create or replace myview as
  select * 
  from mat
  where bereich = 'AAA';

【讨论】:

我不知道旧查询,因为有人更改了视图。数据没有发生任何事情,但是我的用户用他们没有出现的数据大喊大叫,我的意思是有什么办法可以回滚视图? 您的源代码控制存储库中有您的查询副本,对吧?

以上是关于如何在 PL-SQL 上更改之前获取视图/触发器?的主要内容,如果未能解决你的问题,请参考以下文章

重置自动递增序列 pl-sql

对 SwiftUI FetchRequest 的更改不会触发视图刷新?

如何使用 PL-SQL 在 Oracle 中获取列数据类型

如何通过 PL-Sql 获取数字范围内的数字。?

Stickit:如何在每个模型后触发更改事件 -> 视图更改

mysql--视图,触发器