SQL Server:日志传送只读

jza*_*ruk 6 sql-server

在主库和备库之间进行日志传送时,是否必须将备库设置为只读?

通过只读,我不是在谈论仅从数据库中读取的想法。我说的是具有只读或备用/只读特定状态的数据库。

我在日志传送概述和其他相关页面中找不到任何说明这是必需的。这导致了一个问题,因为我无法向只读数据库添加任何索引。

Chr*_*cht 5

您不能以任何方式更改辅助数据库。
这是正常的 - 辅助数据库应该是主数据库的备份,因此不可能添加不在主数据库中的内容。这就是它处于只读模式的原因。

可以使用辅助数据库进行报告,以减少主服务器上的负载(请参阅使用辅助服务器进行查询处理)。
但是,如果您为此需要任何特殊索引,则必须将它们添加到主数据库中并等待它们被日志传送到辅助数据库。

正如 jchelad 在他的回答中已经说过的那样,使用辅助数据库进行报告的一个缺点是,只要恢复日志备份,用户就会断开连接。
可以更改此设置,以便在没有人连接到数据库之前暂停恢复。

引自上述链接:

将辅助数据库置于备用模式时,有两个配置选项:

  • 您可以选择在还原事务日志备份时断开数据库用户的连接。如果选择此选项,则每次日志传送还原作业尝试将事务日志还原到辅助数据库时,用户都将与数据库断开连接。断开连接将按照您为还原作业设置的时间表进行。

  • 您可以选择不断开用户连接。在这种情况下,如果有用户连接到该数据库,则还原作业无法将事务日志备份还原到辅助数据库。事务日志备份将累积,直到没有用户连接到数据库。

但我不建议使用第二个选项。
我们在工作中使用日志传送,我们使用辅助数据库进行报告。

我们决定选择第一个选项(备份恢复时用户断开连接),因为拥有备份比能够一直运行查询更重要。

我们不喜欢第二个选项(只有在没有人连接到数据库时才恢复),因为万一主服务器死机,我们不想发现辅助数据库在过去几个小时内没有恢复,因为销售人员整天都在查询。

我们“教育”了我们的报告用户,每 15 分钟就有一小段时间他们无法运行查询,他们接受了这一点。
(另一种方法是在昨天晚上的主数据库副本上运行查询,但他们更喜欢今天的数据,因此他们必须忍受“15 分钟休息时间”)