温馨提示×

Ubuntu上SQL Server的数据恢复方法有哪些

小樊
34
2025-12-24 00:08:43
栏目: 云计算

Ubuntu上SQL Server的数据恢复方法

一、常用恢复方法概览

  • sqlcmd 命令行恢复:在 Ubuntu 终端使用 sqlcmd 执行 RESTORE DATABASE,适合自动化与无人值守场景。
  • SSMS 图形界面恢复:在 Windows 上的 SSMS 远程连接到 Ubuntu 上的 SQL Server 实例,通过向导完成还原,适合一次性或复杂还原。
  • 时间点恢复(PITR):数据库为 FULL 恢复模式 时,利用 完整备份 + 差异备份 + 事务日志备份 恢复到指定时间点。
  • 迁移式恢复:将 .bak 从其他环境拷贝到 Ubuntu,使用 MOVE 将数据/日志文件指定到目标路径后还原。
  • 第三方工具恢复:当遇到 .mdf/.ldf 损坏无可用备份 时,可考虑商业工具进行页面/日志分析恢复。

二、方法对照与适用场景

方法 适用场景 关键要点
sqlcmd 命令行 日常恢复、自动化脚本、CI/CD 使用 RESTORE 命令;必要时配合 MOVE、NORECOVERY/RECOVERY
SSMS 图形界面 临时操作、复杂还原、需要可视化校验 远程连接 Ubuntu 实例;向导化选择备份集与文件映射
时间点恢复 误删数据、需回滚到某一时刻 需 FULL 模式;按顺序还原完整→差异→日志,日志用 STOPAT
迁移式恢复 跨环境迁移、重建实例 先拷贝 .bak;还原时用 MOVE 指定新路径;注意文件权限
第三方工具 无备份或文件损坏 仅作补救;优先尝试官方支持渠道与备份

三、关键操作要点与命令示例

  • 使用 sqlcmd 还原全库(示例)

    sqlcmd -S localhost -U SA -P 'YourPassword' \
      -Q "RESTORE DATABASE [YourDB] \
      FROM DISK='/var/opt/mssql/backups/YourDB_full.bak' \
      WITH RECOVERY"
    

    如目标实例上已有同名数据库或需覆盖,可加 WITH REPLACE;若需链式还原(配合差异/日志),首步用 WITH NORECOVERY

  • 时间点恢复步骤(FULL 模式)

    1. 先做一次当前日志尾备份(便于将数据库还原到故障前一刻)
      sqlcmd -S localhost -U SA -P 'YourPassword' \
        -Q "BACKUP LOG [YourDB] TO DISK='/var/opt/mssql/backups/YourDB_tail.trn' WITH NORECOVERY"
      
    2. 还原完整备份(如存在差异,先还原差异)
      sqlcmd -S localhost -U SA -P 'YourPassword' \
        -Q "RESTORE DATABASE [YourDB] \
        FROM DISK='/var/opt/mssql/backups/YourDB_full.bak' \
        WITH NORECOVERY, REPLACE"
      
    3. 还原日志到指定时间点(示例:回滚到 2025-12-24 10:00:00
      sqlcmd -S localhost -U SA -P 'YourPassword' \
        -Q "RESTORE LOG [YourDB] \
        FROM DISK='/var/opt/mssql/backups/YourDB_log.trn' \
        WITH STOPAT='2025-12-24T10:00:00', RECOVERY"
      

    要点:确保数据库恢复模式为 FULL,并按 完整 → 差异(可选) → 日志 的顺序还原。

  • 迁移式恢复与文件映射

    sqlcmd -S localhost -U SA -P 'YourPassword' \
      -Q "RESTORE DATABASE [YourDB] \
      FROM DISK='/var/opt/mssql/backups/YourDB_full.bak' \
      WITH MOVE 'YourDB_Data' TO '/var/opt/mssql/data/YourDB.mdf', \
           MOVE 'YourDB_Log'  TO '/var/opt/mssql/data/YourDB_log.ldf', \
           REPLACE"
    

    逻辑文件名(如 YourDB_Data/YourDB_Log)可用以下查询获取:

    sqlcmd -S localhost -U SA -P 'YourPassword' \
      -Q "RESTORE FILELISTONLY FROM DISK='/var/opt/mssql/backups/YourDB_full.bak'"
    

    目标目录需存在且 mssql 用户可写(如 /var/opt/mssql/data)。

四、实用建议与注意事项

  • 权限与路径:确保备份目录归 mssql:mssql,权限 700;还原目标路径可写,避免因权限导致失败。
  • 恢复顺序与状态:链式还原时中间步骤用 WITH NORECOVERY,最后一步用 WITH RECOVERY;覆盖已有库可加 WITH REPLACE
  • 时间点恢复前提:数据库需为 FULL 恢复模式,并具备可用的 日志备份;否则只能恢复到最近一次备份点。
  • 验证完整性:还原后执行 DBCC CHECKDB 校验数据一致性。
  • 无备份的应急:若 .mdf/.ldf 损坏且无备份,可尝试第三方恢复工具,但成功率与风险依情况而定,务必先对现有文件做只读拷贝。

0