sqlserver2000 的附加问题

sefeng1982 2011-10-27 10:15:26
sqlserver2000 里想通过附加的方法复制一个数据库,比如test 数据库。停止服务器,拷贝test 的MDF文件 ,通过改名 test1.mdf,同时修改附加文件里的文件位置,删除掉log的文件位置,但附加的时候提示 log的文件 可能有误。不知道有没有方法通过这样附加来 复制添加数据库。
...全文
531 29 打赏 收藏 转发到动态 举报
写回复
用AI写文章
29 条回复
切换为时间正序
请发表友善的回复…
发表回复
sunylf 2011-10-29
  • 打赏
  • 举报
回复
為什麼不備份后,再還原到一個新庫中去呢?
--小F-- 2011-10-27
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 sefeng1982 的回复:]
额,要求是原来的数据库还是需要存在运行的,就是原来的数据文件,日志文件都是还是在用的。新的数据库虽然名字不同,数据文件也不同,但在附加的时候每次都会提示日志文件有误。
[/Quote]
那需要停止服务。
sefeng1982 2011-10-27
  • 打赏
  • 举报
回复
[Quote=引用 22 楼 roy_88 的回复:]

引用 21 楼 sefeng1982 的回复:

引用 20 楼 roy_88 的回复:

引用 19 楼 sefeng1982 的回复:

问题就是在于,附加的时候,不管是有无日志文件,sqlserver 都会通过 MDF文件里的 filename 信息 得到日志文件,并且尝试去找这个文件,如果刚好有这个文件,它就会自动使用这个文件。但如果这个文件在使用中,sqlserver 就会……
[/Quote]
恩,企业管理器里 我也测试过了,修改数据库名字,修改数据文件位置和名字,删除日志文件, 它会提示新建日志的方式附加,但还是报错,报原来的那个日志文件有误,其实它还是去引用原来的日志文件了。
sefeng1982 2011-10-27
  • 打赏
  • 举报
回复
通过 dbcc checkprimaryfile('d:\mssqldata\pos2011.MDF',3) ,发现filename里的值 指定了源MFD文件和日志文件,我想 如何才能修改 MDF里的这个值呢?
中国风 2011-10-27
  • 打赏
  • 举报
回复
[Quote=引用 21 楼 sefeng1982 的回复:]

引用 20 楼 roy_88 的回复:

引用 19 楼 sefeng1982 的回复:

问题就是在于,附加的时候,不管是有无日志文件,sqlserver 都会通过 MDF文件里的 filename 信息 得到日志文件,并且尝试去找这个文件,如果刚好有这个文件,它就会自动使用这个文件。但如果这个文件在使用中,sqlserver 就会报错而不是自己创建一个。


指定不同文件夾,在……
[/Quote]
你是在企業管理器里操作?
附加時刪除這樣這日誌文件路徑
sefeng1982 2011-10-27
  • 打赏
  • 举报
回复
[Quote=引用 20 楼 roy_88 的回复:]

引用 19 楼 sefeng1982 的回复:

问题就是在于,附加的时候,不管是有无日志文件,sqlserver 都会通过 MDF文件里的 filename 信息 得到日志文件,并且尝试去找这个文件,如果刚好有这个文件,它就会自动使用这个文件。但如果这个文件在使用中,sqlserver 就会报错而不是自己创建一个。


指定不同文件夾,在同一個實例附加時把數據庫改為新DBName
[/Quote]

不同文件夹也没用哦,只要是原来的日志文件没改变过位置,而且在使用,就不能成功。
中国风 2011-10-27
  • 打赏
  • 举报
回复
[Quote=引用 19 楼 sefeng1982 的回复:]

问题就是在于,附加的时候,不管是有无日志文件,sqlserver 都会通过 MDF文件里的 filename 信息 得到日志文件,并且尝试去找这个文件,如果刚好有这个文件,它就会自动使用这个文件。但如果这个文件在使用中,sqlserver 就会报错而不是自己创建一个。
[/Quote]

指定不同文件夾,在同一個實例附加時把數據庫改為新DBName
sefeng1982 2011-10-27
  • 打赏
  • 举报
回复
问题就是在于,附加的时候,不管是有无日志文件,sqlserver 都会通过 MDF文件里的 filename 信息 得到日志文件,并且尝试去找这个文件,如果刚好有这个文件,它就会自动使用这个文件。但如果这个文件在使用中,sqlserver 就会报错而不是自己创建一个。
sefeng1982 2011-10-27
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 qianjin036a 的回复:]

SQL code
use master
go
create database test
go
use master
go
sp_detach_db test
go
/*

在cmd窗口执行下列语句:

copy C:\Program Files\Microsoft SQL Server\MSSQL$SQL2000\Data\test.mdf d:\
del c:\Program Files\M……
[/Quote]
对的,这种先后顺序是可以的,就是原来的那个数据库先不能运行,而且原来的那份日志文件需要被删除或者移动位置。
-晴天 2011-10-27
  • 打赏
  • 举报
回复
use master
go
create database test
go
use master
go
sp_detach_db test
go
/*

在cmd窗口执行下列语句:

copy C:\Program Files\Microsoft SQL Server\MSSQL$SQL2000\Data\test.mdf d:\
del c:\Program Files\Microsoft SQL Server\MSSQL$SQL2000\Data\test_log.ldf

*/
go
--sp_attach_db 'test','C:\Program Files\Microsoft SQL Server\MSSQL$SQL2000\Data\test.mdf'
sp_attach_single_file_db 'test1','d:\test.mdf'
/*
设备激活错误。物理文件名 'C:\Program Files\Microsoft SQL Server\MSSQL$SQL2000\data\test_log.LDF' 可能有误。
已创建名为 'd:\test1_log.LDF' 的新日志文件。
*/
go
--use test1
sp_attach_single_file_db 'test','C:\Program Files\Microsoft SQL Server\MSSQL$SQL2000\Data\test.mdf'
/*
设备激活错误。物理文件名 'C:\Program Files\Microsoft SQL Server\MSSQL$SQL2000\data\test_log.LDF' 可能有误。
已创建名为 'C:\Program Files\Microsoft SQL Server\MSSQL$SQL2000\Data\test_log.LDF' 的新日志文件。
*/
go
--两个数据库都有了
sefeng1982 2011-10-27
  • 打赏
  • 举报
回复
EXEC sp_attach_single_file_db 'pos2011','D:\MssqlData\MSSQL\Data\pos2011.mdf'
报以下错误:
服务器: 消息 5105,级别 16,状态 4,行 1
设备激活错误。物理文件名 'D:\MssqlData\MSSQL\Data\POS2010_log.LDF' 可能有误。
服务器: 消息 1813,级别 16,状态 1,行 1
未能打开新数据库 'pos2011'。CREATE DATABASE 将终止。
设备激活错误。物理文件名 'D:\MssqlData\MSSQL\Data\POS2010_log.LDF' 可能有误。
sefeng1982 2011-10-27
  • 打赏
  • 举报
回复
测试了,改文件名和日志名 是可以的,但如果单单是mdf文件,无论怎么改名,在原来的 日志文件存在却还在使用的情况下,新的数据库都会去引用原来的日志文件,虽然提示会新建一个日志文件。
唐诗三百首 2011-10-27
  • 打赏
  • 举报
回复
不会吧,提示什么错误?

楼主可以私信找我喔.
sefeng1982 2011-10-27
  • 打赏
  • 举报
回复
囧,注意是sqlserver2000 的版本,不是2005 或者2008 .我这边用语句或者手工附加 都测试了 不成功。
大力水手 2011-10-27
  • 打赏
  • 举报
回复
过来学习一下...
唐诗三百首 2011-10-27
  • 打赏
  • 举报
回复

-- 附加数据库
exec sp_attach_db '[新数据库名]','[mdf的路径\文件名]'
-晴天 2011-10-27
  • 打赏
  • 举报
回复
你只拷一个数据文件去就能附加了.
sefeng1982 2011-10-27
  • 打赏
  • 举报
回复
额,要求是原来的数据库还是需要存在运行的,就是原来的数据文件,日志文件都是还是在用的。新的数据库虽然名字不同,数据文件也不同,但在附加的时候每次都会提示日志文件有误。
-晴天 2011-10-27
  • 打赏
  • 举报
回复
sp_attach_single_file_db [ @dbname= ] 'dbname'
, [ @physname= ] 'physical_name'


备注
仅对先前通过显式 sp_detach_db 操作从服务器分离的数据库或复制的数据库使用 sp_attach_single_file_db。

sp_attach_single_file_db 仅对具有单个日志文件的数据库起作用。sp_attach_single_file_db 在将数据库附加到服务器时,它会生成一个新的日志文件。如果该数据库是只读数据库,则会在日志文件的先前位置生成日志文件。

sefeng1982 2011-10-27
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 roy_88 的回复:]

SQL code
EXEC sp_attach_single_file_db @dbname = '库名',
@physname = 'c:\Program Files\Microsoft SQL Server\MSSQL\Data\库名.mdf'
[/Quote]

额,原来的数据库还是在运行着哦。
我用以下的语句附加数据库,但提示log文件还是有误。
EXEC sp_attach_single_file_db 'test1','X:\代码\sql管理器\Exe\Data\test1.MDF'
加载更多回复(9)
//附加数据库 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文件

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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