none
SQl 2008 R2 对临时表插入数据时报605错误 RRS feed

  • 问题

  • 环境:虚拟机Win2008 R2; SQL2008 R2

    症状:有一个数据库在更新临时表时报605错误,级别21,其他数据库无此问题。

    1、使用DBCC CHECKDB未发现数据库有损坏。

    2、分别执行创建临时表,更新临时表,在执行第二个insert into #xxxx select ..... 报错为临时表不存在。

    3、三句一起执行(包括一句Creattable两句insert - select)报605错误,并断开当前数据库的连接。

    查了相关补丁找到Bug: # 50003826,但是我的SQL版本为

    Microsoft SQL Server Management Studio 10.50.1617.0
    Microsoft Analysis Services 客户端工具 10.50.1617.0
    Microsoft 数据访问组件 (MDAC) 6.1.7600.16385
    Microsoft MSXML 3.0 4.0 6.0 
    Microsoft Internet Explorer 8.0.7600.16385
    Microsoft .NET Framework 2.0.50727.4971
    操作系统 6.1.7600

    实际已经高于此修复更新的版本,不知此问题如何解决?

    2014年3月25日 9:17

答案

全部回复

  • 看到有人在2008 R2 中也遇到过这个问题,但是没有微软的官方说明。不过可以使用2008的解决办法:要变通解决此问题,添加具有聚集的主键,并为临时表的标识属性的列。 例如对于运行以下语句来更改临时表:

    ALTER TABLE #TempTable
    ADD id integer IDENTITY(1,1) CONSTRAINT id PRIMARY KEY CLUSTERED

    Please Mark As Answer if it is helpful.

    2014年3月25日 12:39
  • 请问LZ能select出表数据吗?

    如果能select出表数据没有问题的话按道理是不会报错的,除非你的业务数据库已经损坏,数据select不出来

    自然创建不出临时表

    2014年3月25日 13:17
  • Msg 605, Level 21, State 3, Line 1 
    Attempt to fetch logical page (1:225) in database 2 failed. It belongs to allocation unit 281474980315136 not to 504403158513025024.

    这个错误?

    如果是tempdb,那么重启下SQL Server应该就会好了吧。。



    If you haven't all the things you want,be grateful for the things you don't have that you didn't want.


    • 已编辑 Wison-Ho 2014年3月26日 0:06
    2014年3月26日 0:04
  • 所有的有关联的事实表都是没有问题的,DBCC Checktable都检查过,创建临时表时没有问题,第一次更新时也没有问题,第二次更新时临时表突然就不存在了,在一个会话里。
    2014年3月26日 6:03
  • 看到有人在2008 R2 中也遇到过这个问题,但是没有微软的官方说明。不过可以使用2008的解决办法:要变通解决此问题,添加具有聚集的主键,并为临时表的标识属性的列。 例如对于运行以下语句来更改临时表:

    ALTER TABLE #TempTable
    ADD id integer IDENTITY(1,1) CONSTRAINT id PRIMARY KEY CLUSTERED

    Please Mark As Answer if it is helpful.

    不能使用替代法,因为这个过程写死在应用程序里,我只是跟踪出SQL语句查看问题。
    2014年3月26日 6:05
  • 请问LZ能select出表数据吗?

    如果能select出表数据没有问题的话按道理是不会报错的,除非你的业务数据库已经损坏,数据select不出来

    自然创建不出临时表

    所有的有关联的事实表都是没有问题的,DBCC Checktable都检查过,创建临时表时没有问题,第一次更新时也没有问题,第二次更新时临时表突然就不存在了,在一个会话里。
    2014年3月26日 6:05
  • LZ的系统是BI系统?
    2014年3月26日 6:08
  • 请问LZ能select出表数据吗?

    如果能select出表数据没有问题的话按道理是不会报错的,除非你的业务数据库已经损坏,数据select不出来

    自然创建不出临时表

    所有的有关联的事实表都是没有问题的,DBCC Checktable都检查过,创建临时表时没有问题,第一次更新时也没有问题,第二次更新时临时表突然就不存在了,在一个会话里。
    Do you access same temp table in single session? Local temp table is only available for session that created it.
    2014年3月26日 13:50
  • 您好,
    之前有客户也是遇到相同的问题,
    解法是修改SQL,针对建立的临时表加入聚簇索引
    如果没办法修改SQL的话,请试着将TempDB的File 改到别的磁碟。

    [SQL]Msg 605, Level 21, State 3


    亂馬客blog: http://www.dotblogs.com.tw/rainmaker/



    2014年3月27日 5:24
  • BUG

    http://support.microsoft.com/kb/960770/zh-cn

    遭遇过了, 虽然这个是古老的文档了,但是解决方法管用, 不知道为什么这么久了一直修不好

    2014年3月28日 2:28