![]() |
Problema al restaurar base de datos
Hola Grupo, ojala alguien me pueda ayudar, tengo una aplicacion en la
cual como toque final al cerrarla quiero que haga un backup y un restore de la base de datos para quitar toda la basura que genera ya que uso commitretaining para que no cierre los datasets, todo marcha bien en las pruebas pero ya en la practica me sale el siguiente error al correr el codigo del restore: ***** Project tintorerias.exe raised exception class EIBInterBaseError with message 'lock time-out on wait transaction object C:\TINTORERIA_BASEDATOS\TINTORERIA_LOCAL.GDB is in use could not drop database C:\tintoreria_basedatos\TINTORERIA_LOCAL.GDB (database might be in use)'. Process stopped. Use Step or Run to continue. ***** Me imagino que es porque queda algo abierto en la base de datos y piensa que se pueden coorromper los datos, pero antes de hacer esto segun yo cierro la base de datos y la transaccion con las siguientes instrucciones: DM_ServidorDatos.IB_TR_Tintoreria.Commit; DM_ServidorDatos.IB_TR_Tintoreria.Active := false; DM_ServidorDatos.IB_DB_Tintoreria.CloseDataSets; DM_ServidorDatos.IB_DB_Tintoreria.Connected := false; Es raro poruqe aveces funciona bien y a veces no funciona y marca el arror arriba señalado Lei algo en internet de que hay que tener acceso exclusivo a la base de datos pero no se como hacer esto, nunca encontre esta referencia "chapter 14, Getting exclusive access to a database, of Using Firebird" Auxilio Saludos y gracias AJ |
Tengo el mismo problema
Alguien sabe como resolver este problema?
El respaldo de la Base de datos lo puedo hacer sin problema, pero al intentar restaurarlo me marca el mismo error que a jourdan. Estoy usando Delphi 7 y Firebird v1.5.2, y los componentes IBBackupService y IBRestoreService. Utilizo la cuenta de SYSDBA Saludos |
No recuerdo muy bien como lo solucione, ya que fue hace mucho pero aqui te copio el codigo que esta funcionando sin probelma!
//cerramos la conexion a la abse de datos si es que estaba abierta DM_ServidorDatos.IB_DB_Tintoreria.Connected := false; // copia base de DAtos para tener respaldo MCopia.Visible := true; ProgressBar1.Visible := true; MCopia.Lines.clear; Try CopyFile('D:\tintoreria_basedatos\TINTORERIA_LOCAL.FDB', 'D:\tintoreria_basedatos\RESPALDO_DE_SEGURIDAD\TINTORERIA_LOCAL.FBK'); ProgressBar1.StepIt; MCopia.Lines.Add('**Copia de Seguridad Realizada con exito'); except showmessage('Error'); end; //*** with IBBackupService1 do begin Active := True; try Screen.Cursor := crHourGlass; BackupFile.Clear; // Cargamos la opciones que nos indique el usuario Options := []; Options := Options + [IgnoreCheckSums]; Options := Options + [IgnoreLimbo]; //if chkbkStructure.Checked then Options := Options + [MetadataOnly]; //if chkbkGarbage.Checked then Options := Options + [NoGarbageCollection]; Options := Options + [NonTransportable]; // Cargamos la información que nos han indicado // Base de datos origen DatabaseName := 'D:\tintoreria_basedatos\TINTORERIA_LOCAL.FDB'; // Fichero GBK destino BackupFile.Add('D:\tintoreria_basedatos\RESPALDO_TINTORERIA.GDK'); // ¿Ver el progreso de la operación? //Verbose := chkbkVerbose.Checked; Verbose := true; // Comenzar ServiceStart; if Verbose then begin // Mientras no se llegue al final... While not Eof do // Cargamos las lineas de salida en el memo MCopia.Lines.Add(GetNextLine); // Avisamos que hemos terminado MCopia.Lines.Add('¡ ** PROCESO TERMINADO ** !'); ProgressBar1.StepIt; end; finally Active := False; Screen.Cursor := crDefault; end; end; ProgressBar1.StepIt; with IBRestoreService1 do begin Active := True; try Screen.Cursor := crHourGlass; DatabaseName.Clear; BackupFile.Clear; // Cargamos las opciones que nos indiquen Options := []; Options := Options + [Replace]; Verbose := true; PageBuffers := 3000; PageSize := 4096; // Indicamos la base de datos destino DatabaseName.Add('D:\tintoreria_basedatos\TINTORERIA_LOCAL.FDB'); // El archivo GBK origen BackupFile.Add('D:\tintoreria_basedatos\RESPALDO_TINTORERIA.GDK'); // Cerramos la conexión con la base de datos. DM_ServidorDatos.IB_DB_Tintoreria.CloseDataSets; DM_ServidorDatos.IB_DB_Tintoreria.Connected := false; // Comenzar ServiceStart; if Verbose then begin While not Eof do MCopia.Lines.Add(GetNextLine); MCopia.Lines.Add('¡ PROCESO TERMINADO !'); ProgressBar1.StepIt; end; finally Active := False; // Vovemos a conectar con la base de datos Screen.Cursor := crDefault; end; end; |
Ya pude solucionarlo, solo agregue
y funcionó correctamente Muchas gracias Saludos |
otra posibilidad
A mi me seguía pasando ese error. Es una empresa pequeña donde no hay problema en decir a las tres personas que cierren el programa.
Sólo se puede hacer el restore en la máquina donde está la base de datos. Hay que cambiar la conexión de la base de datos a local ANTES de hacer el restore. Si la base de datos está en REMOTO, no cierra todo y aparece el error... Otra posibilidad es usar un programa externo SOLO para hacer backups/Restore...
|
La franja horaria es GMT +2. Ahora son las 13:16:44. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi