为何我的数据库不可用?

为何我的数据库不可用?

我的服务器上有一个数据库经常不可用。为了解决这个问题,我将其脱机,然后重新联机。查看事件查看器,有三个错误接连出现:

FCB::Open 失败:无法打开文件 C:...\MyDatabase.mdf 中的文件编号 1。操作系统错误:32(该进程无法访问该文件,因为它正在被另一个进程使用。)。

FCB::Open 失败:无法打开文件 C:...\MyDatabase_1.ldf 中的文件编号 2。操作系统错误:32(该进程无法访问该文件,因为它正在被另一个进程使用。)。

发生文件激活错误。物理文件名“C:...\MyDatabase_1.ldf”可能不正确。诊断并更正其他错误,然后重试操作。

查看数据库属性,日志文件路径看起来正确。我并不是一名真正的 DBA,但出于需要我扮演了一个角色。我还应该在这里寻找什么?

(SQL 服务器 2008 Express SP1)

答案1

正如 Randolph 所说,您可能有一个 AV 进程保存着相关文件。要确认这一点,请从 Microsoft 的 Sysinternals 获取 Process Explorer 或 handle.exe(或两者!)。学习并喜欢他们的所有工具。

如果不是 AV,而是其他东西锁定了这些文件,那么请修复它。

另外,顺便说一句,您不希望数据或日志文件位于系统卷上(通常是 C:\ 驱动器)。如果它们填满磁盘,则您的服务器已关闭。您可能希望将它们放在不同的卷上。警告 - 使用 SQL Express,您的最大数据库大小可能低于磁盘上的可用空间量,但您想指望这总是正确的吗?

答案2

我也一直在尝试修复此错误!网络上的各种论坛都没有提供永久修复方法,但在我看来,正确的解决方案是使用进程资源管理器(如 EMCO UnlockIt)来证明当错误发生时,您的网站尝试打开的日志文件或 mdf 文件肯定被 sql server express 阻止(即使您已关闭 sql server express 应用程序)。因此,在您关闭 SQL Server 后,登录网站时仍会收到错误。

我认为这个错误完全正确。没有足够的进程允许访问日志文件或数据库,或两者。如果您在桌面上打开了网站,因此它正在访问数据库,也许其他用户也在尝试这样做(如果您有多个托管网站,甚至可能访问不同的数据库)。那么你至少需要 2 个同时的进程,这是在 SQL Server 保留一个进程之前,因此你需要 3 个进程,当其他用户连接时还需要一个进程,甚至更多。我可能错了,我不是这个主题的专家。但是:-

如果您打开 SQLSERVER EXPRESS 并右键单击根节点,则可以在“高级”选项卡中增加阻塞进程的阈值,还可以增加最大并发连接数。在我看来,这就是解决方案,无论如何,我将阻塞进程的阈值从 0 增加到了 12,到目前为止,它运行良好。也许现在已经很晚了,所以没有太多用户尝试连接,但无论如何,这对我来说似乎是一个明智的解决方案!

祝你好运。Frankie,英国西约克郡利兹

相关内容