SQL,2005附加如何附加

zhouixi 2012-04-27 02:50:31
直接附加是不行了。


sp_attach_single_file_db 'test3t1', 'G:\data\Tmp_Db.mdf'



这招不行,


消息 5120,级别 16,状态 5,第 1 行
无法打开物理文件 "f:\data\Tmp_Db_FILEGROUP_1.ndf"。操作系统错误 2:"2(系统找不到指定的文件。)"。
消息 5120,级别 16,状态 5,第 1 行
无法打开物理文件 "f:\data\Tmp_Db_FILEGROUP_2.ndf"。操作系统错误 2:"2(系统找不到指定的文件。)"。
文件激活失败。物理文件名称'D:\data\Tmp_Db.ldf'可能不正确。
消息 1813,级别 16,状态 2,第 1 行
无法打开新数据库 'test3t1'。CREATE DATABASE 中止。








sp_attach_db @dbname=Tmp_Db,
@filename1='G:\data\Tmp_Db.mdf',
@filename2='G:\data\Tmp_Db.ldf';



这招也不行。
消息 5120,级别 16,状态 5,第 1 行
无法打开物理文件 "f:\data\Tmp_Db_FILEGROUP_1.ndf"。操作系统错误 2:"2(系统找不到指定的文件。)"。
消息 5120,级别 16,状态 5,第 1 行
无法打开物理文件 "f:\data\Tmp_Db_FILEGROUP_2.ndf"。操作系统错误 2:"2(系统找不到指定的文件。)"。
消息 1813,级别 16,状态 2,第 1 行
无法打开新数据库 'Tmp_Db'。CREATE DATABASE 中止。





这个数据库里,就一个表,100W行数据。

起初做了,表分方案。有两个NDF,尼玛,突然不见了。
刚开始一开机就是置疑。

后面删除,附加就行了。
今天,尼玛附加 不上了,用语句也不行。

...全文
238 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhouixi 2012-04-27
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 的回复:]
你是ndf数据文件没了,不用妄想了 先恢复ndf吧
[/Quote]

我的天,上哪恢复去。都找不到了。难道就没有办法么。
billpu 2012-04-27
  • 打赏
  • 举报
回复
你是ndf数据文件没了,不用妄想了 先恢复ndf吧
zhouixi 2012-04-27
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]
这招玩过,广西一客户数据库坏了,就是这样恢复的。以后就从来没打过电话:)
[/Quote]

执行第一次的时候,

消息 5066,级别 16,状态 1,过程 sp_dboption,第 287 行
不能同时设置"单个用户"和"仅供 dbo 使用"这两个数据库选项。
消息 945,级别 14,状态 2,第 4 行
由于文件不可访问,或者内存或磁盘空间不足,所以无法打开数据库 'Tmp_Db'。有关详细信息,请参阅 SQL Server 错误日志。
@信心 2012-04-27
  • 打赏
  • 举报
回复
附加不行的话,
1、可行版本问题,高的兼容低的反之不行。
2、也有可能是权限问题,去年文件只读属性。
3、最后可能是系统问题了,只有reinstall
zhouixi 2012-04-27
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]
这招玩过,广西一客户数据库坏了,就是这样恢复的。以后就从来没打过电话:)
[/Quote]

呵呵 ,我试试看。如果行的话,结,贴如果不行。继续,回复讨论
一品梅 2012-04-27
  • 打赏
  • 举报
回复
这招玩过,广西一客户数据库坏了,就是这样恢复的。以后就从来没打过电话:)
zhouixi 2012-04-27
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]
右键数据库任务,选附加数据库,点省略号按钮找到mdf和ldf目录文件,然后附加即可,写什么代码。汗。。。
[/Quote]

兄弟不是我想这样写,直接右击附加根本不行。再说,我选文件之后,尼玛,
鸟电脑硬是要把NDF的信息带出来 我也没办法,所以 没办法附加,
你这招你用过没。。。
一品梅 2012-04-27
  • 打赏
  • 举报
回复
我把原来的数据库分离后,直接把日志文件给干掉了。原来在SQL 2000里经常这么干,只用一个mdf就附加了。没想到sql2005居然不行。我试验了一圈 终于找到一个成功的方法。转载,供后来者参考。

SQL2005 如何在没有日志文件的情况下如何恢复MDF数据库文件

第一步:先建立一个同名数据库,停止SQL SERVER2005,将没有日志的的.mdf数据库文件覆盖刚新建的.mdf数据库文件,重新启动数据库。

第三步:在查询分析器中运行如下代码:

alter database 数据库名 set emergency —将数据库设置为紧急状态

use master

declare @databasename varchar(255)

set @databasename=‘数据库名’ —你的.mdf文件文件名

exec sp_dboption @databasename, N’single‘, N’true’ —将目标数据库置为单用户状态

dbcc checkdb(@databasename,REPAIR_ALLOW_DATA_LOSS)

dbcc checkdb(@databasename,REPAIR_REBUILD)

exec sp_dboption @databasename, N’single‘, N’false’—将目标数据库置为多用户状态


执行出现“数据库其他多个文件与数据库主文件不匹配….”错误,再执行一次即可。
一品梅 2012-04-27
  • 打赏
  • 举报
回复
我把原来的数据库分离后,直接把日志文件给干掉了。原来在SQL 2000里经常这么干,只用一个mdf就附加了。没想到sql2005居然不行。我试验了一圈 终于找到一个成功的方法。转载,供后来者参考。

SQL2005 如何在没有日志文件的情况下如何恢复MDF数据库文件

第一步:先建立一个同名数据库,停止SQL SERVER2005,将没有日志的的.mdf数据库文件覆盖刚新建的.mdf数据库文件,重新启动数据库。

第三步:在查询分析器中运行如下代码:

alter database 数据库名 set emergency —将数据库设置为紧急状态

use master

declare @databasename varchar(255)

set @databasename=‘数据库名’ —你的.mdf文件文件名

exec sp_dboption @databasename, N’single‘, N’true’ —将目标数据库置为单用户状态

dbcc checkdb(@databasename,REPAIR_ALLOW_DATA_LOSS)

dbcc checkdb(@databasename,REPAIR_REBUILD)

exec sp_dboption @databasename, N’single‘, N’false’—将目标数据库置为多用户状态


执行出现“数据库其他多个文件与数据库主文件不匹配….”错误,再执行一次即可。
一品梅 2012-04-27
  • 打赏
  • 举报
回复
右键数据库任务,选附加数据库,点省略号按钮找到mdf和ldf目录文件,然后附加即可,写什么代码。汗。。。
//附加数据库 sp_attach_db 当使用 sp_attach_db 系统存储过程附加数据库时。 sp_attach_db:将数据库附加到服务器。 语法 sp_attach_db [ @dbname = ] 'dbname' , [ @filename1 = ] 'filename_n' [ ,...16 ] 参数 [@dbname =] 'dbname' 要附加到服务器的数据库的名称。该名称必须是唯一的。dbname 的数据类型为 sysname,默认值为 NULL。 [@filename1 =] 'filename_n' 数据库文件的物理名称,包括路径。filename_n 的数据类型为 nvarchar(260),默认值为 NULL。最多可以指定 16 个文件名。 参数名称以 @filename1 开始,递增到 @filename16。文件名列表至少必须包括主文件,主文件包含指向数据库中其它文件的系统表。 该列表还必须包括数据库分离后所有被移动的文件。 返回代码值:0(成功)或 1(失败) eg:下面的示例将 pubs 中的两个文件附加到当前服务器。 EXEC sp_attach_db @dbname = N'pubs', @filename1 = N'c:\Program Files\Microsoft SQL Server\MSSQL\Data\pubs.mdf', @filename2 = N'c:\Program Files\Microsoft SQL Server\MSSQL\Data\pubs_log.ldf' EXEC sp_attach_db @dbname = N'Ty20051029101451aaa', @filename1 = N'd:\5屏幕\Ty20051029101451aaa_data.mdf', @filename2 = N'd:\5屏幕\Ty20051029101451aaa_log.ldf' ---解决问题了 //删除数据库 DROP DATABASE 从Microsoft? SQL Server? 删除一个或多个数据库。删除数据库将删除数据库所使用的数据库文件和磁盘文件。 语法 :DROP DATABASE database_name [ ,...n ] 参数 :database_name 指定要删除的数据库名称。从 master 数据库中执行 sp_helpdb 以查看数据库列表。 eg: exec sp_helpdb database_name exec Drpo DataBase [Ty20051029101451aaa] //分离数据库 可以使用 sp_detach_db 存储过程分离该数据库,然后使用带有 FOR ATTACH 子句的 CREATE DATABASE 重新附加。 sp_detach_db Archive GO CREATE DATABASE Archive ON PRIMARY (FILENAME = 'c:\program files\microsoft sqlserver\mssql\data\archdat1.mdf') FOR ATTACH GO //显示当前数据库信息 --select * from Master..sysDatabases //新建---不行啊 CREATE DATABASE TestOA ALTER DATABASE TestOA SET OFFLINE WITH ROLLBACK IMMEDIATE RESTORE DATABASE TestOA From disk='C:\Documents and Settings\Administrator\桌面\帐套\data\Template.Dat' ALTER DATABASE TestOA SET OFFLINE WITH ROLLBACK IMMEDIATE exec sp_detach_db Km20051030011601 --分离数据库 exec sp_attach_single_file_db km20051030011601,'D:\TestDatabase\Km20051030011601.mdf'--只附加.mdf文件

22,300

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧