数据库损坏和置疑修复方法

  • 格式:doc
  • 大小:73.00 KB
  • 文档页数:5

数据库损坏和置疑修复方法

目录

前言 ................................................................................................................................................................. 1

数据库损坏的常规修复处理方法 ................................................................................................................. 1

数据库损坏的灾难性修复方法—BCP处理方案......................................................................................... 2

数据库置疑的修复处理方法 ......................................................................................................................... 3

前言

Sql Server数据库本身依赖于操作系统、文件读写存储等环境,数据库经常因为操作系统、异常关机、异常终止退出或者SQL Server数据库本身的机制问题均会导致数据库无故损坏,其中数据库损坏的主要原因如下:

1. 事务日志问题。比如事务日志文件丢失;事务日志文件在操作过程中被误删;事务日志文件被损坏以及事务日志文件过大,导致硬盘的空间不足等。

2. 意外掉电或异常强制关机,造成数据文件损坏,主要数据库正在被读写过程中异常关机。

3. 数据库的表被破坏或索引等被破坏,或者数据库的其他对象被破坏或丢失等。

4. 删除了数据文件,或者更改了它的名字。

5. 硬盘损坏,造成数据和日志文件读写错误。

6. 感染病毒或者其他人为因素破坏。

7. 其他文件读写、存储等原因。

数据库损坏的常规修复处理方法

以商业之星7为例:

1. 一般数据库的损坏,修复数据库按如下步骤操作:

--请在查询分析器中执行下列语句.执行前断开其它所有数据库连接,最好是断开网线

--如果不是该数据库名,请将数据库改为要修复的数据库

USE master

Go

--单用户模式

sp_dboption 'hbposv7', 'single user', 'TRUE'

go

--数据库检查

DBCC CHECKDB ('hbposv7')

Go

--如果返回结果出现了红色的提示文字,说明数据库中存在错误,需要修复

--数据库修复

DBCC CHECKDB ('hbposv7','repair_rebuild')

Go

--再次数据库检查,如果返回结果中没有了红色的提示文字,说明修复成功;

DBCC CHECKDB ('hbposv6_branch')

Go

--否则意味着还需要更高级别的修复;尝试将上面修复语句的'repair_rebuild'换为'repair_allow_data_loss'再试,之后再次检查数据库。

--注意:语句DBCC CHECKDB ('hbposv7','repair_rebuild')和语句DBCC CHECKDB ('hbposv7','

repair_allow_data_loss ')可多次执行(一般情况下5次都可修复成功),直到执行完后用数据库检查语句DBCC CHECKDB ('hbposv7')后没有了红色的提示文字,并且会CHECKDB 发现了 0 个分配错误和 0 个一致性错误(在数据库 'hbposv7' 中),这样表示数据库修复OK,

--如果还有错误未修复,请把这些信息以文字的方式发给我们

--退出前请一定要执行以下语句返回到多用户模式

EXEC sp_dboption 'hbposv7', 'single user','FALSE'

go

注:都要把 hbposv7替换成真实的数据库名字,每个产品的数据库名称是不一样的。

数据库损坏的灾难性修复方法—BCP处理方案

以商业之星7为例,一般是通过“数据库修复的常规处理方法”还无法修复的,用DBCC无法修复的,表能在查询分析里查出来,比如可以通过SELECT * FROM tablename可查出数据,大部分数据因为索引破坏。

在进行操作前,请先备份数据库,同时备份mdf和log文件),操作步骤如下:

1. 首先在D盘建立TESTDB目录,并在查询分析器中选择思迅数据库运行:

use hbposv7

go

select 'bcp hbposv7..'+name + ' out '+'d:\testdb\'+name+'.txt -c -Usa –S localhost

-P' FROM SYSOBJECTS WHERE TYPE = 'U' order by name

ORDER BY NAME

--把查询的结果集全部复制下来,新建一个文本文件取名为“导出.bat”把结果集复制进去并保存,--把该文件存放在d盘TESTDB目录下。

2. 在查询分析器中选择思迅数据库运行:

select 'bcp hbposv7..'+name + ' in '+'d:\testdb\'+name+'.txt -c -Usa –S localhost -P

' FROM SYSOBJECTS WHERE TYPE = 'U' order by name order by name

把查询的结果集全部复制下来,新建一个文本文件取名为“导入.bat”把结果集复制进去并保存,把该文件存放在d盘TESTDB目录下。

3. 运行“导出.bat”(注意:该文件双击即可运行),数据库中的数据会倒出到TESTDB目录中。

4. 删除原来的问题数据库,用服务端安装程序server.exe重新安装空库。

5. 在查询分析器中选择思迅数据库运行:

use hbposv7

go

select 'delete '+name FROM SYSOBJECTS WHERE TYPE = 'U' order by name

go

--然后把返回的结果集复制,新建一个查询分析器窗口,把复制的内容粘贴后运行!

6. 最后运行“导入.bat” ,倒入成功后就恢复数据库了!

7. 最后在查询分析器中选择思迅数据库运行

use hbposv5

go

update t_sys_system set sys_var_value=(select max(flow_id) from t_im_flow where num2=1)

where sys_var_id='ioflow_pointer'

go

8. 在查询分析器中选择思迅数据库运行,此步骤可不做,但做一下最好。

use hbposv7

go

select 'update statistics '+name FROM SYSOBJECTS WHERE TYPE = 'U' order by name

go

--然后把返回的结果集复制,新建一个查询分析器窗口,把复制的内容粘贴后运行!

9. 日结,检查数据。

--注:都要把 hbposv7替换成真实的数据库名字,每个产品的数据库名称是不一样的。

数据库置疑的修复处理方法

以商业之星7为例:

1. 停止SQL Server的服务,备份SQL Server安装目录下的\data子目录一个hbposv7_log.ldf(也有可能非此命名)。

2. 启动SQL Server服务(如已停止),创建一个新的数据库,命名为原来数据库的名字,比如商业之星7的总部数据库为hbposv7,分店为hbposv7_branch。

3. 停止SQL Server

4. 把老数据库的MDF文件(hbposv7_data.mdf)替换新数据库的相应的MDF文件,并把LDF文件(hbposv7_log.ldf)删除。

5. 重新启动SQL Server服务,然后在查询分析器里运行如下命令:

Use Master

go

sp_configure 'allow updates', 1

reconfigure with override

go

begin tran

update sysdatabases set status = 32768 where name = 'hbposv7'

commit tran

go

6. 停止SQL然后重新启动SQL Server服务,然后在查询分析器里运行如下命令,(更换日志文件路径地址):

use master

go

DBCC TRACEON(3604)

DBCC REBUILD_LOG ('hbposv7','c:\Program Files\Microsoft SQL Server\MSSQL\Data\hbposv7_log.ldf')

--在这里,请输入你的数据库的路径

Go

7. 停止SQL然后重新启动SQL Server服务,然后在查询分析器里运行:

use master

go

update sysdatabases set status = 8 where name = 'hbposv7'

go

sp_configure 'allow updates', 0

reconfigure with override

go

8. 运行dbcc checkdb(hbposv7) 检查数据库的完整性

9. 一般情况下置疑后都需要修复数库,按如下步骤操作,以下部分同“数据库损坏的常规修复处理方法”。

--请在查询分析器中执行下列语句.执行前断开其它所有数据库连接,最好是断开网线

--如果不是该数据库名,请将数据库改为要修复的数据库

USE master

Go

--单用户模式

sp_dboption 'hbposv7', 'single user', 'TRUE'

go

--数据库检查

DBCC CHECKDB ('hbposv7')

Go

--如果返回结果出现了红色的提示文字,说明数据库中存在错误,需要修复

--数据库修复

DBCC CHECKDB ('hbposv7','repair_rebuild')