如何从损坏的数据库导出SQL Server数据(带有磁盘写入错误)

IT意识到我们的生产SQL Server 2005出现磁盘写入错误,导致备份失败。 当他们意识到这一点时,夜间备份是旧的,所以无法在另一台服务器上恢复备份。

数据库仍在运行并不断使用。 但是DBCC CheckDB失败。 此外,SQL Server备份任务失败,复制数据库失败,导出数据向导失败。 但是,似乎所有的数据可以从表中读取(即使用bcp等)

我所做的另一个观察是事务日志几乎是数据库大小的两倍。 (这是否意味着所有的变化都不被写入MDF?)

将数据库置于备份工作状态并保证数据安全的最佳攻击计划是什么?

  • 使数据库脱机,并使用MDF / LDF以某种方式在另一个SQL Server上创build数据库?
  • 使用bcp从数据库导出数据。 在另一个sql server上创build数据库(在损坏的数据库上使用“生成脚本”function在新数据库上创build模式),然后再次使用bcp导入数据。
  • 在这种情况下,其他一些select是否正确?

IT经理说,数据是安全的,就好像服务器发生故障一样,数据可以从mdf / ldf中恢复。 我不确定如此坚持,我们每天晚上开始导出数据作为故障安全(例如使用bcp)。

IT在硬件方面也存在问题,如虚拟磁盘上的磁盘错误,不能像正常的RAIDarrays(或类似的东西)重build。

请原谅我使用不正确的术语和不正确的假设如何运行Sql Server。 我是应用程序开发人员,并且已经被调用来帮助(因为它似乎比我更less了解SQL Server)。

非常感谢,阿米特

DBBC CheckDB的结果:

Msg 1823, Level 16, State 2, Line 1 A database snapshot cannot be created because it failed to start. Msg 7928, Level 16, State 1, Line 1 The database snapshot for online checks could not be created. Either the reason is given in a previous error or one of the underlying volumes does not support sparse files or alternate streams. Attempting to get exclusive access to run checks offline. Msg 5030, Level 16, State 12, Line 1 The database could not be exclusively locked to perform the operation. Msg 7926, Level 16, State 1, Line 1 Check statement aborted. The database could not be checked as a database snapshot could not be created and the database or table could not be locked. See Books Online for details of when this behavior is expected and what workarounds exist. Also see previous errors for more details. Msg 823, Level 24, State 3, Line 1 The operating system returned error 1(error not found) to SQL Server during a write at offset 0x00000674706000 in file 'G:\AX40_Dynamics_Live.mdf'. Additional messages in the SQL Server error log and system event log may provide more detail. This is a severe system-level error condition that threatens database integrity and must be corrected immediately. Complete a full database consistency check (DBCC CHECKDB). This error can be caused by many factors; for more information, see SQL Server Books Online. 

首先,真的非常小心 – 你不想让事情变得更糟。 我强烈build议咨询Microsoft产品支持(您必须付钱),聘请专家,或从Paul Randal在线查看相关内容。

你提到有一个旧的备份…..你有没有尝试备份事务日志(GUIpipe理工作室允许你轻松地做到这一点),然后恢复旧的备份和这个新的事务日志备份 – 一个新的,备份服务器?

  • 消防IT。 显然无能。

  • 尝试删除并重新创build所有索引。 如果所有数据都是可重写的,写入错误必须在索引中 – 您可以“解决它”。

  • LDF较大的MDF意味着日志可能不会备份。 鉴于ITpipe理员performance出的无能,这很有可能。

  • IT经理不知道他在说什么。 如果服务器出现故障,则无法保证在没有外部工具的情况下,mdf / ldf仍然可以被修改(阅读:可能是很多钱)。 这是不太可能的,但IT经理应该知道他目前对公司有风险。 那么,他明显地雇佣了IT。

尝试使用dbcc checkdb,在此发布结果,以便我们可以帮助您。

  • 检查你的数据库是否是最新的(补丁程序明智的)。

该DBCC输出看起来像不能独占访问数据库,所以它拒绝运行。 如果要将所有人都从数据库中移出,以便实际运行,请使用以下命令:

 ALTER DATABASE database_name SET SINGLE_USER WITH ROLLBACK IMMEDIATE 

一旦你这样做了,DBCC CHECKDB应该愿意合作。 完成后,将数据库恢复为多用户模式:

 ALTER DATABASE database_name SET MULTI_USER 

我build议做的第一件事是使应用程序脱机并运行checkdb以确保数据库没有损坏。 如果不是,那么事情正在抬头。 如果是这样的话,我们需要弄清楚是多么的腐败,并且能够恢复我们所能得到的数据。

为了让checkdb立即运行,您需要将数据库置于单用户模式,然后为每个数据库运行dbcc checkdb。

尝试尝试手动运行数据库备份时会发生什么?

基于这是dynamic的(而且它运行着你的业务)的事实,你可能想要花钱,让PSS通过电话或者SQL顾问来查看(即使是一个SQL顾问,你仍然可以调用PSS) 。

至于标题中的实际问题,你不想只导出数据并重新导入。 赔率是不会被支持的。