11年底接到电话说无法备份过去检查发现数据文件所在存储文件存在坏道 检测详细就见http://space.itpub.net/8837988/viewspace-719484 由于没有有效的备份,才用下面方法处理。
坏道所在的数据文件一个存储有大对象的表分区,该表很大主要存储影像数据 由于没有备份所以先导出除了坏快所在分区的所有表数据
1,使用exp导出非坏快所在的分区表,这里先建立一个参数文件no_part04.pfile
tables=(
CREDENTIALS:PART_01,
CREDENTIALS:PART_02,
CREDENTIALS:PART_03,
CREDENTIALS:PART_05,
CREDENTIALS:PART_06,
CREDENTIALS:PART_07,
CREDENTIALS:PART_08,
CREDENTIALS:PART_09,
CREDENTIALS:PART_10,
RESHEET:PART_01,
RESHEET:PART_02,
RESHEET:PART_03,
RESHEET:PART_05,
RESHEET:PART_06,
RESHEET:PART_07,
RESHEET:PART_08,
RESHEET:PART_09,
RESHEET:PART_10,
...
)然后使用exp 导出 exp user/pwd@instance parfile=no_part04.pfile file=c:\xxx.dmp log=c:\exp_xxx.log
2,处理坏快所在分区的数据,这里没想到好的办法就建立临时表CREDENTIALS2,RESHEET2(坏快所在分区的表) 写了个小程序 一条一条循环插入文本信息后然后把大对象数据更新到临时表中的笨办法
1,建立临时表的表空间
create tablespace stimg_db
datafile 'E:\oracledb\JSFC\STIMG_DB'
SIZE 5G AUTOEXTEND ON NeXT 200m
2,创建和待处理表结构一致的临时表CREDENTIALS2,RESHEET2
3,通过程序把数据插入到临时表中 程序分2部走第一步先把非大对象的文字信息插入到临时表中,然后更新UPDATE CREDENTIALS2 SET IMG=(SELECT IMG FROM CREDENTIALS B WHERE ID={ID} ) WHERE ID={ID} ;
3,导出临时表 exp user/pwd@instance tables=credentials2,resheet2 file=c:\xxx.dmp log=c:\exp_xxx.log
4,重建坏快所在的表空间,删除用户删除表空间
5,分别导入第一次正常导入的非坏快分区的表数据和临时表数据
6,把临时表的数据插入到之前损坏的表分区中
insert into CREDENTIALS PARTITION(PART_04)
SELECT * FROM CREDENTIALS2 ;
COMMIT ;
insert into RESHEET PARTITION(PART_04)
SELECT * FROM RESHEET 2 ;
COMMIT ;
至此完成。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/8837988/viewspace-719487/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/8837988/viewspace-719487/