使用 SQL 作业进行备份时是否可以使数据库脱机?

Irf*_*fan 6 sql-server backup sql-server-2008-r2 sql-server-2016

我有一个场景,我必须生成数据库的备份(SQL Server 2008)并恢复到新服务器(SQL Server 2016)。在采取备份数据时,无论如何都不应更改。所以我有两个选择来做到这一点,但我不确定它会如何工作。(一切都只使用 SQL 作业。)

  1. 设置只读数据库并恢复到新的数据库服务器。

    ? 是否可以在新服务器上恢复只读数据库?目标服务器已经有一个同名的读写(在线)数据库。

  2. 设置离线数据库并恢复到新的数据库服务器。

    ? 是否可以在新服务器中恢复离线数据库?目标服务器已经有一个同名的在线(读写)数据库。

Ran*_*gen 11

? 是否可以在新服务器中恢复只读数据库?

是的

一个例子:

CREATE DATABASE ReadOnlyDB;
GO

ALTER DATABASE ReadOnlyDB SET READ_ONLY;

BACKUP DATABASE ReadOnlyDB TO  disk = '\\share\readonly.Bak';
Run Code Online (Sandbox Code Playgroud)

目标服务器已经有一个同名的读写(在线)数据库。

不完全确定您的意思,但是如果您愿意,可以使用不同的名称恢复数据库,请记住之后删除只读属性。

RESTORE DATABASE ReadOnlyDB2
FROM DISK = '\\share\readonly.Bak'
WITH MOVE 'ReadOnlyDB' to '\Datalocation\ReadOnlyDB2.mdf',
 MOVE 'ReadOnlyDB_log' to '\Loglocation\ReadOnlyDB_log2.ldf',
STATS = 5;
GO
ALTER DATABASE ReadOnlyDB2 SET READ_WRITE;
Run Code Online (Sandbox Code Playgroud)

您还可以使用 REPLACE 关键字替换现有数据库。

? 是否可以在新服务器中恢复离线数据库?

不,这是不可能的,因为 sql server 从数据库文件中删除了所有句柄,并且在脱机时将无法访问它。

ALTER DATABASE ReadOnlyDB SET OFFLINE WITH ROLLBACK IMMEDIATE;
GO
BACKUP DATABASE ReadOnlyDB TO  disk = 'C:\temp\readonlyOffline.Bak';
Run Code Online (Sandbox Code Playgroud)

消息 942,级别 14,状态 4,第 10 行数据库“ReadOnlyDB”无法打开,因为它处于脱机状态。消息 3013,级别 16,状态 1,第 10 行 BACKUP DATABASE 异常终止。

您可以查看分离/附加,但最好使用备份还原。


Geo*_*e K 5

在您的情况下,Yoy 有几种选择:

  1. 关闭可以更改数据库中数据的应用程序
  2. 将数据库设置为单用户模式并进行备份。像这样的东西:

ALTER DATABASE [<DBName>] SET SINGLE_USER WITH ROLLBACK IMMEDIATE;

BACKUP DATABASE [<DBName>] TO DISK = N'<locationAndFilename>'

然后恢复它并将应用程序重定向到新服务器