小编Mur*_*han的帖子

更改生产环境中 SQL 数据库的排序规则以最大程度地减少停机时间

我们有一个场景,我们希望将生产数据库(包括列)的排序规则从 SQL_Scandinavian_Pref_CP850_CI_AS 更改为 Finnish_Swedish_CI_AS。我们已经开发了脚本来做到这一点。但是在超过 100GB 的大型数据库中执行此脚本将需要相当长的时间,而且我们不能承受很长时间的停机时间。因此,我们决定使用以下策略来减少停机时间:

  1. 我们将设置事务复制,我们将使用数据库备份方法初始化订阅者。
  2. 发布者数据库将与应用程序一起使用,其事务将通过事务复制传递到订阅者数据库。
  3. 我们将在订阅者端执行排序规则更改脚本,当 SQL Server 对发布者和订阅者数据库相同时,它确实允许我们执行此脚本。我们最近在 SQL Server 2019 中发现了这一点。
  4. 现在,痛点是,当 varchar、char 列的数据包含诸如“åÅääÄöÖ”之类的特殊字符时,它无法正确复制。在订阅者方面,我们收到了像“†„Ž”™“这样的奇怪字符

您能否建议我们如何解决此错误或任何替代架构,以在更改数据库排序规则(包括列)时最大限度地减少生产停机时间?

此外,我的排序规则更改脚本正在订阅者数据库上执行以下任务以更改其排序规则:

  1. 删除外键约束
  2. 删除包括主键在内的索引
  3. 删除检查和默认约束
  4. 删除用户统计
  5. 删除视图、计算列、SP 以解决对象绑定错误
  6. 执行上述步骤后,表已准备好进行整理更改。因此,脚本将一一更改每个表的列的排序规则。
  7. 成功执行第 6 步后,重新创建上面列出的约束。

sql-server collation transactional-replication

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

如何知道哪个应用程序或用户将 SQL Server 数据库置于单用户模式

就我而言,有一个由多个团队使用的 SQL Server 数据库。数据库突然进入单用户模式。现在,如何识别执行此操作的负责用户或应用程序?它也可以是一个应用程序。

如果现在不可能,那么将来该怎么做才能捕获这些信息呢?

sql-server locking

7
推荐指数
3
解决办法
2519
查看次数