PDA

Ver la Versión Completa : Copias de seguridad liberando BBDD


piccolo2101
16-01-2006, 09:23:03
Hola,

tengo una BBDD que tiene varias tablas y algunas de estas crecen exponencialmente ya que recogen información de llamadas por teléfono y se reciben unas 4 por minuto. Como la aplicación no trabaja sobre un servidor sino sobre un PC normalito, esta se ralentiza. He pensado que sería bueno mantener la BBDD lo más limpia posible en cuanto a información necesaria con lo que me gustaría hacer lo siguiente:

Me gustaría cada mes poder sacar toda la información de las tablas que crecen de dicha manera respetando la información de las otras ( como operarios, clientes,...). Digamos que sería como hacer una foto de la BBDD en ese momento y limpiar con la que se está trabajando actualmente. Yo había pensado en hacer una copia del fichero de la BBDD en un directorio con el nombre del mes y lugo ejecutar sentencias SQL para limpiar la info de las tablas que necesito pero no sé si esta será la mejor manera. Ademas, uso MSSQLServer como servidor y creo que no me deja hacer una copia de un fichero de BBDD si está activo. Voy por buen camino? me aconsejan algo mejor?

Servidor = MSSQLServer.
BBDD = SQL.
Desarrollo = Delphi 2005.

Un saludo y gracias.

Neftali [Germán.Estévez]
16-01-2006, 15:53:30
La idea en sí no la veo equivocada; Tal vez algunos detalles...
Por ejemplo, yo no crearía una Base de Datos por mes, sino que mantendría dos Bases de Datos, una "activa" y otra de "histórico" con los datos que cada x tiempo mueves desde la otra.

Para "mover" los datos entra ambos Bases de Datos, puedes utilizar los DTS de SQL server (http://www.manualespracticos.blogspot.com/). Puedes programar uno para que te "mueva" los datos de cierta antiguedad de unas tablas a otras.

Utiliza los JOB's de SQL Server para lanzar la ejecución del DTS cada x tiempo; Por ejemplo, programa un job nocturno para que te ejecute el DTS de "movimiento de datos" (normalmente cuando menos actividad hay en las Bases de datos).

piccolo2101
17-01-2006, 09:31:12
Muchas gracias, me ha gustado ese enfoque pero la parte del histórico creo que no me servira pues la información que he de guardar son las posiciones gps de varios coches cada vez que estos se desplazan una serie de metros preestablecidos (como 100) y el histórico va a ser consultado para ver las zonas por las que ha estado ese coche durante un espacio de tiempo. Con un histórico la cantidad de información sería ingente para el manejo sabiendo que la aplicación se ejecuta en un PC y no en un servidor dedicado. Por eso mi idea era ver la carga que producia una cosulta sobre un histórico para calcular cada cuánto hacer una copia (mes, semana,...).
Por otro lado no quiero que las copias queden registradas en MSSQLServer por lo que he pensado que los pasos a seguir para copiar serían:
1.- Crear BD de la semana.
2.- Usar DTS para la copia.
3.- Cerrar BD.
4.- Hacer un detach para "desregistrar" la BD.
y todo esto dejando la original abierta para que pueda seguir trabajando, cosa que no sé si es posible ya que a medida que copio registros de la original a la copia estos se deben eliminar de la original (como un cortar y pegar).
Para la parte de consultas quería seguir estos pasos :
1.- Para cada semana que ocupe el rango de fechas
2.- Hacemos un attach de la copia de la semana.
3.- Hacemos la consulta para sacar la información de interés.
4.- Cerramos la copia y hacemos el detach.
Bueno no sé si tendrás alguna idea de como poder seguir estos pasos. Yo seguro que no lo tengo muy claro pero estoy investigando y lo que vaya descubriendo lo iré comentado.

Un saludo y gracias.

piccolo2101
17-01-2006, 13:52:39
Ok, por ahora ya tengo cosas como la parte del attach y detach que es la más sencilla. aquí pongo el código para quien le pueda interesar.

ADOCommand1.CommandText := 'EXEC SP_ATTACH_DB ''COPIA'','''+GetCurrentDir()+'\data\'+dbName+'_Data.mdf'','''+GetCurrentDir()+'\data\'+dbName+'_Log .ldf''';
ADOCommand1.Execute;



ADOCommand1.CommandText := 'EXEC SP_DETACH_DB ''COPIA'',''TRUE''';
ADOCommand1.Execute;