今天接到客户电话,说操作数据无法保存。经过分析,发现他的数据库已经有5G多的大小,而最终发现有张表的索引出错了,用DBCC CHECK也无力回天。
每次用select * from ln003082 语句查询,都报如下错误:
服务器: 消息 605,级别 21,状态 1,行 1
试图从数据库 'ln_fl0125' 中提取的逻辑页 (1:629904) 属于对象 '869578136',而非对象 'LN003082'。
连接中断
没办法,只能想办法恢复了。还好有几位老手在身边。于是通如以下步骤勉强恢复有效数据,当然,有部份单子数据是丢失了。只能叫客户再去补了。
首先要确定哪些数据回不来了,通过游标来一一确定哪些数据无效了。
declare @bill_no varchar(20)
declare @shop_no varchar(20)
DECLARE @QTY INT
DECLARE terminal_changecursor CURSOR FOR
select bill_no,shop_no from terminal_change
group by shop_no,bill_no
ORDER by shop_no,bill_no
OPEN terminal_changecursor
FETCH NEXT FROM terminal_changecursor into @bill_no ,@shop_no
WHILE @@FETCH_STATUS = 0
BEGIN
FETCH NEXT FROM terminal_changecursor into @bill_no ,@shop_no
PRINT @bill_no +'-'+@shop_no
IF NOT (
(@bill_no='MB10010033' AND @shop_no = 'P9ZT') OR
(@bill_no='MT90910001' AND @shop_no = 'P9ZT') OR
(@bill_no='MT00110002' AND @shop_no = 'P10D') OR
(@bill_no='MB10010034' AND @shop_no = 'P9ZT') OR
(@bill_no='MB10010035' AND @shop_no = 'P9ZT')
)
select @QTY=sum(bill_qty) from LN003082 WHERE bill_no=@bill_no AND shop_no=@shop_no
ENDEND
DEALLOCATE terminal_changecursor
GO
通过上面的语句,可以查到哪些单号的数据出了问题。用IF跳过有问题的数据,当select sum通过游标查询时,如果有问题的数据,就会停下来中断,根据print出来的单号,将其加入下次IF中,这个步骤很枯燥。不过一般不会出现过多丢失的数据,也只能这样一一确定了。
接下来就是根据查询出来有问题的数据,进行过滤恢复了。
恢复方法脚本如下:
主要有3步。
--说明:终端变动数据表坏了,丢失五张数据,请通知重传
--1。重建表LN003082为LN003082_new,用于转移有效数据
select * into LN003082_new from LN003082 where 1=2
GO
CREATE INDEX [IX_TERMINAL_CHANGE_BILL_NO] ON [dbo].[LN003082_new]([BILL_NO], [SHOP_NO]) ON [PRIMARY]
GO
CREATE INDEX [R_TC_GOODS_FK] ON [dbo].[LN003082_new]([GOODS_NO]) ON [PRIMARY]
GO
CREATE INDEX [R_TC_SHOP_FK] ON [dbo].[LN003082_new]([SHOP_NO]) ON [PRIMARY]
GO
CREATE INDEX [IX_TERMINAL_CHANGE_VALID_DATE] ON [dbo].[LN003082_new]([VALID_DATE]) ON [PRIMARY]
GO
CREATE INDEX [IX_TERMINAL_CHANGE] ON [dbo].[LN003082_new]([ACC_VALID_DATE]) ON [PRIMARY]
GO
CREATE INDEX [IX_TERMINAL_CHANGE_INTER_BILLNO] ON [dbo].[LN003082_new]([INTER_BILLNO], [SHOP_NO]) ON [PRIMARY]
GO
--2。将有效数据导入LN003082_new
declare @bill_no varchar(20)
declare @shop_no varchar(20)
DECLARE @QTY INT
DECLARE terminal_changecursor CURSOR FOR
select bill_no,shop_no from terminal_change
group by shop_no,bill_no
ORDER by shop_no,bill_no
OPEN terminal_changecursor
FETCH NEXT FROM terminal_changecursor into @bill_no ,@shop_no
WHILE @@FETCH_STATUS = 0
BEGIN
FETCH NEXT FROM terminal_changecursor into @bill_no ,@shop_no
IF NOT (
(@bill_no='MB10010033' AND @shop_no = 'P9ZT') OR
(@bill_no='MT90910001' AND @shop_no = 'P9ZT') OR
(@bill_no='MT00110002' AND @shop_no = 'P10D') OR
(@bill_no='MB10010034' AND @shop_no = 'P9ZT') OR
(@bill_no='MB10010035' AND @shop_no = 'P9ZT')
)
INSERT INTO LN003082_new SELECT * FROM LN003082 WHERE bill_no=@bill_no AND shop_no=@shop_no
END
DEALLOCATE terminal_changecursor
GO
--3。将转移好数据的表改名为LN003082
exec sp_rename 'LN003082','LN003082olderror'
exec sp_rename 'LN003082_new','LN003082'
===================================================
转帖:http://blog.csdn.net/cswangbin/archive/2010/01/26/5258276.aspx
分享到:
相关推荐
### SQLSERVER无数据库日志文件恢复数据库方法 在SQL Server环境中,当遇到丢失数据库日志文件(.ldf)的情况时,数据恢复成为一个极其敏感且技术性较强的问题。本篇文章将详细阐述两种实用的方法来应对这种情况,...
《SQL数据库备份恢复助手》完全免费、纯“绿色化”、无需安装、操作便捷,完美支持本地/局域网(远程)数据库自动/手动备份。可自由组合的无限复合式备份任务,支持备份文件ZIP压缩后通过Lan/Ftp/Email传输存储,Email...
本文将深入探讨如何利用SQL数据库进行批量备份和恢复操作,这对于预防数据丢失、系统维护以及灾难恢复都有着关键作用。 首先,我们要理解SQL数据库批量备份的概念。批量备份是指一次性对多个数据库进行备份,而不是...
Intouch SQL数据库配置 Intouch SQL数据库配置是指在Intouch系统中对SQL数据库的配置设置,以便实现数据库连接和数据交互。下面是关于Intouch SQL数据库配置的详细知识点: 一、Microsoft SQL Server Management ...
同时,SQL数据库有更完善的备份和恢复机制,如事务日志备份和差异备份,这在Access中可能需要额外的工具或脚本来实现。 总结,Access与SQL数据库之间的转换是一项涉及多步骤的过程,需要了解两者之间的差异和特性。...
SQL数据库备份恢复助手是一款方便易用的sql数据库恢复工具。该软件完全支持本地/局域网(远程)数据库自动/手动备份。用户可以自由组合的无限复合式备份任务,支持备份文件ZIP压缩后通过Lan/Ftp/Email传输存储,...
对于初学者来说,理解SQL数据库编辑器的使用方法是至关重要的,因为这将直接影响到他们的数据库管理能力和工作效率。在实际应用中,掌握如何正确配置连接参数,使用查询工具,以及理解和调整数据库性能指标是必备...
《SQL数据库备份恢复助手详解与应用》 在信息化时代的今天,数据的重要性不言而喻,尤其是在企业运营中,数据的安全性和可恢复性是至关重要的。SQL数据库作为广泛应用的数据存储平台,其备份与恢复策略显得尤为关键...
SQL数据库的稳定性和安全性至关重要,因此,理解并掌握SQL数据库的修复、备份、恢复、附加和分离等操作是每个数据库管理员或IT专业人员必备的技能。以下是对这些关键概念的详细解释: 1. **SQL数据库修复**: ...
"批量附加SQL数据库v3.2"工具正是为了解决这个问题而设计的。 批量附加SQL数据库是一种实用工具,它允许用户一次性附加多个MDF(主数据文件)和LDF(日志文件)到SQL Server实例,极大地提高了工作效率。MSSQL...
《SQL数据库备份恢复助手》完全免费、纯“绿色化”、无需安装、操作便捷,完美支持本地/局域网(远程)数据库自动/手动备份。可自由组合的无限复合式备份任务,支持备份文件ZIP压缩后通过Lan/Ftp/Email传输存储,Email...
2. 手动恢复:同样,可以通过SSMS或T-SQL命令恢复数据库,如 `RESTORE DATABASE [DatabaseName] FROM DISK = 'BackupFilePath'`。根据恢复模式和备份类型,可能需要指定WITH NORECOVERY或WITH RECOVERY选项。 总结...
"MS SQL数据库系统备份与恢复"这一主题主要关注如何有效地保护SQL Server中的数据,以防数据丢失或系统故障。 SQL Server提供了多种备份类型,包括完整备份、差异备份、日志备份等,每种都有其特定的应用场景。完整...
开发者只需通过工具连接到数据库,选择相应的表,工具就能根据表结构自动生成对应的实体类代码,包括属性(对应字段)、构造函数、属性访问器(Get和Set方法)等。 C#是.NET框架的主要编程语言,它支持面向对象编程...
这就是“批量附加SQL数据库工具”发挥作用的地方。 批量附加SQL数据库工具是一款专为数据库管理员设计的实用软件,它极大地简化了SQL Server中多个数据库的附加过程。通过自动化处理,该工具能够一次性处理多个...
SQL数据库备份恢复助手提供了手动和自动两种方式,可以满足不同场景下的需求,确保数据的安全。 手动备份允许用户根据特定的时间点或事件进行一次性备份,适用于数据库变动较小或者需要即时备份的情况。而自动备份...
### SQL Server数据库崩溃后的恢复方法 #### 一、引言 在现代企业的信息化管理中,SQL Server作为一种广泛使用的数据库管理系统,其稳定性和安全性至关重要。然而,在实际应用过程中,由于各种原因(如硬件故障、...
这个工具,"批量附加SQL数据库工具V3.2.exe",设计简洁易用,使得数据库的管理和维护变得更加便捷。 首先,我们要理解什么是数据库附加。在SQL Server中,附加数据库是指将已存在但未在当前实例中注册的.mdf(主...
《SQL数据库备份恢复助手》完全免费、纯“绿色化”、无需安装、操作便捷,完美支持本地/局域网(远程)数据库自动/手动备份。可自由组合的无限复合式备份任务,支持备份文件ZIP压缩后通过Lan/Ftp/Email传输存储,Email...
《批量附加SQL数据库工具V3.2:提升数据库管理效率的利器》 在数据库管理领域,SQL Server作为一款广泛使用的数据库管理系统,其高效稳定的性能深受企业和开发者青睐。然而,随着数据库数量的增长,手动附加和管理...