如何在不关闭站点的情况下维护数据库?

Eri*_*ard 9 maintenance database

某些数据库维护任务(例如重新组织索引、移动文件、更改架构等)需要禁用任何正在使用该数据库的应用程序。

除了在您的网站上发布一条消息(例如“我们将从美国东部标准时间午夜至凌晨 4 点停机以进行服务器维护”)之外,还有哪些好的策略可以解决此问题?

Vin*_*vic 8

如果您有复制/高可用性解决方案,那么使用它来避免停机是显而易见的选择,升级一台服务器,而另一台正在工作,然后切换并升级下一台。

如果你没有这样的结构,你可以在同一台服务器上做一个小型复制设置,每个数据库都有两个副本,在另一个工作时升级一个,然后将旧的同步回来。这仍然需要一些停机时间,但少于 4 小时。

避免使两个数据库保持同步的第三个选项是获取数据库的副本,当维护一个数据库时,副本和使用它的应用程序处于只读模式。完成后,您只需将应用程序切换到升级后的数据库并再次开始写入数据库。

最后一个选项当然需要应用程序支持并且有意义(有些应用程序只读模式没有意义。)

  • ... 使用的数据库服务器。您可以在 Google 上搜索高可用性 <your RDBMS> 或复制 <your RDBMS>,以获取有关特定现有解决方案的详细信息。或者在这里问一个不同的问题。 (2认同)

Pau*_*dal 5

如果您使用的是 SQL Server,那么您始终可以从 SQL Server 2000 开始在线删除索引碎片。命令 DBCC INDEXDEFRAG 始终执行联机重组。我专门编写它作为 DBCC DBREINDEX 的在线替代品。

从 SQL Server 2005 开始,ALTER INDEX ... REORGANIZE 命令替换 DBCC INDEXDEFRAG 并且始终在线。同样在 2005 年以后,对于企业版,您可以使用 ALTER INDEX ... REBUILD ... WITH (ONLINE=ON) 进行在线索引重建。在操作的开始和结束时需要几个非常短期的表锁,因此它不像 REORGANIZE 那样在线(而且大多数在线索引重建并不是一个很好的营销术语 :-)。您甚至可以使用 CREATE INDEX ... WITH DROP_EXISTING 并指定 ONLINE=ON 将索引移动到新文件组。

谢谢