我正在SQL 2008 R2框上恢复SQL 2000用户数据库,但有时我收到以下错误。这是SQL日志。
22/11/2010 09:32:00 | SPID61 |启动数据库'DB_OPP_P_2'。
22/11/2010 09:32:00 | SPID61 |该 数据库'DB_OPP_P_2'已标记 恢复并处于这样的状态 不允许恢复运行。
22/11/2010 09:32:33 | SPID61 |启动数据库'DB_OPP_P_2'。
22/11/2010 09:32:33 | SPID61 |恢复正在数据库'DB_OPP_P_2'中写入检查点(51)。 这仅是一条信息性消息。无需用户操作。
22/11/2010 09:32:36 | SPID61 |错误:928,严重性:20,状态:1。
22/11/2010 09:32:36 | SPID61 |在升级期间,数据库引发异常156,严重性为25, 状态1,地址0000000002225A9F。使用例外号码确定原因。
由于它显示了升级阶段发生的异常,我相信它在恢复百分比达到100%后发生。
我已经实现了此恢复的脚本重试,并且它尝试了5次失败。但是,如果我使用相同的还原脚本手动重试,则还原完成。我在源代码上运行了DBCC CHECKDB,并且没有返回任何错误。
数据库的兼容级别为80(sql 2000),版本为539。
在有问题的数据库上运行升级顾问时,我看到27个带有旧外连接的对象sintax * =,= *
不幸的是,我无法改变触发器以检查这是否是罪魁祸首。 另一种可能性是有很多过程没有BEGIN和END分隔它的扩展,如果我在批处理中创建它们会混淆SQL。
更新
重试行为失败。但奇怪的是,如果我使用相同的恢复脚本重试,则尝试恢复成功。
更新2: 我在迁移到sql 2008 r2时手动恢复了数据库。 所以我没有解决这个问题,并且不会修复它,因为在sql 2008 r2上这不会发生。 谢谢你的帮助。
答案 0 :(得分:1)
检查SQL Server 2000中数据库的兼容性:它们是65吗?
错误156基本上是不正确的语法,而且通常是由兼容性不匹配引起的。 SQL Server 2008不支持“65”
您是否在备份/恢复前尝试upgrade advisor?
编辑:
外部加入。嗯
注意到SQL Server 2005 it's discontinued而是SQL Server 2008 it's deprecated。我的猜测是,无论升级顾问和MSDN说什么,*0
和0*
语法都会破坏。我个人从未使用它,呃,我从6.5 ...
答案 1 :(得分:0)
我在迁移到sql 2008 r2时手动恢复了数据库。
所以我没有解决这个问题,并且不会修复它,因为我已经转移到sql 2008 r2并且这不再发生了。
非常感谢您的帮助。