标签: deployment

无需停机即可更改架构和将数据迁移到实时数据库的最佳实践?

如何在不停机的情况下对实时数据库进行架构更改?

例如,假设我有一个 PostgreSQL 数据库,其中包含一个包含各种用户数据(如电子邮件地址等)的表,所有这些数据都与特定用户相关联。如果我想将电子邮件地址移动到一个新的专用表,我必须更改架构,然后将电子邮件数据迁移到新表。如何在不停止写入原始表的情况下完成此操作?当然,当数据从旧表写入新表时,新数据会继续写入旧表而被遗漏,对吗?

我想这个问题经常出现,但我找不到任何标准的解决方案来处理它。

这篇文章解决了这个问题,但我并没有真正理解第3步。他说要写入两个表,然后将旧数据从第一个表迁移到新表。您如何确保只迁移旧数据?

(我在 Heroku 上使用PostgreSQL。)

schema postgresql migration best-practices deployment

54
推荐指数
1
解决办法
3万
查看次数

设计一个平台:一个数据库还是多个数据库?

我们正在构建一个包含多种服务的网络平台,每个服务都有自己的底层数据。这些服务是按照面向服务的架构原则独立构建的,但它们针对潜在的相关数据进行交易。我们正在考虑这些服务是否应该共享一个大数据库或每个都有自己的数据库。(我们计划在 Windows 2008 群集上使用 SQL Server 2008 Enterprise。)

我们已经考虑过的每种方法的一些优点包括:

单一数据库

  • 来自不同服务的相关数据可以通过外键约束绑定在一起
  • 分析提取更易于编写且执行速度更快
  • 发生灾难时,更容易将平台恢复到一致状态
  • 对于被多个服务引用的数据,一个服务缓存的数据很可能很快就会被另一个服务使用
  • 预先管理和监控更简单、更便宜

多个数据库

  • 维护工作、硬件问题、安全漏洞等不一定会影响整个平台
  • 假设每个数据库都在不同的硬件上,扩展多台机器比扩展一台大机器会产生更多的性能优势

从操作的角度来看,这个平台中的每个服务都有自己的数据库,还是都放在同一个数据库中更有利?哪些关键因素决定了这个问题的答案?

database-design deployment

31
推荐指数
1
解决办法
1万
查看次数

为什么 :r SQLCMD 命令在部署后脚本中标记为错误?

我已经使用过几次部署后脚本,并且总是直观地使用构建操作“PostDeploy”,因为它就是这样。现在我第一次尝试按照脚本模板中的内置指令使用":r somescript.sql"语法。

此行立即被标记为错误:

“':' 旁边的 SQL80001 语法错误”

我找到了将 PDS 设置为“无”的建议。这没有帮助,错误仍然存​​在。我在这里缺少什么?

sql-server deployment ssdt visual-studio-2013

27
推荐指数
2
解决办法
2万
查看次数

MongoDB:在应用服务器上共同定位 mongos 进程

我想问一个关于本文档中描述的最佳实践的问题:

http://info.mongodb.com/rs/mongodb/images/MongoDB-Performance-Best-Practices.pdf

使用多个查询路由器。使用分布在多个服务器上的多个 mongos 进程。一个常见的部署是将 mongos 进程共置在应用程序服务器上,这允许应用程序和 mongos 进程之间进行本地通信。 mongos 进程的适当数量将取决于应用程序和部署的性质。

只是关于我们部署的一点背景知识。我们有很多应用服务器节点。他们每个人都使用无状态 RESTful WS 运行一个基于 JVM 的进程。正如这个最佳实践所建议的那样,每个应用程序服务器节点都运行自己的mongos进程,这意味着 JVM 进程的数量总是等于进程的数量mongos

所有mongos进程都连接到 3 个配置服务器和几个 mongo 分片(每个分片内都有副本集)。即使我们使用的是分片部署,我们并没有真正对我们的集合进行分片。事实上,我们有大量的数据库,它们在创建期间分布在所有分片上(这是我们目前分片的主要用例)。

由于最佳实践还表明“适当数量的 mongos 进程将取决于应用程序和部署的性质”,因此我开始怀疑我们的使用mongos是否真的合适,或者如果我们拥有多个专用mongos节点并让我们的应用服务器无需在mongos本地运行即可连接到它们。

对于决定多少个mongos实例与应用服务器实例数量或 MongoDB 集群的大小相关的最佳方法,您有什么看法?

最近,我们开始研究无状态 Web 服务的集群管理,我指的是 Docker、Apache Mesos 和 Kubernetes 等工具。如果我们使用 Docker,那么通常不鼓励在容器内运行多个进程的做法。考虑到这一事实,确保应用服务器容器和mongos容器始终位于同一物理节点上并具有相同数量的进程变得非常困难。这让我怀疑这个最佳实践是否仍然适用于我刚刚描述的集群架构。如果没有,您能否建议mongos在此架构中定位和部署流程的更好方法是什么?

mongodb best-practices deployment sharding docker

12
推荐指数
2
解决办法
6911
查看次数

从 SSDT 部署中排除特定表

我有一个现有的数据库,其中包含 schema 中的所有内容dbo。我有一个 SSDT 项目,其中包含我使用架构添加到它的对象foo

我在项目中有一个看起来像这样的表:

CREATE table foo.a (
    id INT NOT NULL
        CONSTRAINT [PK_foo_a] PRIMARY KEY CLUSTERED
        CONSTRAINT [FK_foo_a] FOREIGN KEY REFERENCES [dbo].[a],
    desc NVARCHAR(50) NOT NULL
)
Run Code Online (Sandbox Code Playgroud)

这取决于 dbo.a。dbo.a 有许多列是其他列的外键。其他人(维护默认架构的人)可能会更改 dbo.a。

我想简单地将 dbo.a 存储为:

CREATE table dbo.a (
    id INT NOT NULL
        CONSTRAINT [PK_a] PRIMARY KEY CLUSTERED
)
Run Code Online (Sandbox Code Playgroud)

所以它在内部构建,但没有部署。那可能吗?

deployment ssdt

12
推荐指数
2
解决办法
7651
查看次数

如何防止 SSDT 发布删除列

我想创建一个发布配置文件,它可以进行完整的架构比较和发布,但不会删除在新旧版本之间删除的任何表或任何列。

我知道设置中的阻止可能的数据丢失选项。AFAIK 这会停止发布过程,以防数据丢失。所以问题是,模式升级过程会被中断(在不知何故?)还是会完成但受影响的表将被排除在外?

如果表已添加和删除列,新列是否会添加到架构中,尽管由于潜在的数据丢失而阻止数据丢失选项会停止架构更新?

编辑 09.08.2016:

我想添加这些链接以补充有关背景的其他信息的问题:

schema sql-server deployment sql-server-2008-r2 ssdt

9
推荐指数
1
解决办法
1万
查看次数

DACPAC 和数据库漂移:即使没有任何变化,数据库用户也始终被检测为漂移

当我在 SSDT 数据库项目中包含登录名和用户并尝试使用“数据库偏离注册版本时阻止发布”选项部署 DACPAC 时,即使没有任何更改,它也始终会检测到数据库用户的漂移。

例如,我将项目发布到以前不存在数据库的新服务器上,并且一切正常。正确创建了登录名和用户等。然后我立即将同一个项目发布到同一个服务器上,部署被阻止,因为 db 用户已经漂移。但是我没有对 SQL 实例进行任何更改,甚至没有更新项目。

如果我从 SSDT 项目中删除登录名和用户,那么一切都会按预期进行,即我不会从漂移检测中得到误报,并且我可以更新和部署其他类型的对象而不会出错。

这是登录和用户的脚本:

CREATE LOGIN AppAcct WITH PASSWORD = 'Password1';
GO

CREATE USER AppAcct FOR LOGIN AppAcct
    WITH DEFAULT_SCHEMA = dbo;
GO

GRANT CONNECT TO AppAcct;
GO
Run Code Online (Sandbox Code Playgroud)

这是我正在使用的发布配置文件:

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
    <IncludeCompositeObjects>True</IncludeCompositeObjects>
    <TargetDatabaseName>DacpacDrift</TargetDatabaseName>
    <DeployScriptFileName>DacpacDrift.sql</DeployScriptFileName>
    <TargetConnectionString>Data Source=.\dev14;Integrated Security=True;Pooling=False</TargetConnectionString>
    <BlockWhenDriftDetected>True</BlockWhenDriftDetected>
    <RegisterDataTierApplication>True</RegisterDataTierApplication>
    <ProfileVersionNumber>1</ProfileVersionNumber>
    <ScriptDatabaseOptions>True</ScriptDatabaseOptions>
    <BlockOnPossibleDataLoss>True</BlockOnPossibleDataLoss>
    <DropObjectsNotInSource>True</DropObjectsNotInSource>
  </PropertyGroup>
</Project>
Run Code Online (Sandbox Code Playgroud)

这就是漂移报告的样子:

<?xml version="1.0" encoding="utf-8"?>
<DriftReport xmlns="http://schemas.microsoft.com/sqlserver/dac/DriftReport/2012/02">
  <Additions />
  <Removals />
  <Modifications>
    <Object Name="[AppAcct]" Parent="" Type="SqlUser" />
  </Modifications>
</DriftReport> …
Run Code Online (Sandbox Code Playgroud)

sql-server deployment data-tier-application

8
推荐指数
1
解决办法
1万
查看次数

Visual Studio 2010 部署脚本以错误的顺序创建对象 - 存储过程后触发

我创建了一个视图,该视图从复杂查询中的多个表中进行选择。

  • 由于复杂性,我创建了插入/更新/删除 INSTEAD OF 触发器来处理视图上的这些操作。
  • 我还创建了更新视图的存储过程。

当我构建 VS2010 数据库项目时,SQL 脚本包含以下顺序的 CREATE 命令:(1) 视图,(2) 存储过程,然后 (3) 触发器。

现在,当我运行部署脚本时,出现错误:

*** SQL01268    D:\scripts\vs2010\Database.sql (28494,0).Net SqlClient Data Provider:
Msg 4405, Level 16, State 1, Procedure MyViewSave, Line 18 View or function 'MyView' is
not updatable because the modification affects multiple base tables
Run Code Online (Sandbox Code Playgroud)

如果触发器在存储过程之前创建,就没有问题。

如何确保在存储过程之前创建触发器?

谢谢!

visual-studio deployment sql-server-2008-r2 visual-studio-2010

7
推荐指数
1
解决办法
1313
查看次数

如何简化从 DEV 到 PRO 环境的 SSAS 部署

这是我的问题:在我的公司中,有一个开发人员团队在 DEV 环境(我们称之为 SSSDEV)中的 SSAS 中创建多维数据集、维度(...)。此环境绑定到 DEV 中的 SQL Server 数据库(我们称之为 SQDEV)。我的工作是将他们的工作从 DEV 环境部署到 PRO 环境。此 PRO 环境 (SSASPRO) 基于另一个 SQL Server 数据库 (SQPRO)。

现在,开发团队编写 SSAS 脚本,将 XMLA 脚本发送给我,我需要更改此 XMLA 中定义的每个安全规则和指定的连接字符串(安全规则,因为它基于不同的角色,具体取决于环境和连接字符串,因为SQL Server 数据库)。每次部署都是一项繁重的工作,所以我想将其自动化。

我找到的唯一方法是

(1) - 编写 DEV 多维数据集的脚本并在 PRO 上应用 XMLA(现在已完成)。

(2) - 同步多维数据集(这意味着取消处理、重新应用安全规则和修改连接字符串)。

我无法想象全世界只有我一个人遇到这种情况!有没有人给我提示或提示?是否存在另一种最简单的方法而我错过了它?我的实习组织(每个环境都有不同的数据库)对 SSAS 不合逻辑吗?

我使用 SSAS 2008R2 和 2012

非常感谢您的回复!

sql-server ssas deployment

7
推荐指数
1
解决办法
1万
查看次数

通过备份将 SQL Server 数据库部署到生产服务器是否有任何问题?

这是一个稍微复杂的问题,因为我已经假设所描述的场景是错误的。

DBA 正在部署我编写的应用程序,其中包含一个 MS SQL Server 2008 数据库。他让我从我的开发机器上获取数据库备份,以便他可以将其恢复到生产服务器,从而部署它。这是一个全新的部署,因此没有要迁移的现有数据。我期待提供一个 DDL 脚本,我已经努力测试并确保它包含所需的一切。如果我在 SSMS 中执行它,则一键创建数据库。

对我来说,使用备份工具进行部署似乎不太合适,但如果不是 SQL Server 专家,我想不出不这样做的充分理由。例如,我会认为开发机器会对数据库造成一些“污染”——可能是计算机名称、目录结构或存储在某处的用户名。是这种情况,还是备份和恢复是一种有效的部署技术?

sql-server deployment sql-server-2008-r2

7
推荐指数
2
解决办法
1030
查看次数