开发之没沟通误删客户数据库数据之找数据路

很悲催,以为在客户那边的数据有问题删掉就行了,结果告诉我那是客户的正常使用的数据,我也是一脸懵逼。特此警戒自己和大家,开发的沟通很重要很重要很重要。然后就开始了找回丢失数据的漫长(一天)道路。

1.首先我使用的是plsql的oracle可视化界面的空间,我先查看了下历史执行的语句记录Ctrl+e,可以看到所有近期执行的sql语句,发现并没有使用语句做删除的,是直接在数据库进行操作的,还是用语句操作的好,整还是得整规范的。另寻他路;

2.使用 Oracle Database 10g 中的闪回表特性。 

        2.1alter table 表名 enable row movement;   允许移动

        2.2 查询删除数据的时间点的数据(也就是闪回至该时间点之前的数据)  

              select * from WMS_TEST as of timestamp to_timestamp('2016-02-26 12:10:00','yyyy-mm-dd hh24:mi:ss');  (如果不是,则继续缩小范围)  

       2.3 恢复删除且已提交的数据  

  flashback table wms_out_end_product_item to timestamp to_timestamp('2016-04-1 14:30:00','yyyy-mm-dd hh24:mi:ss');  

       2.4  alter table 表名 disable row movement;   使用完之后关闭

 操作了这个方法之后,确实发现在昨天晚上8点左右删的数据中的一步,在执行的过程中则报了个快照过久的异常。OMG,发现时间是过得差不多一天了,去查了一下了解到,如果oracle没有设置过快照保存的时间,最多也就一天可以,有些还没一天,看具体的环境。用这个方法找回了两天数据。

3.没退路了。只好找到原来的系统设置好的每天自动更新数据库的位置,取出了当天凌晨数据库自动的备份文件.dbm,创建一个新的 数据库,把数据导过来,再找到当时删除的记录,说干就干,做事情,解决问题,你一下解决不了,就不要多想 了,感觉改变策略执行下一个问题,这样处理问题的效率比较高,人的想法也会比较积极(跑偏了),继续先拿着他们的压缩包搭建一个数据库。导出数据库的脚本语句:

Expdp zjshnew/zjshnew@ZJSHNEW directory=dir_dp dumpfile=ZHSH20171213.dmp logfile=ZJSHNEW20171213.log schemas=zjshnew

 

     3.1先创建数据库, 数据库的名称和用户名称密码 以及表空间名与客户那边的最好保持一致,以免出错。

     3.2创建表空间语句:

create tablespace zczg 
logging  
datafile 'D:\app\Administrator\oradata\zczg\zczg.dbf' ---实际实例目录
size 50m  
autoextend on  
next 50m maxsize 20480m  
extent management local;  

    3.3创建数据库日志文件语句:

create temporary tablespace zczg_temp  
tempfile 'D:\app\Administrator\oradata\zczg\zczg_temp.dbf'---实际实例目录
size 50m  
autoextend on  
next 50m maxsize 20480m  
extent management local; 

    3.4创建用户语句:

create user zczg identified by zczg  
default tablespace zczg  
temporary tablespace zczg_temp;

    3.5授权给用户语句:

grant connect,resource to zczg; 
grant dba to zczg;

    3.6做一个脚本.bat,数据库导入文件:

Impdp zhgh/zhgh@zhgh directory=dir_dp dumpfile=ZHGH_DB_20170913.DMP remap_schema
=zhgh:zhgh transform=segment_attributes:n logfile=zhgh.log

 

posted @ 2018-05-31 13:52  南往人6  阅读(233)  评论(0编辑  收藏  举报