Onde o sqlpackage.exe armazena backups de banco de dados?

2

Eu tenho um script de implantação que usa sqlpackage.exe para implantar alterações incrementais em um banco de dados. (O projeto é mantido na edição de banco de dados do Visual Studio 2012 Express.) Uma das bandeiras que estou passando para essa ferramenta é:

/p:BackupDatabaseBeforeChanges=True

O que não estou achando, no entanto, é onde esses backups existem. Até agora, toda documentação que encontro no MSDN simplesmente diz:

Get or set boolean that specifies whether a database backup will be performed before proceeding with the actual deployment actions.

Os backups são temporários e simplesmente excluídos após uma implantação bem-sucedida? Ou, pior, simplesmente não está criando backups apesar dessa bandeira? Se estiver criando backups, onde eles estão? Eu olhei em:

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

Mas não há nada lá. Talvez o "backup" esteja em uma forma diferente em algum lugar? Essencialmente, o que eu gostaria de fazer é manter indefinidamente um instantâneo do banco de dados de destino antes de qualquer implementação específica (basicamente o que faço com o aplicativo implantado no mesmo script).

    
por David 18.06.2013 / 19:25

1 resposta

0

Dê uma olhada no script .sql que a implantação está criando. Deve conter algo como

IF (DB_ID (N '$ (DatabaseName)') NÃO É NULO) INÍCIO     DECLARAR @rc int, - código de retorno             @ fn nvarchar (4000), - nome do arquivo para backup             @ dir nvarchar (4000) - diretório de backup

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

END GO

Como você pode ver acima, o destino dos backups é determinado pelos valores do registro que armazenam o local de backup padrão do SQL Server de destino.

    
por 03.02.2014 / 23:30