【问题标题】:script to restore database sql server from bak file, doesn't work从 bak 文件恢复数据库 sql server 的脚本,不起作用
【发布时间】:2016-02-20 10:02:18
【问题描述】:

我有一个空数据库:

DB_Clients

我想从.bak 文件中恢复数据库:

OldDBClients.bak

这是路径:

C:\OldDBClients.bak

这是我的脚本:

USE [master]
GO
    RESTORE DATABASE DB_Clients
    FROM DISK = 'C:\OldDBClients.bak'

当我执行它时,我收到以下错误消息:

消息 3154,第 16 级,状态 4,第 15 行
备份集包含现有“DB_Clients”数据库以外的数据库的备份。
消息 3013,第 16 级,状态 1,第 15 行
RESTORE DATABASE 异常终止。

谁能告诉我为什么会这样? 我必须指出该文件具有读写权限。

谢谢。

【问题讨论】:

    标签: sql-server database-restore sql-scripts


    【解决方案1】:

    第 1 步: 使用以下命令检查逻辑文件名:

    RESTORE FILELISTONLY 
    FROM DISK = 'E:\DBBackups\mydb.bak'
    

    第 2 步:在以下查询中使用从上述查询中获得的逻辑名称:

     RESTORE DATABASE [mydb_new]
      FILE = N'<MDFLogicalName>'
      FROM DISK = N'E:\DBBackups\mydb.bak'
      WITH 
        FILE = 1, NOUNLOAD, STATS = 10,
        MOVE N'<MDFLogicalname>'
        TO N'E:\DBBackups\mydb_new.mdf',
        MOVE N'<LDFLogicalName>'
        TO N'E:\DBBackups\mydb_new_0.ldf'
    

    使用正确的值运行上述命令后,您将看到如下输出:

    10 percent processed.
    20 percent processed.
    30 percent processed.
    40 percent processed.
    50 percent processed.
    60 percent processed.
    70 percent processed.
    80 percent processed.
    90 percent processed.
    100 percent processed.
    Processed 7672 pages for database 'mydb_new', file '<MDFLogicalname>' on file 1.
    Processed 5 pages for database 'mydb_new', file '<LDFLogicalName>' on file 1.
    RESTORE DATABASE ... FILE=<name> successfully processed 7677 pages in 0.780 seconds (76.893 MB/sec).
    
    Completion time: 2019-10-20T11:35:31.8343787+05:30
    

    【讨论】:

    • 你能解释一下 file = 1 的用途吗?
    【解决方案2】:

    您需要使用WITH REPLACE 选项来覆盖现有数据库。

    RESTORE DATABASE DB_Clients
    FROM DISK = 'C:\OldDBClients.bak'
    WITH REPLACE
    

    可能你还需要指定WITH MOVE 选项;在这种情况下:

    • 使用RESTORE FILELISTONLY FROM DISK = 'C:\OldDBClients.bak' 了解您的 MDF/LDF 的逻辑名称
    • 在您的 RESTORE 中使用 WITH MOVE 选项

    例如:

    RESTORE DATABASE DB_Clients
    FROM DISK = 'C:\OldDBClients.bak'
    WITH REPLACE,
    MOVE 'YourMDFLogicalName' TO '<MDF file path>',
    MOVE 'YourLDFLogicalName' TO '<LDF file path>'
    

    请注意,您也可以DROP 空的DB_Clients 数据库并使用简单的RESTORE

    【讨论】:

    • 我收到此错误:'使用 WITH MOVE 确定文件的有效位置。 '
    • 感谢您的帮助; -D
    • 仅供参考 - 上述语法不正确 - 需要删除逗号后的第二个 WITH 才能使其成为有效语法
    【解决方案3】:

    你应该这样的语法:

    USE [master]
    GO
    RESTORE DATABASE DB_Clients FROM DISK = 'C:\OldDBClients.bak' WITH 
    MOVE 'DB_Clients' TO 'D:\SQLServer\Data\DB_Clients.mdf',
    MOVE 'DB_Clients_log' TO 'D:\SQLServer\Log\DB_Clients.ldf', REPLACE
    

    它指示 SQL Server 覆盖现有副本并为您的数据和日志文件指定一个有效位置

    【讨论】:

    • *你的代码给了我这个错误:* Msg 156, Level 15, State 1, Line 27 关键字'FROM'附近的语法不正确。
    • 我收到此错误:'使用 WITH MOVE 确定文件的有效位置。 '
    • 我添加了WITH MOVE。您必须将路径替换为系统上的有效位置。
    • 非常感谢您的帮助;-D
    猜你喜欢
    • 1970-01-01
    • 2019-12-07
    • 1970-01-01
    • 2012-01-19
    • 2015-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多