从bak文件还原SQL Server数据库的脚本无法运行。

25

我有一个空的数据库:

DB_Clients

我想要从一个 .bak 文件中还原数据库:

OldDBClients.bak

这是路径:

C:\OldDBClients.bak

这是我的脚本:

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

当我执行它时,我收到了这个错误消息:

Msg 3154,Level 16,State 4,Line 15
备份集保存的是一个与现有“DB_Clients”数据库不同的数据库备份。
Msg 3013,Level 16,State 1,Line 15
恢复数据库异常终止。

有人能告诉我为什么会发生这种情况吗? 我必须指出该文件具有读取和写入的权限。

谢谢。

3个回答

32

您需要使用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 来标识文件的有效位置。' - Esraa_92
谢谢你的帮助;-D - Esraa_92
1
FYI - 上述语法不正确 - 为了使其成为有效的语法,需要在逗号后删除第二个 WITH - sean2078

14
你应该使用这个语法:

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,级别15,状态1,第27行 关键字“FROM”附近的语法不正确。 - Esraa_92
我遇到了这个错误:'使用WITH MOVE来确定文件的有效位置。' - Esraa_92
1
我添加了 WITH MOVE。您需要用您系统上的有效位置替换路径。 - Alex
非常感谢您的帮助 ;-D - Esraa_92

7

步骤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 的目的吗? - Asher

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接