如何在没有大量中断的情况下更改大型SQL Server数据库中的xsd架构

时间:2018-04-26 00:08:43

标签: sql sql-server xml ssms xdt

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

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

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

现在,我们正在尝试针对一个类似于prod的数据集进行部署,这是非常有问题的。 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如果这是绿地。

0 个答案:

没有答案