Foro de elhacker.net

Programación => Bases de Datos => Mensaje iniciado por: Hartigan en 13 Septiembre 2010, 04:10 am



Título: Problema al restaurar copia de seguridad (sql server)
Publicado por: Hartigan en 13 Septiembre 2010, 04:10 am
Hola, pues resulta que hago una copia de seguridad y me funciona perfectamente, pero a la hora de restaurarla me da un error y me dice la bdd está en uso.....

porqué????

Mi código es el siguiente:

Código
  1. public override bool Restaurar_Copia(string DATABASE, string ruta)
  2.        {
  3.            BOOLEAN exito = FALSE;
  4.  
  5.            String queryRestore = "RESTORE DATABASE agenda FROM DISK = '" + ruta + "'" + " WITH REPLACE";
  6.  
  7.  
  8.            SqlConnectionStringBuilder csb = NEW SqlConnectionStringBuilder();
  9.            csb.DataSource = "(local)\\SQLEXPRESS";
  10.            // Es mejor abrir la conexión con la base Master
  11.            csb.InitialCatalog = "master";
  12.            csb.IntegratedSecurity = TRUE;
  13.  
  14.  
  15.            USING (SqlConnection con = NEW SqlConnection(csb.ConnectionString))
  16.            {
  17.                try
  18.                {
  19.                    con.OPEN();
  20.  
  21.                    SqlCommand cmdBackUp = NEW SqlCommand(queryRestore, con);
  22.                    cmdBackUp.ExecuteNonQuery();
  23.                    MessageBox.SHOW("Se ha restaurado la copia de la base de datos.",
  24.                                    "Restaurar base de datos",
  25.                                    MessageBoxButtons.OK,
  26.                                    MessageBoxIcon.Information);
  27.  
  28.                    con.Close();
  29.                }
  30.                catch (Exception ex)
  31.                {
  32.                    MessageBox.SHOW(ex.Message,
  33.                                    "Error al restaurar la base de datos",
  34.                                    MessageBoxButtons.OK,
  35.                                    MessageBoxIcon.Error);
  36.                }
  37.            }
  38. }
  39.  

He depurado el StackTrace me dice esto: StackTrace = "   en System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection)\r\n   en System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj)\r\n   en System.Data.SqlClient.TdsParser.Run(RunBehavior run...


 :huh: :huh: :huh: :huh:


Título: Re: Problema al restaurar copia de seguridad (sql server)
Publicado por: Hartigan en 15 Septiembre 2010, 13:17 pm
nadie???


Título: Re: Problema al restaurar copia de seguridad (sql server)
Publicado por: [D4N93R] en 15 Septiembre 2010, 15:56 pm
Intentaste usar "RESTORE DATABASE agenda FROM DISK =  turuta WITH REPLACE" directamente en sql server, a ver que pasa, es decir, ahcerlo a mano?


Título: Re: Problema al restaurar copia de seguridad (sql server)
Publicado por: Hartigan en 18 Septiembre 2010, 17:44 pm
lo he probado como dices y sí funciona.

Desde el código no funciona porque dice que la base de datos está en uso y no se porqué... como hago para comprobar si hay alguna conexión abierta??


Título: Re: Problema al restaurar copia de seguridad (sql server)
Publicado por: [D4N93R] en 18 Septiembre 2010, 18:08 pm
Quita esta linea, a ver.
Código
  1. csb.InitialCatalog = "master";


Título: Re: Problema al restaurar copia de seguridad (sql server)
Publicado por: Hartigan en 18 Septiembre 2010, 18:16 pm
He modificado el cógido y he puesto lo siguiente:

Código
  1. public override bool Restaurar_Copia(string DATABASE, string ruta)
  2.        {
  3.            BOOLEAN exito = FALSE;
  4.  
  5.            String queryRestore = "USE Master; RESTORE DATABASE agenda FROM DISK = '" + ruta + "' WITH REPLACE";
  6.  
  7.  
  8.            USING (SqlConnection con = NEW SqlConnection(this.cadena_conexion))
  9.            {
  10.                try
  11.                {
  12.                    con.OPEN();
  13.  
  14.                    SqlCommand cmdBackUp = NEW SqlCommand(queryRestore, con);
  15.                    cmdBackUp.ExecuteNonQuery();
  16.                    MessageBox.SHOW("Se ha restaurado la copia de la base de datos.",
  17.                                    "Restaurar base de datos",
  18.                                    MessageBoxButtons.OK,
  19.                                    MessageBoxIcon.Information);
  20.  
  21.                    con.Close();
  22.                }
  23.                catch (Exception ex)
  24.                {
  25.                    MessageBox.SHOW(ex.Message,
  26.                                    "Error al restaurar la base de datos",
  27.                                    MessageBoxButtons.OK,
  28.                                    MessageBoxIcon.Error);
  29.                }
  30.            }

y me sigue pasando lo mismo, la base de datos está en uso!!!!! ppero si cierro todas las conexiones!!!, quien leñe accede a la bdd???  la bdd además no permite varias conexiones??? porque si no es así vaya ***** que es el sql server...  :-(


Título: Re: Problema al restaurar copia de seguridad (sql server)
Publicado por: [D4N93R] en 18 Septiembre 2010, 18:23 pm
"USE Master;???? es lo mismo que el otro código, intenta sin usar una base de datos. No se por que tienes que indicar que usas master..


Título: Re: Problema al restaurar copia de seguridad (sql server)
Publicado por: Hartigan en 18 Septiembre 2010, 18:54 pm
"USE Master;???? es lo mismo que el otro código, intenta sin usar una base de datos. No se por que tienes que indicar que usas master..

porque segun he leido es necesario usar la base de datos master... lol.

Quitando eso me dice que no se puede usar la base de datos agenda en esta sesión porque esta en uso. Que utilice la base de datos master.....

y la uso y me dice que agenda está en uso. Puede ser porque la etoy usando en la propia aplicación??? pero si cierro las conexiones no debería.... o no se...


Título: Re: Problema al restaurar copia de seguridad (sql server)
Publicado por: [D4N93R] en 18 Septiembre 2010, 19:33 pm
Posiblemente haya otra conexión bloqueando la la base de datos que quieres restaurar.

checa esto, y dejame hacer unas pruebas acá.

http://www.kodyaz.com/articles/identify-kill-blocking-sql-server-processes.aspx

EDIT:

En Sql Server 2008 es así
Código
  1. RESTORE DATABASE [Testing] FROM  DISK = N'<Ruta>' WITH  FILE = 1,  NOUNLOAD,  REPLACE,  STATS = 10