温馨提示×

SQL Server在CentOS中的数据库恢复方法

小樊
37
2025-12-21 18:59:01
栏目: 云计算

在 CentOS 上恢复 SQL Server 数据库的实用步骤

一 准备与前置检查

  • 确认备份可用:通常为 .bak(完整/差异)与 .trn(事务日志)。如无有效备份,无法执行标准恢复。
  • 将备份文件放到 SQL Server 可访问的目录,建议放在实例数据目录(如 /var/opt/mssql/)或自建备份目录(如 /var/opt/mssql/backups),并设置权限:
    sudo mkdir -p /var/opt/mssql/backups
    sudo chown mssql:mssql /var/opt/mssql/backups
    sudo chmod 700 /var/opt/mssql/backups
  • 验证备份文件是否可读:ls -l /var/opt/mssql/backups/;必要时用 sqlcmd 执行 RESTORE HEADERONLY 检查备份集信息。
  • 建议将数据库恢复模式设为 FULL,以便执行差异与日志备份的连续恢复。

二 使用 T‑SQL 执行恢复

  • 完整恢复(最常见):
    RESTORE DATABASE [YourDB]
    FROM DISK = N’/var/opt/mssql/backups/YourDB.bak’
    WITH RECOVERY, REPLACE;
    说明:WITH RECOVERY 表示还原完成后立即可用;WITH REPLACE 在目标库已存在时强制覆盖。

  • 差异恢复(在完整备份之后):
    RESTORE DATABASE [YourDB]
    FROM DISK = N’/var/opt/mssql/backups/YourDB_Diff.bak’
    WITH NORECOVERY;
    RESTORE LOG [YourDB]
    FROM DISK = N’/var/opt/mssql/backups/YourDB_Log.trn’
    WITH RECOVERY;
    说明:差异备份后通常接事务日志备份;最后一次用 WITH RECOVERY 结束恢复流程。

  • 时间点恢复(在完整+差异后,用日志恢复到指定时刻):
    RESTORE LOG [YourDB]
    FROM DISK = N’/var/opt/mssql/backups/YourDB_Log.trn’
    WITH STOPAT = ‘2025-12-21 10:30:00’, RECOVERY;

  • 指定数据文件路径(当备份来自其他实例或路径不一致时):
    RESTORE DATABASE [YourDB]
    FROM DISK = N’/var/opt/mssql/backups/YourDB.bak’
    WITH MOVE N’YourDB_Data’ TO N’/var/opt/mssql/data/YourDB.mdf’,
    MOVE N’YourDB_Log’ TO N’/var/opt/mssql/data/YourDB_log.ldf’,
    RECOVERY, REPLACE;
    提示:逻辑文件名可用 RESTORE FILELISTONLY 查看。

三 常用命令与连接工具

  • 使用 sqlcmd 本地执行:
    /opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P ‘’ -i restore.sql
  • 远程执行(在 Windows 或另一台 Linux 上):
    /opt/mssql-tools/bin/sqlcmd -S <服务器IP或主机名>,1433 -U SA -P ‘’ -i restore.sql
  • 备份文件传输:在 Windows 与 CentOS 之间可用 WinSCP(SFTP).bak/.trn 上传至目标目录(如 /SQLServer/SQLBackup/var/opt/mssql/backups)。

四 验证与常见问题处理

  • 验证恢复结果:
    SELECT name, state_desc FROM sys.databases WHERE name = N’YourDB’;
    DBCC CHECKDB ([YourDB]);
  • 常见问题与要点:
    • 目标库已存在冲突时,使用 WITH REPLACE
    • 多文件组/多日志文件需逐个 MOVE 到目标路径;
    • 从 Windows 迁移到 Linux 时,注意文件路径分隔符与大小写敏感性;
    • 若备份来自不同实例,先用 RESTORE FILELISTONLY 确认逻辑文件名;
    • 恢复后按需重建索引、更新统计信息,并进行功能与性能验证。

五 是否需要停机的说明

  • 常规数据库还原(非系统库)一般不需要停机;还原命令本身会处理必要的锁定与一致性检查。
  • 若遇到异常或需替换系统数据库等特殊情况,再考虑临时停止服务:
    sudo systemctl stop mssql-server
    完成后启动:
    sudo systemctl start mssql-server

0