如何将SQL SERVER 2000数据库的文件*.mdf附加到SQL SERVER 2005中去,我试了一下,提示“附加数据库错误”,应该怎样才能执行正确呢?

解决方案 »

  1.   

    先将原先的2000数据库detach掉,或者停止服务,再试试看
      

  2.   

    sp_attach_db 'dbname','.... mdf','.... ldf'
      

  3.   

    各位能不能说的详细点,这里的数据库文件是“Tripdat.mdf”和“Triplog.ldf”,谢谢了~
      

  4.   

    错误信息如下:
    标题: Microsoft SQL Server Management Studio Express
    ------------------------------附加数据库 对于 服务器“CHENCHAO-PC\SQLEXPRESS”失败。  (Microsoft.SqlServer.Express.Smo)有关帮助信息,请单击: http://go.microsoft.com/fwlink?ProdName=Microsoft+SQL+Server&ProdVer=9.00.3042.00&EvtSrc=Microsoft.SqlServer.Management.Smo.ExceptionTemplates.FailedOperationExceptionText&EvtID=附加数据库+Server&LinkId=20476------------------------------
    其他信息:执行 Transact-SQL 语句或批处理时发生了异常。 (Microsoft.SqlServer.Express.ConnectionInfo)------------------------------无法打开物理文件 "D:\Trip\TripDB\Tripdat.mdf"。操作系统错误 5:"5(拒绝访问。)"。 (Microsoft SQL Server,错误: 5120)有关帮助信息,请单击: http://go.microsoft.com/fwlink?ProdName=Microsoft+SQL+Server&ProdVer=09.00.3042&EvtSrc=MSSQLServer&EvtID=5120&LinkId=20476------------------------------
    按钮:确定
    ------------------------------
      

  5.   

    你要先确定你的这两个文件是可以被访问的,就必须关掉2000数据库服务,或者detach掉这个DB,你可以通过拷贝这两个文件来证明是否可以访问
      

  6.   

    给你拷贝一个KB看看,应该就清楚了:
     =================================================
    概要
    本文描述如何更改任何 SQL Server 7.0、SQL Server 2000 或 SQL Server 2005 数据库的数据和日志文件的位置。
    回到顶端更多信息
    更改某些 SQL Server 系统数据库的位置必须遵循的步骤与更改用户数据库的位置必须遵循的步骤不同。将分别对这些特殊情况给予说明。
    注意:SQL Server 7.0 系统数据库与 SQL Server 2000 不兼容。不要将 SQL Server 7.0 master、model、msdb 或分发数据库附加到 SQL Server 2000。如果您使用的是 SQL Server 2005,则只能将 SQL Server 2005 数据库附加到一个实例。
    本文的所有示例都假设 SQL Server 安装在 D:\Mssql7 目录中,而且所有数据库和日志文件都位于默认目录 D:\Mssql7\Data 中。这些示例将所有数据库的数据和日志文件都移到 E:\Sqldata。
    回到顶端先决条件
    • 从数据库的当前位置备份当前所有数据库,尤其是 master 数据库。 
    • 必须具有系统管理员 (sa) 权限。 
    • 必须知道数据库的所有数据文件和日志文件的名称及当前位置。注意:可以使用存储过程 sp_helpfile 来确定数据库所使用的所有文件的名称和当前位置:use <database_name>
    go
    sp_helpfile
    go
     
    • 应可以以独占方式访问被移动的数据库。如果在此过程中出现问题并且无法访问已经移动的数据库,或无法启动 SQL Server,则需要查看 SQL Server 错误日志和 SQL Server 联机丛书以获取这些错误的更多信息。 回到顶端移动用户数据库
    以下示例将移动一个名为 mydb 的数据库,该数据库包含一个数据文件 Mydb.mdf 和一个日志文件 Mydblog.ldf。如果您要移动的数据库还有其他数据或日志文件,请在存储过程 sp_attach_db 中用一个逗号分隔的列表将它们全部列出。无论数据库包含多少文件,存储过程 sp_detach_db 都不会更改,原因是它不会列出这些文件。 1. 按如下所示分离数据库:use master
       go
       sp_detach_db 'mydb'
       go
     
    2. 然后,将数据和日志文件从当前位置 (D:\Mssql7\Data) 复制到新位置 (E:\Sqldata)。 
    3. 按如下所示重新附加指向新位置中这些文件的数据库:use master
      go
      sp_attach_db 'mydb','E:\Sqldata\mydbdata.mdf','E:\Sqldata\mydblog.ldf'
      go
    使用 sp_helpfile 确认文件位置的更改:use mydb
       go
       sp_helpfile
       go
    filename 列的值应当反映出新的位置。 回到顶端移动 pubs 和 Northwind
    使用与移动用户数据库相同的步骤。
    回到顶端移动 MSDB (SQL Server 7.0)
    注意:如果您在移动 msdb 和 model 数据库的同时结合使用此过程,则重新附加的顺序必须首先是 model,然后是 msdb。如果首先重新附加的是 msdb,则必须将它分离,等到附加完 model 后再重新附加。 1. 确保 SQL Server 代理当前没有运行。 
    2. 使用与移动用户数据库相同的步骤。 
    注意:如果 SQL Server 代理正在运行,则 sp_detach_db 存储过程将会失败,并返回以下消息:
    服务器:消息 3702,级别 16,状态 1,行 0
    无法删除数据库 'msdb',因为该数据库当前正在使用。
    DBCC 执行完毕。如果 DBCC 输出了错误消息,请与系统管理员联系。
    回到顶端移动 MSDB 数据库(SQL Server 2000 和 SQL Server 2005)
    注意:如果您在移动 msdb 和 model 数据库的同时结合使用此过程,则重新附加的顺序必须首先是 model,然后是 msdb。如果首先重新附加的是 msdb,则必须将它分离,等到附加完 model 后再重新附加。在 SQL Server 2000 和 SQL Server 2005 中,不能使用 sp_detach_db 存储过程分离系统数据库。运行 sp_detach_db 'msdb' 将会失败并返回以下消息:
    服务器:消息 7940,级别 16,状态 1,行 1
    无法分离系统数据库 master、model、msdb 和 tempdb。
    要在 SQL Server 2000 上移动 MSDB 数据库,请按照下列步骤操作: 1. 在 SQL Server 企业管理器中,右键单击服务器名,然后单击属性。 
    2. 在常规选项卡上,单击启动参数。 
    3. 添加一个新参数“-T3608”(不带引号)。 
    添加跟踪标记 3608 后,按照下列步骤操作: 1. 停止并重新启动 SQL Server。 
    2. 确保 SQL Server 代理服务当前没有运行。 
    3. 按如下所示分离 msdb 数据库:use master
    go
    sp_detach_db 'msdb'
    go
     
    4. 将 Msdbdata.mdf 和 Msdblog.ldf 文件从当前位置 (D:\Mssql8\Data) 移到新位置 (E:\Mssql8\Data)。 
    5. 在企业管理器中,从启动参数框中删除 -T3608 跟踪标记。 
    6. 停止并重新启动 SQL Server。 
    7. 按如下所示重新附加 MSDB 数据库:use master
    go 
    sp_attach_db 'msdb','E:\Mssql8\Data\msdbdata.mdf','E:\Mssql8\Data\msdblog.ldf' 
    go
    注意:如果您试图通过使用跟踪标记 -T3608 启动 SQL Server 来重新附加 msdb 数据库,会收到以下错误:
    服务器:消息 615,级别 21,状态 1,行 1
    未能找到 ID 为 3,名称为 'model' 的数据库表。 回到顶端如果您使用的是 SQL Server 2005
    可以使用 SQL Server 配置管理器来更改 SQL Server 服务的启动参数。有关如何更改启动参数的更多信息,请访问以下 Microsoft Developer Network 网站:
    http://msdn2.microsoft.com/zh-cn/library/ms190737.aspx (http://msdn2.microsoft.com/zh-cn/library/ms190737.aspx)
    移动 MSDB 数据库后,可能会收到以下错误消息:
    错误 229:拒绝了对对象 'ObjectName' (数据库 'master',所有者 'dbo')的执行权限。
    发生此问题的原因是所有权链断裂。MSDB 数据库和 master 数据库的所有者不相同。因此,MSDB 数据库的所有权已经发生更改。要解决此问题,请在 Isql.exe 命令行实用工具或 Osql.exe 命令行实用工具中运行以下命令:
    USE MSDB
    Go
    EXEC sp_changedbowner 'sa'
    Go
    有关更多信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章: 
    272424 (http://support.microsoft.com/kb/272424/) INF:数据库范围内的对象所有权链检查取决于映射至对象所有者的登录信息 
    回到顶端移动 master 数据库
    1. 在 SQL Server 企业管理器中,更改 master 数据和日志文件的路径。注意:您也可以在此更改错误日志的位置。 
    2. 在企业管理器中,右键单击 SQL Server,然后单击属性。 
    3. 单击启动参数,将会显示以下条目:-dD:\MSSQL7\data\master.mdf
    -eD:\MSSQL7\log\ErrorLog
    -lD:\MSSQL7\data\mastlog.ldf
    -d 是 master 数据库数据文件的完全限定路径。-e 是错误日志文件的完全限定路径。-l 是 master 数据库日志文件的完全限定路径。 
    4. 按如下所示更改这些值: a.  删除 Master.mdf 和 Mastlog.ldf 文件的当前条目。 
    b.  添加指定新位置的新条目:-dE:\SQLDATA\master.mdf
    -lE:\SQLDATA\mastlog.ldf
     
     
    5. 停止 SQL Server。 
    6. 将 Master.mdf 和 Mastlog.ldf 文件复制到新位置 (E:\Sqldata)。 
    7. 重新启动 SQL Server。 回到顶端移动 model 数据库
    要移动 model 数据库,必须用跟踪标记 3608 启动 SQL Server,这样它不会恢复除 master 之外的任何数据库。注意:此时,您不能立即访问任何用户数据库。使用此跟踪标记时,除下列步骤外,不要执行其他任何操作。要将跟踪标记 3608 添加为 SQL Server 启动参数,请按照下列步骤操作: 1. 在 SQL Server 企业管理器中,右键单击服务器名,然后单击“属性”。 
    2. 在“常规”选项卡上,单击“启动参数”。 
    3. 添加一个新参数“-T3608”(不带引号)。 添加跟踪标记 3608 后,按照下列步骤操作: 1. 停止并重新启动 SQL Server。 
    2. 按如下所示分离“model”数据库:use master
       go
       sp_detach_db 'model'
       go
     
    3. 将 Model.mdf 和 Modellog.ldf 文件从 D:\Mssql7\Data 移到 E:\Sqldata。 
    4. 按如下所示重新附加 model 数据库:use master
       go
       sp_attach_db 'model','E:\Sqldata\model.mdf','E:\Sqldata\modellog.ldf'
       go
     
    5. 在企业管理器中,从启动参数框中删除 -T3608 跟踪标记。 
    6. 停止并重新启动 SQL Server。您可以使用 sp_helpfile 确认文件位置的更改:use model
       go
       sp_helpfile
       go
     回到顶端移动 tempdb
    您可以使用 ALTER DATABASE 语句来移动 tempdb 文件。 1. 按如下所示使用 sp_helpfile 确定 tempdb 数据库的逻辑文件名:use tempdb
    go
    sp_helpfile
    go
    每个文件的逻辑名均包含在名称列中。该示例使用了默认文件名 tempdev 和 templog。 
    2. 按如下所示使用 ALTER DATABASE 语句指定逻辑文件名:use master
    go
    Alter database tempdb modify file (name = tempdev, filename = 'E:\Sqldata\tempdb.mdf')
    go
    Alter database tempdb modify file (name = templog, filename = 'E:\Sqldata\templog.ldf')
    go
    应当收到以下确认更改的消息:
    文件“tempdev”在 sysaltfiles 中被修改。重新启动 SQL Server 后会删除旧文件。文件“templog”在 sysaltfiles 中被修改。重新启动 SQL Server 后会删除旧文件。 
    3. 在 tempdb 中使用 sp_helpfile 将会在重新启动 SQL Server 后才确认这些更改。 
    4. 停止并重新启动 SQL Server。  
      

  7.   

    无法打开物理文件 "D:\Trip\TripDB\Tripdat.mdf"。操作系统错误 5:"5(拒绝访问。)"。 
    提示你打不开啊,
    用的什么帐号登录的,时不时权限不够?
      

  8.   

    无法打开物理文件 "D:\Trip\TripDB\Tripdat.mdf"。操作系统错误 5:"5(拒绝访问。)"。 
    ---是不是2000的 库在用这个文件呀,先停数据库复制成另一份到另一个目录附加新目录中的文件
      

  9.   

    Tripdat.mdf,Triplog.ldf 这两个文件根本没有在使用中,因为这2个文件是从别人机子中拷过来的,我机子里没有SQL SERVER 2000,只有2005
      

  10.   

    说得这么复杂。其实你只要把存放数据库的那个文件夹添加一个everyone的完全控制权限。应该就可以搞定了。
      

  11.   

    Sql server2005不支持低版本的!
      我也试了 好多次了
      只能把 2005的 数据生成脚本  然后在 2000的查询分析器里重新 建了!