我使用DBCC CLONEDATABASE创建了一个没有任何数据的数据库副本。我现在发现有些模式没有被创建,因此有些对象没有模式。由于它是特定于数据库的,所以很难复制它,例如,我已经成功地克隆了9个,但是有这个问题的一个。所有模式都属于dbo。
因为我无法复制,为什么没有在克隆中创建某些模式,是否有人知道要检查什么,或者是否存在调试dbcc命令的方法?
我正在使用Server 2016 SP2 CU1。
数据库最初是在Server 2005之前创建的。如果在某些对象中使用select name, schema_id, schema_name(schema_id) SchemaName, * From sys.objects,则schema name为null,而schema id不在sys.schemas中。实现了几个表和同义词,我不能在ssms的对象资源管理器中旋转表节点或同义词节点(终止会话错误!)。另外,为了澄清这一点,这只是克隆数据库中的一个问题。我还尝试重新创建同义词并转移表的所有权,但是我发现了一个错误,说找不到表。
发布于 2018-10-10 12:06:54
听起来您在Server 2000中有对象,它们的所有者被删除,使这些对象成为“孤儿”。当数据库升级到任何版本的>= 2005时,“所有者”被更改为schema_id,但是对于那些被删除的所有者,该模式并不存在。
要解决这个问题,您可以创建一组虚拟模式,直到有一个与每个缺失的schema_id相关的模式,然后对每个缺失模式中的每个对象运行如下语句:
ALTER SCHEMA dbo TRANSFER dummy_schema.object_or_synonym;唯一复杂的情况可能是,如果对象具有相同的名称,但具有不同的schema_id值,则这些对象将发生冲突。一旦将其全部整理完毕,就可以删除所有的虚拟模式。
在某个时候,您可能会考虑在现代版本中创建一个新的空数据库,将表和数据复制到它,然后删除旧的数据库。可能会在未来消除更多类似的意外。
https://dba.stackexchange.com/questions/219680
复制相似问题