我通过 Windows Update 将现有的 SQL Server 2005 Reporting Services 实例更新为 SP2。现在,当我打开报告管理器时,我收到消息“用户‘Report Server (Sandbox)’登录失败。(rsRPCError)”。
“Report Server (Sandbox)” 是我的 Report Server 用来连接其内部管理数据库(也称为“Report Server (Sandbox)”)的 SQL Server 登录名。Reporting Services 之前可以成功连接。该帐户的密码没有更改;我可以通过 sqlcmd 等方式使用其名称和密码成功连接。
当我运行 Reporting Services 配置管理器并检查数据库连接页面(在数据库设置上)时,一切看起来都很好。报告的数据库版本是 C.0.8.40。我曾尝试摆弄凭据以促使它们以某种方式“重置”。这似乎没有帮助,但该工具一直提示我升级数据库。(我一直告诉它继续。)
怎么回事?我需要彻底清除并重新安装此报告服务器(或至少是其数据库)吗?我想这不会是一件可怕的事情——反正它目前已经坏了,而且我们所有的报告定义都经过整理和源代码控制,以便于重建/重新部署。不过,我还是害怕再次为所有这些事情烦恼。
答案1
最终发现这是数据库版本不匹配的问题,而不是“登录失败”消息所指示的身份验证/授权问题。
我发现数据库版本升级程序中有一个错误:它发出的脚本没有正确引用数据库名称,因此对于像我这样的数据库名称,这些名称往往有很多空格等,它会发出类似USE Report Server (Sandbox)TempDB
(而不是USE [Report Server (Sandbox)TempDB]
) 的语句,升级会失败。解决办法是让工具发出升级脚本,手动修复它,然后自己应用它。请参阅http://www.eggheadcafe.com/software/aspnet/30860451/database-problem.aspx
这里还有一些提示:
- 当配置管理器在页面底部向您提供“消息”时,您可以单击某条消息以查看更多详细信息。(没有任何线索可以提示您这一事实;我花了很长时间才意识到,只要我神奇地单击一些不邀请单击的内容,该工具就会向我解释数据库已过期。)
- 当您要求它为您生成升级脚本时(单击“脚本…”按钮,然后单击左侧的“升级数据库脚本”),它会提示您输入“服务器版本”。这实际上是在要求输入与您尝试升级的数据库版本相对应的 SQL Server Reporting Services 版本,这是一件很尴尬的事情。似乎数据库版本 C.0.8.40 对应于 Reporting Services 2005,而数据库版本 C.0.8.43 对应于 Reporting Services 2005 SP1。(C.0.8.54 对应于 Reporting Services 2005 SP2。)
- 生成的脚本似乎对部分应用的更新相当稳健,但另一方面,它会很乐意部分更新您的数据库版本。因此,您最好采取预防措施,例如在运行更新脚本之前在内部数据库中开始和提交简单的标记(命名)事务(以便在出现问题时更轻松地进行时间点恢复)、将整个脚本包装在
BEGIN TRAN
/中COMMIT TRAN
并使用 运行它sqlcmd -b
等。