非 DBA 提问:如何通过备份/恢复轻松地将 SQL Server 实例复制/移动到另一台服务器?

5ar*_*arx 11 sql-server-2008 sql-server backup migration restore

我们刚刚有了一台新服务器,所以我需要从旧的 db 框中复制现有的 SQL Server 2008 实例。

我通常通过复制 .mdf 和日志文件并附加它们来做到这一点,但我无法将 dbs 离线,因为它们 24/7 使用,所以我备份了数据库并在新的数据库上恢复它们机器。但是,我最终遇到了一些问题,其中之一与孤儿用户有关。所以我正在寻找的是一个故障安全的过程,以最小的大惊小怪/麻烦/头痛来移动一切。我是一名 .Net 开发人员,拥有相当多的 SQL,但 SQL Server 的内部工作原理对我来说在很大程度上是个谜,我发现 MS 文档很难浏览。

请帮忙。

SQL*_*tar 10

如果您无法使数据库脱机,则需要进行备份/恢复。我建议如下:

  1. 在新盒子上安装 SQL 2008,对 MDF 和 LDF 文件使用与旧盒子相同的文件结构。
  2. 备份旧机器上的所有数据库。
  3. 在单用户模式下启动 SQL 时,将 master 从旧机器恢复到新机器。恢复主方法
  4. 使用 NORECOVERY 选项将每个数据库从旧机器恢复到新机器,以便能够应用未来的 Diff 或 T-log 备份。
  5. 将 msdb 从旧盒子恢复到新盒子。

如果您构建和配置新盒子,使其看起来与旧盒子完全相同,那么您将不会大惊小怪。

我不知道你的数据库有多大,所以这个方法可能需要很长时间。最简单的方法是关闭旧机器并复制 MDF 和 LDF 文件,然后(在恢复主文件后)您只需要重新启动 SQL 即可使您的数据库联机。但是您表示这不是一种选择,因为数据库不允许脱机。

  • 不要忘记复制备份后所做的任何数据更改。您可以进行差异备份或 tlog 备份,并在新服务器启动后但在切换之前将它们应用到新服务器。 (3认同)

Gai*_*ius 8

您提到了 24/7 操作,所以最好的方法是在新系统上创建一个数据库镜像,然后您可以简单地切换最小 - 可能为零,具体取决于您的应用程序的结构 - 使用客户端的停机时间 -侧重定向。基本步骤是:

  1. 确保您的主数据库在完全恢复模式下运行
  2. 备份主并在镜像上恢复 WITH NORECOVERY
  3. 在两台服务器上创建“端点”,并确保连接(例如防火墙规则),正确设置端口和 IP 地址)例如:

    CREATE ENDPOINT endpoint1
    STATE=STARTED AS TCP(LISTENER_PORT = 5222, LISTENER_IP = 192.168.1.5) 
    FOR DATA_MIRRORING(ROLE = PARTNER, AUTHENTICATION = WINDOWS NEGOTIATE, ENCRYPTION = REQUIRED ALGORITHM RC4)
    
    Run Code Online (Sandbox Code Playgroud)
  4. 在镜像上设置镜像,指向主镜像:

    ALTER DATABASE GaiusMirrorDB SET PARTNER = 'TCP://192.168.1.5:5222'
    go
    EXEC sys.sp_dbmmonitoraddmonitoring
    go
    
    Run Code Online (Sandbox Code Playgroud)
  5. 在主节点上,指向镜像(只是不同的数据库名称和 IP 地址。

  6. 然后,当时机成熟时,只需将主切换到镜像:

    ALTER DATABASE GaiusDB SET PARTNER FAILOVER
    GO
    
    Run Code Online (Sandbox Code Playgroud)

注意:我假设这两个服务器在同一个网络上,所以在同步模式下运行就可以了。如果这是通过 WAN 链接,请使用异步模式。