XADM: Cómo determinar qué buzón es el propietario de una página determinada de una base de datos

Seleccione idioma Seleccione idioma
Id. de artículo: 262196 - Ver los productos a los que se aplica este artículo
Este artículo se publicó anteriormente con el número E262196
Expandir todo | Contraer todo

En esta página

Resumen

Aunque sepa qué página física de una base de datos de almacén de información de Exchange Server se ha dañado (basándose en el resultado de una utilidad de diagnóstico o en un mensaje del Visor de eventos de Microsoft Windows NT), deberá conocer la importancia de dicha página; por ejemplo:
  • ¿La página forma parte de una tabla importante del sistema?
  • ¿La página forma parte de la Bandeja de entrada de alguien?
  • ¿La página sólo forma parte de los datos adjuntos situados en la bandeja de Elementos eliminados de alguien?
Este artículo explica cómo asignar una página determinada de la base de datos a un identificador de tabla y cómo asignar esa tabla a un buzón o a una carpeta de buzones determinada.

Más información

Para entender los métodos que se describen en este artículo, debe tener conocimientos sobre los elementos fundamentales de una base de datos de buzones de Exchange Server.

Estructuras de base de datos

Un archivo de base de datos de Exchange Server es un conjunto de páginas de 4 kilobytes (KB), numeradas en secuencia. Las dos primeras páginas de la base de datos son el encabezado de la base de datos. La tercera página es la página lógica número 1, la cuarta página de la base de datos es la página lógica número 2 y así sucesivamente.

Las páginas están organizadas en árboles equilibrados (árboles b+). Estos árboles son colecciones de páginas que están vinculadas de forma lógica para buscar y recuperar información rápidamente.

Los árboles están organizados en tablas. Normalmente, una tabla de base de datos está formada por varios árboles que realizan funciones especializadas en la tabla. Existen árboles de datos y también pueden existir árboles de valores largos y de índices, así como otros árboles para funciones especializadas del sistema. (Los árboles de valores largos se utilizan para guardar datos que no caben en su totalidad en una sola página de datos.)
Las tablas están organizadas en buzones. Cada una de las carpetas de un buzón es una tabla diferente. Además de las tablas que forman los buzones, hay tablas compartidas por varios buzones, como las tablas de carpetas, de mensajes y de datos adjuntos. La tabla Mailbox enumera todos los buzones de la base de datos.

También existen varias tablas del sistema en la base de datos. Las dos tablas del sistema más importantes son el catálogo (la tabla MSysObjects) y una segunda copia del catálogo (MsysObjectsShadow). Estos catálogos son la "tabla de las tablas". Si se pierden los dos, la base de datos no sabe qué otras tablas contiene o dónde buscar las otras tablas.

Cómo repara la utilidad Eseutil los archivos de la base de datos

Eseutil.exe es una utilidad multifunción incluida en Exchange Server 5.5 y Exchange 2000 Server. Puede usar la utilidad Eseutil para ver información de bases de datos, desfragmentar el archivo de base de datos y realizar otras muchas funciones entre las que se incluye la reparación de una base de datos dañada.

En el modo de reparación, la utilidad Eseutil corrige las tablas individuales. La utilidad Eseutil no mantiene las relaciones entre las tablas. Por ejemplo, si se daña la tabla Msgs, que contiene todos los mensajes de los buzones, cuando la utilidad Eseutil la repara, es posible que dicha utilidad tenga que descartar algunos mensajes ilegibles. No obstante, estos mensajes pueden seguir apareciendo como válidos en la Bandeja de entrada de algunos usuarios. Para resolver este problema, tiene que ejecutar la utilidad Isinteg.exe, que también se proporciona con Exchange Server. Esta utilidad mantiene la relación entre las tablas y quita los elementos descartados de la lista de mensajes del usuario en la Bandeja de entrada.

Antes de ejecutar un procedimiento de reparación, resulta útil conocer qué posibilidades existen de que la reparación se realice correctamente y dónde se pueden haber perdido los datos. Al ejecutar la reparación, siempre existe alguna posibilidad de que se pierdan datos de forma catastrófica y, por tanto, siempre deberá tener una copia de seguridad de un archivo de base de datos antes de proceder a la reparación. Es más seguro restaurar los datos a partir de una copia de seguridad en línea, e ir pasando por los registros de transacciones para actualizar completamente la base de datos, que ejecutar la reparación. Utilice la reparación cuando, por cualquier motivo, no pueda seguir la estrategia recomendada.

Para averiguar qué finalidad posee una página determinada en la base de datos, deberá usar simultáneamente las utilidades Eseutil e Isinteg. Para que Isinteg recopile la información necesaria, la base de datos debe poderse iniciar y debe estar instalada en un equipo activo con Exchange Server, ya que Isinteg inicia la base de datos en silencio para leerla como una colección de buzones, no sólo como una colección de tablas.

Los métodos descritos en este artículo se aplican tanto a Exchange Server 5.5 como a Exchange 2000 Server. La base de datos y las estructuras de página de las dos versiones son similares; puede utilizar la versión de Eseutil que se proporciona con Exchange 2000 Server en alguno de los modos de sólo lectura en una base de datos de Exchange Server 5.5. Microsoft recomienda ejecutar la versión de Eseutil de Exchange 2000 Server en las bases de datos de Exchange Server 5.5 en modo de sólo lectura.

ADVERTENCIA: no utilice una versión de Eseutil no coincidente en un modo que provoque cambios en la base de datos. Estos modos incluyen, entre otros, el uso de los modificadores de la línea de comandos /r, /p y /d. El único modo que es totalmente seguro es el modo /m, que vuelca distintos tipos de información sin modificar la base de datos.

Debe estar completamente seguro de que sabe en todo momento qué versión de Eseutil está ejecutando. Si ejecuta Eseutil sin modificadores, la información de versión se muestra en pantalla y no se lleva a cabo ninguna operación de la base de datos.

Para ejecutar la versión de Eseutil de Exchange 2000 Server en una base de datos de Exchange Server 5.5, copie los archivos Eseutil.exe y Ese.dll desde un equipo con Exchange 2000 Server a una ubicación adecuada, inicie Eseutil desde esa carpeta y especifique la ruta de acceso al archivo de base de datos.

El escenario

El resto de este artículo describe un escenario típico en el que se descubre una página dañada en una base de datos y se resuelve para obtener una carpeta concreta.

En este escenario, se registra el evento siguiente en el registro de eventos de la aplicación de un equipo con Exchange Server 5.5:
Tipo de suceso: Error
Origen del suceso: ESE97
Categoría del suceso: Caché de páginas de base de datos
Id. de suceso: 200
Fecha: 4/5/2000
Hora: 15:39:05
Usuario: No disponible
Equipo: EX1
Descripción:
MSExchangeIS (2312) Una lectura del archivo de base de datos e:\exchsrvr\MDBDATA\PRIV.EDB entre 0x0000000000212000 y 0x0000000000212FFF falló después de 16 intentos de lectura fallidos con el error -1018. Hay un problema de software o de hardware que afecta a la unidad de base de datos que debe corregirse para conservar la integridad de la base de datos. Póngase en contacto con los Servicios de soporte técnico de Microsoft.

Determinar qué buzón contiene una página de la base de datos

En esta sección se incluye la siguiente información:
  • Cómo determinar qué página de la base de datos está dañada
  • Cómo determinar qué árbol contiene una página
  • Cómo determinar qué tabla contiene un árbol
  • Cómo determinar qué buzón contiene una tabla

Cómo determinar qué página de la base de datos está dañada

Utilice uno de los métodos siguientes para determinar qué pagina de la base de datos está dañada:
  • Calcule el número de la página a partir de los desplazamientos del mensaje de error del suceso. En este ejemplo, la página dañada está a 0x212000 bytes en la base de datos. En números decimales, este número es 2.170.880. Divida ese número entre 4.096 y réstele 1 para determinar el número de la página dañada, que en este ejemplo es 529. O bien

  • O bien Use la utilidad Esefile para que realice el cálculo examinando una base de datos completa e informe de las páginas que tienen daños físicos.
NOTA: puede usar la utilidad Calc.exe en el modo científico para convertir fácilmente los números hexadecimales y decimales.

Después de determinar que la página 529 está dañada, deberá averiguar a qué árbol pertenece la página.

Cómo determinar qué árbol contiene una página

La versión de Exchange 2000 de la utilidad Eseutil introduce la capacidad de volcar la información lógica del encabezado de cualquier página de la base de datos. Esta capacidad también funciona en bases de datos de Exchange Server 5.5. Para volcar una página, ejecute el comando siguiente:
eseutil /m [ nombre_base de datos ] /p nnnnn > nombre_archivo.txt
donde nombre_base de datos es el nombre de la base de datos, nnnnn es el número de la página que está dañada y nombre_archivo es el nombre que desea dar al archivo de resultados.

Por ejemplo, si el nombre de la base de datos es Priv1.edb, el número de página de la página dañada es 529 y desea guardar el resultado en el archivo de texto sin formato 529.txt, ejecute el comando siguiente:
eseutil /m priv1.edb /p529 > 529.txt
El volcado de la página resultante comienza de forma parecida a la siguiente:
Microsoft(R) Exchange Server(TM) Database Utilities
Version 6.0
Copyright (C) Microsoft Corporation 1991-2000. All Rights Reserved.

Initiating FILE DUMP mode...
Database: priv.edb
Page: 529
pgnoThis <0x02660004   ,  4>:  529 (0x00000211)
objidFDP <0x02660018   ,  4>:  123 (0x0000007b)
ulChecksumParity <0x02660000   ,  4>:  881043383 (0x3483a7b7)
  ** computed checksum: 2653031709 (0x9e220d1d)
dbtimeDirtied <0x02660008 ,    8>:  522872 (0x000000000007fa78)
cbFree <0x0266001c   ,  2>:  4026 (0x0fba)
ibMicFree <0x02660020   ,  2>:  1675 (0x068b)
itagMicFree <0x02660022   ,  2>:  2 (0x0002)
cbUncommittedFree <0x0266001e   ,  2>:  0 (0x0000)
pgnoNext <0x02660014   ,  4>:  0 (0x00000000)
pgnoPrev <0x02660010   ,  4>:  0 (0x00000000)
fFlags <0x02660024   ,  4>:  1 (0x00000001)
Parent of leaf
Internal page
Root page
FDP page
Multiple Extent Space (ParentFDP: 1, pgnoOE: 2341)
Primary page
Busque la línea de este resultado que comienza por objidFDP, que en este ejemplo tiene el número 123. Cada uno de los árboles de la base de datos está identificado de forma única por un número objidFDP. Si vuelca todas las páginas de la base de datos y recopila todas las que tienen un objidFDP de 123, esas páginas componen el árbol determinado en su totalidad.

Aunque la página esté dañada, la utilidad para volcar páginas lee la información que queda intacta. Si la página está demasiado dañada para obtener un volcado del encabezado legible, puede intentar volcar las páginas adyacentes. Si los valores objidFDP de las páginas que preceden y siguen a la página dañada coinciden, es posible que la página dañada forme parte de ese mismo árbol.

NOTA: si desea volcar todas las páginas de una base de datos a la vez, puede hacerlo con un comando parecido al que se muestra a continuación; observe que este proceso puede tardar en el caso de una base de datos grande.
for /l %a in (1,1, nnnnn) do eseutil /m priv1.edb /p%a >>allpages.txt
donde nnnnn es el número de páginas de la base de datos. Para determinar el número de páginas, divida el tamaño exacto en bytes de la base de datos entre 4096 y, a continuación, réstele 2 (para el encabezado de la base de datos). Por ejemplo, si el tamaño de la base de datos es 56.631.296 bytes, tiene 13.824 páginas.

Después de determinar que la página pertenece al árbol 123, tiene que averiguar qué tabla contiene el árbol 123.

Cómo determinar qué tabla contiene un árbol

Puede determinar qué tabla contiene un árbol usando la versión de la utilidad Eseutil de Exchange 2000 para obtener el espacio que se utiliza en la base de datos. Un volcado de espacio muestra las tablas de la base de datos e indica cuántas páginas utiliza cada tabla. La utilidad Eseutil para Exchange Server 5.5 también puede obtener el uso del espacio, pero la versión de Exchange 2000 agrega al resultado una columna que identifica el valor objidFDP de cada uno de los árboles de las tablas.

Para usar la versión de la utilidad Eseutil de Exchange 2000 en una base de datos de Exchange Server 5.5 o Exchange 2000 a fin de obtener el uso del espacio, ejecute el comando siguiente:
eseutil /ms priv1.edb >space.txt
El resultado es similar al siguiente (se han abreviado las columnas irrelevantes para este ejemplo):
Microsoft(R) Exchange Server(TM) Database Utilities
Version 6.0
Copyright (C) Microsoft Corporation 1991-2000. All Rights Reserved.
 
Initiating FILE DUMP mode...
Database: priv.edb

******************* SPACE DUMP ********************
Name                   Type   ObjidFDP    PgnoFDP  
===================================================
priv.edb                Db           1          1  

1-1511                  Tbl         98        433  
  MsgFolderIndex7       Idx        100        434  
  MsgFolderIndexPtagDel Idx        102        436  
  RuleMsgFolderIndex    Idx        101        435  
1-172E                  Tbl        103        457  
  MsgFolderIndex7       Idx        105        458  
  MsgFolderIndexPtagDel Idx        107        460  
  RuleMsgFolderIndex    Idx        106        459  
1-194E                  Tbl        108        465  
  MsgFolderIndex7       Idx        110        466  
  MsgFolderIndexPtagDel Idx        112        468  
  RuleMsgFolderIndex    Idx        111        467  
1-1B6D                  Tbl        113        489  
  MsgFolderIndex7       Idx        115        490  
  MsgFolderIndexPtagDel Idx        117        492  
  RuleMsgFolderIndex    Idx        116        491  
1-1D8A                  Tbl        118        502  
  MsgFolderIndex7       Idx        120        503  
  MsgFolderIndexPtagDel Idx        122        505  
  RuleMsgFolderIndex    Idx        121        504  
1-1FA8                  Tbl        123        529  <- tree 123
  MsgFolderIndex7       Idx        125        530  
  MsgFolderIndexPtagDel Idx        127        532  
  RuleMsgFolderIndex    Idx        126        531  
Este resultado indica que el árbol con el objidFDP de 123 forma parte del árbol de datos de la tabla 1-1FA8.

SUGERENCIA: al buscar el número de objidFDP en un volcado de espacio, escriba un espacio antes y después del número, en lugar de buscar sólo el número, para reducir la cantidad de coincidencias. Para este ejemplo, busque " 123 " (sin las comillas).

Las tablas de una base de datos de Exchange Server están identificadas con un número con guión (como 1-1FA8) o con un nombre (como Msg). Muchas tablas del sistema están identificadas por el nombre, pero no todas. Por ejemplo, la tabla 1-24 contiene todos los datos adjuntos de la base de datos. Todas las tablas de las carpetas de usuario tienen números, no nombres.

En este ejemplo, el número de página, 529, también se encuentra en el resultado del volcado de espacio. Sin embargo, esto no significa que no sea necesario volcar la página para buscar el número del árbol. No puede consultar directamente el volcado de espacio para buscar la página.

La página que se indica en el volcado de espacio es la página raíz del árbol. La página 529 es la página raíz del árbol en este ejemplo, pero podría no haberlo sido y, en ese caso, esta página no se enumeraría en el volcado de espacio.

Después de determinar que la página 529 pertenece al árbol 123, que se encuentra en la tabla 1-1FA8, es necesario averiguar qué buzón contiene la tabla. Si la página 529 pertenece a la tabla Msg, significa que existe algún tipo de daño en al menos un mensaje de la base de datos. No obstante, dado que la tabla implicada no tiene nombre, hay que averiguar qué tipo de tabla es la tabla 1-1FA8.

Cómo encontrar el buzón que contiene una tabla

Si la página no se encuentra en una tabla del sistema o en una tabla compartida (como 1-24 o Msg), probablemente pertenezca a un buzón particular. Isinteg.exe permite volcar todas las carpetas e identifica el tipo de todas ellas. Por tanto, normalmente puede decir si una tabla es una carpeta de Elementos enviados o de la Bandeja de entrada. Con Exchange Server 5.5 Service Pack 3 y posteriores, Isinteg también vuelca la tabla de buzones, lo que le permite establecer una correlación entre una determinada carpeta y el buzón que la contiene. Para volcar las tablas de buzones y de carpetas, ejecute el comando siguiente con la versión del archivo Isinteg.exe que se proporciona con Exchange Server 5.5 Service Pack 3 o posterior:
isinteg -pri -dump -l isdump.txt
Es probable que el archivo de volcado de Isinteg sea muy grande. El archivo contiene tres secciones principales: la tabla de Index Age, la tabla Folder y la tabla Mailbox. Busque la tabla que identificó a partir del volcado de espacio de Eseutil en la sección de la tabla Folder del volcado de Isinteg. A continuación se muestra la entrada de la tabla Folder del archivo Isdump.txt para 1-1FA8:
[141] Folder FID=0001-000000001FA8
	Parent FID=0001-000000001FA5
	Root FID=0001-000000001FA4
	ACL ID=0000-000000000000
	Folder Type=1
	Msg Count=859
	Msgs Unread=859
	Msgs Submitted=0
	Rcv Count=4
	Subfolders=0
	Name=Inbox
	Comment=
	Restriction=
	Search FIDs=
	Recursive FIDs=
	Search Backlinks=
	Categ FIDs=
SUGERENCIA: la manera más fácil de buscar la carpeta 1-1FA8 es buscar sólo el sufijo 1FA8. En el resultado de Isinteg, el identificador de carpeta (FID) de la tabla está lleno de ceros para que todos los identificadores tengan el mismo número de dígitos, de forma que es imposible buscar 1-1FA8.

Observe que el valor Name de la tabla es Inbox, lo que indica que la página dañada es la Bandeja de entrada de un usuario. En este ejemplo, el FID raíz que se muestra para 1-1FA8 es 1-1FA4 (o 0001-000000001FA4). Una vez determinado el FID raíz, puede buscar la tabla Mailbox.

La tabla Mailbox está en la parte inferior del volcado. La manera más fácil de buscar el principio de la tabla Mailbox es buscar las palabras siguientes:
Dump of the
Cuando busque la tabla Mailbox, verá lo siguiente:
[10] RootFID=0001-000000001FA4
	Owner DN=???
	GUID=A5C4D99B DE518E40 82BD51B8 197571A7
	Display Name=David Johnson
	Comment=
	Sentmail FID=542D-6530362B5136
	Subtree=0001-000000001FA5
	Inbox=0001-000000001FA6
	Outbox=0001-000000001FA7
	Sentmail=0001-000000001FA8
	Finder=0001-000000001FAA
	DAF=0001-000000001FAB
	Spooler Q=0001-000000001FAC
	Size=(ec:ecNotFound-MAPI_E_NOT_FOUND)
	Localized=TRUE
	Locale=0x0
Error: 1 database retrieve error on current record.
Pase por alto el error al final del registro del buzón; este error es una anomalía del resultado del volcado de Mailbox y siempre aparece.

Esta tabla Mailbox indica que se produjeron daños en la carpeta Bandeja de entrada de David Johnson.

Póngase en contacto con el usuario y pídale que inicie Microsoft Outlook. En este ejemplo, la Bandeja de entrada de David indica que tiene 968 mensajes, pero David no puede ver ninguno de ellos.

Evaluar los daños

El volcado de la página de la sección "Cómo determinar qué árbol contiene una página" de este artículo muestra varios "indicadores" en la página que revelan la naturaleza de lo que se almacena en la página.

Estos indicadores eran:
  • Parent of leaf
  • Internal page
  • Root page
  • FDP page
  • Multiple Extent Space (ParentFDP: 1, pgnoOE: 2341)
  • Primary page
Existen otros tipos de páginas o indicadores que pueden establecerse en una página, pero de los dos únicos que se tiene que preocupar son "Internal page" y "Leaf page".

Las páginas internas ("Internal page") son páginas que ayudan a definir la estructura de los árboles de la base de datos. Las páginas de hoja ("Leaf page") contienen los datos reales del árbol.

En la mayoría de los casos, aunque se pierdan todas las páginas internas de un árbol, éste aún puede reconstruirse exactamente con la función de reparación de la utilidad Eseutil, ya que cada página de hoja sabe a qué árbol pertenece y la relación entre las páginas se puede volver a calcular.

Pero cuando se pierde una página de hoja, siempre se pierden datos, a menos que la hoja sea de una de las tablas del catálogo del sistema. En ese caso, puede recuperar la página a partir de la otra copia del catálogo.

En este ejemplo, aunque David no pueda ver ninguno de los mensajes, lo único que está dañado es una página interna del árbol y, por tanto, es muy probable que la reparación se realice correctamente.

Lleve a cabo la reparación con el comando eseutil /p únicamente en una copia de la base de datos, no en la base de datos original. Aunque todas las indicaciones sean positivas, la reparación siempre conlleva el riesgo de pérdida permanente de datos.

Después de ejecutar el comando eseutil /p priv.edb /v /x en esta base de datos, todos los mensajes del usuario volverán a estar visibles. Dado que el daño se produjo en una página interna y que seguramente la reparación se realizó correctamente, no es necesario seguir ejecutando Isinteg. Si una página de hoja de la carpeta Bandeja de entrada del usuario estuviera dañada, tendría que ejecutar Isinteg para restaurar la integridad de la relación entre la Bandeja de entrada del usuario y las tablas de datos compartidas en la base de datos. Consulte la documentación de Exchange Server acerca de Isinteg para determinar qué modificadores y qué pruebas de Isinteg son necesarios. También puede ejecutar Isinteg en modo "alltests" para realizar una comprobación más exhaustiva.

Notas generales

  • Eseutil puede realizar una comprobación de integridad de la base de datos, que es parecida a una "ejecución práctica" de la reparación. El comando eseutil /g puede dejar de funcionar antes de que Eseutil alcance el final de la base de datos si ésta se encuentra gravemente dañada o si está dañada alguna de las tablas del catálogo del sistema. Si una de las tablas de MSysObjects no está intacta, deberá ejecutar la reparación para restaurar la integridad del catálogo antes de comprobar las demás tablas. En tal caso, antes de ejecutar la reparación no puede predecir qué tablas o páginas están dañadas.
  • La última tabla que por la que pasa el comprobador de integridad o la reparación es la tabla TimedEvents. Si no ve esta tabla en la parte inferior del resultado Eseutil en modo detallado (eseutil /g priv.edb /v /x), es que la comprobación de integridad no finalizó.

    NOTA: en Exchange 2000, los modificadores /v (detallado) y /x (extendido) están implícitos y ya no son necesarios. Redirija el resultado de la comprobación de integridad a un archivo (eseutil /g >file.txt) para poder examinar los resultados. Puede observar el progreso de la comprobación de integridad periódicamente, examinando el archivo en un editor de texto.
  • Con diferencia, las dos tablas de mayor tamaño en una base de datos típica son la tabla de mensajes (Msg) y la de datos adjuntos (1-24). Por tanto, estadísticamente, estas tablas tienen más posibilidades de sufrir daños, ya que comprenden gran parte de la base de datos. Si realiza la reparación cuando estas dos tablas están dañadas, se arriesga a perder todos los datos de las mismas.
  • Es más probable que sufra daños en una página de hoja que en una página interna, ya que la mayoría de las páginas de la base de datos son páginas de hoja.
  • Si se ha producido algún daño en las tablas del sistema, como el catálogo, o en otras tablas que no contienen datos del usuario, resulta arriesgado dejar una base de datos reparada en servicio. El riesgo es relativamente bajo, pero existe. Aun cuando no observe problemas de manera inmediata, puede encontrar algunos, como un uso elevado de la CPU o interrupciones repentinas de la base de datos, al obtener acceso a estas tablas. Cuando se dañen las tablas del sistema, implemente un plan para salvar los datos y descarte la base de datos en cuanto sea posible. La forma más fácil de hacerlo es mover todos los buzones a otro servidor, eliminar la base de datos dañada y, a continuación, volver a mover los buzones a una base de datos nueva.

Propiedades

Id. de artículo: 262196 - Última revisión: lunes, 9 de febrero de 2004 - Versión: 1.0
La información de este artículo se refiere a:
  • Microsoft Exchange Server 5.5 Standard Edition
  • Microsoft Exchange 2000 Server Standard Edition
Palabras clave: 
kberrmsg kbinfo exc55 KB262196

Enviar comentarios

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com