ora-01578 数据库坏块处理
2014-04-30 10:02
387 查看
1、使用dbv工具检查报错的数据文件,dbv工具可以检测online或者offline的数据文件
使用oracle用户登录系统,dbv工具在$ORACLE_HOME/bin路径下:
$ id
uid=203(oracle) gid=206(oinstall) groups=202(asmdba),204(dba),205(oper)
$ $ORACLE_HOME/bin/dbv
DBVERIFY: Release 11.2.0.3.0 - Production on Tue Apr 29 22:01:09 2014
Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved.
Keyword Description (Default)
----------------------------------------------------
FILE File to Verify (NONE)
START Start Block (First Block of File)
END End Block (Last Block of File)
BLOCKSIZE Logical Block Size (8192)
LOGFILE Output Log (NONE)
FEEDBACK Display Progress (0)
PARFILE Parameter File (NONE)
USERID Username/Password (NONE)
SEGMENT_ID Segment ID (tsn.relfile.block) (NONE)
HIGH_SCN Highest Block SCN To Verify (NONE)
(scn_wrap.scn_base OR scn)
注释:
① 如果feedback=1000,则验证1000个块显示一个。这个符号
② USERID --当验证asm文件时,要指定
③ FILE --用户指定要验证的数据文件名
④ BLOCKSIZE --指定数据文件的尺寸,缺省值为8192,对于非8192块将收到DBV-00103错误
⑤ PARFILE --可以像使用expdp/impdp一样,将一些选项置于参数文件里面
⑥ SEGMENT_ID --校验段,需要表空间ID,数据文件ID,段的头部ID
例如检查asm存储中数据文件的坏块,命令为:
$ dbv file=+DG01/test/datafile/users.264.845009941 userid=system/system
DBVERIFY: Release 11.2.0.3.0 - Production on Tue Apr 29 21:50:54 2014
Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved.
DBVERIFY - Verification starting : FILE = +DG01/test/datafile/users.264.845009941
DBVERIFY - Verification complete
Total Pages Examined : 640
Total Pages Processed (Data) : 0
Total Pages Failing (Data) : 0
Total Pages Processed (Index): 0
Total Pages Failing (Index): 0
Total Pages Processed (Other): 127
Total Pages Processed (Seg) : 0
Total Pages Failing (Seg) : 0
Total Pages Empty : 513
Total Pages Marked Corrupt : 0
Total Pages Influx : 0
Total Pages Encrypted : 0
Highest block SCN : 0 (0.0)
注意:如果Total Pages Influx的值大于零,且未存在坏块的情况下,是由于针对open状态的文件运行dbv程序遇到了一个当前正在被DBWn进程写入的数据块。
2、使用sql语句检查损坏的对象
如果报以下错误:
ORA-01578: ORACLE 数据块损坏 (文件号 6,
块号 20)
ORA-01110: 数据文件 6:'F:/ORACLE/PRODUCT/10.2.0/ORADATA/MOVO/BLOCK.DBF'
则sql语句为:
select tablespace_name,segment_type,owner,segment_name fromdba_extents
where file_id=6 and 20 between block_id and block_id+blocks-1
如果损失的是数据,ok
我们可以设置内部事件,使exp跳过这些损坏的block
SQL> alter system set events='10231 trace name contextforever,level 10';
系统已更改。
SQL>
注意: 10231 内部事件,设置在全表扫描时跳过损坏的数据块.
然后我们可以导出未损坏的数据:
C:/Documents and Settings/Administrator>exp skate/skate@movo file=t.dmptables=t
Export: Release 10.2.0.1.0 - Production on
星期四 6月 12 18:22:492008
Copyright (c) 1982, 2005, Oracle. All rights reserved.
连接到: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options
已导出 ZHS16GBK
字符集和 AL16UTF16NCHAR
字符集
即将导出指定的表通过常规路径...
. . 正在导出表 T导出了 7102
行
成功终止导出,
没有出现警告。
C:/Documents and Settings/Administrator>
这时候数据成功导出.这是我可以drop table,然后recreate这个表,最后在imp数据
删除表T:
SQL> drop table t;
drop table t
*
第 1
行出现错误:
ORA-00942: 表或视图不存在
SQL> drop table skate.t;
表已删除。
SQL> commit;
提交完成。
SQL>
导入数据
C:/Documents and Settings/Administrator>imp skate/skate@movo file=t.dmptables=t
Import: Release 10.2.0.1.0 - Production on
星期四 6月 12 18:29:362008
Copyright (c) 1982, 2005, Oracle. All rights reserved.
连接到: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options
经由常规路径由 EXPORT:V10.02.01
创建的导出文件
已经完成 ZHS16GBK
字符集和 AL16UTF16 NCHAR
字符集中的导入
. 正在将 SKATE
的对象导入到 SKATE
. 正在将 SKATE
的对象导入到 SKATE
. . 正在导入表 "T"导入了 7102
行
成功终止导入,
没有出现警告。
C:/Documents and Settings/Administrator>
SQL> select count(*) from skate.t;
COUNT(*)
----------
7102
SQL>
现在这个表可以访问了
在这个例子中我们损失数据为:
7168-7102=66
数据块损坏前:
SQL> select count(*) from t;
COUNT(*)
----------
7168
数据块损坏后:
SQL> select count(*) from t;
COUNT(*)
----------
7102
---end----
使用oracle用户登录系统,dbv工具在$ORACLE_HOME/bin路径下:
$ id
uid=203(oracle) gid=206(oinstall) groups=202(asmdba),204(dba),205(oper)
$ $ORACLE_HOME/bin/dbv
DBVERIFY: Release 11.2.0.3.0 - Production on Tue Apr 29 22:01:09 2014
Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved.
Keyword Description (Default)
----------------------------------------------------
FILE File to Verify (NONE)
START Start Block (First Block of File)
END End Block (Last Block of File)
BLOCKSIZE Logical Block Size (8192)
LOGFILE Output Log (NONE)
FEEDBACK Display Progress (0)
PARFILE Parameter File (NONE)
USERID Username/Password (NONE)
SEGMENT_ID Segment ID (tsn.relfile.block) (NONE)
HIGH_SCN Highest Block SCN To Verify (NONE)
(scn_wrap.scn_base OR scn)
注释:
① 如果feedback=1000,则验证1000个块显示一个。这个符号
② USERID --当验证asm文件时,要指定
③ FILE --用户指定要验证的数据文件名
④ BLOCKSIZE --指定数据文件的尺寸,缺省值为8192,对于非8192块将收到DBV-00103错误
⑤ PARFILE --可以像使用expdp/impdp一样,将一些选项置于参数文件里面
⑥ SEGMENT_ID --校验段,需要表空间ID,数据文件ID,段的头部ID
例如检查asm存储中数据文件的坏块,命令为:
$ dbv file=+DG01/test/datafile/users.264.845009941 userid=system/system
DBVERIFY: Release 11.2.0.3.0 - Production on Tue Apr 29 21:50:54 2014
Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved.
DBVERIFY - Verification starting : FILE = +DG01/test/datafile/users.264.845009941
DBVERIFY - Verification complete
Total Pages Examined : 640
Total Pages Processed (Data) : 0
Total Pages Failing (Data) : 0
Total Pages Processed (Index): 0
Total Pages Failing (Index): 0
Total Pages Processed (Other): 127
Total Pages Processed (Seg) : 0
Total Pages Failing (Seg) : 0
Total Pages Empty : 513
Total Pages Marked Corrupt : 0
Total Pages Influx : 0
Total Pages Encrypted : 0
Highest block SCN : 0 (0.0)
注意:如果Total Pages Influx的值大于零,且未存在坏块的情况下,是由于针对open状态的文件运行dbv程序遇到了一个当前正在被DBWn进程写入的数据块。
2、使用sql语句检查损坏的对象
如果报以下错误:
ORA-01578: ORACLE 数据块损坏 (文件号 6,
块号 20)
ORA-01110: 数据文件 6:'F:/ORACLE/PRODUCT/10.2.0/ORADATA/MOVO/BLOCK.DBF'
则sql语句为:
select tablespace_name,segment_type,owner,segment_name fromdba_extents
where file_id=6 and 20 between block_id and block_id+blocks-1
如果损失的是数据,ok
我们可以设置内部事件,使exp跳过这些损坏的block
SQL> alter system set events='10231 trace name contextforever,level 10';
系统已更改。
SQL>
注意: 10231 内部事件,设置在全表扫描时跳过损坏的数据块.
然后我们可以导出未损坏的数据:
C:/Documents and Settings/Administrator>exp skate/skate@movo file=t.dmptables=t
Export: Release 10.2.0.1.0 - Production on
星期四 6月 12 18:22:492008
Copyright (c) 1982, 2005, Oracle. All rights reserved.
连接到: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options
已导出 ZHS16GBK
字符集和 AL16UTF16NCHAR
字符集
即将导出指定的表通过常规路径...
. . 正在导出表 T导出了 7102
行
成功终止导出,
没有出现警告。
C:/Documents and Settings/Administrator>
这时候数据成功导出.这是我可以drop table,然后recreate这个表,最后在imp数据
删除表T:
SQL> drop table t;
drop table t
*
第 1
行出现错误:
ORA-00942: 表或视图不存在
SQL> drop table skate.t;
表已删除。
SQL> commit;
提交完成。
SQL>
导入数据
C:/Documents and Settings/Administrator>imp skate/skate@movo file=t.dmptables=t
Import: Release 10.2.0.1.0 - Production on
星期四 6月 12 18:29:362008
Copyright (c) 1982, 2005, Oracle. All rights reserved.
连接到: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options
经由常规路径由 EXPORT:V10.02.01
创建的导出文件
已经完成 ZHS16GBK
字符集和 AL16UTF16 NCHAR
字符集中的导入
. 正在将 SKATE
的对象导入到 SKATE
. 正在将 SKATE
的对象导入到 SKATE
. . 正在导入表 "T"导入了 7102
行
成功终止导入,
没有出现警告。
C:/Documents and Settings/Administrator>
SQL> select count(*) from skate.t;
COUNT(*)
----------
7102
SQL>
现在这个表可以访问了
在这个例子中我们损失数据为:
7168-7102=66
数据块损坏前:
SQL> select count(*) from t;
COUNT(*)
----------
7168
数据块损坏后:
SQL> select count(*) from t;
COUNT(*)
----------
7102
---end----
相关文章推荐
- 基于 Red Hat 的发行版 Oracle Linux 正式发布Oracle Linux 7.1
- Oracle Containers for J2EE远程安全漏洞(CVE-2014-0413)
- Oracle 10g R2不能使用EM的问题
- 表空间操作
- PreparedStatement中in子句的处理
- VMware下RedHat4.8_64位安装Oracle 10g RAC--简略脚本
- 基于 Red Hat 的发行版 Oracle Linux 正式发布Oracle Linux 7.1
- oracle中创建数据库和表空间的几点总结
- 数据库自动备份脚本
- 解决oracle用户连接失败的解决方法
- oracle的一些tips技巧
- Oracle 下的开发日积月累
- Oracle存储过程之数据库中获取数据实例
- Windows下ORACLE 10g完全卸载的方法分析
- Oracle 函数大全[字符串函数,数学函数,日期函数]第1/4页
- ORACLE LATERAL-SQL-INJECTION 个人见解
- Oracle Connect to Idle Instance解决方法
- oracle sys_connect_by_path 函数 结果集连接
- Oracle捕获问题SQL解决CPU过渡消耗
- oracle dba 应该熟悉的命令