it-swarm-eu.dev

Co je to jednoduchý program příkazového řádku nebo skript pro zálohování databází SQL serveru?

Byl jsem příliš laxní při provádění záloh DB na našich interních serverech. 

Existuje jednoduchý program příkazového řádku, který mohu použít k zálohování určitých databází v serveru SQL Server 2005? Nebo je tam jednoduchý VBScript? 

87
Frank Krueger

Pro zálohování jedné databáze z příkazového řádku použijte osql nebo 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"

Budete také chtít přečíst dokumentaci o BACKUP a OBNOVIT a obecných postupech .

100
Craig Trader

Chcete-li zálohovat všechny databáze, naplánujte následující:

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)

Tam jsou také další podrobnosti o mém blogu: jak Automatizovat SQL Server Express Backup .

9
GateKiller

Používám ExpressMaint .

Pro zálohování všech uživatelských databází například:

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

Záložní aplikaci můžete použít pomocí ApexSQL. I když se jedná o grafickou aplikaci, má všechny funkce podporované v CLI. Je možné provádět jednorázové operace zálohování nebo vytvořit úlohu, která by pravidelně zálohovala zadané databáze. Pravidla přepínání můžete zkontrolovat a popsat v článcích:

5
P.Thompson

Našel jsem to na stránce podpory společnosti Microsoft http://support.Microsoft.com/kb/2019698

Funguje to skvěle! A protože pochází od společnosti Microsoft, mám pocit, že je to docela legitimní.

V podstatě existují dva kroky.

  1. Vytvořte uloženou proceduru ve vašem hlavním db. Podívejte se na odkaz msft nebo pokud je přerušen, zkuste to zde: http://Pastebin.com/svRLkqnq
  2. Naplánujte zálohu ze svého plánovače úloh. Nejdříve byste měli chtít dát soubor .bat nebo .cmd a poté naplánovat tento soubor.

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

Je zřejmé, že YOUR_SERVER_NAME nahraďte názvem vašeho počítače nebo volitelně zkuste SQLEXPRESS a zkontrolujte, zda existuje záložní složka. V tomto případě se snaží dát do c: SQL_Backup

5
John W.

Používám tsql na infrastruktuře Linux/UNIX pro přístup k databázím MSSQL. Zde je jednoduchý skript Shell pro výpis tabulky do souboru:

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

Případné, pokud nemáte důvěryhodné připojení jako přepínač –E deklaruje 

Použijte následující příkazový řádek

"[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]

Na 64bitovém OS c: Program Files (x86) Microsoft SQL Server

[sql server version] vaše sql server verze 110 nebo 100 nebo 90 nebo 80 začínají s největším číslem

[server] vaše servername nebo IP serveru

[login id] vaše přihlašovací jméno uživatele serveru ms-sql

[heslo] požadované přihlašovací heslo

2
George Vrynios

Níže je jednoduchý skript pro zálohování databáze.

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
2
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 [email protected])
SET @SCRIPT ='BACKUP DATABASE ' +'['[email protected]+']'+CHAR(10)+'TO DISK =N'''[email protected][email protected]+ 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 @[email protected]+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 [email protected])
SET @SCRIPT ='BACKUP DATABASE ' +'['[email protected]+']'+CHAR(10)+'TO DISK =N'''[email protected][email protected]+ 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 @[email protected]+1
END
0
Sagar Mahajan

Můžete použít skript VB, který jsem napsal přesně pro tento účel: https://github.com/ezrarieben/mssql-backup-vbs/

Naplánujte úkol v "Plánovači úloh", aby se skript spustil, jak chcete, a uloží celý DB do souboru BAK a uloží jej kamkoliv zadáte.

0
ezrarieben