2009-06-18 85 views
2

我运行这段代码:如何通过恢复从sql 2000迁移到sql 2008?

RESTORE DATABASE [MyDB_2009May11] 
FROM DISK = N'C:\DB Copy\MyDB_2009May11.bak' 
WITH 
MOVE N'Archive_Data' 
    TO N'C:\Program Files\Microsoft SQL Server\MSSQL10.SQL2008\MSSQL\DATA\MyDB_2009May11.mdf', 
MOVE N'Data' 
    TO N'C:\Program Files\Microsoft SQL Server\MSSQL10.SQL2008\MSSQL\DATA\MyDB_2009May11.mdf', 
MOVE N'Log' 
    TO N'C:\Program Files\Microsoft SQL Server\MSSQL10.SQL2008\MSSQL\DATA\MyDB_2009May11.ldf', 
NOUNLOAD, 
STATS = 10 
GO 

我得到这个错误:

消息3176,级别16,状态1,行1个 文件“C:\ Program Files文件\ Microsoft SQL Server的\ MSSQL10.SQL2008 \ MSSQL \ DATA \ MyDB_2009May11.mdf'由'Archive_Data'(3)和'Data'(1)声明。 WITH MOVE子句可用于重定位一个或多个文件。 消息3013,级别16,状态1,行1 RESTORE DATABASE正在异常终止。

当我拥有的是备份文件时,如何从SQL Server 2000迁移到2008?

:)任何帮助表示赞赏。

回答

1

做一个SELECT * FROM sysaltfiles中,并期待在正确的文件名,然后更改名称在转会到本部据此

这会给你所有的文件组的名称目前

select filename from master..sysaltfiles 
where name = 'MyDB_2009May11' 

,如果你还没有的照本宣科DATABSE那么这样做第一。确保文件夹存在,你可能还需要改变的filesizes

CREATE DATABASE [MyDB_2009May11] ON (NAME = N'Data', 
    FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL10.SQL2008\MSSQL\DATA\MyDB_2009May11.mdf' 
    , SIZE = 12, FILEGROWTH = 10%), 
    (NAME = N'Archive_Data', 
    FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL10.SQL2008\MSSQL\DATA\MyDB_2009May11.ndf' 
    , SIZE = 12, FILEGROWTH = 10%) 
    LOG ON (NAME = N'Log', 
FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL10.SQL2008\MSSQL\DATA\MyDB_2009May11.ldf' 
    , SIZE = 21, FILEGROWTH = 10%) 
    COLLATE SQL_Latin1_General_CP1_CI_AS 

现在的恢复应该是这样的,注意存档文件组

RESTORE DATABASE [MyDB_2009May11] 
FROM DISK = N'C:\DB Copy\MyDB_2009May11.bak' 
WITH 
MOVE N'Archive_Data' 
    TO N'C:\Program Files\Microsoft SQL Server\MSSQL10.SQL2008\MSSQL\DATA\MyDB_2009May11.mdf', 
MOVE N'Data' 
    TO N'C:\Program Files\Microsoft SQL Server\MSSQL10.SQL2008\MSSQL\DATA\MyDB_2009May11.ndf', 
MOVE N'Log' 
    TO N'C:\Program Files\Microsoft SQL Server\MSSQL10.SQL2008\MSSQL\DATA\MyDB_2009May11.ldf', 
NOUNLOAD, 
STATS = 10 
GO 
3

你试图Archive_Data和数据移动到同一个文件 - 更改文件名,你应该罚款:)

+0

谢谢阿龙,我想这为t他最简单的答案。为你+1。 – Sebastian 2010-02-24 05:21:38

+0

这实际上是我的解决方案。我通过GUI来创建我的恢复脚本,但它有一些相同的文件名。所以我改变了他们,它的工作。 +1 – 2010-08-25 17:48:22

0

我就遇到了这个问题,以及在NDF扩展,只是对我一个小插件必须使用REPLACE条款,因为我恢复到数据库是不是在数据库备份的不同:

RESTORE DATABASE [MyDB_2009May11] 
FROM DISK = N'C:\DB Copy\MyDB_2009May11.bak' 
WITH 
MOVE N'Archive_Data' 
    TO N'C:\Program Files\Microsoft SQL Server\MSSQL10.SQL2008\MSSQL\DATA\MyDB_2009May11.mdf', 
MOVE N'Data' 
    TO N'C:\Program Files\Microsoft SQL Server\MSSQL10.SQL2008\MSSQL\DATA\MyDB_2009May11.ndf', 
MOVE N'Log' 
    TO N'C:\Program Files\Microsoft SQL Server\MSSQL10.SQL2008\MSSQL\DATA\MyDB_2009May11.ldf', 
**REPLACE**, 
NOUNLOAD, 
STATS = 10 
GO