首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL Project动态设置恢复模式

SQL Project动态设置恢复模式
EN

Stack Overflow用户
提问于 2014-06-13 09:24:38
回答 3查看 2.7K关注 0票数 11

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

我们有3个配置文件设置-- dev,test,live --都运行得很好。

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

我想根据我正在使用的发布配置来设置恢复模型。我尝试创建一个变量,并在项目xml中对其进行赋值:

代码语言:javascript
复制
<Recovery>$(RecoveryModel)</Recovery>

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

代码语言:javascript
复制
: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变量设置数据库属性?

EN

回答 3

Stack Overflow用户

发布于 2019-10-10 04:58:59

我知道这是一个古老的问题,但我想我会建议这个解决方案。为什么不能直接运行部署后脚本来设置恢复模式。

代码语言:javascript
复制
USE [MYDATABASE];
IF @@SERVERNAME= 'DEVSQLSERVER'
BEGIN;
    ALTER DATABASE [MYDATABASE] SET RECOVERY SIMPLE ;  
END;
票数 4
EN

Stack Overflow用户

发布于 2018-10-03 02:34:38

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

  1. 在执行msbuild步骤之前,修改您的VSTS构建定义,将您的“数据库选项:恢复”替换为您的*.sqlproj中所需的状态(我不确定您是否可以根据每个版本的环境或您正在构建的分支来更改此状态,因此,除非您在每个环境中都有一个单独的构建定义,否则从一开始就有点丑陋且不可行):

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

  • Modify您的VSTS版本以使用"SQL Server Database Deploy“任务(即不使用"Run a DACPAC file"),并在"Additional Arguments”中指定:

/p:ScriptDatabaseOptions=false

  • Modify您的VSTS版本以使用"SQL Server Database Deploy“并指定"Publish Profile”。我认为概要文件中的“部署数据库属性”选项等同于“脚本数据库选项”,但我没有对其进行测试,因为2对我来说是一个合理的解决方案。可以在构建之前预先设置不同的配置文件,或者尝试使用每个发布环境的变量来更改主配置文件。我真的不想因为这件事让我的生活复杂化--

因此,最后我选择了上面的选项(2),并分别使用和不使用/p:ScriptDatabaseOptions=false设置进行了测试。它像预期的那样工作。选择选项(2)意味着您需要提前设置环境数据库。我们在非生产环境中使用简单恢复模式,在生产环境中使用完整恢复模式。要进行验证,请打开MSSQL Mgt Studio中的数据库选项,或查看SQL Server日志以查看是否出现如下消息:

代码语言:javascript
复制
Setting database option RECOVERY to SIMPLE for datatbase 'WhatACoolNameForADatabase'.

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

票数 2
EN

Stack Overflow用户

发布于 2018-06-05 06:23:54

您可以转到visual studio中的“项目设置”。单击数据库设置>操作,然后将恢复模式更改为简单。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24196379

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档