使用PRM恢复Oracle数据库中误truncate截断的表数据(4)

但是使用PRM则要求实施PRM数据恢复的操作系统已经安装了对应的语言包,例如用户要恢复ZHS16GBK的中文字符集数据库,则需要操作系统上已经安装了中文语言包才可以。

类似的 在Linux上需要安装fonts-chinese 中文字体包。

Load完成后 PRM界面左侧出现按照数据库用户分组的树形图

点开USERS,可以看到多个用户名,例如用户需要恢复PARNASSUSDATA SCHEMA下的一张表,则点开PARNASSUSDATA,并双击表名:

使用PRM恢复Oracle数据库中误truncate截断的表数据

由于该TORDERDETAIL_HIS表之前已经被TRUNCATED掉了,所以双击没有显示有数据,此时在表上右键选择Unload truncated data:

使用PRM恢复Oracle数据库中误truncate截断的表数据

PRM将尝试扫描该表所在表空间并将已经truncated掉的数据抽取出来:

使用PRM恢复Oracle数据库中误truncate截断的表数据

使用PRM恢复Oracle数据库中误truncate截断的表数据

如上图所示从已经被TRUNCATE过的TORDERDETAIL_HIS表中抽取出完整的984359条记录,并存放在提示指定的路径下。

这里还自动生成了将文本数据导入到数据库中使用的SQLLDR 控制文件。

$ cd /home/Oracle/prm/prmdata/parnassus_dbinfo_PARNASSUSDATA/

$ ls -l ParnassusData*

-rw-r--r-- 1 oracle oinstall 495 Jan 18 08:31 ParnassusData.torderdetail_his.ctl

-rw-r--r-- 1 oracle oinstall 191164826 Jan 18 08:32 ParnassusData.torderdetail_his.dat.truncated

$ cat ParnassusData.torderdetail_his.ctl

LOAD DATA

INFILE 'ParnassusData.torderdetail_his.dat.truncated'

APPEND

INTO TABLE ParnassusData.torderdetail_his

FIELDS TERMINATED BY ' '

OPTIONALLY ENCLOSED BY '"'

TRAILING NULLCOLS (

"SEQ_ID" ,

"SI_STATUS" ,

"D_CREATEDATE" ,

"D_UPDATEDATE" ,

"B_ISDELETE" ,

"N_SHOPID" ,

"N_ORDERID" ,

"C_ORDERCODE" ,

"N_MEMBERID" ,

"N_SKUID" ,

"C_PROMOTION" ,

"N_AMOUNT" ,

"N_UNITPRICE" ,

"N_UNITSELLINGPRICE" ,

"N_QTY" ,

"N_QTYFREE" ,

"N_POINTSGET" ,

"N_OPERATOR" ,

"C_TIMESTAMP" ,

"H_SEQID" ,

"N_RETQTY" ,

"N_QTYPOS"

)

将数据导入到源表中(注意 ParnassusData强烈建议你修改该SQLLDR控制文件中导入的表名字为一个临时表,这样不会覆盖原环境)。

$ sqlldr control=ParnassusData.torderdetail_his.ctl direct=y

Username:/ as sysdba

//以上使用sqlldr导入了恢复的数据

//可以通过minus来对比恢复出来的数据:

select * from ParnassusData.torderdetail_his minus select * from parnassus.torderdetail_his;

no rows selected

测试TRUNCATE用例表与源数据表对比,发现记录完全一致。

说明PRM完整、丝毫不差地恢复了被TRUNCATE表上的记录。

linux

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/b0f5753481b16e1f9ab7d926676dc450.html