什么是SQL Server中的syncobj

问题描述 投票:8回答:2

当我运行这个脚本来搜索sys.columns中的特定文本时,我得到了很多像行一样的"dbo.syncobj_0x3934443438443332"

SELECT c.name, s.name + '.' + o.name
FROM sys.columns c
INNER JOIN sys.objects  o ON c.object_id=o.object_id
INNER JOIN sys.schemas  s ON o.schema_id=s.schema_id
WHERE c.name LIKE '%text%'

如果我做对了,它们就是复制对象。是这样吗?我可以像o.name NOT LIKE '%syncobj%'那样将它们从我的查询中抛弃,还是以其他方式?

谢谢。

sql sql-server database-replication sysobjects
2个回答
12
投票

我找到了解决方案。不知道,如果它是最好的一个。

SELECT c.name, s.name + '.' + o.name
FROM sys.columns c
   INNER JOIN sys.objects  o ON c.object_id=o.object_id
   INNER JOIN sys.schemas  s ON o.schema_id=s.schema_id
WHERE c.name LIKE '%text%' AND o.type = 'U'

结果很好。正如我所说,syncobj是复制对象,它们对我们没有意义。它们仅用于复制目的。

http://www.developmentnow.com/g/114_2007_12_0_0_443938/syncobj-views.htm

编辑:

忘记添加,syncobj作为视图存储在DB中,所以如果你需要视图列表,你可能需要像我在我的问题中那样忽略它们。

在检查syncobj和我的视图之间的区别时,唯一的区别是is_ms_shipped列。对于syncobj,它为1,对于其他0。这意味着syncobj视图由系统创建。

附:我会等一段时间,如果没有人给出另一个答案,我会接受我的。


2
投票

创建不包含原始表中的所有字段或其他元数据更改的复制时。如果您从发布中执行生成脚本,它将显示它是如何创建的(请参见下文)。该视图提供了一个在初始快照期间生成bcp提取的对象。

这是一个例子

- 添加文章同步对象exec sp_articleview @publication = N'publication_data',@ article = N'tablename',@ view_name = N'syncobj_0x4239373642443436',@ filter_clause = N'',@ force_invalidate_snapshot = 1,@ force_reinit_subscription = 1 GO

附:我最近遇到了一个问题,当我删除复制时,它无法丢弃这些,然后您必须手动删除系统视图以重用复制脚本。给出错误消息

消息2714,级别16,状态3:数据库中已存在名为“syncobj_0x3437324238353830”的对象。

这导致bcp在快照期间失败。

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