【997755.com澳门葡京】Server的MDF文件的秘籍,不是主数据库文件

一、前言

后天公司要切换数据库服务器,数据库文件大于二G,结果再附加到另1服务器的数据Curry面,就发生了一个标题。如下:

标题:Microsoft SQL Server Management Studio
------------------------------
无法为此请求检索数据。(Microsoft.SqlServer.SmoEnum)
------------------------------
其他信息:
执行 Transact-SQL 语句或批处理时发生了异常。(Microsoft.SqlServer.ConnectionInfo)
------------------------------
E:\DATA\数据库名.mdf 不是主数据库文件。(Microsoft SQL Server,错误:5171)

一、前言

前日集团要切换数据库服务器,数据库文件大于贰G,结果再附加到另一服务器的数据Curry面,就生出了三个难题。如下:

标题:Microsoft SQL Server Management Studio
------------------------------
无法为此请求检索数据。(Microsoft.SqlServer.SmoEnum)
------------------------------
其他信息:
执行 Transact-SQL 语句或批处理时发生了异常。(Microsoft.SqlServer.ConnectionInfo)
------------------------------
E:\DATA\数据库名.mdf 不是主数据库文件。(Microsoft SQL Server,错误:5171)

   修复SQL Server的MDF文件的情势

怎么样恢复生机和修补SQL Server的MDF文件

   要是备份的数据库有2个文本,分别是.LDF 和
.MDF,张开公司管理器,在实例上右击—全部职责–附加数据库,然后采纳那叁个.MDF文件,就足以了。

  或许在查询分析器中输入:

  sp_attach_db “数据库名称”,”路线\文件名.ldf”,”路径\文件名.MDF”

  SQL Server数据库备份有三种方式,一种是利用BACKUP
DATABASE将数据库文件备份出去,别的一种就是平昔拷贝数据库文件mdf和日志文件ldf的格局。上边将珍贵斟酌一下后者的备份与回复。本文假定你能熟知应用SQL
Server Enterprise Manager(SQL Server集团管理器)和SQL Server Quwey
Analyser(SQL Server查询分析器)

  一、不荒谬的备份、苏醒措施

  符合规律艺术下,我们要备份1个数据库,首先要先将该数据库从运转的数目服务器中断开,可能停掉整个数据库服务器,然后复制文件。

  卸下数据库的吩咐: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 Sever柒.0和SQL Server
两千的数据库文件,要点是备份的时候肯定要将mdf和ldf五个公文都备份下来,mdf文件是数据库数据文件,ldf是数据库日志文件。

  例子:

  假使数据库为test,其数据文件为test_data.mdf,日志文件为test_log.ldf。上面大家探讨一下如何备份、恢复生机该数据库。

  卸下数据库:sp_detach_【997755.com澳门葡京】Server的MDF文件的秘籍,不是主数据库文件。db ‘test’

  连接数据库:sp_attach_db ‘test’,’C:\Program Files\Microsoft SQL
Server\MSSQL\Data\test_data.mdf’,’C:\Program Files\Microsoft SQL
Server\MSSQL\Data\test_log.ldf’

  sp_attach_single_file_db ‘test’,’C:\Program Files\Microsoft
SQL Server\MSSQL\Data\test_data.mdf’

  // 本文转自 C++Builder 斟酌 –

  二、只有mdf文件的东山再起才具

  由于种种原因,大家如若及时单独备份了mdf文件,那么恢复生机起来正是1件很辛勤的作业了。

  假使您的mdf文件是当下数据库发生的,那么很幸运,或然你利用sp_attach_db或者sp_attach_single_file_db能够回复数据库,不过会现出类似上边包车型地铁提醒音信

  设备激活错误。物理文件名 ‘C:\Program Files\Microsoft SQL
Server\MSSQL\data\test_Log.LDF’ 恐怕有误。

  已开立名叫 ‘C:\Program Files\Microsoft SQL
Server\MSSQL\Data\test_log.LDF’ 的新日志文件。

  但是,假设你的数据库文件是从其余计算机上复制过来的,那么很悲伤,大概上述方法就不算了。你恐怕会得到近似下边包车型客车错误音讯

  服务器: 消息 1813,级别 16,状态 2,行 1

  未能张开新数据库 ‘test’。CREATE DATABASE 将终止。

  设备激活错误。物理文件名 ‘d:\test_log.LDF’ 恐怕有误。

  咋办吧?别着急,下边大家比如表明恢复生机措施。

  A.我们运用暗中同意格局确立3个供恢复行使的数据库(如test)。能够在SQL
Server Enterprise Manager里面建立。

  B.停掉数据库服务器。

  C.将刚才生成的数据库的日记文件test_log.ldf删除,用要东山再起的数据库mdf文件覆盖刚才生成的数据库数据文件test_data.mdf。

  D.运维数据库服务器。此时会看到数据库test的情形为“置疑”。那时候不可能对此数据库进行其它操作。

  E.设置数据库允许直接操作系统表。此操作能够在SQL Server Enterprise
Manager里面选取数据库服务器,按右键,选拔“属性”,在“服务器设置”页面中校“允许对系统目录直接修改”1项选中。也能够行使如下语句来落实。

  以下是引用片段:

  use master

  go

  sp_configure ‘allow updates’,1

  go

  reconfigure with override

  go

  F.设置test为火急修复格局

  update sysdatabases set status=-32768 where dbid=DB_ID(‘test’)

  此时能够在SQL Server Enterprise
Manager里面看到该数据库处于“只读\置疑\脱机\一气呵成格局”能够见见数据Curry面包车型地铁表,不过1味有系统表

  G.上面试行真正的回复操作,重建数据库日志文件

  dbcc rebuild_log(‘test’,’C:\Program Files\Microsoft SQL
Server\MSSQL\Data\test_log.ldf’)

  实施进程中,假诺遇上下列提醒消息:

  服务器: 消息 5030,级别 16,状态 1,行 1

  未能排它地锁定数据库以试行该操作。

  DBCC 试行实现。假诺 DBCC 输出了错误音信,请与系统管理员联系。

  表明您的其余程序正在使用该数据库,假若刚才您在F步骤中应用SQL Server
Enterprise Manager张开了test库的系统表,那么退出SQL Server Enterprise
Manager就能够了。

  准确实行到位的唤醒应该接近于:

  警告: 数据库 ‘test’ 的日记已重建。已错过职业的一致性。应运作 DBCC
CHECKDB
以验证物理壹致性。将必须重新恢复设置数据库选项,并且恐怕供给删除多余的日志文件。

  DBCC 施行实现。假诺 DBCC 输出了错误消息,请与系统管理员联系。

  此时展开在SQL Server Enterprise
Manager里面会看出数据库的情形为“只供DBO使用”。此时能够访问数据Curry面包车型地铁用户表了。

  H.验证数据库一致性(可粗略)

  dbcc checkdb(‘test’)

  一般实行结果如下:

  CHECKDB 开掘了 0 个分配错误和 0 个壹致性错误(在数据库 ‘test’ 中)。

  DBCC 试行完成。要是 DBCC 输出了错误音讯,请与系统管理员联系。

  I.设置数据库为常规状态

  sp_dboption ‘test’,’dbo use only’,’false’

  借使未有出错,那么恭喜,未来就足以健康的选择恢复生机后的数据库啦。

  J.最终一步,我们要将步骤E中设置的“允许对系统目录直接改造”一项苏醒。因为平常径直操作系统表是一件相比危险的事体。当然,大家得以在SQL
Server Enterprise Manager里面复苏,也足以使用如下语句完毕

  以下是援引片段:

  sp_configure ‘allow updates’,0

  go

  reconfigure with override

  go

Server的MDF文件
纵然备份的数据库有一个文本,分别是.LDF 和
.MDF,展开企管器,在实例上右击—全体职务–附加数据库…

2、消除方案

在网络找了不少办法,最终在CSDN上找到了连带的减轻措施,经测试可用。

use master
go
sp_detach_db '数据库名' -- 分离数据库
go
sp_attach_db '数据库名','E:\数据库名.mdf','E:\数据库名.ldf' -- 附加数据库文件
go

网络看看的整治了须臾间。

在SQL Server
七.0中,微软推出了sp_attach_dbsp_attach_single_file_db系统存款和储蓄进度。
它对于SQL Server数据库管理员推行上边包车型地铁职务是尤其方便的:

  • sp_attach_db:直接将.MDF和.LDF文件附加到服务器。
  • sp_attach_single_file_db:只附加.MDF文件。
  • sp_detach_db:将数据库从三个服务器分离。复制.MDF文件到另2个服务器上,然后利用sp_attach_db系统存款和储蓄进程重新附加那一个文件到五个服务器上。

固然它对于SQL
Server数据库管理员是很有用的,可是在动用那多少个存款和储蓄进程时是有局地限制的。限制如下:

  • 不可能附加多个日志文件。
  • 不能够附加16个以上的文件。

在SQL Server
二零零六中,微软公布上面的种类存款和储蓄进程将要现在的版本中被放任。而她们在”Create
Database”
SQL语句中加多了三个从句”For Attach”。
下边介绍使用”For
Attach”从句的三种办法,以克制在使用sp_attach_db和sp_attach_single_file_db时要面临的限量。

二、消除方案

在互连网找了大多措施,最终在CSDN上找到了相关的消除方法,经测试可用。

use master
go
sp_detach_db '数据库名' -- 分离数据库
go
sp_attach_db '数据库名','E:\数据库名.mdf','E:\数据库名.ldf' -- 附加数据库文件
go

网络来看的盘整了刹那间。

在SQL Server
7.0中,微软推出了sp_attach_dbsp_attach_single_file_db系统存款和储蓄进程。
它对于SQL Server数据库管理员奉行上边包车型地铁天职是万分方便的:

  • sp_attach_db:直接将.MDF和.LDF文件附加到服务器。
  • sp_attach_single_file_db:只附加.MDF文件。
  • sp_detach_db:将数据库从三个服务器分离。复制.MDF文件到另八个服务器上,然后利用sp_attach_db系统存款和储蓄进程重新附加那一个文件到多个服务器上。

就算它对于SQL
Server数据库助理馆员是很有用的,可是在接纳那五个存款和储蓄进程时是有部分限制的。限制如下:

  • 无法附加四个日志文件。
  • 不能够附加十五个以上的文书。

在SQL Server
二〇〇九中,微软颁发上边的系统存款和储蓄进程就要以往的本子中被遗弃。而她们在”Create
Database”
SQL语句中增加了贰个从句”For Attach”。
上面介绍使用”For
Attach”从句的有余主意,以克制在应用sp_attach_db和sp_attach_single_file_db时要面临的限制。

  倘诺备份的数据库有1个公文,分别是.LDF 和
.MDF,张开集团管理器,在实例上右击—全部职务–附加数据库,然后采取这些.MDF文件,就足以了。

三、案例

-- 创建测试数据库
use master
go
CREATE DATABASE TestDB
ON
(
    NAME = TestDB,
    FILENAME = 'D:\TestDB.mdf',
    SIZE = 10,
    MAXSIZE = 50,
    FILEGROWTH = 5,
)
LOG ON
(
    NAME = TestDB_log,
    FILENAME = 'D"\TestDB_log.ldf',
    SIZE = 5MB,
    MAXSIZE = 25MB,
    FILEGROWTH = 5MB
)
GO

-- 现在,让我们分离该数据库,并尝试使用sp_detach_db和sp_attach_db将它重新附加。
-- 执行下面的事务SQL语句。

use master
go
sp_detach_db 'TestDB'
go
sp_attach_db 'TestDB', 'D:\TestDB.mdf', 'D:\TestDB_log.ldf'
go

-- 你也可以使用具有"For Attach"从句的"Create database"命令附加相同的数据库文件,如下所示。

use master
go
sp_detach_db 'TestDB'
go

CREATE DATABASE TestDB
ON
(FILENAME = 'D:\TestDB.mdf'),
(FILENAME = 'D:\TestDB_log.ldf')
For Attach
go

-- 现在,让我们分离数据库TestDB,然后删除.ldf文件,再然后使用sp_attach_single_file_db
-- 系统存储过程通过,执行下面的T-SQL命令将它重新附加上。

use master
go
sp_detach_db 'TestDB'
go
exec master..xp_cmdshell 'del "D:\TestDB_log.ldf"'
go

-- 你可以使用下面的事务SQL语句来激活xp_cmdshell

use master
go
sp_configure 'show advanced options',1
go
reconfigure with override
go
sp_configure 'xp_cmdshell',1
go
reconfigure with override
go

-- 或者,你可以在MS-DOS命令提示符中使用Windows资源管理器的"Del"命令来删除.ldf文件。
-- 现在,让我们只使用sp_attach_single_file_db来附加.MDF文件。执行下面所示的命令。

use master
go
sp_attach_single_file_db 'TestDB','D:\TestDB.mdf'
go

-- 你可以只通过使用带有"For ATTACH_REBUILD_LOG"从句的"Create database"命令来附加
-- 相同的数据库.MDF文件,如下所示。

use master
go
sp_detach_db 'TestDB'
go
exec master..xp_cmdshell 'del "D:\TestDB_log.ldf"'
go

-- 注意:当日志文件被重新创建时,SQL Server自动对日志文件名称添加后缀"_log"。

CREATE DATABASE TestDB
ON
(
    FILENAME = 'D:\TestDB.mdf'
)
For ATTACH_REBUILD_LOG

三、案例

-- 创建测试数据库
use master
go
CREATE DATABASE TestDB
ON
(
    NAME = TestDB,
    FILENAME = 'D:\TestDB.mdf',
    SIZE = 10,
    MAXSIZE = 50,
    FILEGROWTH = 5,
)
LOG ON
(
    NAME = TestDB_log,
    FILENAME = 'D"\TestDB_log.ldf',
    SIZE = 5MB,
    MAXSIZE = 25MB,
    FILEGROWTH = 5MB
)
GO

-- 现在,让我们分离该数据库,并尝试使用sp_detach_db和sp_attach_db将它重新附加。
-- 执行下面的事务SQL语句。

use master
go
sp_detach_db 'TestDB'
go
sp_attach_db 'TestDB', 'D:\TestDB.mdf', 'D:\TestDB_log.ldf'
go

-- 你也可以使用具有"For Attach"从句的"Create database"命令附加相同的数据库文件,如下所示。

use master
go
sp_detach_db 'TestDB'
go

CREATE DATABASE TestDB
ON
(FILENAME = 'D:\TestDB.mdf'),
(FILENAME = 'D:\TestDB_log.ldf')
For Attach
go

-- 现在,让我们分离数据库TestDB,然后删除.ldf文件,再然后使用sp_attach_single_file_db
-- 系统存储过程通过,执行下面的T-SQL命令将它重新附加上。

use master
go
sp_detach_db 'TestDB'
go
exec master..xp_cmdshell 'del "D:\TestDB_log.ldf"'
go

-- 你可以使用下面的事务SQL语句来激活xp_cmdshell

use master
go
sp_configure 'show advanced options',1
go
reconfigure with override
go
sp_configure 'xp_cmdshell',1
go
reconfigure with override
go

-- 或者,你可以在MS-DOS命令提示符中使用Windows资源管理器的"Del"命令来删除.ldf文件。
-- 现在,让我们只使用sp_attach_single_file_db来附加.MDF文件。执行下面所示的命令。

use master
go
sp_attach_single_file_db 'TestDB','D:\TestDB.mdf'
go

-- 你可以只通过使用带有"For ATTACH_REBUILD_LOG"从句的"Create database"命令来附加
-- 相同的数据库.MDF文件,如下所示。

use master
go
sp_detach_db 'TestDB'
go
exec master..xp_cmdshell 'del "D:\TestDB_log.ldf"'
go

-- 注意:当日志文件被重新创建时,SQL Server自动对日志文件名称添加后缀"_log"。

CREATE DATABASE TestDB
ON
(
    FILENAME = 'D:\TestDB.mdf'
)
For ATTACH_REBUILD_LOG

  或许在查询分析器中输入:

四、参考

东升哥

四、参考

东升哥

  sp_attach_db “数据库名称”,”路线文件名.ldf”,”路线文件名.MDF”

  SQL Server数据库备份有三种方法,壹种是行使BACKUP
DATABASE将数据库文件备份出去,此外一种正是一贯拷贝数据库文件mdf和日志文件ldf的章程。下边将首要研讨一下后者的备份与回复。本文假定你能熟谙运用SQL
Server Enterprise Manager(SQL Server集团管理器)和SQL Server Quwey
Analyser(SQL Server查询分析器)

  一、平常的备份、恢复生机措施

  平常艺术下,我们要备份多少个数据库,首先要先将该数据库从运维的多少服务器中断开,恐怕停掉整个数据库服务器,然后复制文件。

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

  连接数据库的授命:

  以下为引用的始末:

  sp_attach_db ‘test’,’C:Program FilesMicrosoft SQL
ServerMSSQLDatatest_data.mdf’,’C:Program FilesMicrosoft SQL
ServerMSSQLDatatest_log.ldf’

  sp_attach_single_file_db ‘test’,’C:Program FilesMicrosoft SQL
ServerMSSQLDatatest_data.mdf’

  2、唯有mdf文件的回涨本事

  由于种种原因,大家只要立时仅仅备份了mdf文件,那么恢复生机起来就是一件很勤奋的政工了。

  假诺你的mdf文件是眼前数据库发生的,那么很幸运,恐怕你接纳sp_attach_db或者sp_attach_single_file_db能够复苏数据库,然而会油但是生类似下边包车型地铁提醒消息

  设备激活错误。物理文件名 ‘C:Program FilesMicrosoft SQL
ServerMSSQLdatatest_Log.LDF’ 大概有误。

  已开立名字为 ‘C:Program FilesMicrosoft SQL
ServerMSSQLDatatest_log.LDF’
的新日志文件。可是,借使你的数据库文件是从别的Computer上复制过来的,那么很悲伤,可能上述办法就不算了。你可能会收获近似下边包车型大巴错误消息

  服务器: 消息 1813,级别 16,状态 2,行 1

  未能张开新数据库 ‘test’。CREATE DATABASE 将适可而止。

  设备激活错误。物理文件名 ‘d:test_log.LDF’ 或者有误。

  怎么做呢?别着急,下边大家比如表达苏醒措施。

  A.大家应用默许情势建立三个供恢复生机使用的数据库(如test)。能够在SQL
Server Enterprise Manager里面建立。

  B.停掉数据库服务器。

  C.将刚才生成的数据库的日志文件test_log.ldf删除,用要东山再起的数据库mdf文件覆盖刚才生成的数据库数据文件test_data.mdf。

  D.运维数据库服务器。此时会看到数据库test的景况为“置疑”。这时候不能够对此数据库举行别的操作。

  E.设置数据库允许直接操作系统表。此操作能够在SQL Server Enterprise
Manager里面选拔数据库服务器,按右键,采用“属性”,在“服务器设置”页面元帅“允许对系统目录直接改换”一项选中。也足以利用如下语句来落到实处。

  以下是援引片段:

  use master

  go

  sp_configure ‘allow updates’,1

  go

  reconfigure with override

  go

  F.设置test为热切修复形式

  update sysdatabases set status=-32768 where dbid=DB_ID(‘test’)

  此时可以在SQL Server Enterprise
Manager里面看到该数据库处于“只读置疑脱机迫切情势”能够看出数据库里面包车型大巴表,不过唯有有系统表

997755.com澳门葡京 ,  G.下边推行真正的死灰复燃操作,重建数据库日志文件

  dbcc rebuild_log(‘test’,’C:Program FilesMicrosoft SQL
ServerMSSQLDatatest_log.ldf’)

  实践进度中,假使蒙受下列提醒音讯:

  服务器: 消息 5030,级别 16,状态 1,行 1

  未能排它地锁定数据库以进行该操作。

  DBCC 实行完成。假使 DBCC 输出了错误消息,请与系统一管理理员联系。

  表明您的其它程序正在利用该数据库,就算刚才你在F步骤中运用SQL Server
Enterprise Manager张开了test库的系统表,那么退出SQL Server Enterprise
Manager就足以了。

  正确执行到位的升迁应该接近于:

  警告: 数据库 ‘test’ 的日志已重建。已错过职业的1致性。应运作 DBCC
CHECKDB
以证实物理一致性。将必须重新载入参数数据库选项,并且只怕须求删除多余的日记文件。

  DBCC 执行完成。纵然 DBCC 输出了错误新闻,请与系统管理员联系。

  此时开荒在SQL Server Enterprise
Manager里面会看到数据库的情事为“只供DBO使用”。此时得以访问数据Curry面包车型客车用户表了。

  H.验证数据库一致性(可粗略)

  dbcc checkdb(‘test’)

  一般试行结果如下:

  CHECKDB 开掘了 0 个分配错误和 0 个一致性错误(在数据库 ‘test’ 中)。

  DBCC 推行达成。假诺 DBCC 输出了错误消息,请与系统管理员联系。

  I.设置数据库为正规处境

  sp_dboption ‘test’,’dbo use only’,’false’

  借使未有出错,那么恭喜,未来就足以健康的应用恢复生机后的数据库啦。

  J.最终一步,大家要将步骤E中安装的“允许对系统目录直接改换”一项复苏。因为平时径直操作系统表是一件相比较惊险的作业。当然,大家得以在SQL
Server Enterprise Manager里面恢复生机,也能够利用如下语句落成

  以下是援引片段:

  sp_configure ‘allow updates’,0

  go

  reconfigure with override

  go

  以下为引用的始末:

  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 Sever7.0和SQL Server
三千的数据库文件,要点是备份的时候自然要将mdf和ldf四个公文都备份下来,mdf文件是数据库数据文件,ldf是数据库日志文件。

  例子:

  假诺数据库为test,其数据文件为test_data.mdf,日志文件为test_log.ldf。上面大家研究一下怎样备份、复苏该数据库。

  卸下数据库:sp_detach_db ‘test’

Server的MDF文件的方式假设备份的数据库有1个文本,分别是.LDF 和
.MDF,展开集团管理器,在实例上右击—全部任务–附加数据库,然…

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

*
*
Website