Coloros恢复模式:SQL项目动态设置恢复模式(simple recovery model)

我们在 Visual Studio 2012 中有一个 SQL Server 数据库项目(.sqlproj),我们将其用作数据库架构的源代码控制。它所做的一件很酷的事情是在我们发布代码时生成 SQL 来更新架构。

我们有 3 个配置文件设置-开发,测试,现场-这是所有工作的罚款。

最近,我们将我们的实时数据库从“简单”恢复更改为“完全”恢复。一切都很棒,直到我们尝试运行我们的下一个部署以开发和测试。我们不想在开发和测试上将恢复模式从简单更改为完整-我们不需要更改它。但是,当我们发布数据库项目时,它现在想要设置它。

我想根据我使用的发布配置设置恢复模式。我尝试创建一个变量并在项目 xml 中分配:

<Recovery>$(RecoveryModel)</Recovery>

但它仍然尝试在部署脚本中将其设置为“Full”:

:setvar DefaultDataPath "C:\Program Files\Microsoft SQL Server\MSSQL11.SQL2012\MSSQL\DATA\"
:setvar DefaultLogPath "C:\Program Files\Microsoft SQL Server\MSSQL11.SQL2012\MSSQL\DATA\"
:setvar RecoveryModel "Simple"
GO
:on error exit
GO
/*
Detect SQLCMD mode and disable script execution if SQLCMD mode is not supported.
To re-enable the script after enabling SQLCMD mode, execute the following:
SET NOEXEC OFF; 
*/
:setvar __IsSqlCmdEnabled "True"
GO
IF N'$(__IsSqlCmdEnabled)' NOT LIKE N'True'
    BEGIN
        PRINT N'SQLCMD mode must be enabled to successfully execute this script.';
        SET NOEXEC ON;
    END
GO
IF EXISTS (SELECT 1
           FROM   [master].[dbo].[sysdatabases]
           WHERE  [name] = N'$(DatabaseName)')
    BEGIN
        ALTER DATABASE [$(DatabaseName)]
            SET RECOVERY FULL 
            WITH ROLLBACK IMMEDIATE;
    END

我目前的工作是在 Post-Deployment 文件夹中创建一个脚本,以确定我所在的服务器,然后将恢复模式设置为简单,如果它是 dev 或 test。

有没有办法用 SQLCMD 变量设置数据库属性?

4

我知道这是一个老问题,但我想我会建议这个解决方案。为什么你不能运行一个 Post Deployment 脚本来设置恢复模式。

USE [MYDATABASE];
IF @@SERVERNAME= 'DEVSQLSERVER'
BEGIN;
    ALTER DATABASE [MYDATABASE] SET RECOVERY SIMPLE ;  
END;
2

如果一个人使用 VSTS:在我看来,有三种方法可以处理这种情况(即 DACPAC 中的恢复模式设置覆盖数据库中的恢复模式)。

更改您的 VSTS 构建定义,以在 msbuild 步骤之前将您的 *.sqlproj 中的所需状态替换为“数据库选项:恢复”(我不确定您可以在每个发布环境或基于您正在构建的分支进行更改,所以有点丑陋和不可行,除非您有每个环境的单独构建定义):

Replace <Recovery>SIMPLE</Recovery>with <Recovery>FULL</Recovery>or vice versa in the *.sqlproj file

修改您的 VSTS 版本以使用“SQL Server 数据库部署”任务(即不使用“运行 DACPAC 文件”)并在“其他参数”中指定:

/p:ScriptDatabaseOptions=false

修改您的 VSTS 版本以使用“SQL Server Database Deploy”并指定“Publish Profile”。我认为配置文件中的“Deploy database properties”选项等同于“Script Database Options”,但我没有测试过它,因为 2 对我来说是一个合理的解决方案。可以在构建时间之前预先设置不同的配置文件,或者尝试使用每个发布环境的变量更改主配置文件。

因此,最后我选择了上面的选项(2),并在使用和不使用/ p:ScriptDatabaseOptions = false设置的情况下进行了测试。它按预期工作。选择选项(2)意味着您需要提前设置环境数据库。我们在非 Prod 环境中使用 SIMPLE 恢复模式,在 Prod 环境中使用 FULL。要验证是否在 MQL 中打开数据库

Setting database option RECOVERY to SIMPLE for datatbase 'WhatACoolNameForADatabase'.

如果我需要能够站起来新的数据库作为我的发布过程的一部分,那么我可能不得不冒险进入选项 3 的领域,如果这是你在哪里,那么祝你好运,让我们知道你必须做什么才能使它工作。

1

您可以转到 visual studio 中的项目设置。单击数据库设置 & gt;操作并将恢复模式更改为 SIMPLE。

本站系公益性非盈利分享网址,本文来自用户投稿,不代表边看边学立场,如若转载,请注明出处

(972)
懂码小程序:我不知道怎么打开这个 我不太懂技术
上一篇
彩六一直连接服务器:几个小时后 我一直失去与MySQL服务器的连接
下一篇

相关推荐

发表评论

登录 后才能评论

评论列表(12条)