所谓损坏的数据块,是指块没有采用可识别的甲骨文格式,或者其内容在内部不一致。通常情况下,损坏是由硬件故障或操作系统问题引起的.Oracle数据库将损坏的块标识为“逻辑损坏”或“介质损坏”。如果是逻辑损坏,则是甲骨文内部错误.Oracle数据库检测到不一致之后,就将逻辑损坏的块标记为损坏。如果是介质损坏,则是块格式不正确;从磁盘读取的块不包含有意义的信息。实验:某个分区数据块损坏,不完全恢复此分区表数据。
数据库没有有效备份,某个分区中有数据块损坏。
最大限度恢复此分区数据。
RHEL 6.4 +甲骨文11.2.0.4
下面这篇文章主要给大家介绍了关于Oracle数据块损坏之10231年内部事件的相关内容,分享出来供大家参考学习、下面来看看详细的介绍:
初始化创建模拟实验环境用到的表空间,业务用户,表,并导入测试数据。
本次实验用到表空间DBS_D_JINGYU,业务用户井宇,分区表T_PART(含两个分区的测试数据)。
——数据表空间 创建表空间功能'/u02 dbs_d_jingyu/oradata/宇/dbs_d_jingyu01。dbf的大小30 m autoextend; ——临时表空间 创建临时表空间temp_jingyu tempfile '/u02/oradata/宇/temp_jingyu01。tmp的大小30 m autoextend; ——索引表空间(可选) 创建表空间功能'/u02 dbs_i_jingyu/oradata/宇/dbs_i_jingyu01。dbf的大小30 m autoextend; ——假设创建用户宇密码宇,默认临时表空间temp_jingyu,默认数据表空间dbs_d_jingyu。 创建用户确认的宇宇 临时表空间temp_jingyu 默认表空间dbs_d_jingyu 配额限制> ——查询分区P20150103的HEADER_BLOCK 选择header_file header_block从dba_segments segment_name=癟_PART”和partition_name=癙20150103”和所有者=熬睢? 完成;选择header_file header_block从dba_segments segment_name=癟_PART”和partition_name=癙20150103”和所有者=熬睢? HEADER_FILE HEADER_BLOCK - - - - - - - - - - - - - - - - - - - - - - - - 1169年5 ——查询某一行记录所在的块 选择 rowid, dbms_rowid.rowid_relative_fno rel_fno (rowid (), dbms_rowid.rowid_block_number blockno (rowid (), rowno dbms_rowid.rowid_row_number (rowid) 从t_part id=20000; 完成;选择 2 rowid, 3 dbms_rowid.rowid_relative_fno (rowid) rel_fno, 4 dbms_rowid.rowid_block_number (rowid) blockno, 5 dbms_rowid.rowid_row_number (rowid rowno) 6从t_part id=20000; ROWID REL_FNO BLOCKNO ROWNO - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - AAAVveAAFAAAATBABX 5 1217 87
使用bb工具破坏5号文件1217块内容,
bb工具:https://www.jb51.net/article/118349.htm
[oracle@JY-DB01 ~]美元bb parfile=/tmp/bbed.par 密码: bb:释放2.0.0.0.0 -有限生产> select * from v $ database_block_corruption; 完成;select * from v $ database_block_corruption; 文件#块#块CORRUPTION_CHANGE # CORRUPTIO - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 5 1217 1 0腐败 ——此时查询分区表T_PART 改变系统冲洗buffer_cache; 从t_part选择计数(1); ——查询报错ora - 01578 选择计数(1)从t_part分区(P20150102); ——查询正常,即分区P20150102未受影响 选择计数(1)从t_part分区(P20150103); ——查询报错ora - 01578 ——尝试逻辑导出表数据失败 [oracle@JY-DB01 ~]美元exp宇/宇表==t_part t_part文件。dmp日志=exp_t_part.log 出口:释放11.2.0.4.0 -生产> 10231年——启用内部事件 改变系统设置事件=10231年跟踪的名字永远上下文,10级的; 10231年,关闭内部事件 改变系统设置事件=10231跟踪名称上下文的;10231年
测试设置事件后是否可以逻辑导出:
[oracle@JY-DB01 ~] sysdba sqlplus美元/SQL * +:释放11.2.0.4.0生产> 完成;从t_part选择计数(1); 从t_part选择计数(1) * 误差在1号线: ora - 01578: ORACLE数据块损坏(文件# 5、# 1217块) ora - 01110: 5:数据文件'/u02/oradata/宇/dbs_d_jingyu01.dbf” 完成;改变系统设置事件=10231年跟踪的名字永远上下文,10级的; 系统的改变。 完成;从t_part选择计数(1); 数(1) ---------- 29823年 完成;从t_part分区创建表temp_t_part_20150103 select * (P20150103); 创建表。 完成;改变系统设置事件=10231跟踪名称上下文的; 系统的改变。 完成;选择计数(1)从t_part分区(P20150103); 选择计数(1)从t_part分区(P20150103) * 误差在1号线: ora - 01578: ORACLE数据块损坏(文件# 5、# 1217块) ora - 01110: 5:数据文件'/u02/oradata/宇/dbs_d_jingyu01.dbf” 完成;从temp_t_part_20150103选择计数(1); 数(1) ---------- 19823年甲骨文数据块损坏之10231年内部事件不完全恢复