sqlpackage.exe 将数据库备份存储在哪里?

sqlpackage.exe 将数据库备份存储在哪里?

我有一个部署脚本,它使用 sqlpackage.exe 将增量更改部署到数据库。 (该项目在 Visual Studio 2012 Express 的数据库版本中维护。)我传递给此工具的标志之一是:

/p:BackupDatabaseBeforeChanges=True

然而,我找不到这些备份在哪里。到目前为止,我在 MSDN 上找到的每一份文档都只是说:

获取或设置布尔值,指定在继续实际部署操作之前是否执行数据库备份。

备份是否只是临时的,在成功部署后就被删除了?或者更糟的是,尽管有这个标志,但它根本不创建备份?如果它正在创建备份,它们在哪里?我查看了:

C:\Program Files\Microsoft SQL Server\MSSQL11.SQLEXPRESS2012\MSSQL\Backup

但那里什么也没有。也许“备份”在某个地方以不同的形式存在?本质上,我想要做的是无限期地保留任何给定部署之前的目标数据库快照(基本上是我在同一个脚本中对已部署的应用程序所做的操作)。

答案1

查看部署正在创建的 .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 的默认备份位置的注册表值决定。

相关内容