客户更换服务器后,由于数据没有备份,从原服务器拷出mdf文件,进行附加时发生报错。
问题一:
无法打开物理文件。操作系统错误
解决方案:
将被附加的数据库移入到根目录下,即MSSQL的DATA目录下。
------------------------------
程序位置:
在 Microsoft.SqlServer.Management.Smo.Server.AttachDatabase(String name, StringCollection files)
在 Microsoft.SqlServer.Management.SqlManagerUI.AttachDatabaseData.PrimaryFile.Attach()
在 Microsoft.SqlServer.Management.SqlManagerUI.AttachDatabase.SendDataToServer()
===================================
执行 Transact-SQL 语句或批处理时发生了异常。 (Microsoft.SqlServer.ConnectionInfo)
------------------------------
程序位置:
在 Microsoft.SqlServer.Management.Common.ServerConnection.ExecuteNonQuery(String sqlCommand, ExecutionTypes executionType)
在 Microsoft.SqlServer.Management.Common.ServerConnection.ExecuteNonQuery(StringCollection sqlCommands, ExecutionTypes executionType)
在 Microsoft.SqlServer.Management.Smo.ExecutionManager.ExecuteNonQuery(StringCollection queries)
在 Microsoft.SqlServer.Management.Smo.Server.AttachDatabaseWorker(String name, StringCollection files, String owner, AttachOptions attachOptions)
在 Microsoft.SqlServer.Management.Smo.Server.AttachDatabase(String name, StringCollection files)
===================================
无法打开物理文件“D:\xxx\xxx.mdf”。操作系统错误 5:“5(拒绝访问。)”。 (.Net SqlClient Data Provider)
------------------------------
有关帮助信息,请单击: http://go.microsoft.com/fwlink?ProdName=Microsoft%20SQL%20Server&ProdVer=12.00.2269&EvtSrc=MSSQLServer&EvtID=5120&LinkId=20476
------------------------------
服务器名称: LAPTOP-8T143G83\ZC
错误号: 5120
严重性: 16
状态: 101
行号: 1
------------------------------
程序位置:
在 Microsoft.SqlServer.Management.Common.ConnectionManager.ExecuteTSql(ExecuteTSqlAction action, Object execObject, DataSet fillDataSet, Boolean catchException)
在 Microsoft.SqlServer.Management.Common.ServerConnection.ExecuteNonQuery(String sqlCommand, ExecutionTypes executionType)
问题二
在将文件附加时发生错误,如:偏移量为 0x0000000009c000 的位置执行 读取 期间xx
解决方案:
在sqlserver Management Studio中创建一个同名数据库,将数据库状态设置为紧急
use Master
go
alter database xxxx set emergency --将置疑数据库设为“紧急”,xxxx 是数据库名
go
关闭sqlserver服务,将需要附加的数据库移入替换。启动sqlserver服务
use Master
declare @databasename varchar(255)
set @databasename= 'xxxx' --你的.mdf文件文件名
ALTER DATABASE xxxxx SET SINGLE_USER WITH ROLLBACK IMMEDIATE; --把数据设为单用户模式
dbcc checkdb(@databasename,REPAIR_ALLOW_DATA_LOSS)
dbcc checkdb(@databasename,REPAIR_REBUILD)
如果出现系统中不到指定的路径,则需要在创建该路径并在其目录下放入mdf和log.mdf文件,
解除单用户模式,返回普通模式。
USE master;
GO
ALTER DATABASE xxx
SET MULTI_USER;
GO
程序位置:
在 Microsoft.SqlServer.Management.Smo.Server.AttachDatabase(String name, StringCollection files)
在 Microsoft.SqlServer.Management.SqlManagerUI.AttachDatabaseData.PrimaryFile.Attach()
在 Microsoft.SqlServer.Management.SqlManagerUI.AttachDatabase.SendDataToServer()
===================================
执行 Transact-SQL 语句或批处理时发生了异常。 (Microsoft.SqlServer.ConnectionInfo)
------------------------------
程序位置:
在 Microsoft.SqlServer.Management.Common.ServerConnection.ExecuteNonQuery(String sqlCommand, ExecutionTypes executionType)
在 Microsoft.SqlServer.Management.Common.ServerConnection.ExecuteNonQuery(StringCollection sqlCommands, ExecutionTypes executionType)
在 Microsoft.SqlServer.Management.Smo.ExecutionManager.ExecuteNonQuery(StringCollection queries)
在 Microsoft.SqlServer.Management.Smo.Server.AttachDatabaseWorker(String name, StringCollection files, String owner, AttachOptions attachOptions)
在 Microsoft.SqlServer.Management.Smo.Server.AttachDatabase(String name, StringCollection files)
===================================
在文件 'C:\xxxx' 中、偏移量为 0x00000000100000 的位置执行 读取 期间,操作系统已经向 SQL Server 返回了错误 38(已到文件结尾。)。SQL Server 错误日志和系统事件日志中的其他消息可能提供了更详细信息。这是一个威胁数据库完整性的严重系统级错误条件,必须立即纠正。请执行完整的数据库一致性检查(DBCC CHECKDB)。此错误可以由许多因素导致;有关详细信息,请参阅 SQL Server 联机丛书。
在 SQLServerLogMgr::ReadFileHdr 期间文件“C:\xxxx”出现操作系统错误 38(已到文件结尾。)。
无法打开新数据库 'UFDATA_003_2021'。CREATE DATABASE 中止。 (.Net SqlClient Data Provider)
------------------------------
有关帮助信息,请单击: http://go.microsoft.com/fwlink?ProdName=Microsoft%20SQL%20Server&EvtSrc=MSSQLServer&EvtID=823&LinkId=20476
------------------------------
服务器名称: LAPTOP-8T143G83\ZC
错误号: 823
严重性: 24
状态: 5
行号: 1
------------------------------
程序位置:
在 Microsoft.SqlServer.Management.Common.ConnectionManager.ExecuteTSql(ExecuteTSqlAction action, Object execObject, DataSet fillDataSet, Boolean catchException)
在 Microsoft.SqlServer.Management.Common.ServerConnection.ExecuteNonQuery(String sqlCommand, ExecutionTypes executionType)```