2013-11-12 2 views
1

Я называю это T-SQL скрипт для удаленной базы данных SQL Server из пакетного файла в моей локальной машине:Создание удаленного резервного копирования базы данных в локальную папку

MyBatchFile.bat:

"C:\Program Files\Microsoft SQL Server\100\Tools\Binn\SQLCMD.EXE" 
     -S RemoteIPaddress -U username -P userPassword -i D:\MyBackups\backup_db.sql 

backup_db.sql:

declare @backupfile nvarchar(255) 

set @backupfile = N'D:\MyLocalBackups\' + 
        CONVERT(varchar(4), datepart(yy, getdate())) + 
        right('0' + CONVERT(varchar(2), datepart(mm, getdate())),2) + 
        right('0' + CONVERT(varchar(2), datepart(dd, getdate())),2) + 
        N'_' + 
        right('0' + CONVERT(varchar(2), datepart(hour, getdate())),2) + 
        right('0' + CONVERT(varchar(2), datepart(minute, getdate())),2) + 
        N'_MyDbBackup.bak' 

BACKUP DATABASE MyDatabase TO DISK = @backupfile 
WITH NOFORMAT, INIT, NAME = N'MyDatabase Backup', SKIP, NOREWIND, NOUNLOAD, STATS = 10 

GO 

И я хочу, чтобы резервная копия была помещена на мою локальную машину, откуда я ее выполнил, но, похоже, она пытается сделать резервную копию и поместить ее в удаленный e, поэтому я получаю ниже ошибки:

Cannot open backup device 'D:\MyLocalBackups\20131011_1200_MyDbBackup.bak'. Operating system error 21(The device is not ready.).

Как это сделать?

Обратите внимание, что файл .bat и файл .sql размещены на моих машинах, а не на пульте дистанционного управления.

ответ

2

Вам нужно сделать две вещи:

  1. Поделиться этой папке на вашем компьютере, так что можно получить с помощью пути UNC, как \\MachineName\MyLocalBackups\20131011_1200_MyDbBackup.bak.
  2. Дайте NETWORK SERVICE полный доступ к этой папке.
+2

Это предполагает, что удаленный сервер может попасть в локальный ящик, который не всегда бывает с сетевыми и правил брандмауэра , – acfrancis

+0

@acfrancis, да, наверное, я должен был упомянуть об этом. Я просто предположил, что общие проблемы доступа к сети применяются к этому подходу. –

+1

Я имею тенденцию предполагать обратное: база данных заблокирована и доступна только из определенных мест. Если это так, вам просто нужно перевернуть свое решение вверх ногами: создать резервную копию в папку на удаленном сервере и скопировать ее по пути UNC. Это также более надежно, поскольку процесс резервного копирования не зависит от сети. – acfrancis

0

Может быть, вы можете использовать хранимой процедуры sp_addumpdevice

EXEC sp_addumpdevice 'disk', 'temp1', '\\MachineName\MyLocalBackups\20131011_1200_MyDbBackup.bak' 
go 

sqlcmd -S. -T -q BACKUP DATABASE [temp_database] TO [temp1] WITH NOFORMAT, NOINIT, NAME = N'temp_database-Full Database Backup', SKIP, NOREWIND, NOUNLOAD, STATS = 10 
GO 

Полезное: https://social.msdn.microsoft.com/Forums/sqlserver/en-US/21ec66c2-955d-4c9f-a805-b96c93a240d2/how-to-backup-remote-ms-sql-server-database-to-local-disk-using-sqlcmd?forum=sqltools

Смежные вопросы