代码之家  ›  专栏  ›  技术社区  ›  RSolberg

如何将数据库备份和还原为同一服务器上的副本?

  •  23
  • RSolberg  · 技术社区  · 15 年前

    我有一个SQL2005 Express数据库,希望在同一个实例上创建的副本。你怎么用剧本来做这个?

    我已经有了生成备份的脚本,但还原失败…

    错误:

    消息3234,级别16,状态2,行2 逻辑文件'mydb_data'不是一部分 数据库'mydb_test'的。使用恢复 filelistOnly列出逻辑文件 名字。
    消息3013,级别16,状态1, 第2行还原数据库正在终止 异常地

    决议:

    RESTORE DATABASE [MyDB_Test]
    FROM DISK = 'C:\temp\SQL\MyDB.bak'
    WITH
    MOVE 'MyDB' TO 'C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\MyDB_Test.mdf'
    , MOVE 'MyDB_log' TO 'C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\MyDB_Test_log.ldf'
    , REPLACE;
    

    原因:
    我第一次尝试时没有正确地识别逻辑路径。

    3 回复  |  直到 10 年前
        1
  •  40
  •   Nick Kavadias    11 年前

    RESTORE FILELISTONLY 是一个信息性命令,不需要执行还原。用户可以使用它来确定数据文件的逻辑名称,这些名称可以与 MOVE 用于将数据库还原到新位置的命令。

    根据需要使用的错误消息建议 仅还原文件列表 查看数据库的逻辑名称。还原命令有这些错误。

    下面是您需要做的工作示例:

    --backup the database
    backup database test1 to disk='c:\test1_full.bak'
    
    -- use the filelistonly command to work out  what the logical names 
    -- are to use in the MOVE commands.  the logical name needs to
    -- stay the same, the physical name can change
    restore filelistonly from disk='c:\test1_full.bak'
     --------------------------------------------------
    |  LogicalName  |           PhysicalName           |
     --------------------------------------------------
    | test1         | C:\mssql\data\test1.mdf          |
    | test1_log     | C:\mssql\data\test1_log.ldf      |
     -------------------------------------------------
    
    restore database test2 from disk='c:\test1_full.bak'
    with move 'test1' to 'C:\mssql\data\test2.mdf',
    move 'test1_log' to 'C:\mssql\data\test2.ldf'
    
        3
  •  0
  •   T.Todua Laurent W.    10 年前

    以下是一些备选方案:

    数据库恢复(从.bak)软件:

    1) SqlRestoreSetup

    2) Apex SQL Restore