非常规数据恢复的几种场景(跳过坏块导出数据)
来源:互联网 发布:网络言论自由的例子 编辑:程序博客网 时间:2024/06/05 05:31
创建测试表、测试表空间。
SQL> select count(*) from b.t;
COUNT(*)
----------
5895
修改测试表空间对应数据文件(二进制),启动后查询该表空间内的某张表时发现有数据坏块:
SQL> select count(*) from b.t;
select count(*) from b.t
*
第 1 行出现错误:
ORA-01578: ORACLE 数据块损坏 (文件号 9, 块号 124)
ORA-01110: 数据文件 9: 'F:\ORACLE\ORADATA\TEST\TBS_BLOCK.DBF'
使用dbv查看数据文件,发现也是(file 9, block 124)数据块损坏:
SQL> ho dbv file='F:\ORACLE\ORADATA\TEST\TBS_BLOCK.DBF' blocksize=8192
DBVERIFY: Release 12.1.0.2.0 - Production on 星期五 6月 17 09:23:15 2016
Copyright (c) 1982, 2014, Oracle and/or its affiliates. All rights reserved.
DBVERIFY - 开始验证: FILE = F:\ORACLE\ORADATA\TEST\TBS_BLOCK.DBF
页 124 标记为损坏
Corrupt block relative dba: 0x0240007c (file 9, block 124)
Bad check value found during dbv:
Data in bad block:
type: 6 format: 2 rdba: 0x0240007c
last change scn: 0x0000.0031079d seq: 0x1 flg: 0x06
spare1: 0x0 spare2: 0x0 spare3: 0x0
consistency value in tail: 0x079d0601
check value in block header: 0xfe35
computed block checksum: 0x332c
DBVERIFY - 验证完成
检查的页总数: 128
处理的页总数 (数据): 109
失败的页总数 (数据): 0
处理的页总数 (索引): 0
失败的页总数 (索引): 0
处理的页总数 (其他): 17
处理的总页数 (段) : 0
失败的总页数 (段) : 0
空的页总数: 1
标记为损坏的总页数: 1
流入的页总数: 0
加密的总页数 : 0
最高块 SCN : 3213215 (0.3213215)
在这种情况下,如果有备份,需要从备份中恢复。如果没有备份,那么坏块部分的数据肯定要丢失了
这时候用exp/imp尝试导数据,表的定义可以导出/导入,但是表数据是无法导出/导入的。
查出这个数据坏块对应的对象:
select tablespace_name,segment_type,owner,segment_name from dba_extents
where file_id=9 and 124 between block_id and block_id+blocks-1;
TABLESPACE_NAME SEGMENT_TYPE OWNER SEGMENT_NAME
-------------------- -------------------- ---------- --------------------
TBS_BLOCK TABLE B T
如果损失的是数据,ok
我们可以设置内部10231事件,该事件能够让Oracle在全表扫描时跳过损坏的数据块,也就是使exp跳过这些损坏的block
SQL> alter system set events='10231 trace name context forever,level 10';
然后就可以正常exp这张表了。
最后drop掉表再imp即可
SQL> ho imp b/b file=d:\b.dbf fromuser=b touser=b
.............
已经完成 ZHS16GBK 字符集和 AL16UTF16 NCHAR 字符集中的导入
导入服务器使用 AL32UTF8 字符集 (可能的字符集转换)
. . 正在导入表 "T"导入了 5841 行
成功终止导入, 没有出现警告。
可以看到丢失了部分数据。
--成功导出后记得要关闭10231内部事件
alter system set events='10231 trace name context off';
SQL> select count(*) from b.t;
COUNT(*)
----------
5895
修改测试表空间对应数据文件(二进制),启动后查询该表空间内的某张表时发现有数据坏块:
SQL> select count(*) from b.t;
select count(*) from b.t
*
第 1 行出现错误:
ORA-01578: ORACLE 数据块损坏 (文件号 9, 块号 124)
ORA-01110: 数据文件 9: 'F:\ORACLE\ORADATA\TEST\TBS_BLOCK.DBF'
使用dbv查看数据文件,发现也是(file 9, block 124)数据块损坏:
SQL> ho dbv file='F:\ORACLE\ORADATA\TEST\TBS_BLOCK.DBF' blocksize=8192
DBVERIFY: Release 12.1.0.2.0 - Production on 星期五 6月 17 09:23:15 2016
Copyright (c) 1982, 2014, Oracle and/or its affiliates. All rights reserved.
DBVERIFY - 开始验证: FILE = F:\ORACLE\ORADATA\TEST\TBS_BLOCK.DBF
页 124 标记为损坏
Corrupt block relative dba: 0x0240007c (file 9, block 124)
Bad check value found during dbv:
Data in bad block:
type: 6 format: 2 rdba: 0x0240007c
last change scn: 0x0000.0031079d seq: 0x1 flg: 0x06
spare1: 0x0 spare2: 0x0 spare3: 0x0
consistency value in tail: 0x079d0601
check value in block header: 0xfe35
computed block checksum: 0x332c
DBVERIFY - 验证完成
检查的页总数: 128
处理的页总数 (数据): 109
失败的页总数 (数据): 0
处理的页总数 (索引): 0
失败的页总数 (索引): 0
处理的页总数 (其他): 17
处理的总页数 (段) : 0
失败的总页数 (段) : 0
空的页总数: 1
标记为损坏的总页数: 1
流入的页总数: 0
加密的总页数 : 0
最高块 SCN : 3213215 (0.3213215)
在这种情况下,如果有备份,需要从备份中恢复。如果没有备份,那么坏块部分的数据肯定要丢失了
这时候用exp/imp尝试导数据,表的定义可以导出/导入,但是表数据是无法导出/导入的。
查出这个数据坏块对应的对象:
select tablespace_name,segment_type,owner,segment_name from dba_extents
where file_id=9 and 124 between block_id and block_id+blocks-1;
TABLESPACE_NAME SEGMENT_TYPE OWNER SEGMENT_NAME
-------------------- -------------------- ---------- --------------------
TBS_BLOCK TABLE B T
如果损失的是数据,ok
我们可以设置内部10231事件,该事件能够让Oracle在全表扫描时跳过损坏的数据块,也就是使exp跳过这些损坏的block
SQL> alter system set events='10231 trace name context forever,level 10';
然后就可以正常exp这张表了。
最后drop掉表再imp即可
SQL> ho imp b/b file=d:\b.dbf fromuser=b touser=b
.............
已经完成 ZHS16GBK 字符集和 AL16UTF16 NCHAR 字符集中的导入
导入服务器使用 AL32UTF8 字符集 (可能的字符集转换)
. . 正在导入表 "T"导入了 5841 行
成功终止导入, 没有出现警告。
可以看到丢失了部分数据。
--成功导出后记得要关闭10231内部事件
alter system set events='10231 trace name context off';
0 0
- 非常规数据恢复的几种场景(跳过坏块导出数据)
- 非常规数据恢复的几种场景(利用bbed恢复坏块数据)
- 非常规数据恢复的几种场景(利用bbed恢复被删除数据)
- 非常规数据恢复的几种场景(利用AUL恢复数据)
- 非常规数据恢复的几种场景(利用ODU恢复被truncate的表)
- 非常规数据恢复的几种场景(利用Logminer找回被修改的数据)
- 非常规数据恢复的几种场景(利用ODU恢复被drop purge的表)
- 跳过归档日志的非常规恢复(一)
- 跳过归档日志的非常规恢复(二)
- 跳过归档日志的非常规恢复
- 跳过归档日志的非常规恢复
- Oracle非常规恢复(使用BBED跳过归档)
- 查询数据坏块。
- Oracle怎样标记坏块及一次数据恢复
- Oracle怎样标记坏块及一次数据恢复
- 如何恢复坏硬盘里的数据
- Oracle非常规恢复(使用BBED跳过归档)
- 关于数据块出现的游离坏块的实验:
- leetcode(4)remove-element
- WRK Handle Table技术报告
- C# Http POST请求方法
- 27款张力十足的中文书法字体免费打包下载
- xUtils3.0框架学习笔记
- 非常规数据恢复的几种场景(跳过坏块导出数据)
- Python核心编程(第十五章)--正则表达式
- centos7安装xrdp
- ffmpeg精简
- 算法系列(十)堆实现优先队列
- CoreData 使用
- 使用白色箭头图片设置UINavigationBar的leftBarButtonItem,但显示为蓝色
- [Docker]Docker镜像
- 阿里云 申请的 CA Wosin 证书 , 并在Windows iis下导入证书