Назад | Перейти на главную страницу

Где sqlpackage.exe хранит резервные копии базы данных?

У меня есть сценарий развертывания, который использует 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.