Что такое простая программа или скрипт командной строки для резервного копирования баз данных SQL-сервера? - PullRequest
88 голосов
/ 23 сентября 2008

Я слишком слабо выполнял резервное копирование БД на наших внутренних серверах.

Существует ли простая программа командной строки, которую я могу использовать для резервного копирования определенных баз данных в SQL Server 2005? Или есть простой VBScript?

Ответы [ 11 ]

102 голосов
/ 23 сентября 2008

Для резервного копирования одной базы данных из командной строки используйте osql или 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"

Вы также можете прочитать документацию по BACKUP и RESTORE и общие процедуры .

9 голосов
/ 25 февраля 2009

Я использую ExpressMaint .

Для резервного копирования всех пользовательских баз данных я делаю, например:

C:\>ExpressMaint.exe -S (local)\sqlexpress -D ALL_USER -T DB -BU HOURS -BV 1 -B c:\backupdir\ -DS
8 голосов
/ 23 сентября 2008

Запланируйте следующее для резервного копирования всех баз данных:

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)

В моем блоге также есть более подробная информация: Автоматизация резервного копирования SQL Server Express .

5 голосов
/ 30 ноября 2017

Вы можете использовать приложение для резервного копирования ApexSQL. Хотя это приложение с графическим интерфейсом, все его функции поддерживаются в CLI. Можно выполнить одноразовые операции резервного копирования или создать задание, которое будет регулярно выполнять резервное копирование указанных баз данных. Вы можете проверить правила переключения и примеры в статьях:

5 голосов
/ 26 мая 2013

Я нашел это на странице поддержки Microsoft http://support.microsoft.com/kb/2019698.

Отлично работает! И поскольку это исходит от Microsoft, я чувствую, что это вполне законно.

В основном есть два шага.

  1. Создайте хранимую процедуру в вашей главной базе данных. Смотрите ссылку msft или, если она не работает, попробуйте здесь: http://pastebin.com/svRLkqnq
  2. Запланируйте резервное копирование из вашего планировщика задач. Возможно, вы захотите сначала поместить в файл .bat или .cmd, а затем запланировать этот файл.

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

Очевидно, замените YOUR_SERVER_NAME именем вашего компьютера или при необходимости попробуйте. \ SQLEXPRESS и убедитесь, что папка резервной копии существует. В этом случае он пытается поместить его в c: \ SQL_Backup

4 голосов
/ 12 июня 2012

Я использую tsql в инфраструктуре Linux / UNIX для доступа к базам данных MSSQL. Вот простой скрипт оболочки для вывода таблицы в файл:

#!/usr/bin/ksh
#
#.....
(
tsql -S {database} -U {user} -P {password} <<EOF
select * from {table}
go
quit
EOF
) >{output_file.dump}
2 голосов
/ 19 апреля 2016

Ниже приведен простой скрипт для резервного копирования базы данных.

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 голосов
/ 25 июня 2014

Возможно, если у вас нет доверенного соединения, поскольку ключ -E объявляет

Использовать следующую командную строку

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

Где

[каталог программы] - это каталог, в котором существует файл osql.exe

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

[версия сервера sql] версия вашего сервера sql 110 или 100, или 90, или 80 начинаются с наибольшего числа

[сервер] ваше имя сервера или ip сервера

[идентификатор входа] логин вашего пользователя сервера ms-sql

[пароль] требуемый пароль для входа

0 голосов
/ 10 апреля 2019
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
0 голосов
/ 11 сентября 2018

Вы можете использовать скрипт VB, который я написал именно для этой цели: https://github.com/ezrarieben/mssql-backup-vbs/

Запланируйте задачу в «Планировщике заданий», чтобы выполнить сценарий так, как вам нравится, и он создаст резервную копию всей БД в файле BAK и сохранит ее там, где вы укажете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...