{"id":1847,"date":"2018-01-14T22:41:25","date_gmt":"2018-01-14T21:41:25","guid":{"rendered":"http:\/\/clemente.pamplona.name\/dba\/?p=1847"},"modified":"2018-01-31T09:15:17","modified_gmt":"2018-01-31T08:15:17","slug":"bloques-coruptos-en-una-base-de-datos","status":"publish","type":"post","link":"http:\/\/clemente.pamplona.name\/dba\/bloques-coruptos-en-una-base-de-datos\/","title":{"rendered":"Bloques coruptos en una base de datos"},"content":{"rendered":"<p>Uno de los problemas a los que tenemos que enfrentarnos  dia a dia es el de lidiar con bloques corruptos en la base de datos.<\/p>\n<p>Vayamos al supuesto en el que alguna de nuestras herramientas (RMNA,EMC,dbvf, el propio motor en algun acceso) ha detectado que tenemos estos bloques corruptos. La manera de encontarlos es mediante la vista <b>V$DATABASE_BLOCK_CORRUPTION  <\/b><\/p>\n<pre>\r\nSQL> select * from V$DATABASE_BLOCK_CORRUPTION;\r\n\t FILE#     BLOCK#     BLOCKS CORRUPTION_CHANGE# CORRUPTIO\r\n---------- ---------- ---------- ------------------ ---------\r\n\t 2      88231          1            6821577 NOLOGGING\r\n\t 2      58442          1            6821577 NOLOGGING\r\n<\/PRE>\r\n\r\n<h1> Recuperacion de bloques corruptos<\/h1>\r\nLa manera de recuperarlos es tan sencillo como decirle al RMAN que lo haga, para esto ejecutaremos el comando de rman <b>RECOVER CORRUPTION LIST;<\/b>:\r\n\r\n<pre>\r\nRMAN> RECOVER CORRUPTION LIST;\r\nStarting recover at 14-JAN-18\r\nusing target database control file instead of recovery catalog\r\nallocated channel: ORA_DISK_1\r\nchannel ORA_DISK_1: SID=206 device type=DISK\r\nstarting media recovery\r\nmedia recovery complete, elapsed time: 00:00:01\r\nFinished recover at 14-JAN-18\r\n<\/PRE>\r\n\r\n<h1> Comprobacion de que han sido recuperados<\/h1>\r\nAunque rman nos haya dicho OK, deberemos revisar que los bloques estan correctos, para ello usaremos la opcion <b> VALIDATE DATAFILE <\/b> de RMAN aplicado al FILE# que nos indicaba la vista de bloques corruptos\r\n<pre>\r\nRMAN>  validate datafile 2;\r\n\r\nStarting validate at 14-JAN-18\r\nusing channel ORA_DISK_1\r\nchannel ORA_DISK_1: specifying datafile(s) for validation\r\ninput datafile file number=2 name=\/u01\/app\/oracle\/ORASID\/sysaux01.dbf\r\nchannel ORA_DISK_1: validation complete, elapsed time: 00:00:01\r\n\r\nList of Datafiles\r\n=================\r\nFile Status Marked Corrupt Empty Blocks Blocks Examined High SCN\r\n---- ------ -------------- ------------ --------------- ----------\r\n2    OK     0              21603        336384          41455048 \r\n\r\nFinished validate at  14-JAN-18\r\n<\/pre>\n<h1> Y si no lo ha solucionado?<\/h1>\n<p>Que ocurre si RMAN no ha podido recuperar el bloque corrupto?<br \/>\nEn este caso el comando validate nos devolveria algo similar a <\/p>\n<pre>\r\nRMAN> validate datafile 2;\r\nStarting validate at 14-JAN-18\r\nusing channel ORA_DISK_1\r\nchannel ORA_DISK_1: starting validation of datafile\r\nchannel ORA_DISK_1: specifying datafile(s) for validation\r\ninput datafile file number=2 name=\/u01\/app\/oracle\/ORASID\/sysaux01.dbf\r\nchannel ORA_DISK_1: validation complete, elapsed time: 00:00:01\r\nList of Datafiles\r\n=================\r\nFile Status Marked Corrupt Empty Blocks Blocks Examined High SCN\r\n---- ------ -------------- ------------ --------------- ----------\r\n2    OK     2              20225        99863           49937565\r\nFile Name: \/u01\/app\/oracle\/ORASID\/sysaux01.dbf\r\nBlock Type Blocks Failing Blocks Processed\r\n---------- -------------- ----------------\r\nData       0              26483\r\nIndex      0              24051\r\nOther      0              29081\r\nFinished validate at 14-JAN-18\r\n<\/pre>\n<p>Por que puede ser esto?<br \/>\nEn el caso en que no resolvamos el problema, echaremos un vistazo al alert.log, <\/p>\n<pre>\r\n\r\nORA-01578: ORACLE data block corrupted (file # ORA-01578: ORACLE data block corrupted (file # 2, block # 58442)\r\nORA-01110: data file 2: '\/u01\/app\/oracle\/ORASID\/sysaux01.dbf'\r\nORA-26040: Data block was loaded using the NOLOGGING option\r\n<\/pre>\n<p>Lo que nos esta indicando este error es que el objeto se creo en modo <i> nologging<\/i>  por lo que la base de datos no tiene informacion de como recuperarla, si queremos recuperar esta informacion deberemos de recrear el objeto ( y cruzar los dedos para que este objeto sea un indice y no datos de negocio) <\/p>\n<p>COmo siempre  podemos encontrar mas informacion al respecto en soporte Oracle en las notas:<\/p>\n<ul>\n<li>How to identify the corrupt Object reported by ORA-1578 \/ RMAN \/ DBVERIFY (Doc ID 819533.1)\n<li>ORA-1578 \/ ORA-26040 Corrupt blocks by NOLOGGING - Error explanation and solution (Doc ID 794505.1)\n<li>How to identify all the Corrupted Objects in the Database with RMAN (Doc ID 472231.1)\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Uno de los problemas a los que tenemos que enfrentarnos dia a dia es el de lidiar con bloques corruptos en la base de datos. Vayamos al supuesto en el que alguna de nuestras herramientas (RMNA,EMC,dbvf, el propio motor en &hellip; <a href=\"http:\/\/clemente.pamplona.name\/dba\/bloques-coruptos-en-una-base-de-datos\/\">Sigue leyendo <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[11,60,66],"tags":[855,861,863,859,101,857,23],"class_list":["post-1847","post","type-post","status-publish","format-standard","hentry","category-11g","category-12c","category-errores-ora","tag-855","tag-atabase_block_corruption","tag-nologging","tag-ora-01110","tag-ora-01578","tag-ora-26040","tag-rman"],"_links":{"self":[{"href":"http:\/\/clemente.pamplona.name\/dba\/wp-json\/wp\/v2\/posts\/1847","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/clemente.pamplona.name\/dba\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/clemente.pamplona.name\/dba\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/clemente.pamplona.name\/dba\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/clemente.pamplona.name\/dba\/wp-json\/wp\/v2\/comments?post=1847"}],"version-history":[{"count":8,"href":"http:\/\/clemente.pamplona.name\/dba\/wp-json\/wp\/v2\/posts\/1847\/revisions"}],"predecessor-version":[{"id":1855,"href":"http:\/\/clemente.pamplona.name\/dba\/wp-json\/wp\/v2\/posts\/1847\/revisions\/1855"}],"wp:attachment":[{"href":"http:\/\/clemente.pamplona.name\/dba\/wp-json\/wp\/v2\/media?parent=1847"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/clemente.pamplona.name\/dba\/wp-json\/wp\/v2\/categories?post=1847"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/clemente.pamplona.name\/dba\/wp-json\/wp\/v2\/tags?post=1847"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}