Академический Документы
Профессиональный Документы
Культура Документы
Identificar el estado de la base de datos de SQL Server y cómo se puede mover una base de
datos entre estos diferentes estados se considera un aspecto importante de la administración
de la base de datos de SQL Server. Una buena comprensión de esto nos ayudará a resolver
problemas y solucionar muchos problemas y problemas de la base de datos.
El estado de una base de datos de SQL Server especifica el modo de ejecución actual de esa
base de datos. La base de datos puede ejecutarse en un estado a la vez. El estado actual de una
base de datos se puede verificar seleccionando la columna state_desc de la vista
de catálogo sys.databases .
Hay siete estados principales en los que puede salir una base de datos de SQL Server. La
siguiente instrucción SELECT consultará en la vista de catálogo sys.databases el nombre y el
estado de todas las bases de datos alojadas en la instancia actual de SQL Server:
El resultado, en mi situación, mostrará que todas las bases de datos alojadas en la instancia
actual de SQL Server están funcionando en el estado EN LÍNEA de la siguiente manera:
El estado actual de una base de datos específica de SQL Server también se puede ver
seleccionando la propiedad Estado de la función DATABASEPROPERTYEX . La siguiente
instrucción SELECT visualiza el estado actual de la base de datos SQLShackDemo utilizando la
función DATABASEPROPERTYEX:
SELECT DATABASEPROPERTYEX (N'SQLShackDemo', N'STATUS') AS N'Status';
GO
Desde el lado de la disponibilidad de la base de datos, la base de datos puede estar totalmente
disponible o completamente no disponible. Entre estos dos estados principales, debería haber
ocurrido una transición suave en escenarios óptimos sin ningún problema que pueda
interrumpir esa transición. En este artículo, describiremos los siete estados de la base de datos,
las razones de estas ocurrencias de los estados de la base de datos SQL y cómo actuará la base
de datos cuando opere en esos estados.
EN LÍNEA
Una base de datos SQL que opera en un estado EN LÍNEA está disponible para el acceso de los
usuarios finales y funciona normalmente. En el estado de la base de datos EN LÍNEA, el grupo
de archivos primario está en línea, aunque el proceso crítico de recuperación de la base de
datos de la fase de deshacer aún puede no haber terminado por completo. El estado EN LÍNEA
es el estado correcto al que la base de datos SQL debe moverse sin problemas después de
iniciar la base de datos.
Desde el nodo Bases de datos de SQL Server Management Studio, el nombre de la base de
datos, por ejemplo, SQLShackDemo sin palabras especiales entre paréntesis, como se muestra
a continuación, indica que la base de datos está en estado EN LÍNEA
RESTAURANDO
El estado de la base de datos RESTAURACIÓN significa que el usuario ha iniciado un proceso
de restauración de la base de datos, utilizando el comando RESTORE DATABASE o RESTORE
LOG T-SQL, en el que se restauran uno o más archivos de datos del grupo de archivos primario,
o uno o más archivos secundarios se están restaurando en modo offline. En efecto, esto
significa que la base de datos no está disponible para el acceso del usuario final durante el
proceso de restauración.
La opción de restauración de la base de datos predeterminada es la opción RECUPERACIÓN ,
en la que la base de datos se volverá a poner en línea después de completar la restauración de
la copia de seguridad de la base de datos. Al usar la opción de restauración NORECOVERY ,
que se usa para restaurar múltiples archivos de respaldo, la base de datos estará en el estado
RESTAURAR hasta que llegue al último archivo en el que se usa la opción CON RECUPERACIÓN
para poner la base de datos en línea nuevamente después de restaurar el último archivo de
respaldo .
USE [master]
GO
El mismo proceso se puede realizar utilizando la ventana Restaurar base de datos de SQL
Server Management Studio. La opción de restauración de la base de datos se puede especificar
desde la pestaña Opciones de esa ventana de la siguiente manera:
USE [master]
WITH RECOVERY
GO
La base de datos volverá a estar en línea al restaurar ninguna página nueva de la siguiente
manera:
RECUPERANTE
El estado de RECUPERACIÓN de la base de datos es un estado transitorio, en el que la base de
datos está realizando un proceso de recuperación y se conectará automáticamente, si el
proceso de recuperación se completa con éxito, después del inicio de la base de datos.
El proceso de recuperación consta de dos fases principales, la fase Roll Forward , en la que
se procesará cualquier transacción que se confirme al cerrar la base de datos y que aún no se
haya escrito en los archivos de datos de la base de datos. En la fase de reversión , cualquier
transacción que no se haya confirmado durante el cierre de la base de datos se revertirá. Si el
proceso de recuperación falla por algún motivo, la base de datos se moverá al estado SUSPECT
y no estará disponible. Al trabajar en estado RECUPERANDO, la base de datos no estará
disponible para los usuarios.
La palabra especial "En recuperación", entre paréntesis al lado del nombre de la base de datos
indica, como se muestra a continuación, que la base de datos está en estado de
RECUPERACIÓN:
USE SQLShackDemo
GO
DBCC LOGINFO
Este número excesivo de VLF se genera principalmente debido al crecimiento del registro de
transacciones de la base de datos con mucha frecuencia y en incrementos muy pequeños. Para
superar ese problema, debe realizar una copia de seguridad del registro de transacciones en su
base de datos, reducir el registro de transacciones tanto como sea posible y finalmente
especificar un tamaño inicial del archivo de registro de transacciones lo suficientemente grande
como para manejar la carga de trabajo de la base de datos, sin la necesidad de un crecimiento
frecuente. Verificando nuevamente el número de VLF después de realizar la copia de seguridad
del registro de transacciones y las operaciones de reducción:
USE SQLShackDemo
GO
DBCC LOGINFO
La palabra especial "Recuperación pendiente" entre paréntesis al lado del nombre de la base
de datos, como se muestra, indica que la base de datos está en un estado PENDIENTE DE
RECUPERACIÓN:
El registro de errores de SQL Server es el mejor lugar desde el que puede comenzar su
investigación. En nuestro caso, el registro de errores muestra que la base de datos no se ha
recuperado con éxito debido a que falta un archivo de base de datos que se puede eliminar o
cambiar de nombre:
SOSPECHAR
Una base de datos que se encuentra en los estados de SUSPECCIÓN significa que la base de
datos no está disponible para el acceso del usuario. En este estado de la base de datos, el
proceso de recuperación de la base de datos se inició pero no se completó con éxito, lo que
requiere una acción adicional del usuario para solucionar ese problema y reparar los archivos
dañados. SQL Server marca una base de datos como SUSPECTA debido a muchas razones,
como la corrupción de los archivos de la base de datos, los archivos de la base de datos no
disponibles o el cierre incorrecto del servidor de la base de datos SQL mientras se ejecuta una
gran transacción.
Simulemos una situación de corrupción de la base de datos en la que SQL Server marcará la
base de datos como SUSPECT. Crearemos una nueva base de datos de prueba, crearemos una
tabla simple en esa base de datos:
USE [master]
GO
GO
USE [SuspectDBDemo]
GO
[ID] INT,
GO
Además, llenaremos esa tabla con 1000 registros utilizando la herramienta de datos de prueba
sintética ApexSQL Generate de la siguiente manera:
Lo que haremos es iniciar una transacción que actualizará la tabla de prueba sin
comprometerla y ejecutará un comando CHECKPOINT para escribirla en el disco.
BEGIN TRAN
UPDATE
GO
CHECKPOINT
GO
Al mismo tiempo desde otra sesión, ejecutaremos un comando SHUTDOWN para finalizar el
proceso de SQL Server:
GO
Después de eso, abriremos el archivo de registro de la base de datos usando cualquier editor
hexadecimal, y modificaremos la primera sección llenándolo con ceros y guardaremos el
archivo nuevamente como se muestra a continuación:
Finalmente, iniciaremos el servicio de SQL Server nuevamente. Si intenta ejecutar una consulta
simple en esa base de datos, se mostrará un error que muestra que la base de datos es
inaccesible de la siguiente manera:
La palabra especial, "Sospechoso" entre paréntesis al lado del nombre de la base de datos,
como se muestra a continuación, indica que la base de datos está en estado SUSPECTO:
EMERGENCIA
La base de datos se puede cambiar al estado de EMERGENCIA mediante una acción del usuario
sysadmin, para realizar el mantenimiento de la base de datos de manera segura o para
solucionar problemas. En este estado, la base de datos estará en modo de usuario único para
ser reparada o restaurada, marcada como READ_ONLY donde puede exportar los datos fuera
de la base de datos, el registro está deshabilitado y el acceso está restringido solo a los
miembros del rol sysadmin.
Volvamos de nuevo a la base de datos corrupta SuspectDBDemo anterior que está marcada
como SUSPECTO. Para solucionar su problema y resolverlo, cambiaremos el estado de la base
de datos a EMERGENCIA, permitiendo a los usuarios de sysadmin acceso de solo lectura a esa
base de datos. La siguiente instrucción ALTER DATABASE se usa para establecer el estado de la
base de datos en EMERGENCIA:
GO
La palabra especial "Emergencia" entre paréntesis al lado del nombre de la base de datos,
como se muestra a continuación, indica que la base de datos está en estado de EMERGENCIA:
Con la base de datos en estado de EMERGENCIA, podemos trabajar para resolver el problema
de manera segura. Para verificar la corrupción de la base de datos, se puede ejecutar un
comando DBCC CHECKDB mientras la base de datos está en estado de EMERGENCIA. Antes de
hacerlo, la base de datos debe cambiarse explícitamente para ejecutarse usando el modo
SINGLE_USER usando el siguiente comando ALTER DATABASE:
GO
El comando DBCC CHECKDB se puede ejecutar ahora en esa base de datos, con la opción
REPAIR_ALLOW_DATA_LOSS. Los datos y / o índices dañados pueden eliminarse para que la
base de datos sea físicamente consistente, pero con una posible pérdida de datos. Además, el
archivo de registro de transacciones se reconstruirá si hay algún problema con ese registro de
transacciones. El siguiente comando DBCC CHECKDB se usa para corregir la corrupción de la
base de datos:
GO
El resultado del comando clear DBCC CHECKDB en nuestro caso será el siguiente:
GO
El problema de corrupción del archivo de registro de transacciones de la base de datos se
resuelve ahora, después de reconstruir el archivo de registro, y la base de datos vuelve a estar
EN LÍNEA y está disponible para el acceso del usuario:
Si ejecuta una instrucción SELECT simple desde la tabla de la base de datos, los datos se
recuperarán sin problemas:
DESCONECTADO
Cuando la base de datos está en estado DESCONECTADO, la base de datos no funciona ni está
disponible para el acceso del usuario. El estado de la base de datos puede cambiarse al estado
DESCONECTADO o solo mediante una acción explícita del usuario. Establecer el estado de la
base de datos en OFFLINE ayuda a migrar los archivos de la base de datos a una nueva unidad
de disco, o evita que los usuarios accedan a ella por cualquier motivo. La siguiente instrucción
ALTER DATABASE se usa para cambiar el estado de la base de datos a OFFLINE:
GO
La misma acción se puede realizar con SQL Server Management Studio, haciendo clic con el
botón derecho en la base de datos -> Tareas y seleccione la tarea Desconectar de la siguiente
manera:
La flecha roja y la palabra especial Fuera de línea entre paréntesis al lado del nombre de la base
de datos indican que la base de datos está en estado SIN CONEXIÓN de la siguiente manera:
Teniendo en cuenta que la base de datos permanecerá fuera de línea a menos que realice una
acción explícita para ponerla en línea. La siguiente declaración ALTER DATABASE hará que la
base de datos vuelva a estar en línea:
GO
Puede realizar la conexión de la base de datos en línea con SQL Server Management Studio
haciendo clic derecho en la base de datos -> Tareas y seleccione la tarea Traer en línea :
Conclusión
En este artículo, describimos siete estados diferentes de una base de datos de SQL Server,
mostramos cómo funcionaba una base de datos en estos estados y cómo mover la base de
datos de un estado a otro.
Cambiar el estado de la base de datos es crítico y debe asegurarse de que este cambio se
realice en el momento correcto, en una situación correcta, y de que tiene el plan de
recuperación en caso de falla.