SQL Server无法重启从错误日志中发现下面的错误:

 

Operating system error 1117(由于 I/O设备错误,无法运行此项请求。) on file "C:\Program Files\Microsoft SQLServer\MSSQL10.MSSQLSERVER\MSSQL\DATA\mastlog.ldf"

 

这种问题大多是因为磁盘硬件错误导致SQLServer无法重启,如果文件没有损坏的话我们可以通过移动SQLServer系统数据库解决。如果系统文件损坏需要Rebuildsystem数据库然后还原系统数据库。

 

这里我们讲如何将系统数据库移到其他磁盘解决硬件问题导致服务无法重启的问题:

 

1. 首先将系统数据库拷贝到其他磁盘,并且确保SQL Server Service账户有足够的权限访问这些文件。

 

2. 在配置管理器中更改SQL Server启动参数,将MASTER数据库文件和日志文件指定到其他目录。

-dMaster数据文件位置

-lMaster日志文件位置

 

3. 修改完成后使用下面的命令启动SQL Server:

 

启动Named SQL Server Instance

 

NET STARTMSSQL$instancename /f /T3608

 

启动Default Instance:

 

NET START MSSQLSERVER /f /T3608

 

4. 执行上面的命令后可以启动SQL Server,然后使用sqlcmd连接到MASTER数据库修改其他系统数据库的文件路径。如果使用Management studio连接的时候直接选择“New Query(单用户模式启动,只允许一个用户连入数据库,使用“New Query“连接可以确保单用户成功连接)

 

修改系统数据库文件路径命令:

 

use master

go

Alter databasetempdbmodifyfile(name= tempdev,filename= 'D:\Program Files\MicrosoftSQL Server\MSSQL10_50.R2\MSSQL\DATA\backup\tempdb.mdf')

go

Alter databasetempdbmodifyfile(name= templog,filename= 'D:\Program Files\MicrosoftSQL Server\MSSQL10_50.R2\MSSQL\DATA\backup\templog.ldf')

go

USE master;

GO

ALTER DATABASEmsdbMODIFYFILE(NAME= MSDBData,FILENAME='D:\Program Files\MicrosoftSQL Server\MSSQL10_50.R2\MSSQL\DATA\backup\MSDBData.mdf');

GO

ALTER DATABASEmsdbMODIFYFILE(NAME= MSDBLog,FILENAME='D:\Program Files\MicrosoftSQL Server\MSSQL10_50.R2\MSSQL\DATA\backup\MSDBLog.ldf');

GO

ALTER DATABASEmodelMODIFYFILE(NAME= modeldev,FILENAME='D:\Program Files\MicrosoftSQL Server\MSSQL10_50.R2\MSSQL\DATA\backup\model.mdf');

GO

ALTER DATABASEmodelMODIFYFILE(NAME= modellog,FILENAME='D:\Program Files\MicrosoftSQL Server\MSSQL10_50.R2\MSSQL\DATA\backup\modellog.ldf');

GO

 

 

查询文件地址是否已经修改:

 

SELECT name,physical_nameAS CurrentLocation, state_desc

FROM sys.master_files

WHERE database_id =DB_ID(N'<database_name>');

 

 

---如果需要迁移RESOURCE数据库的话使用下面的命令

 

USE master;

GO

ALTER DATABASE mssqlsystemresourceMODIFYFILE(NAME= DATA,FILENAME='D:\Program Files\Microsoft SQLServer\MSSQL10_50.R2\MSSQL\DATA\backup\.mdf');

GO

ALTER DATABASE mssqlsystemresourceMODIFYFILE(NAME=LOG,FILENAME='D:\Program Files\MicrosoftSQL Server\MSSQL10_50.R2\MSSQL\DATA\backup\.ldf');

GO

ALTER DATABASE mssqlsystemresourceSETREAD_ONLY;

 

5. 执行成功后重启数据库数据库恢复正常。如果还有其他用户数据库也需要迁移的话可以参照上面的命令迁移文件。

 

6. 迁移完成后运行DBCC CHECKDB确保数据库完整性并且备份数据库。

 

更多迁移系统数据库信息可以参考:http://msdn.microsoft.com/en-us/library/ms345408.aspx

 


本文转自 lzf328 51CTO博客,原文链接:http://blog.51cto.com/lzf328/1021517