【问题标题】:SQL Server database keeps setting SINGLE_USER on in testsSQL Server 数据库在测试中不断设置 SINGLE_USER
【发布时间】:2019-06-18 15:25:09
【问题描述】:

我有 2 个 docker 容器来托管自己的服务器。我还有一个托管 SQL Server 数据库的第三个 docker 容器。每个服务器都访问这个数据库。

我的 DB docker 容器在 docker-compose.yml 中是这样配置的:

my-db:
     image: microsoft/mssql-server-linux:latest
     environment:
       - ACCEPT_EULA=Y
       - SA_PASSWORD=******
     ports:
       - "1433:1433"

每个服务器的连接字符串(它们是 .NET 服务器)都是

ConnectionStrings__Default=data source=my-db;initial catalog=TestDb;persist security info=True;user id=SA;password=******;

当我运行我的测试时,我从 docker 容器中获得了一个日志,该日志表明它正在设置 SINGLE_USER 模式。这显然破坏了我的测试,因为两个服务器都必须访问它。

我尝试使用数据库浏览器设置 MULTI_USER 工作...直到测试开始...然后测试套件中的数据库或其他东西将其切换回 SINGLE_USER。

如何通过 docker compose、dockerfiles 或其他任何方式配置它以不设置 SINGLE_USER 模式或专门设置 MULTI_USER 模式?

以防万一:我还使用 Selenium 进行测试,使用 circleci 进行测试自动化。

【问题讨论】:

  • 我没有看到卷规范,这意味着它使用了并非真正为持久数据设计的本地可写存储。我不确定这是单用户模式的原因,但我认为它是相关的。尝试在容器中使用卷。
  • 一卷?我会将它同步到什么?数据库仅驻留在 docker 容器中。我假设你的意思是我的数据库 docker 容器上的一个卷到我的主机 comp 上的某个东西?
  • 您必须真的使用 SA 帐户进行连接吗?
  • @WesH 用于容器,是的。 SA 是唯一配置的帐户。当然登录后可以创建更多
  • @WesH 我猜。我是这个项目和团队的新手,所以我不知道他们为什么选择那个用户。这不是我的电话

标签: sql-server docker circleci single-user


【解决方案1】:

在搜索了代码库后,我发现它实际上与配置无关。我正在使用实体框架,单元测试在每次测试后都删除并重新迁移了数据库。调用 migrate 命令将数据库置于 SINGLE_USER 模式。当我出于好奇删除迁移调用时发现了这一点,你瞧,没有设置 SINGLE_USER 模式。

我假设 migrate 调用 (myDbContext.Database.Migrate()) 设置了模式,以便将其他侦听器踢出,以免在迁移过程中引起冲突。但这只是一个猜测。我找不到关于为什么在线的真正答案。

简而言之,解决这个问题的方法是代码库设置了 SINGLE_USER 模式,我只需要找到调用即可。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-09-06
    • 1970-01-01
    • 2012-12-14
    • 2013-05-13
    • 2017-10-20
    • 2010-10-11
    • 2014-09-03
    • 1970-01-01
    相关资源
    最近更新 更多