2011-10-18 32 views
8

Ok, entonces estoy teniendo un problema: ejecuté un código en mi SQL Server y no me di cuenta de que no tenía seleccionado el bit WHERE. Por supuesto, cuando vi el "608 rows affected" en lugar de "1 row affected", me asusté un poco.Problemas de restauración de copia de seguridad de SQL Server?

Afortunadamente, tengo una copia de seguridad guardada, pero por alguna razón, estoy recibiendo un par de problemas. Ahora, tomé la caída de servidor, así que sé que no está siendo utilizado por cualquier persona, pero me da el siguiente error

"Restore failed for Server 'myserver'.

System.Data.sqlclient.sqlerror: Exclusive access could not be obtained because the database is in use. (Microsoft.SqlServer.Smo)"

vi algo que afirmó que debería usar

Alter Database Databases 
SET SINGLE_USER WITH ROLLBACK IMMEDIATE 

RESTORE DATABASE PRODUCT 
FROM DISK = '' 

pero Tengo tres reservas sobre este código. Primero, no estoy completamente seguro de cómo volver a activar multi_user. En segundo lugar, no sé dónde almacena el programa sus copias de seguridad. En tercer lugar, este SQL está un poco por encima de mi cabeza: soy relativamente nuevo en el lenguaje, sinceramente, así que no estoy seguro de cómo esto afectará las cosas.

¿Alguien tiene alguna respuesta a mis problemas?

Respuesta

4

Establecer la base de datos para un solo usuario es correcta. Cuando esté completa con su restauración se le ejecuta este

alter database YourDb 
set multi_user 

En cuanto a donde su archivo .bak reside, usted tiene que encontrarlo antes de restaurar.

+0

jaja, debería haber sido obvio para mí. Gracias. – Kulahan

3

Scary.

Ok, algunas cosas a comprobar:

  1. Asegúrese de que usted es la única persona que está conectado al servidor.
  2. Asegúrese de que ninguna otra aplicación, servidor web, servidor de aplicaciones, etc. tenga conexiones con su base de datos.
  3. Asegúrate de que tu administrador SQL no tenga ventanas abiertas para las tablas u otros objetos en tu base de datos.

ENTONCES deberías poder hacer la restauración sin cosas de usuario único.

+0

De hecho, me callo bajó el servidor para que nadie se pudiera conectar a él más que a mí, y el único programa que debería conectarse a él sería el programa de estudio de administración de servidores, así que creo que soy bueno allí. – Kulahan

8

Podría sugerir en lugar de sobrescribir la base de datos existente de la copia de seguridad, que en su lugar recupere la copia de seguridad con un nombre de base de datos diferente ... de esta manera puede tener las bases de datos actuales y anteriores una al lado de la otra.

Luego, simplemente puede escribir una declaración de actualización para recuperar los datos de solo una tabla específica en lugar de restablecer toda la base de datos.

EDIT: Los detalles dependerán de su entorno, pero la restauración sería algo como esto:

restore database PRODUCT_OLD 
from disk='C:\PRODUCT.bak' 
with 
    move 'PRODUCT_Data' to 'C:\PRODUCT_OLD_Data.MDF', 
    move 'PRODUCT_Log' to 'C:\PRODUCT_OLD_Log.LDF' 

Y entonces la instrucción de actualización también se basaría en su mesa específica ...

+0

¿Algún ejemplo de cómo podrías hacer eso? – Kulahan

+0

+1, este es un enfoque mucho mejor: no agrave sus problemas eliminando los únicos datos buenos que le quedan. –

+0

Si bien esta fue una mejor respuesta, terminé restaurando toda la base de datos porque había otros dos errores que necesitaba corregir también, y la copia de seguridad los atrapó a todos. ¡Gracias, sin embargo! – Kulahan

0

Diríjase a la actividad Monitorear y vea si los usuarios todavía inician sesión, luego elimine el proceso para ese usuario usando la db respectiva. y luego seguir adelante restaurar la copia de seguridad

6

la derecha en la base de datos de clic tareas->takeoffline, cuando su éxito hacer lo mismo, pero lo puso Poner en conexión luego tratar de restaurar su base de datos

+1

Parece que me han ayudado. Gracias por la idea Sin embargo, pareció tomar mucho tiempo desconectarse. –

Cuestiones relacionadas