首页主机资讯centos里sqlserver如何恢复

centos里sqlserver如何恢复

时间2025-12-16 17:30:04发布访客分类主机资讯浏览517
导读:在 CentOS 上恢复 SQL Server 的实用步骤 一、准备与检查 确认备份文件可用:通常为 .bak(数据库备份)或 .trn(事务日志备份)。将备份放到 SQL Server 可访问的目录,例如 /var/opt/mssql/...

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

一、准备与检查

  • 确认备份文件可用:通常为 .bak(数据库备份)或 .trn(事务日志备份)。将备份放到 SQL Server 可访问的目录,例如 /var/opt/mssql/backups,并确保 mssql 用户对该目录有读权限(如:chown mssql:mssql /var/opt/mssql/backups)。
  • 检查备份内容(尤其是 .bak 包含多个备份集时):
    • 查看备份集与顺序:
      • /opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P ‘< 密码> ’ -Q “RESTORE HEADERONLY FROM DISK=‘/var/opt/mssql/backups/YourDB.bak’”
    • 查看数据/日志文件逻辑名与大小:
      • /opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P ‘< 密码> ’ -Q “RESTORE FILELISTONLY FROM DISK=‘/var/opt/mssql/backups/YourDB.bak’”
  • 恢复前建议将目标库设为单用户或确保无人连接:
    • ALTER DATABASE [YourDB] SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
  • 注意:一般无需停止 SQL Server 服务,保持在线恢复即可;仅在极端场景(如系统库恢复)再考虑单用户模式。

二、使用 T-SQL 恢复数据库

  • 场景A 简单全量恢复(覆盖同名库)
    • /opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P ‘< 密码> ’ -Q “RESTORE DATABASE [YourDB] FROM DISK=‘/var/opt/mssql/backups/YourDB.bak’ WITH REPLACE, RECOVERY; ”
  • 场景B 还原到新库名并移动文件(避免路径冲突)
    • 先用 FILELISTONLY 获取逻辑名(如:YourDB_Data、YourDB_Log),然后:
      • /opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P ‘< 密码> ’ -Q “RESTORE DATABASE [NewDB] FROM DISK=‘/var/opt/mssql/backups/YourDB.bak’ WITH MOVE ‘YourDB_Data’ TO ‘/var/opt/mssql/data/NewDB.mdf’, MOVE ‘YourDB_Log’ TO ‘/var/opt/mssql/data/NewDB_log.ldf’, RECOVERY; ”
  • 场景C 多备份集的 .bak(指定读取第 N 个备份集)
    • /opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P ‘< 密码> ’ -Q “RESTORE DATABASE [YourDB] FROM DISK=‘/var/opt/mssql/backups/YourDB.bak’ WITH FILE=2, REPLACE, RECOVERY; ”
  • 场景D 完整恢复链(完整 → 差异 → 日志,时间点恢复)
    • 1)完整备份(末尾 NORECOVERY,表示后续还有备份要应用):
      • /opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P ‘< 密码> ’ -Q “RESTORE DATABASE [YourDB] FROM DISK=‘/var/opt/mssql/backups/YourDB_FULL.bak’ WITH NORECOVERY; ”
    • 2)差异备份(如存在,末尾 NORECOVERY):
      • /opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P ‘< 密码> ’ -Q “RESTORE DATABASE [YourDB] FROM DISK=‘/var/opt/mssql/backups/YourDB_DIFF.bak’ WITH NORECOVERY; ”
    • 3)事务日志备份(最后一个用 RECOVERY,中间用 NORECOVERY):
      • /opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P ‘< 密码> ’ -Q “RESTORE LOG [YourDB] FROM DISK=‘/var/opt/mssql/backups/YourDB_LOG.trn’ WITH RECOVERY; ”
  • 常用选项说明:
    • WITH REPLACE:覆盖同名数据库;
    • WITH NORECOVERY:允许继续还原后续备份;
    • WITH RECOVERY:还原完成并让数据库联机。

三、使用 SSMS 图形界面恢复(Windows 远程)

  • 在 Windows 上用 SSMS 连接到 CentOS 上的 SQL Server 实例。
  • 右键 DatabasesRestore Database → 选择 Device → 添加 .bak 文件。
  • Source 选择源库,在 Destination 可修改目标库名。
  • 如 .bak 包含多个备份集,使用 Options → Backup set 选择需要的那一个(对应 HEADERONLY 的 Position)。
  • 如目标库已存在,勾选 Overwrite the existing database (WITH REPLACE)
  • 需要继续还原差异/日志时,在 Options → Recovery state 选择 RESTORE WITH NORECOVERY;最后一步改为 RESTORE WITH RECOVERY

四、恢复后验证与常见问题

  • 验证与收尾
    • 检查数据库状态与数据:
      • SELECT name, state_desc FROM sys.databases WHERE name=‘YourDB’;
      • SELECT TOP 10 * FROM [YourDB].[dbo].[YourTable];
    • 完整性检查:
      • DBCC CHECKDB ([YourDB]);
    • 恢复多用户:
      • ALTER DATABASE [YourDB] SET MULTI_USER;
  • 常见问题与处理
    • 权限不足:确保备份目录对 mssql 用户可读(chown/chmod)。
    • 目标库正在使用:先 SET SINGLE_USER WITH ROLLBACK IMMEDIATE。
    • 文件路径冲突:用 MOVE 将 .mdf/.ldf 指向新目录。
    • .bak 含多个备份集:用 RESTORE HEADERONLY 查看 Position,并在 RESTORE 时加 WITH FILE=n
    • 日志链不连续:必须按同一库的备份顺序连续还原,缺一环无法恢复到最后日志点。

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!


若转载请注明出处: centos里sqlserver如何恢复
本文地址: https://pptw.com/jishu/772995.html
CentOS HDFS如何配置安全 CentOS HDFS如何扩展容量

游客 回复需填写必要信息