Oracle database恢复被修改的视图实现方式
作者:为什么不问问神奇的海螺呢丶
同事发现视图被修改,通过LAST_DDL_TIME定位修改时间,利用dba_views.text字段回溯旧SQL内容恢复视图,建议生产环境创建视图时避免使用CREATE OR REPLACE
Oracle database恢复被修改的视图
早上同事来找、 一个视图被修改了、 能不能查出来修改的时间、
研究了下系统中各个数据字典、找到一个表可以看到、
select * from all_objects where OBJECT_NAME='CV_SR_PART'; OWNER OBJECT_NAME SUBOBJECT_NAME OBJECT_ID DATA_OBJECT_ID OBJECT_TYPE CREATED LAST_DDL_TIME TIMESTAMP STATUS TEMPORARY GENERATED SECONDARY NAMESPACE EDITION_NAME ------------------------------ ------------------------------ ------------------------------ ---------- -------------- ------------------- ----------- ------------- ------------------- ------- --------- --------- --------- ---------- ------------------------------ SIEBEL CV_SR_PART 287957 VIEW 2016/7/7 2: 2018/6/8 11:5 2018-06-08:11:52:16 VALID N N N 1
据我推测、 LAST_DDL_TIME就是修改时间
那么问题来了、 怎么恢复呢?
通过数据库备份、 做不完全恢复?
太麻烦了、 生产数据库也不合理、
视图的本质存放的是一条sql、 那么,
select * from dba_views where view_name='CV_SR_PART'
dba_views 这个视图中text字段存放了视图本质、
下面回溯时间
看下被视图被修改的时间前text字段存放了什么、
select text from dba_views as of timestamp to_date('201806081100','yyyymmddhh24miss') where view_name='CV_SR_PART';
查到之前的视图内容、 重新执行下就可以了、
划重点
生产系统上创建视图的时候不要create or replace
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。