甲骨文数据块损坏之10231年内部事件不完全恢复

  

  

所谓损坏的数据块,是指块没有采用可识别的甲骨文格式,或者其内容在内部不一致。通常情况下,损坏是由硬件故障或操作系统问题引起的.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年内部事件不完全恢复