当SQL Server快照代理创建快照(用于事务复制)时,会出现一堆.PRE,.SCH,.BCP和.IDX文件,通常以对象名称,序列号和部件号为前缀。像MY_TABLE_1#1.bcp一样MY_TABLE。
但是当表名比MY_TABLE_IS_LONG稍长时,它可以将文件命名为MY_TABLE_IS_LO890be30c_1#1。
我想手动处理其中一些文件(即抓取快照并自行处理BCP),但这需要表的全名,而我无法找到创建该十六进制数的位置或者存储。它们似乎不是一个直接的object_id,我检查了分发和发布数据库中的各种支持表,其中表有objid和sycobjid,它们都不是(在将十六进制转换为十进制之后)。
有谁知道这个号码来自哪里?它必须在某个地方。
答案 0 :(得分:0)
看起来他们只是随机的。会发生什么情况是生成快照时,会将一组命令放入分发数据库(您可以使用EXEC sp_browsereplcmds查看它们),这些命令具有硬编码的表名以及脚本名称,以及运行它们的顺序。
当您第一次运行分发代理时,它会获取这些复制的命令,并指示它运行所有脚本(或者,如果您将其设置为仅支持复制,我怀疑这些命令只是忽略)。
为了半自动处理脚本,您需要从replcmds中获取所有内容(希望在安静的系统上)并在手动运行之前解析命令。