oracle针对truncate截断表之后要如何恢复数据?急啊!

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了oracle针对truncate截断表之后要如何恢复数据?急啊!相关的知识,希望对你有一定的参考价值。

参考技术A 你可以试试PRM for Oracle。

ParnassusData Recovery Manager(以下简称PRM)是企业级ORACLE数据灾难恢复软件,可直接从Oracle9i,10g,11g,12c的数据库数据文件(datafile)中抽取还原数据表上的数据,而不需要通过ORACLE数据库实例上执行SQL来拯救数据。ParnassusDataRecovery Manager是一款基于JAVA开发的绿色软件,无需安装,下载解压后便可直接使用。

恢复场景1 误Truncate表的常规恢复

D公司的业务维护人员由于误将产品数据库当做测试环境库导致错误地TRUNCATE了一张表上的所有数据,DBA尝试恢复但是发觉最近的备份不可用,导致无法从备份中恢复出该数据表上的记录。 此时DBA决定采用PRM来恢复已经被TRUNCATE掉的数据。

由于该环境中 所有数据库文件均是可用且健康的,用户仅需要 字典模式下加载SYSTEM表空间的数据文件以及被TRUNCATED表的数据文件即可,例如:

create table ParnassusData.torderdetail_his1 tablespace users as
select * from parnassusdata.torderdetail_his;

SQL> desc ParnassusData.TORDERDETAIL_HIS

Name Null? Type

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

SEQ_ID NOT NULL NUMBER(10)

SI_STATUS NUMBER(38)

D_CREATEDATE CHAR(20)

D_UPDATEDATE CHAR(20)

B_ISDELETE CHAR(1)

N_SHOPID NUMBER(10)

N_ORDERID NUMBER(10)

C_ORDERCODE CHAR(20)

N_MEMBERID NUMBER(10)

N_SKUID NUMBER(10)

C_PROMOTION NVARCHAR2(5)

N_AMOUNT NUMBER(7,2)

N_UNITPRICE NUMBER(7,2)

N_UNITSELLINGPRICE NUMBER(7,2)

N_QTY NUMBER(7,2)

N_QTYFREE NUMBER(7,2)

N_POINTSGET NUMBER(7,2)

N_OPERATOR NUMBER(10)

C_TIMESTAMP VARCHAR2(20)

H_SEQID NUMBER(10)

N_RETQTY NUMBER(7,2)

N_QTYPOS NUMBER(7,2)

select count(*) from ParnassusData.TORDERDETAIL_HIS;

COUNT(*)
----------
984359

select bytes/1024/1024 from dba_segments where segment_name='TORDERDETAIL_HIS' and owner='PARNASSUSDATA';

BYTES/1024/1024
---------------
189.71875

SQL> truncate table ParnassusData.TORDERDETAIL_HIS;

Table truncated.

SQL> select count(*) from ParnassusData.TORDERDETAIL_HIS;

COUNT(*)
----------
0

启动PRM ,并选择 Tools => Recovery Wizard

点击Next

在此TRUNCATE场景中并未采用ASM存储,所以仅需要选择 《Dictionary Mode》字典模式即可:本回答被提问者采纳

hibernate使用truncate清空表 截断表

  public void truncateTable(Session session, String tableNameInDb) {
        String sql = " truncate table  " + tableNameInDb;
        Query query = session.createSQLQuery(sql);
        query.executeUpdate();
    }

以上是关于oracle针对truncate截断表之后要如何恢复数据?急啊!的主要内容,如果未能解决你的问题,请参考以下文章

为啥要截断 DDL 语句?

使用“锁定”截断/填充从 Oracle 中的视图填充表

hibernate使用truncate清空表 截断表

如何使用 Django 的 ORM 截断表?

oracle 中删除表 drop delete truncate

oraccle中truncate和delete的效率如何