Este documento técnico describe el nuevo procedimiento que usted necesita aplicar para cargar la base de datos master, o recuperarse de corrupción en la base de datos master o el dispositivo master en Adaptive Server Enterprise 12.5. El procedimiento para recuperación ante desastres difiere con el de versiones anteriores.
A partir de la versión 12.5 de Adaptive Server Enterprise (ASE), el programa buildmaster, utilizado para construir el dispositivo master, ya no existe. Esta funcionalidad fue incorporada a los programas dataserver (Unix) y sqlsrvr (Windows). El servidor le permite ahora crear dispositivos master y bases de datos con páginas lógicas de 2K, 4K, 8K o 16K. Debido a estos y otros cambios, usted no puede usar las instrucciones dadas en el manual ASE Troubleshooting and Error Messages Guide (EMTSG) para tareas de recuperación de desastres, tales como recuperar la base de datos master, o el dispositivo master.
Este documento técnico explica cómo llevar a cabo la recuperación ante desastres en un servidor ASE 12.5.
Antes de Comenzar
Este documento describe tres tareas de mantenimiento y recuperación ante desastres:
- Cargue de una copia vieja de la base de datos master. Se asume que tanto el dispositivo master como la base de datos master están intactos y libres de corrupción.
- Recuperación de una base de datos master corrupta. Se asume que el dispositivo master está intacto.
- Creación de un nuevo dispositivo master y todas sus bases de datos.
Algunos puntos importantes antes de usar esta información:
- Este material sólo aplica para ASE 12.5. Para versiones anteriores de ASE (12.0, 11.9, 11.5, etc.), use las instrucciones descritas en el manual EMTSG, en el capítulo "System Database Revovery".
- Este material asume que su ASE fue instalado con el modo de ordenamiento (sort order) predeterminado para su plataforma. Si Ud. instaló ASE con otro modo de ordenamiento, Ud. debe asegurarse que su servidor (recuperado) usa el modo de ordenamiento y juego de caracteres correcto para reflejar eso en el dump. Haga referencia al manual EMTSG, en el capítulo "System Database Recovery", sección "Valid Dump with Non-Default Sort Order" para detalles; note que en el Paso 3 de esa sección, el utilitario sybinit fue reemplazado por los utilitarios dsedit/dscp.
- Todos los ejemplos en este documento usan sintaxis de Transact-SQL. Todos los ejemplos de líneas de comandos son comandos Unix; los usuarios Windows pueden encontrar la sintaxis equivalente en el manual ASE Utility Programs for Windows and Windows NT.
- Comenzando con ASE 12.5, el comando dataserver permite espacios entre la opción y el parámetro.
- Los ejemplos de este documento asumen que:
- el binario dataserver está ubicado en $SYBASE/bin/dataserver
- el dispositivo master esta en $SYBASE/d_master.dat
Reemplace estas ubicaciones y nombre de dispositivos con los apropiados para su sitio.
- El servidor debe estar en modo monousuario (es decir, se debe levantar con las opción -m) para cargar la base de datos master. Sólo en este modo la base de datos master puede ser cargada.
- Sólo puede cargar una copia de respaldo de la base de datos master de un servidor de la misma versión. No se permite cargar una copia de respaldo de una versión anterior a una versión nueva.
- Usted puede usar estos procedimientos sin importar que versión de ASE estaba usando cuando creó su dispositivo master viejo. El servidor encontrará y cualquier diferencia de ubicación entre las bases de datos viejas y las recién creadas.
- Después de que se complete al cargue, pero antes de bajar el servidor, el servidor realiza algún procesamiento para reconciliar las tablas sysdatabases y sysusages recién cargadas, contra la información del dispositivo master. En este punto es posible que el servidor arroje una serie de mensajes de error referentes a fallas en el uso o ubicación de la base de datos master, y/o a causa de intentos de insertar llaves duplicadas o filas duplicadas en la tabla sysusages. Ignore estos mensajes; sólo ocurren durante la fase de reconciliación, y no afectarán la operación del servidor después de que este sea reiniciado.
Cómo Cargar una Copia Vieja de la Base de Datos master
Use los siguientes pasos si su base de datos master y su dispositivo master están intactos, y usted simplemente desea cargar una copia de respaldo anterior de su base de datos master.
Paso 1: Ponga el Servidor en Modo Monousuario
Baje y reinicie el servidor con la opción -m, la cual deja el servidor en modo monousuario y lo deja listo para cargar la base de datos master:
% $SYBASE/bin/dataserver -d $SYBASE/d_master.dat -m
Paso 2: Establezca el Nombre del Backup Server
Este paso es necesario para asegurar que ASE tiene acceso a su Backup Server para operaciones de dump y load. Siga las instrucciones detalladas en la Seccion Cómo Definir Manualmente el Nombre del Backup Server.
Paso 3. Cargue la Base de Datos Master
Ejecute el siguiente comando desde isql:
1> load database master from "master_db_dump"
2> go
donde master_db_dumpes el nombre del archivo o unidad de cinta que contiene la copia de respaldo.
ASE se baja automáticamente al completar el cargue.
{mospagebreak}
Cómo Volver a Crear la Base de Datos master
Use este procedimiento cuando el dispositivo master actual sea utilizable, pero usted no pueda usar el servidor debido a una corrupción en la base de datos master. Estos pasos le permitirán crear una nueva base de datos master y recargarla de una copia de respaldo.
Paso 1. Cree una Nueva Base de Datos master
El enfoque que se tome para crear la nueva base de datos master depende de la extensión y naturaleza de la corrupción. Existen tres posibles escenarios:
-
Recreación básica, la cual es suficiente si sólo fueron afectados los datos de la base de datos master. El servidor lee el dispositivo master para determinar los tamaños de página y del dispositivo.
-
Recreación cuando el área de configuración del dispositivo está corrupta. Usted deberá proveer los tamaños de páginas y de dispositivo.
-
Recreación cuando las páginas de asignación de la base de datos master también están corruptas. Todos los extents (grupos de páginas) no asignadas o corruptas sobre el dispositivo son asignadas a master.
Recreación Básica de la Base de Datos master
Este comando le indica al servidor que lea el área de configuración del dispositivo para obtener el tamaño de página y del dispositivo y determinar así dónde ubicar la base de datos master:
% $SYBASE/bin/dataserver -d $SYBASE/d_master.dat -w master
El servidor crea una base de datos master del mismo tamaño, y en la misma ubicación de disco de la base de datos que está reemplazando. ¡NO tendrá los datos de la base de datos anterior! En su lugar, contiene el conjunto de datos predeterminado que usted reemplazará posteriormente con un load database. Los datos predeterminados incluyen información sobre cualquier base de datos existente en el dispositivo master (no de otros dispositivos). También tiene información mínima del sistema, incluyendo un login sa con contraseña nula.
Este proceso produce una gran cantidad de mensajes de "actualización" con el seguimiento del progreso de la creación de la base de datos, los cuales son de ayuda para poder resolver problemas. Son mensajes de "actualización" ya que el servidor crea una nueva base de datos master "actualizando" el dispositivo.
Nota:
Si el área de configuración está corrupta o no disponible, este comando genera el siguiente mensaje:
The configuration area in device 'xxx' appears to be corrupt.
The server needs this data to boot, and so cannot continue.
Si esto ocurre, continúe con las instrucciones de abajo.
Recreación con un Área de Configuración Corrupta
El proceso "básico de recreación" de arriba puede fallar si el área de configuración del dispositivo se encuentra corrupta. Si es así, usted debe dar la información de tamaños. Usted necesitará dos parámetros: el tamaño de página (usted necesita saber cuál era), y el tamaño del dispositivo, el cual usted puede determinar directamente del dispositivo:
$ ls -l $SYBASE/d_master.dat
Divida el tamaño mostrado por el tamaño de página (por ejemplo 2048) para obtener el número de páginas de servidor, por 1024 para obtener KB, o por 1048576 para obtener MB.
Proporcione esta información en la línea de comandos como se muestra a continuación:
% $SYBASE/bin/dataserver -d $SYBASE/d_master.dat -w master -z 2k -b 51204
Usted también puede especificar el tamaño de dispositivo con Kb, Mb o Gb; por ejemplo "-b 100M".
Recreación cuando las Páginas de Asignación de la Base de Datos master están Corruptas
Si el procedimiento de arriba falla, las páginas de asignación de la base de datos master están corruptas. (Esto puede suceder, por ejemplo, si el dispositivo de base de datos fue inadvertidamente sobrescrito por un archivo completamente diferente).
En éste caso, usted puede forzar al servidor a asignar todos los extents corruptos o no asignados a la base de datos master:
% $SYBASE/bin/dataserver -d $SYBASE/d_master.dat -w master -f
Esto asigna TODOS los extents corruptos o imposibles de asignar, a la base de datos master. Dependiendo de la extensión de la corrupción del dispositivo master, y de qué tanto espacio originalmente tenía, esto probablemente dejará la base de datos master mucho más grande de lo que realmente se necesita, causando que ocupe espacio que antes pertenecía a otras bases de datos como model, tempdb y sybsystemdb. Esta situación la consideraremos posteriormente.
Nota:
Usted puede combinas las opciones -f, -b y -z según sea necesario.
{mospagebreak}
Paso 2. Reinicie el Servidor en Modo Monousuario
El servidor queda abajo después de recrear la base de datos master. Reinícielo con la opción -m, la cual pone el servidor en modo monousuario y lo deja listo para cargar la base de datos master:
% SYBASE/bin/dataserver -d $SYBASE/d_master.dat -m
Paso 3. Ocúpese de las Bases de Datos Faltantes (si usó la opción -f )
Nota:
Usted sólo necesita ejecutar este paso si usó la opción -f en el Paso 1. para recrear la base de datos master debido a corrupción en las páginas de asignación. Si usted no usó la opción -f, siga con el Paso 4.
Recuerde que la opción -f puede hacer que la base de datos master sea mucho más grande de lo que se necesita, a expensas de otras bases de datos requeridas sobre el dispositivo master. Usted necesitará verificar estas bases de datos antes de continuar. Este paso tiene muchas posibles permutaciones, así que usted debe saber qué bases de datos deberían estar en el dispositivo master para llevar a cabo este paso. Por ejemplo, si usted había movido tempdb a un dispositivo diferente, usted no requerirá tempdb sobre el dispositivo master. Si había actualizado, es posible que usted haya creado sybsystemdb sobre otro dispositivo diferente a master; si es así usted no necesitará tener en cuenta sybsystemdb.
Conéctese como sa y verifique las bases de datos que existen actualmente en el dispositivo master:
1> select name from sysdatabases
2> go
¿Ve usted todas las bases de datos que deberían estar sobre el dispositivo master? Si es así, omita el resto de este paso. De otra manera, usted necesitará determinar cuales bases de datos están faltando y qué tan grandes deberían ser, luego obtener el espacio libre requerido para recrear estas bases de datos.
El siguiente script isql obtiene el espacio requerido removiéndolo del final de la base de datos master. En su orden, el script
- Establece cuántas páginas lógicas requieren las bases de datos faltantes
- Resta ese número de las páginas ocupadas por master
- Remueve entradas de uso de disco para partes de master por arriba de ese límite
- Restringe la porción lógica más alta de master de tal manera que su tamaño total deja el número requerido de páginas libres
Usted necesitará proveer el valor de espacio requerido, denotado como "@needed_mb".
Nota:
Este script es proporcionado para asistirlo a usted en la tarea de recuperación de desastres. NO está oficialmente soportado por Sybase.
1> declare @needed_mb int, @needed_pages int, @master_end int,
2> @pgspermb int
3> select @pgspermb = (1048576 / @@maxpagesize)
4> select @needed_mb = 12 -- reemplace '12' con el valor de espacio requerido
5> select @needed_pages = @needed_mb * @pgspermb
6> select @master_end = sum(size) - @needed_pages
7> from master.dbo.sysusages
8> where dbid = 1
9> if (@master_end > (6 * @pgspermb))
10> begin
11> delete master.dbo.sysusages
12> where lstart > @master_end
13> update master.dbo.sysusages
14> set size = @master_end - lstart
15> where dbid = 1
16> and lstart = (select max(lstart) from master.dbo.sysusages
17> where dbid = 1)
18> end
19> else
20> begin
21> print "Can't take enough space from the master database!"
22> print "Need to find %1! pages", @needed_pages
23> print "That would leave master with %1! pages", @master_end
24> print "Cannot continue."
25> end
26> go
Nota:
Si el procedimiento falla, su dispositivo master no es lo suficientemente grande para guardar toas las bases de datos que usted está tratando de crear. Verifique los MBs de espacio requerido que usted especificó. Si es correcto, es posible que sea necesario crear un nuevo dispositivo master usando las instrucciones de la Cómo Volver a Crear el Dispositivo Master.
Usted tiene ahora suficiente espacio para recrear las bases de datos requeridas. Créelas una a la vez. Por ejemplo,
1> create database model on default=3
2> go
Repita para cada base de datos. Baje el servidor y luego reinícielo en modo monousuario usando el Paso 2 de arriba.
{mospagebreak}
Paso 4. Establezca el Nombre del Backup Server
Este paso es necesario para asegurar que ASE tiene acceso a su Backup Server para operaciones de dump y load. Siga las instrucciones detalladas en la Cómo Definir Manualmente el Nombre del Backup Server.
Paso 5. Cargue la Base de Datos master
Ejecute el siguiente comando isql:
1> load database master from "master_db_dump"
2> go
Al contrario de un dump database normal, es posible que el servidor requiera realizar una gran cantidad de trabajo extra, ya que la base de datos master contiene información sobre la identidad y ubicación de sus otras bases de datos; esa información pudo haber cambiado para este dispositivo master, y el servidor debe verificarlo y actualizarlo como sea necesario.
Al final de este paso, el servidor contiene información correcta sobre uso de disco del dispositivo master. Esta puede ser diferente a la información que venía en el dump, en la tabla sysusages, así que el servidor encontrará y corregirá la información tanto de tamaño como de ubicación para las bases de datos. Las entradas para partes de bases de datos que no existan sobre master, serán removidas.
Durante el procesamiento posterior al load, es posible que usted observe uno o más errores del servidor. Lea la sección Antes de Comenzar, para mayor información sobre estos errores.
Paso 6. ¿Recreó Usted Cualquier Base de Datos en el Paso 3 de Arriba?
Si usted recreó bases de datos usando el procedimiento en el Paso 3 de arriba, cargue estas bases de datos. Usted debe reiniciar el servidor sin la opción -m para poder llevar a cabo esto.
Cómo Volver a Crear el Dispositivo Master
Use estos pasos cuando el disco que usted usó para crear su dispositivo master no se encuentra accesible, y usted necesita comenzar con un nuevo dispositivo.
Esta situación es en algunos casos similar al escenario de la Sección 4, en el sentido que el dispositivo master está tan dañado que es necesario usar la opción -f, ya que usted necesitará saber qué bases de datos estaban en su dispositivo master y qué tan grandes eran, de tal manera que pueda validarlas y recrearlas según sea necesario.
Paso 1. Cree su Nuevo Dispositivo master
Al crear un nuevo dispositivo master, asegúrese de que usa el mismo tamaño de página de su dispositivo master anterior y de que el nuevo dispositivo es por lo menos tan grande como el anterior. El siguiente ejemplo crea un dispositivo con un tamaño de página lógica de 2048 bytes y un tamaño total de 100 Mb + 8 Kb (estos 8 Kb son espacio adicional para el área de configuración).
% $SYBASE/bin/dataserver -d $SYBASE/d_master.dat -z 2k -b 51204
Use la opción -s con este comando para especificar el nombre del servidor. También puede especificar el tamaño de "-b" en Kb, Mb, o Gb. En el ejemplo de arriba, usted usaría "-b 100.00782M". Sin los modificadores K, M o G, el tamaño del dispositivo es expresado en páginas virtuales de 2048 bytes cada una.
Durante la creación del dispositivo, el servidor genera una gran cantidad de mensajes de "actualización" para indicar su progreso; estos mensajes permiten resolver cualquier problema. Son mensajes de actualización ya que el servidor crea una nueva instalación realizando una "actualización" del dispositivo recién creado.
Al finalizar, el servidor queda abajo. Ahora usted tiene una base de datos master que contiene información mínima del sistema, incluyendo un login sa cuya contraseña es nula, y bases de datos master, model, tempdb y sybsystemprocs con tamaños mínimos.
Paso 2. Ponga el Servidor en Modo Monousuario
Reinicie el servidor con la opción -m, la cual deja el servidor en modo monousuario y lo deja listo para cargar la base de datos master:
% $SYBASE/bin/dataserver -d $SYBASE/d_master,dat -m
Paso 3. Establezca el Nombre del Backup Server
Este paso es necesario para asegurar que ASE tiene acceso a su Backup Server para operaciones de dump y load. La nueva base de datos master contiene la entrada predeterminada SYB_BACKUP, la cual muy seguramente hay que cambiar. Dado que el procedimiento sp_addserver no se encuentre disponible en este momento, conéctese al servidor como sa y actualice la tabla sysservers directamente:
1> update master.dbo.sysservers
2> set srvnetname = "backup_server_name"
3> where srvname = "SYB_BACKUP"
4> go
(1 row affected)
Paso 4. Cargue la Base de Datos master
Ejecute el siguiente comando de isql:
1> load database master from "master_db_dump"
2> go
El servidor inspecciona el dispositivo master y realiza cualquier corrección requerida en las recién cargadas tablas sysdatabases y sysusages. Estas correcciones afectan sólo el dispositivo master, ya que este fue el único dispositivo que cambió -- el servidor asume que todos los otros dispositivos no están dañados y que no necesitan ser inspeccionados.
Después de éste paso, es posible que su nuevo dispositivo master contengan entradas para bases de datos que también existen en otros dispositivos de su sistema. Esto puede ocurrir si usted movió tempdb a un dispositivo diferente, o creó sybsystemdb en un dispositivo diferente. El servidor reconoce y manipula esta situación: si encuentra entradas preexistentes para esas bases de datos sobre otros dispositivos, presume que las entradas existentes son correctas y no las cambia.
Durante las tareas posteriores al cargue, es posible que usted vea uno o más mensajes del servidor. Por favor lea la sección Antes de Comenzar, para mayor información sobre estos errores.
sección Antes de Comenzar, para mayor información sobre estos errores.
Después de que las verificaciones y validaciones se completan el servidor queda abajo. Usted puede ahora reiniciarlo normalmente.
Paso 5. Verifique que las Base de Datos que Residen Sobre el Dispositivo master están Correctas
Cuando usted creó un nuevo dispositivo master en el Paso 1, el servidor creó sólo sus bases de datos predeterminados, con datos mínimos. Es casi seguro que usted necesite cargar las copias de las bases de datos (sobretodo model) que estaban usualmente ahí.
¿Son las bases de datos en su nuevo dispositivo master suficientemente grandes para poner ahí las copias de respaldo que serán cargadas? ¿Están presentes todas las bases de datos necesarias? ¿Existen datos obsoletos que sea necesario borrar?
Conéctese como sa e inspeccione las bases de datos de su sistema:
1> declare @pgspermb int
2> select @pgspermb = 1048576 / @@maxpagesize
3> select "db name"=db_name(dbid), dbid, "size"=sum(size) / @pgspermb
4> from master.dbo.sysusages
5> group by dbid
6> go
Este comando le muestra todas las bases de datos presentes en su sistema, y su tamaño total. Note que la columna size está expresada en Megabytes.
¿Contiene esta lista entradas donde el nombre de la base de datos es null? Estas entradas en la tabla sysusages no tienen entradas correspondientes en sysdatabases; estas no son necesarias y deben ser borradas. (Usted será especialmente susceptible a esto si usted actualizó de versiones anteriores a la 12.0, y creó sybsystemdb en la versión anterior; sybsystemdb tendrá un dbid distinto al dbid predeterminado.) Para remover estas entradas, use un script como el siguiente:
1> exec sp_configure "allow updates", 1
2> go
1> delete sysusages
2> where db_name(dbid) is null
3> go
1> exec sp_configure "allow updates", 0
2> go
¿Hacen falta bases de datos? Cree esas bases de datos. ¿Con las bases de datos lo suficientemente grandes? Si no lo son, agrándelas (con el comando alter database) para que queden por lo menos tan grandes como para poder cargar allí las copias de respaldo. (Está bien si son más grandes; el servidor simplemente limpia el espacio adicional.)
Cómo Definir Manualmente el Nombre del Backup Server
Este procedimiento actualiza la tabla sysservers y es requerido para asegurar que ASE pueda tener acceso al Backup Server correcto para llevar a cabo operaciones de dump y load. Úselo con las instrucciones de las Secciones 3 y 4.
Ejecute los siguientes comandos isql en ASE:
1> use master
2> go
1> select srvname, srvnetname from sysservers
2> where srvname = "SYB_BACKUP"
3> go
Existen tres posibles resultados a esta consulta. Tome la acción apropiada, según se describe abajo, dependiendo del resultado: