sqlserver2000 的附加问题

时间:2022-06-01 18:57:56
sqlserver2000 里想通过附加的方法复制一个数据库,比如test 数据库。停止服务器,拷贝test 的MDF文件 ,通过改名 test1.mdf,同时修改附加文件里的文件位置,删除掉log的文件位置,但附加的时候提示 log的文件 可能有误。不知道有没有方法通过这样附加来 复制添加数据库。

29 个解决方案

#1


在附加时,删除掉日志文件,它会自动建一个的.

#2


但数据库名或许要改一下,如果你的服务器上有同名数据库,或原数据库还想再附加回来的话.

#3


日志文件--附加時刪除路徑,保留數據庫文件路徑

#4


有mdf就可以了,log可以自动创建

#5


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

#6


额,原来的数据库还是在运行着哦。
我用以下的语句附加数据库,但提示log文件还是有误。
EXEC sp_attach_single_file_db 'test1','X:\代码\sql管理器\Exe\Data\test1.MDF'

#7


引用 5 楼 roy_88 的回复:
SQL code
EXEC sp_attach_single_file_db @dbname = '库名', 
   @physname = 'c:\Program Files\Microsoft SQL Server\MSSQL\Data\库名.mdf'


额,原来的数据库还是在运行着哦。
我用以下的语句附加数据库,但提示log文件还是有误。
EXEC sp_attach_single_file_db 'test1','X:\代码\sql管理器\Exe\Data\test1.MDF'

#8


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 在将数据库附加到服务器时,它会生成一个新的日志文件。如果该数据库是只读数据库,则会在日志文件的先前位置生成日志文件。 

#9


额,要求是原来的数据库还是需要存在运行的,就是原来的数据文件,日志文件都是还是在用的。新的数据库虽然名字不同,数据文件也不同,但在附加的时候每次都会提示日志文件有误。

#10


你只拷一个数据文件去就能附加了.

#11



 -- 附加数据库
 exec sp_attach_db '[新数据库名]','[mdf的路径\文件名]'

#12


过来学习一下...

#13


囧,注意是sqlserver2000 的版本,不是2005 或者2008 .我这边用语句或者手工附加 都测试了 不成功。

#14


不会吧,提示什么错误?

楼主可以私信找我喔.

#15


测试了,改文件名和日志名 是可以的,但如果单单是mdf文件,无论怎么改名,在原来的 日志文件存在却还在使用的情况下,新的数据库都会去引用原来的日志文件,虽然提示会新建一个日志文件。

#16


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' 可能有误。

#17


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
--两个数据库都有了

#18


引用 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……

对的,这种先后顺序是可以的,就是原来的那个数据库先不能运行,而且原来的那份日志文件需要被删除或者移动位置。

#19


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

#20


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


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

#21


引用 20 楼 roy_88 的回复:
引用 19 楼 sefeng1982 的回复:

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


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


不同文件夹也没用哦,只要是原来的日志文件没改变过位置,而且在使用,就不能成功。

#22


引用 21 楼 sefeng1982 的回复:
引用 20 楼 roy_88 的回复:

引用 19 楼 sefeng1982 的回复:

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


指定不同文件夾,在……

你是在企業管理器里操作?
附加時刪除這樣這日誌文件路徑

#23


通过 dbcc checkprimaryfile('d:\mssqldata\pos2011.MDF',3)  ,发现filename里的值 指定了源MFD文件和日志文件,我想 如何才能修改 MDF里的这个值呢?

#24


引用 22 楼 roy_88 的回复:
引用 21 楼 sefeng1982 的回复:

引用 20 楼 roy_88 的回复:

引用 19 楼 sefeng1982 的回复:

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

恩,企业管理器里 我也测试过了,修改数据库名字,修改数据文件位置和名字,删除日志文件, 它会提示新建日志的方式附加,但还是报错,报原来的那个日志文件有误,其实它还是去引用原来的日志文件了。

#25


引用 9 楼 sefeng1982 的回复:
额,要求是原来的数据库还是需要存在运行的,就是原来的数据文件,日志文件都是还是在用的。新的数据库虽然名字不同,数据文件也不同,但在附加的时候每次都会提示日志文件有误。

那需要停止服务。

#26


dbcc checkprimaryfile('d:\mssqldata\pos2011.MDF',3) ,如何修改MDF里的 filename 的值?
我想通过修改mdf里的值,让他找不到原来的那个文件来解决问题,不知道是否可以~!~

#27


引用 26 楼 sefeng1982 的回复:
dbcc checkprimaryfile('d:\mssqldata\pos2011.MDF',3) ,如何修改MDF里的 filename 的值?
我想通过修改mdf里的值,让他找不到原来的那个文件来解决问题,不知道是否可以~!~


应该不可以,日志文件是数据库运行的重要文档,一个在服务器中的数据库,是不能"找不到"日志文件的,要是"找不到",它一定会立即重建一个.

#28


引用 27 楼 qianjin036a 的回复:
引用 26 楼 sefeng1982 的回复:
dbcc checkprimaryfile('d:\mssqldata\pos2011.MDF',3) ,如何修改MDF里的 filename 的值?
我想通过修改mdf里的值,让他找不到原来的那个文件来解决问题,不知道是否可以~!~


应该不可以,日志文件是数据库运行的重要文档,一个在服务器中的数据库,是不能"找不到"日志文件的,要是……

现在的问题就是他找到了,结果发现日志文件在被使用了,就不能附加新数据库了,真是悲剧啊,所以想修改MDF文件,把里面的日志文件地址改成一个不存在的文件地址,让他自动创建一个。

#29


為什麼不備份后,再還原到一個新庫中去呢?

#1


在附加时,删除掉日志文件,它会自动建一个的.

#2


但数据库名或许要改一下,如果你的服务器上有同名数据库,或原数据库还想再附加回来的话.

#3


日志文件--附加時刪除路徑,保留數據庫文件路徑

#4


有mdf就可以了,log可以自动创建

#5


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

#6


额,原来的数据库还是在运行着哦。
我用以下的语句附加数据库,但提示log文件还是有误。
EXEC sp_attach_single_file_db 'test1','X:\代码\sql管理器\Exe\Data\test1.MDF'

#7


引用 5 楼 roy_88 的回复:
SQL code
EXEC sp_attach_single_file_db @dbname = '库名', 
   @physname = 'c:\Program Files\Microsoft SQL Server\MSSQL\Data\库名.mdf'


额,原来的数据库还是在运行着哦。
我用以下的语句附加数据库,但提示log文件还是有误。
EXEC sp_attach_single_file_db 'test1','X:\代码\sql管理器\Exe\Data\test1.MDF'

#8


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 在将数据库附加到服务器时,它会生成一个新的日志文件。如果该数据库是只读数据库,则会在日志文件的先前位置生成日志文件。 

#9


额,要求是原来的数据库还是需要存在运行的,就是原来的数据文件,日志文件都是还是在用的。新的数据库虽然名字不同,数据文件也不同,但在附加的时候每次都会提示日志文件有误。

#10


你只拷一个数据文件去就能附加了.

#11



 -- 附加数据库
 exec sp_attach_db '[新数据库名]','[mdf的路径\文件名]'

#12


过来学习一下...

#13


囧,注意是sqlserver2000 的版本,不是2005 或者2008 .我这边用语句或者手工附加 都测试了 不成功。

#14


不会吧,提示什么错误?

楼主可以私信找我喔.

#15


测试了,改文件名和日志名 是可以的,但如果单单是mdf文件,无论怎么改名,在原来的 日志文件存在却还在使用的情况下,新的数据库都会去引用原来的日志文件,虽然提示会新建一个日志文件。

#16


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' 可能有误。

#17


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
--两个数据库都有了

#18


引用 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……

对的,这种先后顺序是可以的,就是原来的那个数据库先不能运行,而且原来的那份日志文件需要被删除或者移动位置。

#19


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

#20


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


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

#21


引用 20 楼 roy_88 的回复:
引用 19 楼 sefeng1982 的回复:

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


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


不同文件夹也没用哦,只要是原来的日志文件没改变过位置,而且在使用,就不能成功。

#22


引用 21 楼 sefeng1982 的回复:
引用 20 楼 roy_88 的回复:

引用 19 楼 sefeng1982 的回复:

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


指定不同文件夾,在……

你是在企業管理器里操作?
附加時刪除這樣這日誌文件路徑

#23


通过 dbcc checkprimaryfile('d:\mssqldata\pos2011.MDF',3)  ,发现filename里的值 指定了源MFD文件和日志文件,我想 如何才能修改 MDF里的这个值呢?

#24


引用 22 楼 roy_88 的回复:
引用 21 楼 sefeng1982 的回复:

引用 20 楼 roy_88 的回复:

引用 19 楼 sefeng1982 的回复:

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

恩,企业管理器里 我也测试过了,修改数据库名字,修改数据文件位置和名字,删除日志文件, 它会提示新建日志的方式附加,但还是报错,报原来的那个日志文件有误,其实它还是去引用原来的日志文件了。

#25


引用 9 楼 sefeng1982 的回复:
额,要求是原来的数据库还是需要存在运行的,就是原来的数据文件,日志文件都是还是在用的。新的数据库虽然名字不同,数据文件也不同,但在附加的时候每次都会提示日志文件有误。

那需要停止服务。

#26


dbcc checkprimaryfile('d:\mssqldata\pos2011.MDF',3) ,如何修改MDF里的 filename 的值?
我想通过修改mdf里的值,让他找不到原来的那个文件来解决问题,不知道是否可以~!~

#27


引用 26 楼 sefeng1982 的回复:
dbcc checkprimaryfile('d:\mssqldata\pos2011.MDF',3) ,如何修改MDF里的 filename 的值?
我想通过修改mdf里的值,让他找不到原来的那个文件来解决问题,不知道是否可以~!~


应该不可以,日志文件是数据库运行的重要文档,一个在服务器中的数据库,是不能"找不到"日志文件的,要是"找不到",它一定会立即重建一个.

#28


引用 27 楼 qianjin036a 的回复:
引用 26 楼 sefeng1982 的回复:
dbcc checkprimaryfile('d:\mssqldata\pos2011.MDF',3) ,如何修改MDF里的 filename 的值?
我想通过修改mdf里的值,让他找不到原来的那个文件来解决问题,不知道是否可以~!~


应该不可以,日志文件是数据库运行的重要文档,一个在服务器中的数据库,是不能"找不到"日志文件的,要是……

现在的问题就是他找到了,结果发现日志文件在被使用了,就不能附加新数据库了,真是悲剧啊,所以想修改MDF文件,把里面的日志文件地址改成一个不存在的文件地址,让他自动创建一个。

#29


為什麼不備份后,再還原到一個新庫中去呢?