设为首页 收藏本站
查看: 2694|回复: 0

[经验分享] oracle关于坏块的修复一

[复制链接]

尚未签到

发表于 2018-9-21 13:12:36 | 显示全部楼层 |阅读模式
  oracle11g关于坏块的修复
  一:bbed的命令简单介绍,后面用该工具构造块校验和不一致以达到模拟坏块目的
  show 显示当前所有配置选项
  info:列出当前bbed能处理的文件
  set dba fileid,block:设置当前要处理的数据文件id和块号
  set dba fileid,block 也可以用 set file  fileid 和set block  blockno 代替
  set offset xxx  offset 以set block 块号的设置为基准偏移当前块号的字节数
  dump  /v  显示当前数据块的内容 默认从当前数据块设置的offset字节数处开始显示。/v 参数显示详细内容,详细到啥境界,后面就晓得了。
  find /c 查找的内容 TOP   /c 指定查找内容为字符  TOP指定从数据块头部偏移量为0处开始整块搜索搜到一处显示一处,如果要查找下一个该字符则指定f即可
  modify /c 要修改内容  默认从set指定的文件、块号、offset偏移字节数处进行修改。
  二: 创建测试用的表
  SQL> create table jiujian(des varchar(30)) tablespace pos;
  Table created.
  SQL> insert into jiujian values('zhangxu love oracle');
  1 row created.
  SQL> select * from jiujian;
  DES
  ------------------------------
  zhangxu love oracle
  2 查询表jiujian所在的块
  语句:select rowid,

  dbms_rowid.rowid_relative_fno(rowid)>  dbms_rowid.rowid_block_number(rowid) blockno,
  dbms_rowid.rowid_row_number(rowid) rowno
  from jiujian;
  SQL> select rowid,

  2  dbms_rowid.rowid_relative_fno(rowid)>  3  dbms_rowid.rowid_block_number(rowid) blockno,
  4  dbms_rowid.rowid_row_number(rowid) rowno
  5  from jiujian;

  ROWID                >  ------------------ ---------- ---------- ----------
  AAATqzAAFAAAACHAAA          5        135          0
  字段BLOCKNO 135即为表jiujian所在的块
  三:创建bbed的配置文件
  [oracle@oracle ~]$ cat bbed.par
  blocksize=8192
  listfile=/oracle/file
  mode=edit
  文本文件file 内容
  [oracle@oracle ~]$ cat file
  1 /oracle/CRM/system01.dbf 786432000
  2 /oracle/CRM/sysaux01.dbf 566231040
  3 /oracle/CRM/undotbs01.dbf 104857600
  4 /backup/users01.dbf 1827143680
  5 /oracle/CRM/pos.dbf 524288000
  6 /oracle/CRM/erp.dbf 104857600
  7 /oracle/CRM/user01.dbf 5242880
  10 /oracle/CRM/undotbs02.dbf 104857600
  file 内容由以下语句获取:
  SQL> select file#||' '||name||' '||bytes from v$datafile;
  FILE#||''||NAME||''||BYTES
  --------------------------------------------------------------------------------
  1 /oracle/CRM/system01.dbf 786432000
  2 /oracle/CRM/sysaux01.dbf 566231040
  3 /oracle/CRM/undotbs01.dbf 104857600
  4 /backup/users01.dbf 1827143680
  5 /oracle/CRM/pos.dbf 524288000
  6 /oracle/CRM/erp.dbf 104857600
  7 /oracle/CRM/user01.dbf 5242880
  10 /oracle/CRM/undotbs02.dbf 104857600
  四 开始用bbed构造坏块
  [oracle@oracle ~]$ bbed parfile=bbed.par
  Password:blockedit
  BBED> show   显示配置
  FILE#           1
  BLOCK#          1
  OFFSET          0
  DBA             0x00400001 (4194305 1,1)
  FILENAME        /oracle/CRM/system01.dbf
  BIFILE          bifile.bbd
  LISTFILE        /oracle/file
  BLOCKSIZE       8192
  MODE            Edit
  EDIT            Unrecoverable
  IBASE           Dec
  OBASE           Dec

  >  COUNT           512
  LOGFILE         log.bbd
  SPOOL           No
  BBED> info  显示bbed能处理的数据文件编号和数据文件位置

  File#  Name                                                       >  -----  ----                                                        ----------
  1  /oracle/CRM/system01.dbf                                         96000
  2  /oracle/CRM/sysaux01.dbf                                         69120
  3  /oracle/CRM/undotbs01.dbf                                        12800
  4  /backup/users01.dbf                                             223040
  5  /oracle/CRM/pos.dbf                                              64000
  6  /oracle/CRM/erp.dbf                                              12800
  7  /oracle/CRM/user01.dbf                                             640
  10  /oracle/CRM/undotbs02.dbf                                        12800
  BBED> set dba 5,135   设置当前数据文件号和块号
  DBA             0x01400087 (20971655 5,135)
  BBED> show           用show命令确认下设置
  FILE#           5
  BLOCK#          135
  OFFSET          0
  DBA             0x01400087 (20971655 5,135)
  FILENAME        /oracle/CRM/pos.dbf
  BIFILE          bifile.bbd
  LISTFILE        /oracle/file
  BLOCKSIZE       8192
  MODE            Edit
  EDIT            Unrecoverable
  IBASE           Dec
  OBASE           Dec

  >  COUNT           512
  LOGFILE         log.bbd
  SPOOL           No
  BBED> find /c zhangxu TOP  查找当前数据块第一处字符zhangxu的位置
  File: /oracle/CRM/pos.dbf (5)
  Block: 135              Offsets: 8169 to 8191           Dba:0x01400087
  ------------------------------------------------------------------------
  7a68616e 67787520 6c6f7665 206f7261 636c6501 066c05
  
  从上面输出可看到当前字符串zhangxu位于偏移量8169处
  BBED> set offset 8169   更改当前偏移量为 8169
  OFFSET          8169
  BBED> dump /v    从指定偏移量处开始显示数据块内容
  File: /oracle/CRM/pos.dbf (5)
  Block: 135     Offsets: 8169 to 8191  Dba:0x01400087
  -------------------------------------------------------
  7a68616e 67787520 6c6f7665 206f7261 l zhangxu love ora
  636c6501 066c05                     l cle..l.
  
  从上句和下句便可看处dump /v 比dump多详细啊,能看到这个16进制相应的内容。
  BBED> dump
  File: /oracle/CRM/pos.dbf (5)
  Block: 135              Offsets: 8169 to 8191           Dba:0x01400087
  ------------------------------------------------------------------------
  7a68616e 67787520 6c6f7665 206f7261 636c6501 066c05      注意这里连毛都没有
  
  BBED> modify /c jiujian  从偏移量8169处开始用字符jiujian 进行替换。
  File: /oracle/CRM/pos.dbf (5)
  Block: 135              Offsets: 8169 to 8191           Dba:0x01400087
  ------------------------------------------------------------------------
  6a69756a 69616e20 6c6f7665 206f7261 636c6501 06b7f5
  
  BBED> dump /v 显示是否替换成功
  File: /oracle/CRM/pos.dbf (5)
  Block: 135     Offsets: 8169 to 8191  Dba:0x01400087
  -------------------------------------------------------
  6a69756a 69616e20 6c6f7665 206f7261 l jiujian love ora
  636c6501 06b7f5                     l cle..孵
  
  设置表空间offline再online或者重启数据库便可看到坏块效果
  SQL> select * from jiujian;
  select * from jiujian
  *
  ERROR at line 1:
  ORA-01578: ORACLE data block corrupted (file # 5, block # 135)
  ORA-01110: data file 5: '/oracle/CRM/pos.dbf'
  五 对坏块修复
  1 查询坏块信息
  SQL> select  * from v$database_block_corruption;
  FILE#     BLOCK#     BLOCKS CORRUPTION_CHANGE# CORRUPTIO
  ---------- ---------- ---------- ------------------ ---------
  5        135          1                  0 CHECKSUM
  2 修复该块 下面给出两种方法
  运行 recover …. Block 命令恢复指定的块
  [oracle@oracle ~]$ rman target /

  Recovery Manager:>  Copyright (c) 1982, 2009, Oracle and/or its affiliates.  All rights reserved.
  connected to target database: CRM (DBID=3599153036)
  RMAN> recover datafile 5 block 135;
  Starting recover at 2012-09-23 11:10:32
  using target database control file instead of recovery catalog
  allocated channel: ORA_DISK_1
  channel ORA_DISK_1: SID=199 device type=DISK
  allocated channel: ORA_DISK_2
  channel ORA_DISK_2: SID=72 device type=DISK
  channel ORA_DISK_1: restoring block(s)
  channel ORA_DISK_1: specifying block(s) to restore from backup set
  restoring blocks of datafile 00005
  channel ORA_DISK_1: reading from backup piece /backup/20120913_ebnl4bil_1_1
  channel ORA_DISK_1: piece handle=/backup/20120913_ebnl4bil_1_1 tag=TAG20120913T195604
  channel ORA_DISK_1: restored block(s) from backup piece 1
  channel ORA_DISK_1: block restore complete, elapsed time: 00:00:35
  starting media recovery
  archived log for thread 1 with sequence 82 is already on disk as file /oracle/archive/1_82_791488634.dbf
  archived log for thread 1 with sequence 83 is already on disk as file /oracle/archive/1_83_791488634.dbf
  archived log for thread 1 with sequence 84 is already on disk as file /oracle/archive/1_84_791488634.dbf
  archived log for thread 1 with sequence 85 is already on disk as file /oracle/archive/1_85_791488634.dbf
  archived log for thread 1 with sequence 86 is already on disk as file /oracle/archive/1_86_791488634.dbf
  archived log for thread 1 with sequence 87 is already on disk as file /oracle/archive/1_87_791488634.dbf
  archived log for thread 1 with sequence 88 is already on disk as file /oracle/archive/1_88_791488634.dbf
  archived log for thread 1 with sequence 89 is already on disk as file /oracle/archive/1_89_791488634.dbf
  archived log for thread 1 with sequence 90 is already on disk as file /oracle/archive/1_90_791488634.dbf
  archived log for thread 1 with sequence 91 is already on disk as file /oracle/archive/1_91_791488634.dbf
  archived log for thread 1 with sequence 92 is already on disk as file /oracle/archive/1_92_791488634.dbf
  archived log for thread 1 with sequence 93 is already on disk as file /oracle/archive/1_93_791488634.dbf
  archived log for thread 1 with sequence 94 is already on disk as file /oracle/archive/1_94_791488634.dbf
  archived log for thread 1 with sequence 95 is already on disk as file /oracle/archive/1_95_791488634.dbf
  archived log for thread 1 with sequence 96 is already on disk as file /oracle/archive/1_96_791488634.dbf
  archived log for thread 1 with sequence 97 is already on disk as file /oracle/archive/1_97_791488634.dbf
  channel ORA_DISK_1: starting archived log restore to default destination
  channel ORA_DISK_1: restoring archived log
  archived log thread=1 sequence=81
  channel ORA_DISK_1: reading from backup piece /backup/20120913_ednl4bp0_1_1
  channel ORA_DISK_1: piece handle=/backup/20120913_ednl4bp0_1_1 tag=TAG20120913T195928
  channel ORA_DISK_1: restored backup piece 1
  channel ORA_DISK_1: restore complete, elapsed time: 00:00:01
  media recovery complete, elapsed time: 00:00:03
  Finished recover at 2012-09-23 11:11:19
  SQL> select * from jiujian;
  DES
  ------------------------------
  zhangxu love oracle
  SQL> select * from v$database_block_corruption;
  no rows selected
  可看到运行 recover …. Block 命令恢复指定的块后清除视图v$database_block_corrutption中坏块内容
  2对视图V$DATABASE_BLOCK_CORRUPTION中的所有坏块进行修复 Recover corruption list;(此处已经重新构造了坏块)
  [oracle@oracle ~]$ rman target /

  Recovery Manager:>  Copyright (c) 1982, 2009, Oracle and/or its affiliates.  All rights reserved.
  connected to target database: CRM (DBID=3599153036)
  RMAN> recover corruption list;
  Starting recover at 2012-09-24 21:42:01
  using target database control file instead of recovery catalog
  allocated channel: ORA_DISK_1
  channel ORA_DISK_1: SID=70 device type=DISK
  allocated channel: ORA_DISK_2
  channel ORA_DISK_2: SID=131 device type=DISK
  channel ORA_DISK_1: restoring block(s)
  channel ORA_DISK_1: specifying block(s) to restore from backup set
  restoring blocks of datafile 00005
  channel ORA_DISK_1: reading from backup piece /backup/20120913_ebnl4bil_1_1
  channel ORA_DISK_1: piece handle=/backup/20120913_ebnl4bil_1_1 tag=TAG20120913T195604
  channel ORA_DISK_1: restored block(s) from backup piece 1
  channel ORA_DISK_1: block restore complete, elapsed time: 00:00:35
  starting media recovery
  media recovery complete, elapsed time: 00:00:07
  Finished recover at 2012-09-24 21:42:47
  SQL>select * from v$database_block_corruption;
  no rows selected
  总结:数据块恢复命令 recover datafile xxx  block xxx 和命令 recover corruption list 都可以恢复坏块,并自动清除视图v$database_block_corruption 中关于坏块的记录


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-599453-1-1.html 上篇帖子: RoseHA集群:RHEL+RoseMirror+Oracle【1】 下篇帖子: 浅谈Oracle SQL trace-ylw6006
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表