温馨提示×

Ubuntu上SQL Server的数据恢复

小樊
46
2025-11-08 13:16:32
栏目: 云计算

Ubuntu上SQL Server数据恢复方法

1. 使用备份文件恢复(最常用且安全)

① 准备备份文件

确保已获取数据库的完整备份文件(.bak格式),并存储在Ubuntu服务器可访问的路径(如/var/opt/mssql/backup/)。若未提前备份,此方法不可用。

② 使用sqlcmd命令行恢复

  • 完全恢复(无差异/日志备份)
    执行以下命令将备份文件还原到指定数据库(替换路径和数据库名):

    sqlcmd -S localhost -U SA -P 'YourPassword' -Q "RESTORE DATABASE [YourDatabaseName] FROM DISK='/var/opt/mssql/backup/YourDatabaseName_full.bak' WITH REPLACE, RECOVERY"
    
    • REPLACE:覆盖现有数据库(若存在);
    • RECOVERY:将数据库恢复至可用状态。
  • 差异备份恢复(需先恢复完全备份)
    先恢复最新的完全备份,再恢复差异备份:

    # 恢复完全备份(WITH NORECOVERY表示未完成恢复)
    sqlcmd -S localhost -U SA -P 'YourPassword' -Q "RESTORE DATABASE [YourDatabaseName] FROM DISK='/var/opt/mssql/backup/YourDatabaseName_full.bak' WITH NORECOVERY, REPLACE"
    # 恢复差异备份(WITH RECOVERY表示完成恢复)
    sqlcmd -S localhost -U SA -P 'YourPassword' -Q "RESTORE DATABASE [YourDatabaseName] FROM DISK='/var/opt/mssql/backup/YourDatabaseName_diff.bak' WITH RECOVERY"
    
  • 事务日志恢复(需完整恢复模式+日志备份)
    若数据库处于完整恢复模式且有事务日志备份,可恢复至特定时间点(如误删除时间):

    # 恢复完全备份(WITH NORECOVERY)
    sqlcmd -S localhost -U SA -P 'YourPassword' -Q "RESTORE DATABASE [YourDatabaseName] FROM DISK='/var/opt/mssql/backup/YourDatabaseName_full.bak' WITH NORECOVERY, REPLACE"
    # 恢复所有后续事务日志(WITH NORECOVERY)
    sqlcmd -S localhost -U SA -P 'YourPassword' -Q "RESTORE LOG [YourDatabaseName] FROM DISK='/var/opt/mssql/backup/YourDatabaseName_log1.bak' WITH NORECOVERY"
    # 恢复至误删除时间点(STOPAT指定时间,如'2025-11-08 10:00:00')
    sqlcmd -S localhost -U SA -P 'YourPassword' -Q "RESTORE LOG [YourDatabaseName] FROM DISK='/var/opt/mssql/backup/YourDatabaseName_log2.bak' WITH STOPAT='2025-11-08 10:00:00', RECOVERY"
    

③ 验证恢复结果

恢复完成后,执行以下命令检查数据库完整性:

sqlcmd -S localhost -U SA -P 'YourPassword' -Q "DBCC CHECKDB([YourDatabaseName]) WITH NO_INFOMSGS"

若输出无错误,则恢复成功。


2. 使用SQL Server Management Studio (SSMS)恢复

若习惯图形界面,可通过SSMS恢复(需在Ubuntu上安装SSMS或使用Windows远程连接):

  • 连接实例:打开SSMS,输入Ubuntu服务器IP、端口(默认1433)、身份验证方式(SQL Server身份验证)及SA密码,连接至SQL Server实例。
  • 启动恢复向导:右键点击“数据库”→“还原数据库”,进入向导。
  • 指定备份文件:在“源”选项卡中,选择“设备”→“添加”,浏览至备份文件(.bak)路径。
  • 设置恢复选项:在“还原的数据库”选项卡中,输入目标数据库名称(如YourDatabaseName);在“选项”页签中,勾选“覆盖现有数据库”。
  • 执行恢复:点击“确定”,等待恢复完成。

3. 使用第三方工具恢复(无备份时的补充)

若未备份且事务日志不可用,可尝试第三方数据恢复工具(如SysTools SQL RecoveryRecovery for SQL ServerApexSQL Log):

  • 操作步骤
    1. 下载并安装工具(需购买正版);
    2. 运行工具,选择“从损坏/丢失的数据库恢复”或“从备份文件恢复”;
    3. 指定SQL Server实例信息(服务器地址、身份验证、数据库名);
    4. 扫描数据库文件(.mdf/.ldf)或备份文件,查找被删除数据;
    5. 预览并恢复所需数据至新数据库。
  • 注意事项
    第三方工具恢复效果取决于数据覆盖情况,无法保证100%恢复;建议优先尝试备份和事务日志恢复。

4. 注意事项

  • 定期备份:提前创建完整备份(每周)+ 差异备份(每日)+ 事务日志备份(每小时),避免数据丢失风险;
  • 恢复模式:确保数据库处于完整恢复模式(而非简单模式),以支持事务日志恢复;
  • 测试恢复:定期测试备份文件的恢复流程,确保备份有效性;
  • 权限设置:备份/恢复操作需SA或具有db_owner角色的用户权限;
  • 避免覆盖:恢复前确认目标数据库名称和路径,防止误覆盖现有数据。

0