shaniell Posted November 15, 2010 Report Share Posted November 15, 2010 hola a todos necesito saber cm creear respaldo de una base de datos!!!! cada cierto tiempo programado (como una ves por semana) y taambien cuando iegen a un tamaño especifico!!! se los agradececeria mucho!!!!! (a soy estudiante!!! de analista y programacion para que no pongan mensajes mala onda qeu me dedique a otra cosa!!!!!!) jejejej graxias!!!!!!!! Link to comment Share on other sites More sharing options...
=Programer= Posted November 16, 2010 Report Share Posted November 16, 2010 (edited) google no muerde. Para eso se usa "tareas programadas de windows",perl,el mismo sqlserver,.net,etc. Así como Analista te digo: lo busques en google o te dediques a hacer otra cosa. Edited November 16, 2010 by =Programer= Link to comment Share on other sites More sharing options...
tazzwt Posted November 16, 2010 Report Share Posted November 16, 2010 No es por crear polemica. Pero google es una pagina externa. Nosotros como foro debemos colaborar entre los mismo y no obviar las preguntas a unos buscares. Link to comment Share on other sites More sharing options...
bombero_7 Posted November 16, 2010 Report Share Posted November 16, 2010 tazzwt said: No es por crear polemica. Pero google es una pagina externa. Nosotros como foro debemos colaborar entre los mismo y no obviar las preguntas a unos buscares. toda la razon, en vez de un foro ayuda pongan un link directo a google y listo pero no es la idea Link to comment Share on other sites More sharing options...
Ra Posted November 16, 2010 Report Share Posted November 16, 2010 SQL Server 2008 viene con una herramienta que se llama Agente de SQL. Esta herramienta te permite configurar y programar los respaldos automáticos. Ahora, mi recomendación es que hagas el respaldo con un procedimiento almacenado, de manera que puedas comprimir, copiar o mover el archivo, incluso, automáticamente grabarlo a la unidad de cinta... Y bueno, este sp lo llamas en la tarea programada del agente... Salu2. PD: Usuarios, por favor, no desvirtuar... se puede aportar e indicar que busque en google... no a todos se les ocurre que san google es el santo de los informáticos... Link to comment Share on other sites More sharing options...
Argel Posted November 16, 2010 Report Share Posted November 16, 2010 Te dejo un script de un PA, que hice hace algunos añitos ya para SQL 2000, el cual está encargado de respaldar todas las bases de datos de un server X, creando respaldos completos, diferenciales y del registro de transacciones (log), ademas borraba los archivos de respaldo cada Y tiempo. Todo se configuraba en base a una tabla creada para este proposito. No he probado nada en 2008 pero me imagino que no debe cambiar tanto tanto la cosa... ALTER PROCEDURE BackupAllBasesDatos @Ruta VARCHAR(128), @Tipo VARCHAR(4) = 'FULL' --FULL / DIFF / LOG AS /* El Formato de los Archivos de Backup corresponde a NombreBD_Tipo_yyyymmdd_hhmmss.bu Ejemplo nombre Archivo: EMPRESA_FULL_20070913_130850.bu Ejemplo Ejecucion del Procedimiento: EXEC BackupAllBasesDatos 'C:\BACKUP\', 'FULL' */ SET NOCOUNT ON DECLARE @sql VARCHAR(1000) --Crea la Tabla BackupBaseDatos si es que no existe en la base de datos en uso. IF NOT EXISTS ( SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[dbo].[BackupBaseDatos]') AND OBJECTPROPERTY(id, N'IsUserTable') = 1 ) BEGIN CREATE TABLE BackupBaseDatos ( Nombre VARCHAR(128) PRIMARY KEY NONCLUSTERED, BackupFlagFull VARCHAR(1) NOT NULL CHECK (BackupFlagFull IN ('Y','N')), RetainPeriodNumberFull INT NOT NULL, RetainPeriodTypeFull VARCHAR(2) NOT NULL CHECK (RetainPeriodTypeFull IN ('mi', 'hh', 'dd', 'wk', 'mm')), BackupFlagDiff VARCHAR(1) NOT NULL CHECK (BackupFlagDiff IN ('Y','N')), RetainPeriodNumberDiff INT NOT NULL, RetainPeriodTypeDiff VARCHAR(2) NOT NULL CHECK (RetainPeriodTypeDiff IN ('mi', 'hh', 'dd', 'wk', 'mm')), BackupFlagLog VARCHAR(1) NOT NULL CHECK (BackupFlagLog IN ('Y','N')), RetainPeriodNumberLog INT NOT NULL, RetainPeriodTypeLog VARCHAR(2) NOT NULL CHECK (RetainPeriodTypeLog IN ('mi', 'hh', 'dd', 'wk', 'mm')) ) END --Obtengo todos los nombres correspondientes de todas las bases de datos del servidor. CREATE TABLE #DBNames ( ID INT IDENTITY(1,1), Nombre VARCHAR(128) NOT NULL, RetainPeriodNumber INT NULL, RetainPeriodType VARCHAR(2) NULL CHECK(RetainPeriodType IN ('mi', 'hh', 'dd', 'wk', 'mm')) ) INSERT #DBNames (Nombre) SELECT name FROM master..sysdatabases --Incluyo las bases de datos nuevas en la tabla de backups, por defecto no se realizan backups. INSERT BackupBaseDatos ( Nombre, BackupFlagFull, RetainPeriodNumberFull, RetainPeriodTypeFull, BackupFlagDiff, RetainPeriodNumberDiff, RetainPeriodTypeDiff, BackupFlagLog, RetainPeriodNumberLog, RetainPeriodTypeLog ) SELECT #DBNames.Nombre, 'N', 4, -- 4 Semanas para copias Full 'wk', 'N', 7, -- 7 Dias para copias Diff 'dd', 'N', 24, -- 24 horas para Logs 'hh' FROM #DBNames LEFT OUTER JOIN BackupBaseDatos ON BackupBaseDatos.Nombre = #DBNames.Nombre WHERE BackupBaseDatos.Nombre IS NULL AND LOWER(#DBNames.Nombre) <> 'tempdb' --Quito los backups para las bases de datos que no existen. DELETE BackupBaseDatos WHERE NOT EXISTS ( SELECT * FROM #DBNames WHERE #DBNames.Nombre = BackupBaseDatos.Nombre ) DELETE #DBNames --Chequeo cuales son los backups que existen. CREATE TABLE #ExistingBackups ( Nombre VARCHAR(128), ID INT IDENTITY(1,1) ) DECLARE @Nombre VARCHAR(128), @RetainPeriodNumber INT, @RetainPeriodType VARCHAR(2), @UltimoBackupAMantener VARCHAR(8), @ID INT, @MaxID INT INSERT #DBNames (Nombre, RetainPeriodNumber, RetainPeriodType) SELECT Nombre, CASE WHEN @Tipo = 'FULL' THEN RetainPeriodNumberFull ELSE CASE WHEN @Tipo = 'DIFF' THEN RetainPeriodNumberDiff ELSE RetainPeriodNumberLog END END, CASE WHEN @Tipo = 'FULL' THEN RetainPeriodTypeFull ELSE CASE WHEN @Tipo = 'DIFF' THEN RetainPeriodTypeDiff ELSE RetainPeriodTypeLog END END FROM BackupBaseDatos WHERE ( @Tipo = 'FULL' AND BackupFlagFull = 'Y') OR ( @Tipo = 'DIFF' AND BackupFlagDiff = 'Y') OR ( @Tipo = 'LOG' AND BackupFlagLog = 'Y') SELECT @MaxID = MAX(ID), @ID = 0 FROM #DBNames WHILE @ID < @MaxID BEGIN SELECT @ID = MIN(ID) FROM #DBNames WHERE ID > @ID SELECT @Nombre = Nombre, @RetainPeriodNumber = RetainPeriodNumber, @RetainPeriodType = RetainPeriodType FROM #DBNames WHERE ID = @ID DELETE #ExistingBackups SELECT @sql = 'dir /B ' + @Ruta SELECT @sql = @sql + '"' + @Nombre + '_' + @Tipo + '*.*"' INSERT #ExistingBackups EXEC master..xp_cmdshell @sql IF EXISTS ( SELECT * FROM #ExistingBackups WHERE Nombre Like '%File Not Found%' OR Nombre Like '%No Se Encuentra el archivo%' ) DELETE #ExistingBackups CREATE TABLE #UltimoBackupAMantener ( UltimoBackupAMantener VARCHAR(8) NOT NULL ) INSERT #UltimoBackupAMantener EXEC ('SELECT CONVERT(VARCHAR(8), GETDATE() - DATEADD(' + @RetainPeriodType + ', ' + @RetainPeriodNumber + ', ' + '''19000101''' + '), 112)') SELECT @UltimoBackupAMantener = UltimoBackUpAMantener FROM #UltimoBackupAMantener DELETE #ExistingBackups WHERE Nombre > @Nombre + '_' + @Tipo + '_' + @UltimoBackupAMantener DECLARE @eID INT, @eMaxID INT, @eName VARCHAR(128) SELECT @eID = 0, @eMaxID = COALESCE(MAX(ID),0) FROM #ExistingBackups WHILE @eID < @eMaxID BEGIN SELECT @eID = MIN(ID) FROM #ExistingBackups WHERE ID > @eID SELECT @eName = Nombre FROM #ExistingBackups WHERE ID = @eID SELECT @sql = 'del ' + @Ruta + '"' + @eName + '"' EXEC master..xp_cmdshell @sql, no_output END DELETE #ExistingBackups SELECT @sql = @Ruta + @Nombre + '_' + @Tipo + '_' + CONVERT(VARCHAR(8),GETDATE(),112) + '_' + REPLACE(CONVERT(VARCHAR(8),GETDATE(),108),':','') + '.bu' IF @Tipo = 'FULL' BACKUP DATABASE @Nombre TO DISK = @sql ELSE IF @Tipo = 'DIFF' BACKUP DATABASE @Nombre TO DISK = @sql WITH DIFFERENTIAL ELSE BACKUP LOG @Nombre TO DISK = @sql END El uso de toda esta paja molida, era si bien me acuerdo, de la siguiente forma: 1.- Ejecutas el PA inicialmente, con esto se crea la tabla "BackupBaseDatos" 2.- Dentro de los campos de la tabla se pueden setear los distintos tipos de respaldo permitidos para la bd (FULL, DIFF, LOG) y la duracion de los archivos fisicos en la carpeta de respaldos dada 3.- agregar como JOB's de SQL una llamada segun cada tipo de respaldo a utilizar, es decir si quieres respaldos completos diarios agregabas un job, que ejecutaba el procedimiento alamcenado como EXEC BackupAllBasesDatos 'C:\BACKUP\', 'FULL' con calendarizacion diaria.... NOTA: sobre como agregar el JOB al Agent del SQL 2008, mira por acá NOTA2: La teoría detras de toda la paja de los respaldos y tipos de respaldos acá Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now