sql数据库附加出错怎么办

sql数据库附加出错怎么办,第1张

解决方法步骤如下:

1、首先打开sqlserver management studio,登录身份选择windows身份验证,点击连接。

2、进入管理器中,选择数据库,右键,在d出的菜单选择“附加”,如图所示,选择要附加的文件后,点击附加,如果没有报错,则完成附加,否则,需要接下来的数据修复。

3、报错,附加失败后,新建数据库,且要与要附加的数据库同名。如要附加的数据库为skhprint,要新建的数据库名也要命名为skhprint,如图,点击确定,完成数据库创建。

4、如何在界面内找到“停止”选项并单击停止数据库。

5、将原mdf文件,如skhprintmdf复制到新创建的数据库所在目录中,之后,开启服务器。

6、这时,会发现skhprint质疑,接下来要打开查询分析器,输入如下代码:use mastergo--declare @databaseName varchar(50)--set @databaseName='skhprint'--1修改服务器设置:允许对系统目录进行直接修改

sp_configure 'allow updates',1 reconfigure with overridego--2将数据库置为紧急状态update masterdbosysdatabases set status = 32768 where name = 'skhprint'go--3删除新的ldf文件,重建日志:dbcc rebuild_log('skhprint', 'f:\skhprint_log_newldf')--假设把新日志在f盘goupdate masterdbosysdatabases set status = 16 where name = 'skhprint'即可。

先使用“无日志附加”的方法进行附加数据后,对数据库做DBCC检测,然后针对错误进行修复

。一般如果数据库正在进行读写 *** 作,突然断电,会导致数据库无法回写正常的数据,这样就会导致数据库索引及其它错误,常见的有“并闫锁页错误”、“表错误:

分配单元ID

169144,页(1:XXXX)。测试(IS_OFF

(BUF_IOERR,

pBUF->bstat))失败。”,可以先用DBCC先进行修复

,命令:

DBCC

CHECKDB(DBName,REPAIR_FAST)

--不丢失数据

DBCC

CHECKDB(DBName,REPAIR_REBUILD)--不丢失数据

DBCC

CHECKDB(DBName,REPAIR_ALLOW_DATA_LOSS)--会丢失数据

如果还是修复不好,就找专业的数据恢复公司做修复吧,可以找北亚数据恢复修复

,他们修复SQL数据库很厉害。。。

您好,是这样的:

1首先确认已经备份了mdf和ldf文件。

2 在SQL Server中新建一个同名的数据库,然后停止SQL Server服务。

3 用原有的mdf和ldf文件覆盖新建数据库对应的mdf和ldf文件。

4 重新启动SQL Server服务,这是应该会看到这个数据库处于置疑(Suspect)状态。

5 在SQL查询分析器中执行以下命令,以允许更新系统表:use mastergosp_configure "allow updates",1reconfigurewithoverridego。

6 将这个数据库置为紧急模式:update sysdatabases set status = 32768 where name="db_name"go。

7 使用DBCC CHECKDB命令检查数据库中的错误:DBCC CHECKDB("db_name")GO。

8 如果DBCC CHECKDB命令失败,请转至第10步,否则先将数据库置为单用户模式,再尝试对其进行修复:sp_dboption "db_name","single

user","true"DBCCCHECKDB("db_name",REPAIR_ALLOW_DATA_LOSS)GO

如果在执行DBCCCHECKDB("db_name",REPAIR_ALLOW_DATA_LOSS)命令时提示说数据库未处于单用户模式状态的话,则重新启动SQLServer服务,然后继续尝试。

9 如果DBCCCHECKDB("db_name",REPAIR_ALLOW_DATA_LOSS)命令失败,请转至第10步,否则若成功修复了数据库中的错误:

重新执行DBCC CHECKDB("db_name")命令,确认数据库中已没有错误存在。

清除数据库的置疑状态:sp_resetstatus "db_name"

清除数据库的单用户模式状态:sp_dboption "db_name","single user","false"

重新启动SQL Server服务,如果一切正常的话,则数据库已经成功恢复。

10如果以上步骤都不能解决问题的话,请参考附件中的文档尝试通过重建事务日志来恢复数据库中的数据。如果您只有MDF文件,问题就更加复杂一些,我们需要直接重建事务日志了:

1 在SQL Server中新建一个同名的数据库,然后停止SQL Server服务。

2 用原有的ldf文件覆盖新建数据库对应的mdf文件,将其日志文件(ldf)删除。

3 启动SQL Server服务,并将数据库置为紧急模式(同上: 步骤5和步骤6)。

4 停止并重新启动SQL Server服务。

5 执行以下命令重建数据库日志文件:(下面是个示例,您要用您实际的数据库名)

DBCC REBUILD_LOG("cas_db", "D:\cas_db\cas_db_LogLDF")

6 重新将该数据库置为单用户模式。

7 再次尝试使用DBCC CHECKTABLE或DBCC CHECKDB命令检查并修复数据库中。

以前没有备份吗?

没有的话看看这个,或许对你有用。。。

SQL Server数据库备份有两种方式,一种是使用BACKUP DATABASE将数据库文件备份出去,另外一种就是直接拷贝数据库文件mdf和日志文件ldf的方式。下面将主要讨论一下后者的备份与恢复。本文假定您能熟练使用SQL Server Enterprise Manager(SQL Server企业管理器)和SQL Server Quwey Analyser(SQL Server查询分析器)

1、正常的备份、SQL数据库恢复方式

正常方式下,我们要备份一个数据库,首先要先将该数据库从运行的数据服务器中断开,或者停掉整个数据库服务器,然后复制文件。

卸下数据库的命令:Sp_detach_db 数据库名

连接数据库的命令:Sp_attach_db或者sp_attach_single_file_db

s_attach_db [@dbname =] ′dbname′, [@filename1 =] ′filename_n′ [,16]

sp_attach_single_file_db [@dbname =] ′dbname′, [@physname =] ′physical_name′

使用此方法可以正确恢复SQL Sever70和SQL Server 2000的数据库文件,要点是备份的时候一定要将mdf和ldf两个文件都备份下来,mdf文件是数据库数据文件,ldf是数据库日志文件。

例子:

假设数据库为test,其数据文件为test_datamdf,日志文件为test_logldf。下面我们讨论一下如何备份、恢复该数据库。

卸下数据库:sp_detach_db 'test'

连接数据库:sp_attach_db 'test','C:\Program Files\Microsoft SQL Server\MSSQL\Data\test_datamdf','C:\Program Files\Microsoft SQL Server\MSSQL\Data\test_logldf'

sp_attach_single_file_db 'test','C:\Program Files\Microsoft SQL Server\MSSQL\Data\test_datamdf'

2、只有mdf文件的恢复技术

由于种种原因,我们如果当时仅仅备份了mdf文件,那么恢复起来就是一件很麻烦的事情了。(此文章由飞客数据恢复中心搜集>

将你的数据库文件,也就是数据库中扩展名是DAT的文件,包括logo文件复制到其它硬盘中备用然后将你的数据库从SQL中删除重做(注意:不是删除SQL!!

只是你的库和设备!!)一般只能这样了,一定要按照原来数据库的大小、名称做!!,搞完后确保新的运行正常,然后停止SQL服务,将原备份的DAT文件直接替换到新库的同名DAT文件,重新启动SQL服务,一切就OK了。

在MS SQLSERVER中一直有这样的问题,SQLSERVER的状态"置疑",原因约有以下几条:

1错误的删除日志;

2硬件(HD)损坏,造成日志和数据文件写错误;

3硬盘的空间不够,比如日志文件过大;

解决办法:

最简单的办法是有数据库的全备份,然后恢复即可

步骤:

1 删除原始的数据库:

USE MASTER

GO

DROP DATABASE DB_SUEPECT

2建立同名的数据库:

USE master

GO

CREATE DATABASE DB_SUSPECT

ON

( NAME = DBNAME_DAT,

FILENAME = 'C:',

SIZE = 10,

FILEGROWTH = 5 )

LOG ON

( NAME = 'DBNAME_LOG',

FILENAME = 'g:',

SIZE = 5MB,

FILEGROWTH = 5MB )

GO

3恢复数据库:

RESTORE DATABASE DB_SUSPECT

FROM DBNAME_BACKUPDAT

4数据库完整性检测:

DBCC CHECKDB('DB_SUSPECT')

5重新启动MSSQLSERVER服务

如果没有全备份,那就要用一些特殊的方法:

1设置数据库为紧急模式

Use Master

GO

sp_configure 'allow updates', 1

reconfigure with override

GO

UPDATE sysdatabases SET status = 32768 where name = 'DB_SUSPECT'

GO

2停掉SQL Server服务:

Net STOP MSSQLSERVER

3把原始数据库的数据文件DBNAME_DATMDF,DBNAME_LOGLDF移走:

4启动SQL Server服务:

Net START MSSQLSERVER

5重新建立一个同名的数据库DB_SUSPECT;

USE master

GO

CREATE DATABASE DB_SUSPECT

ON

( NAME = DBNAME_DAT,

FILENAME = 'C:',

SIZE = 10,

FILEGROWTH = 5 )

LOG ON

( NAME = 'DBNAME_LOG',

FILENAME = 'g:',

SIZE = 5MB,

FILEGROWTH = 5MB )

GO

6设置数据库运行在单用户的模式:

USE MASTER

GO

ALTER DATABASE DB_SUSPECT SET SINGLE_USER

GO

7停掉SQL服务:

Net STOP MSSQLSERVER

8把原来的数据文件再覆盖回来:

9启动SQL Server服务:

Net START MSSQLSERVER

10重新设置SQLSERVER的状态:

USE MASTER

GO

EXEC sp_resetstatus "DB_SUSPECT"

11数据库完整性检测:

DBCC CHECKDB('DB_SUSPECT')

12恢复数据库为多用户模式:

USE MASTER

GO

ALTER DATABASE DB_SUSPECT SET MULTI_USER

GO

13恢复SQLSERVER原始的配置:

USE MATER

GO

UPDATE sysdatabases SET status = 4194320 where name = 'DB_SUSPECT'

GO

14配置SQLSERVER不允许更新系统表:

USE MASTER

GO

sp_configure 'allow updates', 0

reconfigure with override

GO

15重新启动MSSQLSERVER服务:

最好重新启动 *** 作系统

16备份数据库:

可以通过SQLSERVER企业管理器或T-SQL需要备份MASTER和DB_SUSPECT

补充一点,如果用DOMAIN\USER时,要注意对MDFLDF的所在目录的权限

灵验脚本

遇到这种数据库置疑情况,就运行下面这个脚本,屡试不爽:

======================================================

--before running any script, run the following to set the

master database to allow updates

USE master

GO

sp_configure 'allow updates', 1

GO

RECONFIGURE WITH OVERRIDE

GO

--Run the following script

UPDATE mastersysdatabases SET status = status ^ 256

WHERE name = 'Database_Name'

--Run the following script

exec SP_resetstatus Database_Name

--stop and start the MSDTC at this stage

--After the procedure is created, immediately disable

updates to the system tables:

exec sp_configure 'allow updates', 0

GO

RECONFIGURE WITH OVERRIDE

GO

以上就是关于sql数据库附加出错怎么办全部的内容,包括:sql数据库附加出错怎么办、sql数据库置疑 data里找不到该数据库的数据 怎么办、如何解决SQL Server数据库置疑问题等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9356603.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-27
下一篇 2023-04-27

发表评论

登录后才能评论

评论列表(0条)

保存