记一次oracle 坏快处理

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/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值