¿Por qué debería desconectar una base de datos?

14

Por qué razones y en qué situaciones usaría la función "Desconectar" / ALTER DATABASE dbName SET OFFLINE.

¿Qué tareas puede realizar con una base de datos sin conexión? ¿Qué tareas solo puede realizar con una base de datos sin conexión?

Greg B
fuente

Respuestas:

15

Puede mover el archivo MDF a otro servidor para ponerlo en línea.

mfinni
fuente
44
+1, u otra unidad / carpeta / SAN ...
Chris S
¿Es ese el único uso para "desconectar"?
Greg B
55
No, se me ocurren otras razones. Imagine que tiene múltiples bases de datos, para múltiples aplicaciones. Una de esas aplicaciones está obteniendo una actualización de la aplicación front-end (aplicación web, cliente, quién sabe). Desea deshabilitar el acceso a la base de datos de cualquier persona durante la actualización, pero no desea deshabilitar todo el servidor por las otras bases de datos. Esa podría ser una razón para desconectarlo. Estoy seguro de que tu imaginación también podría surgir con otras razones.
mfinni
Mi imaginación no puede tener miedo, de ahí la pregunta. No pensé que pudieras alterar una base de datos sin conexión, así que no veo cómo desconectarla podría ayudar en el proceso de actualización
Greg B
2
Greg B: específicamente dije actualizar el front-end, no el DB en sí. En el escenario que describí, la base de datos no se modifica. Se desconectaría para garantizar que nadie acceda a él durante la transición.
mfinni
18

En entornos de desarrollo / preparación, a veces es útil desconectar una base de datos para asegurarse de que se está conectando a la instancia correcta de la base de datos en la aplicación y que no tiene una cadena de conexión en alguna parte.

Dicho esto, en esta situación es una idea mucho mejor tener diferentes nombres de bases de datos para los diferentes entornos y un proceso de construcción que configurará automáticamente sus cadenas de conexión ...

Del mismo modo, me gusta desconectar las bases de datos durante un período de tiempo antes de desmantelarlas en la (no tan) posibilidad de que, por alguna razón, necesiten volver a conectarse. Me han mordido varias veces los desarrolladores que tienen ganchos que no conozco en una de mis bases de datos cuando quiero deshacerme de él. Ponerlo fuera de línea mucho menos drástico y menos lento que eliminarlo y restaurarlo si es necesario.

Otra cosa sería como salvaguarda de emergencia. He tenido que hacer esto antes. A veces se encuentra un error desagradable en su aplicación que, aunque no es malicioso, aún corromperá los datos en su base de datos. Desconectar la base de datos es una forma rápida de detener el sangrado hasta que se identifique el error. Luego puede volver a ponerlo en línea para evaluar el daño dentro de la base de datos.

squillman
fuente
2
Me gusta la idea de desconectarme antes de eliminar
Greg B
8
Ídem. Tengo cuatro mil bases de datos en nuestros entornos de preproducción. A veces es difícil saber quién posee qué. Ponerlo fuera de línea y esperar los chillidos es ocasionalmente la única opción.
Michael Green
6

Si bien algunas de las respuestas aquí pueden darle algunas ideas sobre lo que puede hacer con una base de datos que tiene acceso restringido, en realidad no se puede hacer mucho con una base de datos que está fuera de línea. No puede actualizar, actualizar, agregar o eliminar datos, etc.

joeqwerty
fuente
2
Correcto. Si desea poder hacer mucho con la base de datos, es mejor que la ponga en modo de usuario único. Entonces todavía restringe el acceso pero puede hacer mucho más.
Sean Howat
¡Ni siquiera puedes cambiarle el nombre!
Dima Fomin el
0

Mi razón principal, la que tengo que vender a los DBA con más frecuencia de la que me gustaría enumerar ...

"La SAN necesita reparación ... y no, no puedo simplemente intercambiar en caliente una unidad, los backplane / controladores tienen la culpa".

Las instancias de DB se comportan muy mal cuando sus discos desaparecen.

Por lo tanto, apagué las instancias de SQL antes de desconectar la SAN y luego las recuperé de una en una para que no cuestionen los recursos: la primera instancia toma todos los recursos del clúster y se convierte en el nodo Active DB, se ejecutan las instancias posteriores como nodos pasivos.

George Erhard
fuente
-3

Hay muchas razones por las cuales necesitarías hacer esto ...

Para un ejemplo,

consider changing or upgrading the actual database program/binary...
consider changing or upgrading the schema or tables..
consider changing or upgrading index's..

El punto más importante ...

Is taking a backup.. to get a perfect snapshot in time.. 

(en algunos DB simplemente crea un bloqueo en todas las tablas)

Arenstar
fuente
+1, también DBMS anterior para desfragmentar o reducir el DB.
Chris S
1
re: "cambiar o actualizar el esquema", de los libros en línea "SIN CONEXIÓN La base de datos está cerrada, se cierra limpiamente y se marca sin conexión. La base de datos no se puede modificar mientras está sin conexión". ¿Cómo puede actualizar el esquema en esta situación?
Greg B
Lo siento ... me refería a hacer cambios en una base de datos inactiva. Soy seguidor de MySQL, supuse que se realizaría una actualización en una base de datos que está marcada como desconectada, por lo que no tenía problemas de concurrencia con nada más que el cambio necesario. Quizás podamos dejar esto fuera entonces ..: D
Arenstar
2
Las bases de datos reales admiten copias de seguridad reales, ya sabes. No necesita llevar nada más que un juguete de línea para hacer una copia de seguridad perfecta a tiempo. Un db que requiere un candado o algún otro mecanismo estúpido es un juguete. De Verdad. Todas las bases de datos principales no tienen problemas con las copias de seguridad completas, consistentes, mientras que en uso pesado.
TomTom