欢迎来到天天文库
浏览记录
ID:59362245
大小:17.51 KB
页数:6页
时间:2020-09-04
《利用AUL在没有任何备份的情况下恢复被truncate的表.docx》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、我们经常会因为各种误操作而truncate了表。这时,如果有rman备份或者是闪回,可以恢复这个表,否则,基本判定这个表的数据为不可找回了。但rman或者是闪回数据库都是把一个数据库恢复到一个点。这样后面至truncate表之后这段时间内的新数据都会丢失了,也不是最完美的解决办法。因此oracle的truncate跟linux的rm–rf*是有异曲同工之妙(害)。那有没有工具或者是办法来解决这个问题呢,答案是有的。首先是BBED,不过全二制码的操作,可直接对数据库的物理文件进行二进制修改,不过不是对Oracle非常自信的人,一
2、般是不敢使用。另外,Oracle自己开发一个dul的工具,然后淘宝的dcba团队跟恩墨的老熊分别进行了改造成了aul,可以方便的恢复数据,当然,你找他们完全是OK的,不过,¥,你懂的。因为我们的所有的库都不是我们自己掌管,因为如果发生了truncate的情况,基本是找不回来的。假如自己的一些QA库或者是可以远程可数据文件共享的,则可恢复。下面我用一个测试环境来演示下。假定我们现在truncate了一张表,模拟下:SQL>createtableabcasselect*fromdba_objectswhererownum<101;
3、Tablecreated.SQL>selectcount(*)fromabc;COUNT(*)----------100SQL>selectobject_idfromuser_objectswhereobject_name='ABC';OBJECT_ID----------18306SQL>ALTERSYSTEMCHECKPOINT;Systemaltered.SQL>TRUNCATETABLEABC;Tabletruncated.SQL>ALTERSYSTEMCHECKPOINT;Systemaltered.假设如果此表非常
4、重要,必须要恢复。我们先进行一下准备工作,获得这个库所包含的数据文件的具体路径:SQL>ALTERDATABASEBACKUPCONTROLFILETOTRACE;Databasealtered.SQL>selectvaluefromv$diag_infowherenamelike'Default%';VALUE--------------------------------------------------------------c:oraclediagrdbmsp2emonp2emontracep2emon
5、_ora_6716.trc我们看下转储出来的控制文件,截取到datafile部分:DATAFILE'D:ORADATAP2EMONSYSTEM01.DBF','D:ORADATAP2EMONSYSAUX01.DBF','D:ORADATAP2EMONUNDOTBS01.DBF','D:ORADATAP2EMONUSERS01.DBF'CHARACTERSETAL32UTF8;转储的控制文件已经告诉了我们们数据库的字符集,当然自己查也可以,我们把它转为编码模式:selectvaluefromnls_dat
6、abase_parameterswhereparameter=upper('nls_characterset');selectnls_charset_id('AL32UTF8')fromdual;结果是873,我们再设置下环境变量,AUL要读取当前数据库的实体数据文件,要编写一个小配制文件,来告诉它具体的路径:编写数据文件列表保存一个文件比如:db.txt,每行一个数据文件FILE#RFILE#FILENAME,FILE#,RFILE#不要求很准确,AUL能帮助我们搞定的;FILENAME一定要准确。文件内容如下:11D:O
7、RADATAP2EMONSYSTEM01.DBF21D:ORADATAP2EMONUNDOTBS01.DBF31D:ORADATAP2EMONSYSAUX01.DBF41D:ORADATAP2EMONUSERS01.DBF再看下AUL设置,主要是字节及字符集等,AUL下输入SET可以看到设置选项://oracle数据块的大小,可以从参数文件及showparameterblock_size查看SETBLOCK_SIZE{2048
8、4096
9、8192
10、16384
11、32768}//oracle数据文件所处平台字
12、节设置,windows下设置LITTLESETBYTE_ORDER{BIG
13、LITTLE}//设置恢复的数据文件中列间隔付,采用默认即可SETFIELD_TAGfield_tag//设置恢复的数据文件中行结束符,采用默认即可SETRECORD_TAGrecord_tag//恢
此文档下载收益归作者所有