У меня есть сценарий развертывания, который использует sqlpackage.exe для развертывания дополнительных изменений в базе данных. (Проект поддерживается в редакции базы данных Visual Studio 2012 Express.) Один из флагов, которые я передаю этому инструменту:
/p:BackupDatabaseBeforeChanges=True
Однако я не нахожу, где существуют эти резервные копии. Пока что каждая часть документации, которую я нахожу на MSDN, просто говорит:
Получить или установить логическое значение, указывающее, будет ли выполняться резервное копирование базы данных перед продолжением фактических действий по развертыванию.
Являются ли резервные копии временными и просто удаляются после успешного развертывания? Или, что еще хуже, он просто не создает резервные копии, несмотря на этот флаг? Если он создает резервные копии, где они? Я заглянул в:
C:\Program Files\Microsoft SQL Server\MSSQL11.SQLEXPRESS2012\MSSQL\Backup
Но там ничего нет. Может, "бэкап" где-то в другом виде? По сути, то, что я хотел бы сделать, - это сохранять на неопределенный срок моментальный снимок целевой базы данных перед любым заданным развертыванием (в основном то, что я делаю с развернутым приложением в том же сценарии).
Взгляните на сценарий .sql, который создается при развертывании. Он должен содержать что-то вроде
IF (DB_ID (N '$ (DatabaseName)') IS NOT NULL) BEGIN DECLARE @rc int, - код возврата @fn nvarchar (4000), - имя файла для резервного копирования @dir nvarchar (4000) - каталог резервного копирования
EXEC @rc = [master].[dbo].[xp_instance_regread] N'HKEY_LOCAL_MACHINE', N'Software\Microsoft\MSSQLServer\MSSQLServer', N'BackupDirectory', @dir output, 'no_output'
if (@rc = 0) SELECT @dir = @dir + N'\'
IF (@dir IS NULL)
BEGIN
EXEC @rc = [master].[dbo].[xp_instance_regread] N'HKEY_LOCAL_MACHINE', N'Software\Microsoft\MSSQLServer\MSSQLServer', N'DefaultData', @dir output, 'no_output'
if (@rc = 0) SELECT @dir = @dir + N'\'
END
IF (@dir IS NULL)
BEGIN
EXEC @rc = [master].[dbo].[xp_instance_regread] N'HKEY_LOCAL_MACHINE', N'Software\Microsoft\MSSQLServer\Setup', N'SQLDataRoot', @dir output, 'no_output'
if (@rc = 0) SELECT @dir = @dir + N'\Backup\'
END
IF (@dir IS NULL)
BEGIN
SELECT @dir = N'$(DefaultDataPath)'
END
SELECT @fn = @dir + N'$(DatabaseName)' + N'-' +
CONVERT(nchar(8), GETDATE(), 112) + N'-' +
RIGHT(N'0' + RTRIM(CONVERT(nchar(2), DATEPART(hh, GETDATE()))), 2) +
RIGHT(N'0' + RTRIM(CONVERT(nchar(2), DATEPART(mi, getdate()))), 2) +
RIGHT(N'0' + RTRIM(CONVERT(nchar(2), DATEPART(ss, getdate()))), 2) +
N'.bak'
BACKUP DATABASE [$(DatabaseName)] TO DISK = @fn
КОНЕЦ ИДТИ
Как вы можете видеть выше, место назначения резервных копий определяется значениями реестра, в которых хранится расположение резервных копий по умолчанию для целевого SQL Server.