Что такое простая программа или сценарий командной строки для резервного копирования баз данных SQL-сервера?
-
02-07-2019 - |
Вопрос
Я слишком небрежно относился к резервному копированию БД на наших внутренних серверах.
Есть ли простая программа командной строки, которую я могу использовать для резервного копирования определенных баз данных в SQL Server 2005?Или есть простой VBScript?
Решение
Чтобы сделать резервную копию одной базы данных из командной строки, используйте 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"
Вы также захотите прочитать документацию по РЕЗЕРВНОЕ КОПИРОВАНИЕ и ВОССТАНОВИТЬ и общие процедуры.
Другие советы
я использую ЭкспрессMaint.
Например, для резервного копирования всех пользовательских баз данных я делаю:
C:\>ExpressMaint.exe -S (local)\sqlexpress -D ALL_USER -T DB -BU HOURS -BV 1 -B c:\backupdir\ -DS
Запланируйте следующее для резервного копирования всех баз данных:
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.
Я нашел это на странице поддержки Microsoft. http://support.microsoft.com/kb/2019698.
Это отлично работает!И поскольку оно исходило от Microsoft, я считаю, что это вполне законно.
По сути, есть два шага.
- Создайте хранимую процедуру в вашей основной базе данных.См. ссылку MSFT или, если она не работает, попробуйте здесь: http://pastebin.com/svRLkqnq
Запланируйте резервное копирование в планировщике задач.Возможно, вы захотите сначала поместить файл .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.
Вы можете использовать приложение резервного копирования ApexSQL.Хотя это приложение с графическим пользовательским интерфейсом, все его функции поддерживаются в CLI.Можно либо выполнять однократные операции резервного копирования, либо создать задание, которое будет выполнять регулярное резервное копирование определенных баз данных.Вы можете проверить правила переключения и примеры в статьях:
Я использую tsql в инфраструктуре Linux/UNIX для доступа к базам данных MSSQL.Вот простой сценарий оболочки для сохранения таблицы в файл:
#!/usr/bin/ksh
#
#.....
(
tsql -S {database} -U {user} -P {password} <<EOF
select * from {table}
go
quit
EOF
) >{output_file.dump}
Возможно, если у вас нет доверенного соединения, как объявляет ключ –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 начинается с наибольшего числа
[server] имя вашего сервера или IP-адрес сервера
[идентификатор входа] ваше имя пользователя для входа на сервер ms-sql
[пароль] необходимый пароль для входа
Ниже приведен простой скрипт для резервного копирования базы данных.
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
Вы можете использовать сценарий VB, который я написал именно для этой цели:https://github.com/ezrarieben/mssql-backup-vbs/
Запланируйте задачу в «Планировщике задач», чтобы выполнить сценарий по своему усмотрению, и он создаст резервную копию всей базы данных в файл BAK и сохранит ее в любом месте, которое вы укажете.
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
Если вы сможете найти файлы БД..."cp DBFiles резервная копия/"
Почти наверняка не рекомендуется в большинстве случаев, но это просто как все.