centos

CentOS SQL Server的数据库恢复方法

小樊
36
2025-09-22 12:23:36
栏目: 云计算

CentOS环境下SQL Server数据库恢复方法

一、恢复前的准备工作

在进行数据库恢复前,需完成以下关键步骤:

  1. 确认备份文件可用性:确保拥有目标数据库的最新完整备份(.bak格式,必需)、差异备份(可选)和事务日志备份(.trn格式,可选)。备份文件的完整性直接影响恢复成功率。
  2. 停止SQL Server服务:为避免恢复过程中数据冲突,需停止SQL Server服务。执行命令:sudo systemctl stop mssql-server
  3. 复制备份文件:将备份文件复制到SQL Server实例的数据目录(默认路径为/var/opt/mssql/data/)或其他可访问目录。

二、使用图形化工具(SSMS)恢复数据库

SQL Server Management Studio(SSMS)是微软提供的图形化管理工具,适用于习惯可视化操作的场景:

  1. 连接实例:打开SSMS,输入CentOS服务器的IP地址、端口(默认1433)及SA账户密码,连接到目标SQL Server实例。
  2. 启动恢复向导:在对象资源管理器中展开“数据库”节点,右键点击“数据库”,选择“任务”→“还原”→“数据库”。
  3. 配置恢复参数
    • 在“常规”页面,输入要恢复的数据库名称(如YourDatabaseName);
    • 在“源”部分,选择“设备”,点击“浏览”添加备份文件(.bak格式);
    • 在“选项”页面,勾选“覆盖现有数据库”(WITH REPLACE),并根据需求选择“恢复状态”(如“WITH RECOVERY”表示恢复后数据库可用,“WITH NORECOVERY”表示需后续应用日志)。
  4. 执行恢复:点击“确定”开始恢复,完成后刷新数据库列表,确认目标数据库状态为“在线”。

三、使用T-SQL命令恢复数据库

T-SQL是SQL Server的原生命令行工具,适用于自动化恢复或复杂场景:

  1. 停止SQL Server服务:同预备阶段步骤,执行sudo systemctl stop mssql-server
  2. 以单用户模式启动(可选):若需独占访问数据库,可使用命令:sudo /opt/mssql/bin/sqlservr -m(该命令会阻塞其他连接,恢复完成后需手动停止并重启服务)。
  3. 执行恢复命令:使用sqlcmd工具连接SQL Server(默认SA账户),执行以下命令:
    RESTORE DATABASE [YourDatabaseName] 
    FROM DISK '/var/opt/mssql/data/YourDatabaseName.bak' 
    WITH REPLACE, RECOVERY;
    
    • [YourDatabaseName]:目标数据库名称;
    • /var/opt/mssql/data/YourDatabaseName.bak:备份文件路径;
    • WITH REPLACE:覆盖现有数据库;
    • WITH RECOVERY:恢复后数据库可用(若需应用后续日志,可改为WITH NORECOVERY)。
  4. 启动SQL Server服务:恢复完成后,执行sudo systemctl start mssql-server重启服务。

四、使用mssql-tools命令行工具恢复

mssql-tools是微软提供的轻量级命令行工具,适用于脚本化恢复:

  1. 安装mssql-tools:若未安装,执行命令:sudo yum install -y mssql-tools
  2. 执行恢复命令:使用sqlcmd连接SQL Server,执行与T-SQL相同的恢复命令(见上文),或通过脚本自动化执行。

五、事务日志恢复(时间点恢复)

若需将数据库恢复到某一特定时间点(如误删除数据前的时刻),需结合完整备份+事务日志备份进行:

  1. 恢复完整备份:使用RESTORE DATABASE命令恢复最新的完整备份,添加WITH NORECOVERY(不恢复数据库,保留日志链)。
  2. 恢复事务日志备份:依次恢复差异备份(若有)和事务日志备份,每步均添加WITH NORECOVERY,直到目标时间点前的最后一个日志备份。
  3. 恢复到目标时间点:恢复最后一个日志备份时,添加WITH RECOVERY, STOPAT='YYYY-MM-DD HH:MI:SS'(指定目标时间点),完成恢复。

六、恢复后检查与验证

恢复完成后,需进行以下操作确保数据完整性:

  1. 检查数据库状态:使用SSMS或sqlcmd执行SELECT name, state_desc FROM sys.databases WHERE name = 'YourDatabaseName';,确认状态为“ONLINE”。
  2. 验证数据完整性:执行DBCC CHECKDB('YourDatabaseName') WITH NO_INFOMSGS;,检查数据库是否有损坏。
  3. 测试业务功能:通过应用程序或查询验证关键数据是否恢复正确。

注意事项

0
看了该问题的人还看了