在不使用 bacpac 或离线的情况下更改现有 Microsoft SQL Azure 数据库的排序规则

问题描述 投票:0回答:1

正如上面的问题所述,我需要将排序规则从

SQL_Latin1_General_CP1_CI_AS
更改为
Latin1_General_100_CI_AS_SC_UTF8

我已经能够通过搜索测试 8g db 来实现 bacpac 方法解决方案。但是,我们有一个 500g 的产品数据库,因此不可能出现此停机,因为我们估计可能需要 24-48 小时才能正常完成。有什么方法可以在不使用 bacpac 的情况下做到这一点?这有点令人沮丧,因为 MsSQL 允许下面这样做:

ALTER DATABASE xxxxxx SET SINGLE_USER WITH ROLLBACK IMMEDIATE; 

ALTER DATABASE xxxxxx COLLATE Latin1_General_100_CI_AS_SC_UTF8

ALTER DATABASE xxxxxx SET MULTI_USER;

如果有人有任何事情 - 我唯一的想法是如果可能的话以某种方式在 Azure 中使用复制,但不太了解是否要走这条路

sql-server azure
1个回答
0
投票

根据 MS 文档

您无法更改或设置 Azure SQL 数据库上的逻辑服务器排序规则,但可以为数据和目录配置每个数据库的排序规则。目录排序规则确定系统元数据(例如对象标识符)的排序规则。当您在 Azure 门户中创建数据库、在 T-SQL 中使用CREATE DATABASE、在 PowerShell 中使用New-AzSqlDatabase时,可以独立指定这两种排序规则。

更改现有数据库排序规则的唯一方法是使用 BACPAC 文件作为解决方法。 Azure SQL 数据库不支持您提供的

ALTER DATABASE COLLATE
语句。

为了减少停机时间,您需要复制数据库并更改其排序规则并恢复它并再次将其重命名为以前的名称,您可以按照@Mousa Janini 给出的以下方法进行操作:

  • 将数据库复制到同一服务器上的更高服务层。
    enter image description here
  • 使用SQLPackage将数据库导出到bacpac。
  • 通过修改 model.xml 文件来更改排序规则。
  • 使用 SQLPackage 并覆盖 model.xml 路径,再次将数据库导入到更高的服务层。
  • 更改数据库名称。

欲了解详细信息请参阅此文档

© www.soinside.com 2019 - 2024. All rights reserved.