`

oracledml误操作找回数据

阅读更多

DML误操作恢复过程

     1在没有提交之前,自己session可以撤销,使用rollback进行回滚

     2.提交之后,不能rollback。但是dml事务的提交历史数据在undo中有反操作记录的。默认保存的时间undo_retention=15分钟

     SQL> show parameter undo_retention

 

    NAME                                 TYPE                    VALUE

    -------------------------- ---------------------- ----------------------

    undo_retention                       integer                900

    SQL>

   保留时间之内的历史数据能否被覆盖,由guarantee来确定   通过查看undo表空间确认

    SQL> select tablespace_name,retention from dba_tablespaces;

    TABLESPACE_NAME                                          RETENTION

    ----------------------------------------------------- ---------------------

    SYSTEM                                                         NOT APPLY

    SYSAUX                                                         NOT APPLY

    UNDOTBS1                                                     NOGUARANTEE

    TEMP                                                             NOT APPLY

    USERS                                                           NOT APPLY

    UNDOTBS2                                                     NOGUARANTEE

    GGDATA                                                         NOT APPLY

    TEMP01                                                         NOT APPLY

    R1                                                                 NOT APPLY

    R2                                                                 NOT APPLY

    R3                                                                 NOT APPLY

    R4                                                                 NOT APPLY

 

    12 rows selected.

 

    SQL>

    如果确保指定时间内保存

    SQL> alter tablespace undotbs1 retention guarantee;

 

    Tablespace altered.

 

    SQL>

    

    SQL> select tablespace_name,retention from dba_tablespaces;

    TABLESPACE_NAME                                              RETENTION

    ------------------------------------------------------ ----------------------

    SYSTEM                                                          NOT APPLY

    SYSAUX                                                          NOT APPLY

    UNDOTBS1                                                      GUARANTEE

    TEMP                                                              NOT APPLY

    USERS                                                            NOT APPLY

    UNDOTBS2                                                      NOGUARANTEE

    GGDATA                                                          NOT APPLY

    TEMP01                                                           NOT APPLY

    R1                                                                  NOT APPLY

    R2                                                                  NOT APPLY

    R3                                                                  NOT APPLY

    R4                                                                  NOT APPLY

 

    12 rows selected.

 

    SQL>

    如何才能从undo表空间找出我们需要的DML历史数据呢?  

    使用闪回查询,查询的语句,使用as of scn/timestamp。 查询表在指定scn/timestamp的行记录状态   

    sql> select …… from t as of scn <> where …… order by ……;

    sql> select …… from t as of timestamp <> where …… order by ……;

    sql> select …… from t as of timestamp sysdate-1/1440 where …… order by ……; //查询一分钟前  1440=24*60*60-------一天的分钟数       

    例子:

    SQL> create table t as select empno,ename,job,mgr,sal,deptno from emp;  ---------------新建表emp1

    Table created.

    SQL> select * from t;

 

         EMPNO ENAME                JOB                       MGR        SAL     DEPTNO

    ---------- -------------------- ------------------ ---------- ---------- ----------

          7369 SMITH                CLERK                    7902        800         20

          7499 ALLEN                SALESMAN                 7698       1600         30

          7521 WARD                 SALESMAN                 7698       1250         30

          7566 JONES                MANAGER                  7839       2975         20

          7654 MARTIN               SALESMAN                 7698       1250         30

          7698 BLAKE                MANAGER                  7839       2850         30

          7782 CLARK                MANAGER                  7839       2450         10

          7788 SCOTT                ANALYST                  7566       3000         20

          7839 KING                 PRESIDENT                           5000         10

          7844 TURNER               SALESMAN                 7698       1500         30

          7876 ADAMS                CLERK                    7788       1100         20

          7900 JAMES                CLERK                    7698        950         30

          7902 FORD                 ANALYST                  7566       3000         20

          7934 MILLER               CLERK                    7782       1300         10

 

    14 rows selected.

 

    SQL>

    ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

    闪回版本查询精确的时间,或者scn

    select …… from t versions between scn minvalue and maxvalue where ……;

    versions_startscn    开始scn

    versions_starttime   开始时间

    versions_endscn      结束scn

    versions_xid     事务

    versions_operation    ---执行了什么操作  D delete |I insert |U update 

    +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

    模拟dml误操作,删除t表中的数据,然后进行提交commit操作

     SQL> delete t;

    14 rows deleted.

    SQL> commit;

    Commit complete.

    SQL>

    SQL> select versions_startscn,versions_starttime,versions_operation from t versions between scn minvalue and maxvalue;

 

    VERSIONS_STARTSCN VERSIONS_STARTTIME                                                          VE

    ----------------- --------------------------------------------------------------------------- --

             11512532 08-JAN-16 05.51.01 PM                                                       D  // 执行了delete操作

             11512532 08-JAN-16 05.51.01 PM                                                       D

             11512532 08-JAN-16 05.51.01 PM                                                       D

             11512532 08-JAN-16 05.51.01 PM                                                       D

             11512532 08-JAN-16 05.51.01 PM                                                       D

             11512532 08-JAN-16 05.51.01 PM                                                       D

             11512532 08-JAN-16 05.51.01 PM                                                       D

             11512532 08-JAN-16 05.51.01 PM                                                       D

             11512532 08-JAN-16 05.51.01 PM                                                       D

             11512532 08-JAN-16 05.51.01 PM                                                       D

             11512532 08-JAN-16 05.51.01 PM                                                       D

             11512532 08-JAN-16 05.51.01 PM                                                       D

             11512532 08-JAN-16 05.51.01 PM                                                       D

             11512532 08-JAN-16 05.51.01 PM                                                       D

         

    SQL>

     SQL> select * from t as of scn 11512532;

 

     no rows selected

    

    SQL> select * from t as of scn 11512531;//scn比着查询的scn-1       ------------------------------通过scn,查询出误操作的数据

 

             EMPNO ENAME                JOB                       MGR        SAL     DEPTNO

        ---------- -------------------- ------------------ ---------- ---------- ----------

              7369 SMITH                CLERK                    7902        800         20

              7499 ALLEN                SALESMAN                 7698       1600         30

              7521 WARD                 SALESMAN                 7698       1250         30

              7566 JONES                MANAGER                  7839       2975         20

              7654 MARTIN               SALESMAN                 7698       1250         30

              7698 BLAKE                MANAGER                  7839       2850         30

              7782 CLARK                MANAGER                  7839       2450         10

              7788 SCOTT                ANALYST                  7566       3000         20

              7839 KING                 PRESIDENT                           5000         10

              7844 TURNER               SALESMAN                 7698       1500         30

              7876 ADAMS                CLERK                    7788       1100         20

              7900 JAMES                CLERK                    7698        950         30

              7902 FORD                 ANALYST                  7566       3000         20

              7934 MILLER               CLERK                    7782       1300         10

 

        14 rows selected.

 

       SQL> insert into t select * from t as of scn 11512531;     将查询获得的数据重新插入t表

 

        14 rows created.

 

        SQL> commit;

 

        Commit complete.

 

        SQL> select * from t;

 

             EMPNO ENAME                JOB                       MGR        SAL     DEPTNO

        ---------- -------------------- ------------------ ---------- ---------- ----------

              7369 SMITH                CLERK                    7902        800         20

              7499 ALLEN                SALESMAN                 7698       1600         30

              7521 WARD                 SALESMAN                 7698       1250         30

              7566 JONES                MANAGER                  7839       2975         20

              7654 MARTIN               SALESMAN                 7698       1250         30

              7698 BLAKE                MANAGER                  7839       2850         30

              7782 CLARK                MANAGER                  7839       2450         10

              7788 SCOTT                ANALYST                  7566       3000         20

              7839 KING                 PRESIDENT                           5000         10

              7844 TURNER               SALESMAN                 7698       1500         30

              7876 ADAMS                CLERK                    7788       1100         20

              7900 JAMES                CLERK                    7698        950         30

              7902 FORD                 ANALYST                  7566       3000         20

              7934 MILLER               CLERK                    7782       1300         10

 

        14 rows selected.

 

       SQL> select * from t as of timestamp to_timestamp ('08-JAN-16 17.51.00','DD-Mon-RR HH24:MI:SS.FF');  ----------------通过starttime,查询出误操作的数据   //建议使用scn比较方便

 

             EMPNO ENAME                JOB                       MGR        SAL     DEPTNO

        ---------- -------------------- ------------------ ---------- ---------- ----------

              7369 SMITH                CLERK                    7902        800         20

              7499 ALLEN                SALESMAN                 7698       1600         30

              7521 WARD                 SALESMAN                 7698       1250         30

              7566 JONES                MANAGER                  7839       2975         20

              7654 MARTIN               SALESMAN                 7698       1250         30

              7698 BLAKE                MANAGER                  7839       2850         30

              7782 CLARK                MANAGER                  7839       2450         10

              7788 SCOTT                ANALYST                  7566       3000         20

              7839 KING                 PRESIDENT                           5000         10

              7844 TURNER               SALESMAN                 7698       1500         30

              7876 ADAMS                CLERK                    7788       1100         20

              7900 JAMES                CLERK                    7698        950         30

              7902 FORD                 ANALYST                  7566       3000         20

              7934 MILLER               CLERK                    7782       1300         10

 

        14 rows selected.

 

        SQL> select * from t as of timestamp sysdate-1/1440;   ------------------------如果执行误操作的时间较短,可以简单使用sysdate-n/1440!查询n分钟前的dml误操作

 

             EMPNO ENAME                JOB                       MGR        SAL     DEPTNO

        ---------- -------------------- ------------------ ---------- ---------- ----------

              7369 SMITH                CLERK                    7902        800         20

              7499 ALLEN                SALESMAN                 7698       1600         30

              7521 WARD                 SALESMAN                 7698       1250         30

              7566 JONES                MANAGER                  7839       2975         20

              7654 MARTIN               SALESMAN                 7698       1250         30

              7698 BLAKE                MANAGER                  7839       2850         30

              7782 CLARK                MANAGER                  7839       2450         10

              7788 SCOTT                ANALYST                  7566       3000         20

              7839 KING                 PRESIDENT                           5000         10

              7844 TURNER               SALESMAN                 7698       1500         30

              7876 ADAMS                CLERK                    7788       1100         20

              7900 JAMES                CLERK                    7698        950         30

              7902 FORD                 ANALYST                  7566       3000         20

              7934 MILLER               CLERK                    7782       1300         10

 

        14 rows selected.

 

        SQL>

注意: 正常提交会有。如果ddl/tcl等隐式提交的,这样dml不会在undo表空间记录

分享到:
评论

相关推荐

    oracle操作数据-DML语句.pptx

    oracle操作数据-DML语句.pptx

    Oracle DML触发器在数据库编程中的应用.pdf

    Oracle DML 触发器是关系型数据库系统中的一个重要组件,能够自动执行特定的操作,以响应数据库中的变化。本文将对 Oracle DML 触发器的工作原理、类型、使用方法等进行详细的介绍,并提供了实践中的应用示例。 1. ...

    oracleDML触发器.ppt

    "Oracle DML 触发器" ...Oracle DML 触发器是一种非常有用的机制,它可以自动执行某些操作、提高数据的一致性和安全性、减少开发者的工作量等。但是,在使用触发器时需要注意一些问题,如命名、限制条件、主体等。

    oracleDML触发器1.ppt

    Oracle DML触发器是数据库管理系统Oracle中的一种特性,它允许开发者在特定的数据操作语言(DML)事件(如INSERT、UPDATE、DELETE)发生时自动执行一段PL/SQL代码。DML触发器主要用于实现数据完整性、业务规则的强制...

    oracle操作数据DML语句.ppt

    Oracle 操作数据 DML 语句 Oracle 操作数据 DML 语句是 Database Management System(数据库管理系统)中的一种基本语言,用于操作和管理数据库中的数据。DML 语句是 Data Manipulation Language(数据操作语言)...

    oracleDML触发器.pptx

    oracleDML触发器.pptx

    Oracle DML触发器的执行顺序.pdf

    Oracle DML 触发器的执行顺序 Oracle 中的 DML 触发器是一种存储在数据库中的 PL/SQL 块,能够自动响应特定事件,以实现一些复杂的业务规则。DML 触发器可以分为三种基本类型:数据操纵语句 (DML) 触发器、数据定义...

    MySQL-DML数据操作语言.sql

    MySql数据操作语言,包括 插入:insert、 修改:update、 删除:delete的相关语法和案例脚本。对学习MySql有很大的帮助。

    ORACLE truncate 数据恢复

    4. **操作系统文件恢复**:在某些情况下,如果数据文件没有被覆盖,可能可以通过操作系统级别的文件恢复工具找回。但这通常需要专业知识,并且成功率不能保证。 5. **第三方工具**:市场上有一些专门的数据库恢复...

    oracle操作数据DML语句.pptx

    本节将深入探讨Oracle操作数据的DML(Data Manipulation Language)语句,包括插入、更新和删除数据以及事务管理。 1. 插入数据(INSERT语句) 插入数据是向表中添加新行的基本操作。Oracle中的INSERT语句有两种...

    Oracle DML触发器在监视重要表中的作用.pdf

    Oracle数据库中的DML(Data Manipulation Language)触发器是一种强大的工具,用于在数据修改操作(插入、删除、更新)时自动执行特定的PL/SQL代码块。这些触发器可以监控对表的操作,实时记录用户的修改行为,这...

    oracle使用logmnr找回误删数据.rar

    6. **查询Log Miner结果**:通过查询V$LOGMNR_CONTENTS视图,可以查看到所有在指定日志区间内的DML(数据操纵语言)操作,包括删除记录。找到与误删操作相关的事务,记录其SQL语句。 7. **重建数据**:根据Log ...

    Oracle DDL,DML,DCL,TCL 基础概念

    数据操作语言(DML)用于在已有的数据库对象中插入、更新或删除数据。 - **SELECT**:用于检索数据库中的数据。 - 示例:`SELECT * FROM employees;` - **INSERT**:用于向表中插入新行。 - 示例:`INSERT INTO ...

    在oracle11g中DML语句对索引的影响[定义].pdf

    在Oracle 11g数据库管理系统中,DML(Data Manipulation Language)语句,包括INSERT、UPDATE和DELETE,都会对数据库中的索引产生影响。索引是提高查询性能的重要工具,但它们的维护成本也是数据库操作的一个考虑...

    Oracle的增量数据处理方案

    * 变化表(Change Table):保存从源表捕获的变化数据(包括各种 DML 产生的数据) * 变化集(Change Set):是保证事务一致性的数据集合。一个变化集对应多个变化表 * 订阅视图(Subscription View):提供给读取...

    oracle 数据仓库大批量数据处理技术.ppt

    - **并行处理**:Oracle支持并行执行DML操作,这在处理大数据时尤其有用。 - **数据管理**:可以方便地删除、备份和维护特定分区的数据,如定期清理历史数据。 - **高可用性**:如果一个分区发生故障,影响范围仅...

Global site tag (gtag.js) - Google Analytics