{"id":407,"date":"2013-02-02T21:41:31","date_gmt":"2013-02-02T20:41:31","guid":{"rendered":"http:\/\/clemente.pamplona.name\/dba\/?p=407"},"modified":"2013-02-07T16:25:56","modified_gmt":"2013-02-07T15:25:56","slug":"monitorizar-el-alert-log-desde-una-sql-remota","status":"publish","type":"post","link":"http:\/\/clemente.pamplona.name\/dba\/monitorizar-el-alert-log-desde-una-sql-remota\/","title":{"rendered":"Monitorizar el alert.log desde una sql remota"},"content":{"rendered":"<p>El fichero de alertas de oracle alert.log es uno de los ficheros que tradicionalmente revisamos en busca de errores de la base de datos.<br \/>\nHasta la versi\u00f3n<i> 11g<\/i> esta monitorizaci\u00f3n se hac\u00eda por medio del scripts que interactuaban con ficheros del sistema operativo, lo que nos llevaba a tener que mantener estos scripts para las distintas versiones de shells de sistema, o tener que instalar alg\u00fan tipo de interprete en el sistema que nos lo gestionara de manera multiplataforma.<\/p>\n<p>Una de las grandes ventajas de la 11g es que Oracle nos ha obsequiado con una tabla de base de datos que mapea esta informaci\u00f3n del alert.log  dentro de la base de datos . Estamos hablando de la tabla<strong> x$dbgalertext;<\/strong><\/p>\n<p>Mediante la tabla x$dbgalertext podemos obtener toda la informacion que est\u00e1 en el alert.log, su contenido es:<\/p>\n<pre>\r\nSQL> desc X$DBGALERTEXT\r\n\r\n           Name                            Null?    Type\r\n           ------------------------------- -------- -------------------------\r\n    1      ADDR                                     RAW(4)\r\n    2      INDX                                     NUMBER\r\n    3      INST_ID                                  NUMBER\r\n    4      ORIGINATING_TIMESTAMP                    TIMESTAMP(3) WITH TIME ZONE\r\n    5      NORMALIZED_TIMESTAMP                     TIMESTAMP(3) WITH TIME ZONE\r\n    6      ORGANIZATION_ID                          VARCHAR2(64)\r\n    7      COMPONENT_ID                             VARCHAR2(64)\r\n    8      HOST_ID                                  VARCHAR2(64)\r\n    9      HOST_ADDRESS                             VARCHAR2(16)\r\n   10      MESSAGE_TYPE                             NUMBER\r\n   11      MESSAGE_LEVEL                            NUMBER\r\n   12      MESSAGE_ID                               VARCHAR2(64)\r\n   13      MESSAGE_GROUP                            VARCHAR2(64)\r\n   14      CLIENT_ID                                VARCHAR2(64)\r\n   15      MODULE_ID                                VARCHAR2(64)\r\n   16      PROCESS_ID                               VARCHAR2(32)\r\n   17      THREAD_ID                                VARCHAR2(64)\r\n   18      USER_ID                                  VARCHAR2(64)\r\n   19      INSTANCE_ID                              VARCHAR2(64)\r\n   20      DETAILED_LOCATION                        VARCHAR2(160)\r\n   21      PROBLEM_KEY                              VARCHAR2(64)\r\n   22      UPSTREAM_COMP_ID                         VARCHAR2(100)\r\n   23      DOWNSTREAM_COMP_ID                       VARCHAR2(100)\r\n   24      EXECUTION_CONTEXT_ID                     VARCHAR2(100)\r\n   25      EXECUTION_CONTEXT_SEQUENCE               NUMBER\r\n   26      ERROR_INSTANCE_ID                        NUMBER\r\n   27      ERROR_INSTANCE_SEQUENCE                  NUMBER\r\n   28      VERSION                                  NUMBER\r\n   29      MESSAGE_TEXT                             VARCHAR2(2048)\r\n   30      MESSAGE_ARGUMENTS                        VARCHAR2(128)\r\n   31      SUPPLEMENTAL_ATTRIBUTES                  VARCHAR2(128)\r\n   32      SUPPLEMENTAL_DETAILS                     VARCHAR2(128)\r\n   33      PARTITION                                NUMBER\r\n   34      RECORD_ID                                NUMBER\r\n<\/pre>\n<p>Ahora bien, \u00bfcomo accedemos a ella?<\/p>\n<p>La tabla no puede ser accedida directamente desde un usuario que no sea sys, as\u00ed que, lo que haremos ser\u00e1 el crear una vista sobre esta tabla (a la que llamaremos por ejemplo ficheroalert )  y permitirle  que lo vea a nuestro usuario de monitorizacion.<\/p>\n<pre>\r\n\r\ncreate view ficheroalert as select  * from sys.x$dbgalertext;\r\ngrant select on sys.ficheroalert to MONITORIZACION;\r\n\r\n<\/pre>\n<p>A partir de aqu\u00ed, solamente tenemos que jugar con los campos descritos arriba y podremos obtener la informacion que deseemos.<br \/>\nEn mi caso , por ejemplo, me gustar\u00eda saber si ha habido alg\u00fan mensaje ORA- o ERROR en los ultimos 5 munitos.<\/p>\n<p>La consulta que ejecutar\u00e9 para obtenerlo es:<\/p>\n<pre>\r\n\r\nselect to_char(ORIGINATING_TIMESTAMP, 'dd-mon-yyyy hh24:mi:ss'),\r\n      substr(MESSAGE_TEXT, 1, 300) message_text\r\n    from sys.ficheroalert\r\n    where (MESSAGE_TEXT like '%ORA-%'\r\n            or upper(MESSAGE_TEXT) like '%ERROR%')\r\n     and \r\n           cast(ORIGINATING_TIMESTAMP as DATE) > sysdate - 5\/1440;\r\n            - X\/1440 es la X en minutos \r\n\r\n<\/pre>\n<p>Entrada en ingles en <a href=\"http:\/\/clemente.pamplona.name\/dba_en\/monitoring-the-alert-log-from-a-remote-sql\/\" title=\"Monitoring  the alert.log from a remote sql\" target=\"_blank\">Monitoring  the alert.log from a remote sql<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>El fichero de alertas de oracle alert.log es uno de los ficheros que tradicionalmente revisamos en busca de errores de la base de datos. Hasta la versi\u00f3n 11g esta monitorizaci\u00f3n se hac\u00eda por medio del scripts que interactuaban con ficheros &hellip; <a href=\"http:\/\/clemente.pamplona.name\/dba\/monitorizar-el-alert-log-desde-una-sql-remota\/\">Sigue leyendo <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[11,13,7],"tags":[249,58,56,57,247,59],"class_list":["post-407","post","type-post","status-publish","format-standard","hentry","category-11g","category-scripting","category-sqlplus","tag-11g","tag-alert-log","tag-monitorizacion","tag-ora","tag-sqlplus","tag-xdbgalertext"],"_links":{"self":[{"href":"http:\/\/clemente.pamplona.name\/dba\/wp-json\/wp\/v2\/posts\/407","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=407"}],"version-history":[{"count":9,"href":"http:\/\/clemente.pamplona.name\/dba\/wp-json\/wp\/v2\/posts\/407\/revisions"}],"predecessor-version":[{"id":415,"href":"http:\/\/clemente.pamplona.name\/dba\/wp-json\/wp\/v2\/posts\/407\/revisions\/415"}],"wp:attachment":[{"href":"http:\/\/clemente.pamplona.name\/dba\/wp-json\/wp\/v2\/media?parent=407"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/clemente.pamplona.name\/dba\/wp-json\/wp\/v2\/categories?post=407"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/clemente.pamplona.name\/dba\/wp-json\/wp\/v2\/tags?post=407"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}