【发布时间】:2011-08-29 15:16:51
【问题描述】:
虽然这听起来像是初学者的 101 问题,但我认为它有点复杂。
我有两个 SQL Server 实例,一个是用于报告目的的主数据库的日志传送只读/备用副本。
它们都是 64 位 SQL 2005,SP3。
LogShipped 实例为:9.00.4035.00(标准版) 原始实例为:主动/被动集群中的 9.00.4035.00(企业版)。
两者的服务器排序规则都是 Latin1_General_CI_AI,它们都在 Server 2003 64 位上运行。
我有一个查询在主数据库服务器上运行和执行良好,但它在备用/只读副本上失败,并将 nvarchar 转换为 int。
代码是相同的,我从主实例查询窗口复制并粘贴它只是为了仔细检查。
SQL Server 中的某个地方是否存在错误?如果需要,我可以粘贴查询(它是带有一些内联表的沼泽标准选择)
只是不明白为什么它可以在日志传送的副本上失败。
非常感谢任何指针。
-- 编辑
我找到了罪魁祸首..事务日志数据库包含不在主数据库中的无效数据..为什么他们不同步我还不知道,因为事务日志传送仍在工作并且我有工作历史中没有错误。
只有少数无效的孤立记录不在主数据库中..多么奇怪
【问题讨论】:
-
一般来说,这个错误听起来你可能在 2 个不同的实例上得到不同的执行计划。在其中一个中,它可能在过滤器之前执行强制转换,而在另一个中,在强制转换之前执行过滤器。错误消息本身很奇怪,因为
select cast(N'' as int)为我返回0。你能在有问题的实例上测试它为你返回什么吗? -
嘿,select cast(N'' as int) 在两个实例上都返回 0。我现在看看生成的执行计划..
-
嘿.. 相同的执行计划,但两个数据库中的数据不一样.. 好像它们已经不同步了!我将调查为什么 stanbdy 数据库是错误的,但在日志传送中没有错误。感谢您的帮助:)
标签: sql sql-server-2005