首页 > 解决方案 > 如何在大型 SQL Server 数据库中更改 xsd 架构而不发生大规模中断

问题描述

我承担了向 Web 应用程序添加功能的任务,我添加的功能需要修改定义 XML 模式的 xsd 文档。我添加了一些新的可选元素等。

新模式向后兼容旧模式,这意味着现在在旧模式下的数据库中的所有内容在新模式下都是有效的(新的东西是可选的)。

我们使用 DACPAC 样式部署将其部署到一些小型环境中,并且没有任何问题。

现在,我们正在尝试针对 prodlike 数据集进行部署,这非常有问题。dacpac 需要花费大量时间。就像几天一样 - 我需要把它缩短到一两个小时。

有谁知道是否有办法解决这类问题?

如果我知道模式是兼容的,有没有办法只是“告诉”ssms,这样它就可以在不检查所有内容的情况下编辑模式?

如果做不到这一点,有没有一种方法可以在没有大量验证的情况下将类型化的 XML 列转换为非类型化的 XML 列?为了澄清,我不能这样做:

Alter Table [Schema].[Table]
alter column [XmlCol] xml
;

因为我明白了:

Msg 5074, Level 16, State 1, Line 4
The object 'DF_Table_XmlCol' is dependent on column 'XmlCol'.
Msg 5074, Level 16, State 1, Line 4
The index 'IX_Table_OtherId_SomeFlag' is dependent on column 'XmlCol'.
Msg 4922, Level 16, State 9, Line 4
ALTER TABLE ALTER COLUMN XmlCol failed because one or more objects access this column.

有人告诉我,即使我确实放弃了这些约束,SSMS 仍然需要永远将类型化的 XML 更改为非类型化的 XML 列......

还有其他想法吗?

编辑:似乎删除索引,将类型化的 XML 转换为非类型化的 XML,然后重新添加索引比预期的要快 - 大约需要一分钟。当 DACPAC 进行类似的更改时,一张桌子需要几个小时。我计划尽快测试从无类型到有类型的变化,但我仍然很好奇其他人是如何处理这些问题的……除了不在数据库中使用 XML,这完全是 rad如果这是绿地。

标签: sqlsql-serverxmlssmsxdt

解决方案


推荐阅读