温馨提示×

怎样在Ubuntu上恢复SQL Server数据

小樊
47
2025-09-27 01:28:14
栏目: 云计算

在Ubuntu上恢复SQL Server数据的步骤

一、准备工作

  1. 安装SQL Server及工具
    确保Ubuntu系统已安装SQL Server(参考官方文档),并安装msodbcsql17客户端工具(用于sqlcmd连接):

    sudo apt-get update
    sudo apt-get install msodbcsql17
    
  2. 获取备份文件
    将SQL Server备份文件(.bak,如完整备份、差异备份或事务日志备份)上传至Ubuntu服务器(如/var/opt/mssql/backup/目录),并确保当前用户对目录有读取权限。

二、使用sqlcmd命令行工具恢复(最常用)

1. 登录SQL Server实例

通过sqlcmd工具登录到本地或远程SQL Server实例(默认端口1433):

sqlcmd -S localhost -U SA -P 'YourStrongPassword'

(注:SA为SQL Server管理员账户,需替换为实际用户名密码)

2. 执行恢复命令(以完整备份为例)

若备份文件为完整备份(.bak),且需覆盖现有数据库,使用以下命令:

RESTORE DATABASE [YourDatabaseName] 
FROM DISK = '/var/opt/mssql/backup/YourDatabaseName_full.bak' 
WITH REPLACE, RECOVERY;
  • REPLACE:强制覆盖现有同名数据库;
  • RECOVERY:将数据库恢复至可用状态(若需应用后续事务日志,可先用NORECOVERY,最后再执行RECOVERY)。

3. 处理差异备份与事务日志(可选)

若存在差异备份或事务日志备份,需按顺序恢复:

-- 恢复差异备份(需在完整备份后执行)
RESTORE DATABASE [YourDatabaseName] 
FROM DISK = '/var/opt/mssql/backup/YourDatabaseName_diff.bak' 
WITH DIFFERENTIAL, RECOVERY;

-- 恢复事务日志(需在完整备份+差异备份后执行)
RESTORE LOG [YourDatabaseName] 
FROM DISK = '/var/opt/mssql/backup/YourDatabaseName_log.bak' 
WITH RECOVERY;

4. 验证恢复结果

退出sqlcmd后,可通过以下命令检查数据库状态:

sqlcmd -S localhost -U SA -P 'YourStrongPassword' -Q "SELECT name, state_desc FROM sys.databases WHERE name = 'YourDatabaseName';"

state_desc显示为ONLINE,则表示恢复成功。

三、使用SQL Server Management Studio (SSMS)恢复(图形化操作)

  1. 安装SSMS
    在Ubuntu上通过apt或下载官方包安装SSMS(适用于Linux的轻量级版本)。

  2. 连接实例
    打开SSMS,输入服务器地址(如localhost)、认证方式(SQL Server认证)及账户密码,连接到SQL Server。

  3. 执行恢复流程

    • 右键点击“数据库”节点→选择“还原数据库”;
    • 在“源”选项卡中,选择“设备”→点击“添加”→选择备份文件(.bak);
    • 在“目标”选项卡中,输入新数据库名称(或保留原名称);
    • 切换至“选项”页签,勾选“覆盖现有数据库”,点击“确定”开始恢复。

四、使用第三方工具恢复(无备份场景)

若未备份数据,可尝试使用第三方工具(如SysTools SQL Recovery)恢复误删除或损坏的数据库文件(.mdf/.ldf):

  1. 下载并安装工具(需付费);
  2. 选择目标数据库文件(.mdf);
  3. 配置恢复选项(如从日志恢复),指定输出目录;
  4. 启动恢复流程,生成SQL脚本或新的数据库文件。

五、注意事项

  1. 备份优先:恢复前务必确认备份文件的完整性与正确性(可通过RESTORE VERIFYONLY命令验证);
  2. 权限控制:确保执行恢复操作的用户具有足够权限(如sysadmin角色);
  3. 避免覆盖:恢复前停止对目标数据库的写入操作,防止数据冲突;
  4. 测试环境:生产环境恢复前,建议在测试环境验证流程,避免误操作导致数据丢失。

0