【问题标题】:how to migrate from sql 2000 to sql 2008 via restore?如何通过还原从 sql 2000 迁移到 sql 2008?
【发布时间】:2023-03-26 10:48:01
【问题描述】:

我正在运行这段代码:

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?

:) 任何帮助表示赞赏。

【问题讨论】:

    标签: sql sql-server-2008 migrate


    【解决方案1】:

    您正在尝试将 Archive_Data 和 Data 移动到同一个文件 - 更改文件名,您应该没问题 :)

    【讨论】:

    • 谢谢亚伦,我认为这是最简单的答案。为你 +1。
    • 这实际上是我的解决方案。我通过 GUI 创建了我的恢复脚本,但它有一些文件名相同。所以我改变了它们并且它起作用了。 +1
    【解决方案2】:

    从 sysaltfiles 中选择 * 并查看正确的文件名,然后相应地更改 move to part 中的名称

    这将为您提供当前所有文件组的名称

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

    如果您还没有编写数据库脚本,请先执行此操作。确保文件夹存在,您可能还想更改文件大小

        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
    

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

    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】:

    我也遇到了这个问题,我不得不使用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 
    

    【讨论】:

      猜你喜欢
      • 2010-12-18
      • 2011-09-20
      • 2013-02-08
      • 2010-12-17
      • 2010-12-12
      • 1970-01-01
      • 1970-01-01
      • 2023-03-16
      • 1970-01-01
      相关资源
      最近更新 更多