但是使用PRM则要求实施PRM数据恢复的操作系统已经安装了对应的语言包,例如用户要恢复ZHS16GBK的中文字符集数据库,则需要操作系统上已经安装了中文语言包才可以。
类似的 在Linux上需要安装fonts-chinese 中文字体包。
Load完成后 PRM界面左侧出现按照数据库用户分组的树形图
点开USERS,可以看到多个用户名,例如用户需要恢复PARNASSUSDATA SCHEMA下的一张表,则点开PARNASSUSDATA,并双击表名:
由于该TORDERDETAIL_HIS表之前已经被TRUNCATED掉了,所以双击没有显示有数据,此时在表上右键选择Unload truncated data:
PRM将尝试扫描该表所在表空间并将已经truncated掉的数据抽取出来:
如上图所示从已经被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表上的记录。