【发布时间】:2018-06-14 11:36:33
【问题描述】:
我想在另一个 linux 服务器上拥有生产 sql server 数据库(在 Windows 上运行)来开发应用程序。
我从 Windows SQL Server 上的 sqlcmd shell 进行了备份,现在我尝试在 Linux 上的新安装 mssql 服务器中恢复此备份。
我用CREATE database BDRecup创建了数据库
使用RESTORE FILELISTONLY FROM DISK = N'/var/opt/mssql/backup/BDRecup_backup_2018_05_17_020000_9119969.bak',我得到mdf 和ldf 名称。这个命令的输出很大,而且 shell 格式不好:
LogicalName PhysicalName Type FileGroupName Size MaxSize FileId CreateLSN DropLSN UniqueId ReadOnlyLSN ReadWriteLSN BackupSizeInBytes SourceBlockSize FileGroupId LogGroupGUID DifferentialBaseLSN DifferentialBaseGUID IsReadOnly IsPresent TDEThumbprint SnapshotUrl
BDRecupR F:\Databases\BDRecup.mdf D PRIMARY 11080302592 35184372080640 1 0 0 69C57793-BD24-4777-A657-22CDC8DE14F2 0 0 509673472 4096 1 NULL 13031000001052800036 60E098AC-391A-4923-8498-10E208BBA95E 0 1 NULL NULL
BDRecupR_log F:\Databases\BDRecup_log.ldf L NULL 1248985088 2199023255552 2 0 0 E5CC3407-C600-4A5A-B304-02489CAA7DD2 0 0 0 4096 0 NULL 0 00000000-0000-0000-0000-000000000000 0 1 NULL NULL
(2 rows affected)
我尝试恢复
RESTORE DATABASE BDRecup FROM DISK = '/var/opt/mssql/backup/BDRecup_backup_2018_05_17_020000_9119969.bak'
WITH REPLACE,
MOVE 'BDRecupR' TO '/var/opt/mssql/data/BDRecup.mdf',
MOVE 'BDRecupR_log' TO '/var/opt/mssql/data/BDRecup_log.ldf'
GO
但我总是得到错误
Msg 3154, Level 16, State 4, Server Desktop, Line 1
The backup set contains a copy of a database different from the existing one 'BDRecup'.
Msg 3013, Level 16, State 1, Server Desktop, Line 1
如果我删除 BDRecup DROP database BDRecup 我会得到 The database 'BDRecup' does not exists.
Windows SQL Server 版本
Microsoft SQL Server 2016 (SP1-CU3) (KB4019916) - 13.0.4435.0 (X64)
Apr 27 2017 17:36:12
Copyright (c) Microsoft Corporation
Web Edition (64-bit) on Windows Server 2016 Datacenter 6.3 <X64> (Build 14393: ) (Hypervisor)
Linux MSSQL 版本
Microsoft SQL Server 2017 (RTM-CU7) (KB4229789) - 14.0.3026.27 (X64)
May 10 2018 12:38:11
Copyright (C) 2017 Microsoft Corporation
Developer Edition (64-bit) on Linux (Ubuntu 18.04 LTS)
发生了什么? 谢谢
【问题讨论】:
-
删除数据库后,您是否尝试在不替换的情况下进行还原?
-
这里的错误非常清楚。您拥有的备份与您当前拥有的数据库不同,因此您无法替换它。因此,您需要使用
WITH REPLACE删除它并不使用 恢复它。 -
我已经评论说,如果我放弃它,那么我会收到另一个错误:
The database 'BDRecup' does not exists. -
注意@Larnu 所说的“不使用 使用
WITH REPLACE”。您的恢复命令如下所示:RESTORE DATABASE BDRecup FROM DISK = '/var/opt/mssql/backup/BDRecup_backup_2018_05_17_020000_9119969.bak', MOVE 'BDRecupR' TO '/var/opt/mssql/data/BDRecup.mdf', MOVE 'BDRecupR_log' TO '/var/opt/mssql/data/BDRecup_log.ldf' GO
标签: sql-server sqlcmd