¿Qué es un programa o script de línea de comandos simple para realizar copias de seguridad de bases de datos del servidor SQL?

StackOverflow https://stackoverflow.com/questions/122690

Pregunta

He sido demasiado negligente al realizar copias de seguridad de bases de datos en nuestros servidores internos.

¿Existe un programa de línea de comandos sencillo que pueda utilizar para realizar copias de seguridad de determinadas bases de datos en SQL Server 2005?¿O hay un VBScript simple?

¿Fue útil?

Solución

Para hacer una copia de seguridad de una única base de datos desde la línea de comando, use osql o sqlcmd.

"C:\Program Files\Microsoft SQL Server\90\Tools\Binn\osql.exe" 
    -E -Q "BACKUP DATABASE mydatabase TO DISK='C:\tmp\db.bak' WITH FORMAT"

También querrás leer la documentación sobre RESPALDO y RESTAURAR y procedimientos generales.

Otros consejos

yo suelo Mantenimiento expreso.

Para hacer una copia de seguridad de todas las bases de datos de los usuarios, hago, por ejemplo:

C:\>ExpressMaint.exe -S (local)\sqlexpress -D ALL_USER -T DB -BU HOURS -BV 1 -B c:\backupdir\ -DS

Programe lo siguiente para realizar una copia de seguridad de todas las bases de datos:

Use Master

Declare @ToExecute VarChar(8000)

Select @ToExecute = Coalesce(@ToExecute + 'Backup Database ' + [Name] + ' To Disk =     ''D:\Backups\Databases\' + [Name]   + '.bak'' With Format;' + char(13),'')
From
Master..Sysdatabases
Where
[Name] Not In ('tempdb')
and databasepropertyex ([Name],'Status') = 'online'

Execute(@ToExecute)

También hay más detalles en mi blog:cómo Automatice las copias de seguridad de SQL Server Express.

Encontré esto en una página de soporte de Microsoft. http://support.microsoft.com/kb/2019698.

¡Funciona muy bien!Y como proviene de Microsoft, siento que es bastante legítimo.

Básicamente hay dos pasos.

  1. Cree un procedimiento almacenado en su base de datos maestra.Vea el enlace msft o, si está roto, intente aquí: http://pastebin.com/svRLkqnq
  2. Programe la copia de seguridad desde su programador de tareas.Es posible que desee colocarlo primero en un archivo .bat o .cmd y luego programarlo.

    sqlcmd -S YOUR_SERVER_NAME\SQLEXPRESS -E -Q "EXEC sp_BackupDatabases @backupLocation='C:\SQL_Backup\', @backupType='F'"  1>c:\SQL_Backup\backup.log            
    

Obviamente reemplace YOUR_SERVER_NAME con el nombre de su computadora u opcionalmente intente .\SQLEXPRESS y asegúrese de que exista la carpeta de respaldo.En este caso está intentando ponerlo en c:\SQL_Backup

Puede utilizar la aplicación de copia de seguridad de ApexSQL.Aunque es una aplicación GUI, todas sus funciones son compatibles con CLI.Es posible realizar operaciones de copia de seguridad únicas o crear un trabajo que haga una copia de seguridad de bases de datos específicas de forma regular.Puede consultar las reglas de cambio y los ejemplos en los artículos:

Estoy usando tsql en una infraestructura Linux/UNIX para acceder a bases de datos MSSQL.Aquí hay un script de shell simple para volcar una tabla en un archivo:

#!/usr/bin/ksh
#
#.....
(
tsql -S {database} -U {user} -P {password} <<EOF
select * from {table}
go
quit
EOF
) >{output_file.dump}

Eventual si no tiene una conexión confiable como lo declara el modificador –E

Utilice la siguiente línea de comando

"[program dir]\[sql server version]\Tools\Binn\osql.exe" -Q "BACKUP DATABASE mydatabase TO DISK='C:\tmp\db.bak'" -S [server] –U [login id] -P [password]

Dónde

[directorio del programa] es el directorio donde existe osql.exe

On 32bit OS c:\Program Files\Microsoft SQL Server\
On 64bit OS c:\Program Files (x86)\Microsoft SQL Server\

[versión del servidor SQL] la versión de su servidor SQL 110 o 100 o 90 u 80 comienza con el número más grande

[servidor] su nombre de servidor o IP del servidor

[ID de inicio de sesión] su nombre de inicio de sesión de usuario del servidor ms-sql

[contraseña] la contraseña de inicio de sesión requerida

A continuación se muestra el script simple para realizar una copia de seguridad de la base de datos.

DECLARE @name VARCHAR(50) -- database name  
DECLARE @path VARCHAR(256) -- path for backup files  
DECLARE @fileName VARCHAR(256) -- filename for backup  
DECLARE @fileDate VARCHAR(20) -- used for file name


-- specify database backup directory
SET @path = 'C:\Backup\'  


-- specify filename format
SELECT @fileDate = CONVERT(VARCHAR(20),GETDATE(),112) 


DECLARE db_cursor CURSOR FOR  
SELECT name 
FROM master.dbo.sysdatabases 
WHERE name NOT IN ('master','model','msdb','tempdb')  -- exclude these databases


OPEN db_cursor   
FETCH NEXT FROM db_cursor INTO @name   


WHILE @@FETCH_STATUS = 0   
BEGIN   
       SET @fileName = @path + @name + '_' + @fileDate + '.BAK'  
       BACKUP DATABASE @name TO DISK = @fileName  


       FETCH NEXT FROM db_cursor INTO @name   
END   


CLOSE db_cursor   
DEALLOCATE db_cursor

Podrías usar un VB Script que escribí exactamente para este propósito:https://github.com/ezrarieben/mssql-backup-vbs/

Programe una tarea en el "Programador de tareas" para ejecutar el script como desee y realizará una copia de seguridad de toda la base de datos en un archivo BAK y la guardará donde usted especifique.

SET NOCOUNT ON;
declare @PATH VARCHAR(200)='D:\MyBackupFolder\'
 -- path where you want to take backups
IF OBJECT_ID('TEMPDB..#back') IS NOT NULL

DROP TABLE #back

CREATE TABLE #back
(
RN INT IDENTITY (1,1),
DatabaseName NVARCHAR(200)

)

INSERT INTO #back 
SELECT       'MyDatabase1'
UNION SELECT 'MyDatabase2'
UNION SELECT 'MyDatabase3'
UNION SELECT 'MyDatabase4'

-- your databases List

DECLARE @COUNT INT =0 ,  @RN INT =1, @SCRIPT NVARCHAR(MAX)='',  @DBNAME VARCHAR(200)

PRINT '---------------------FULL BACKUP SCRIPT-------------------------'+CHAR(10)
SET @COUNT = (SELECT COUNT(*) FROM #back)
PRINT 'USE MASTER'+CHAR(10)
WHILE(@COUNT > = @RN)
BEGIN

SET @DBNAME =(SELECT DatabaseName FROM #back WHERE RN=@RN)
SET @SCRIPT ='BACKUP DATABASE ' +'['+@DBNAME+']'+CHAR(10)+'TO DISK =N'''+@PATH+@DBNAME+ N'_Backup_'
+ REPLACE ( REPLACE ( REPLACE ( REPLACE ( CAST ( CAST ( GETDATE () AS DATETIME2 ) AS VARCHAR ( 100 )), '-' , '_' ), ' ' , '_' ), '.' , '_' ), ':' , '' )+'.bak'''+CHAR(10)+'WITH COMPRESSION, STATS = 10'+CHAR(10)+'GO'+CHAR(10)
PRINT @SCRIPT
SET @RN=@RN+1
END

 PRINT '---------------------DIFF BACKUP SCRIPT-------------------------'+CHAR(10)

  SET  @COUNT  =0 SET  @RN  =1 SET @SCRIPT ='' SET @DBNAME =''
 SET @COUNT = (SELECT COUNT(*) FROM #back)
PRINT 'USE MASTER'+CHAR(10)
WHILE(@COUNT > = @RN)
BEGIN
SET @DBNAME =(SELECT DatabaseName FROM #back WHERE RN=@RN)
SET @SCRIPT ='BACKUP DATABASE ' +'['+@DBNAME+']'+CHAR(10)+'TO DISK =N'''+@PATH+@DBNAME+ N'_Backup_'
+ REPLACE ( REPLACE ( REPLACE ( REPLACE ( CAST ( CAST ( GETDATE () AS DATETIME2 ) AS VARCHAR ( 100 )), '-' , '_' ), ' ' , '_' ), '.' , '_' ), ':' , '' )+'.diff'''+CHAR(10)+'WITH DIFFERENTIAL, COMPRESSION, STATS = 10'+CHAR(10)+'GO'+CHAR(10)
PRINT @SCRIPT
SET @RN=@RN+1
END

Si puede encontrar los archivos DB..."copia de seguridad de cp DBFiles/"

casi seguro No recomendable en la mayoría de los casos, pero es tan simple como todo atuendo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top