博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Oracle数据库常见的误操作恢复方法(上)
阅读量:5879 次
发布时间:2019-06-19

本文共 6214 字,大约阅读时间需要 20 分钟。

实验环境:Linux6.4 + Oracle 11g

面向读者:Oracle开发维护人员

概要:

 

本文以Oracle自带的scott用户进行演示:

首先逻辑备份导出scott的对象数据

$ exp scott/tiger file='/u01/app/backup/scott.dmp' log='/u01/app/backup/scott.log' owner=scott;

1.误操作drop了emp表

利用表级闪回恢复,只要回收站中有就可以恢复。

SQL> drop table emp;Table dropped.

闪回恢复

SQL> flashback table emp to before drop;Flashback complete.

闪回回来的表如果之前有主键和索引,对应的名字会变成一串字符,虽然不影响使用,但为了规范管理,建议将它们重命名为之前的名字

重命名索引名称:

SQL> alter index  "BIN$ESbzggEjPKfgU58JqMDOTQ==$1" rename to PK_EMP;Index altered

重命名主键约束名称:

SQL> alter table emp rename constraint "BIN$ESbzggEiPKfgU58JqMDOTQ==$1" to PK_EMP;Table altered

若闪回表时,数据库已存在同名表,可以在闪回时指定新的表名:

SQL>  flashback table emp to before drop rename to emp1;Flashback complete.

2.误操作delete了emp表

利用闪回查询结果恢复,只要undo表空间中还有误操作时间前的数据。

SQL> delete from emp;14 rows deleted.SQL> commit;Commit complete.SQL> select * from emp;no rows selectedSQL> select * from emp as of timestamp to_timestamp('2015-03-13 15:00:00','yyyy-mm-dd hh24:mi:ss');       EMPNO ENAME      JOB              MGR HIREDATE            SAL       COMM     DEPTNO---------- ---------- --------- ---------- ------------ ---------- ---------- ----------      7369 SMITH      CLERK           7902 17-DEC-80           800                    20      7499 ALLEN      SALESMAN        7698 20-FEB-81          1600        300         30      7521 WARD       SALESMAN        7698 22-FEB-81          1250        500         30      7566 JONES      MANAGER         7839 02-APR-81          2975                    20      7654 MARTIN     SALESMAN        7698 28-SEP-81          1250       1400         30      7698 BLAKE      MANAGER         7839 01-MAY-81          2850                    30      7782 CLARK      MANAGER         7839 09-JUN-81          2450                    10      7788 SCOTT      ANALYST         7566 19-APR-87          3000                    20      7839 KING       PRESIDENT            17-NOV-81          5000                    10      7844 TURNER     SALESMAN        7698 08-SEP-81          1500          0         30      7876 ADAMS      CLERK           7788 23-MAY-87          1100                    20      7900 JAMES      CLERK           7698 03-DEC-81           950                    30      7902 FORD       ANALYST         7566 03-DEC-81          3000                    20      7934 MILLER     CLERK           7782 23-JAN-82          1300                    1014 rows selected.

确定查询结果是要恢复的数据后,可以直接插入到emp表。

SQL> insert into emp select * from emp as of timestamp to_timestamp('2015-03-13 15:00:00','yyyy-mm-dd hh24:mi:ss');  14 rows created.SQL> commit;Commit complete.

3.误操作delete了emp表的部分记录

利用闪回查询结果恢复,只要undo表空间中还有误操作时间前的数据,跟第二种场景一样,只是多了条件限定。

SQL> delete from emp where sal <2000;8 rows deleted.SQL> commit;Commit complete.SQL> select * from emp;     EMPNO ENAME      JOB              MGR HIREDATE            SAL       COMM     DEPTNO---------- ---------- --------- ---------- ------------ ---------- ---------- ----------      7566 JONES      MANAGER         7839 02-APR-81          2975                    20      7698 BLAKE      MANAGER         7839 01-MAY-81          2850                    30      7782 CLARK      MANAGER         7839 09-JUN-81          2450                    10      7788 SCOTT      ANALYST         7566 19-APR-87          3000                    20      7839 KING       PRESIDENT            17-NOV-81          5000                    10      7902 FORD       ANALYST         7566 03-DEC-81          3000                    206 rows selected.SQL>  select * from emp as of timestamp to_timestamp('2015-03-13 15:00:00','yyyy-mm-dd hh24:mi:ss') where sal <2000;     EMPNO ENAME      JOB              MGR HIREDATE            SAL       COMM     DEPTNO---------- ---------- --------- ---------- ------------ ---------- ---------- ----------      7369 SMITH      CLERK           7902 17-DEC-80           800                    20      7499 ALLEN      SALESMAN        7698 20-FEB-81          1600        300         30      7521 WARD       SALESMAN        7698 22-FEB-81          1250        500         30      7654 MARTIN     SALESMAN        7698 28-SEP-81          1250       1400         30      7844 TURNER     SALESMAN        7698 08-SEP-81          1500          0         30      7876 ADAMS      CLERK           7788 23-MAY-87          1100                    20      7900 JAMES      CLERK           7698 03-DEC-81           950                    30      7934 MILLER     CLERK           7782 23-JAN-82          1300                    108 rows selected.

确定查询结果是要恢复的数据后,可以直接插入到emp表。

SQL> insert into emp select * from emp as of timestamp to_timestamp('2015-03-13 15:00:00','yyyy-mm-dd hh24:mi:ss') where sal <2000;8 rows created.SQL> commit;Commit complete.

4.误操作truncate了emp表

SQL> truncate table emp;Table truncated.

这时由于表定义已经改变,无法查到表的历史数据了

SQL> select * from emp as of timestamp to_timestamp('2015-03-13 15:00:00','yyyy-mm-dd hh24:mi:ss');select * from emp as of timestamp to_timestamp('2015-03-13 15:00:00','yyyy-mm-dd hh24:mi:ss')              *ERROR at line 1:ORA-01466: unable to read data - table definition has changed

只能通过之前的备份恢复了,当然,只能恢复到exp导出时的状态。

$ imp scott/tiger file='/u01/app/backup/scott.dmp' log='/u01/app/backup/restore_emp.log' tables=emp ignore=y Import: Release 11.2.0.4.0 - Production on Fri Mar 13 15:29:35 2015Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved. Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit ProductionWith the Partitioning, Automatic Storage Management, OLAP, Data Miningand Real Application Testing optionsExport file created by EXPORT:V11.02.00 via conventional pathimport done in ZHS16GBK character set and AL16UTF16 NCHAR character set. importing SCOTT's objects into SCOTT. importing SCOTT's objects into SCOTT. . importing table                          "EMP"         14 rows importedAbout to enable constraints...Import terminated successfully without warnings.

验证数据已经成功恢复

SQL> select count(1) from emp;  COUNT(1)----------        14

5.误操作带有purge选项drop了表

SQL> drop table emp purge;Table dropped.

由于purge选项的drop不进入回收站,闪回表不再可用。

SQL> flashback table emp to before drop;flashback table emp to before drop*ERROR at line 1:ORA-38305: object not in RECYCLE BIN

此时只能通过之前的备份恢复,跟第四种情形恢复方法一样,不再赘述。

转载地址:http://pbdix.baihongyu.com/

你可能感兴趣的文章
增强myEclipse的提示功能
查看>>
Zabbix汉化方法
查看>>
Java I/O系统基础知识
查看>>
Java多线程设计模式(2)生产者与消费者模式
查看>>
对象并不一定都是在堆上分配内存的
查看>>
刘宇凡:罗永浩的锤子情怀只能拿去喂狗
查看>>
php晚了8小时 PHP5中的时间相差8小时的解决办法
查看>>
JS(JavaScript)的初了解7(更新中···)
查看>>
svn文件管理器的使用
查看>>
Ansible playbook 使用
查看>>
for/foreach/linq执行效率测试
查看>>
js /jquery停止事件冒泡和阻止浏览器默认事件
查看>>
长春理工大学第十四届程序设计竞赛(重现赛)I.Fate Grand Order
查看>>
好作品地址
查看>>
[翻译]Protocol Buffer 基础: C++
查看>>
runloop与线程的关系
查看>>
[Bzoj2246]迷宫探险(概率+DP)
查看>>
[译] 感受 4px 基线网格带来的便利
查看>>
oracle常用函数
查看>>
MYBATIS
查看>>