我们的多租户Orchard CMS刚刚倒闭。之后我们通过恢复数据库版本,然后回收应用程序池使其重新联机。在我们回收应用程序池之前,与已还原的数据库通信仍然失败。
来自昨天的错误日志的事后分析没有错误,而今天的错误日志有大约四十个错误,具有以下模式:
SqlException
错误报告"无效登录"两个租户数据库。SqlException
错误报告"无效的对象名称"。SqlException
错误报告"无效登录"对于两个租户数据库。无效对象为Scheduling_ScheduleTaskRecord
,Awaiting_ActivityRecord
和Orchard_AliasRecord
。恢复数据库并回收应用程序池后,所有租户都将重新启动并运行。
我们没有做过任何特别不寻常的事情(例如没有更改密码/防火墙规则)来解决错误。
好像有什么东西攻击了网站,中断了登录,然后开始删除表格(或类似的东西)。可能涉及Workflows,因为无效对象似乎与Workflow相关,但我们没有在我们的网站上明确设置任何工作流。
我没有其他问题,"为什么会这样?"
修改1 以下是完整日志的链接:https://docs.google.com/file/d/0B4X0N4NlUl4mOHhWV2JwN1c0Uzg/edit?pli=1
编辑2 您能否详细说明"开始删除表格?" 是的。在一系列SqlExceptions
之后,由于登录失败,我们无法打开数据库,因此我们开始收到报告无效对象名称的新SqlException
。对我来说,无效的对象名称错误意味着Orchard认为表格应该存在并且不存在。例如:
Could not execute query:
select aliasrecor0_.Id as Id379_,
aliasrecor0_.Path as Path379_,
aliasrecor0_.RouteValues as RouteVal3_379_,
aliasrecor0_.Source as Source379_,
aliasrecor0_.Action_id as Action5_379_
from Orchard_Alias_AliasRecord aliasrecor0_
where aliasrecor0_.Id>@p0
order by aliasrecor0_.Id asc
System.Data.SqlClient.SqlException (0x80131904):
Invalid object name 'Orchard_Alias_AliasRecord'.
对我而言,Orchard_Alias_AliasRecord
表是基本的,它缺失是一件奇怪的事情。为什么SqlException首先说我们可以访问数据库,然后说基本表是无效的?我最好的猜测是有些东西放弃了一些桌子。还有什么呢?
编辑3 您确实丢失了数据吗?我不确定。我是该公司的顾问,并且在该网站出现故障后,我们还没有查看数据库的状态。我帮助将网站重新上线,然后点击,因为我感到头疼。
编辑4 为什么您认为可能涉及工作流?我认为可能涉及工作流,因为其中两个无效对象是Scheduling_ScheduleTaskRecord
和{{ 1}}。虽然我不熟悉工作流程,但这些似乎与自动化任务有关,我认为工作流程涉及自动化的计划任务。这是一个很长的猜测。
编辑5 什么是"无效的对象"?它们如何无效?
Awaiting_ActivityRecord
,Scheduling_ScheduleTaskRecord
和Awaiting_ActivityRecord
我不确定它们是如何无效的。通常这意味着它们不存在或处于不同的数据库模式中。由于我们正在使用多租户,因此Orchard 应该正在寻找带有前缀的表。我没有看到日志文件中的任何其他提示。他们告诉我的只是Orchard_AliasRecord
。奇怪的是,在我们将数据库恢复到早期版本之后,错误停止了,这表明Orchard停止查询这些表或者表以某种方式再次变为有效。