You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从恢复的Azure SQL数据库备份中替换误更新的表

替换Azure SQL误更新表的操作方案

场景前提

已将误操作前的数据库备份恢复为一个独立数据库(下文称RestoredDB),原误操作数据库称ProductionDB,目标表为TargetTable。


方案1:保留原表结构,仅覆盖数据

适用于仅数据错误、原表结构/索引/约束未被修改的情况:

  • 禁用原表触发器(若存在),避免插入数据时触发业务逻辑:
    DISABLE TRIGGER ALL ON ProductionDB.dbo.TargetTable;
    
  • 清空原表数据(优先用DELETE可回滚,数据量极大时用TRUNCATE更高效,但无法回滚):
    DELETE FROM ProductionDB.dbo.TargetTable;
    -- 可选:TRUNCATE TABLE ProductionDB.dbo.TargetTable;
    
  • 从恢复库导入正确数据:
    INSERT INTO ProductionDB.dbo.TargetTable
    SELECT * FROM RestoredDB.dbo.TargetTable;
    
  • 重新启用触发器:
    ENABLE TRIGGER ALL ON ProductionDB.dbo.TargetTable;
    
  • 验证数据:执行查询确认原表数据与恢复库表完全一致。

方案2:完全替换表(含结构)

适用于原表结构也被误修改的情况:

  • 先备份原表(通过改名避免误删):
    EXEC sp_rename 'ProductionDB.dbo.TargetTable', 'TargetTable_Backup';
    
  • 从恢复库复制表结构与数据到原库:
    SELECT * INTO ProductionDB.dbo.TargetTable FROM RestoredDB.dbo.TargetTable;
    
  • 重建原表的索引、约束、触发器:
    SELECT INTO仅复制表结构与数据,需手动迁移索引、约束等。可通过以下语句查询恢复库的相关对象脚本,再在原库执行:
    -- 查询恢复库表的索引信息
    SELECT name, type_desc, create_date 
    FROM sys.indexes 
    WHERE object_id = OBJECT_ID('RestoredDB.dbo.TargetTable');
    
    -- 查询恢复库表的约束信息
    SELECT name, type_desc, definition 
    FROM sys.constraints 
    WHERE parent_object_id = OBJECT_ID('RestoredDB.dbo.TargetTable');
    
  • 验证表结构与数据的正确性。

关键注意事项

  • 操作前必须备份原表数据,例如执行SELECT * INTO ProductionDB.dbo.TargetTable_TempBackup FROM ProductionDB.dbo.TargetTable,防止操作失误导致二次数据丢失。
  • 生产环境需在业务低峰期执行操作,避免影响正常业务。
  • 若表存在外键约束,需先禁用外键再操作,完成后重新启用:
    -- 禁用外键
    ALTER TABLE ProductionDB.dbo.TargetTable NOCHECK CONSTRAINT ALL;
    -- 操作完成后启用
    ALTER TABLE ProductionDB.dbo.TargetTable CHECK CONSTRAINT ALL;
    
  • 确保恢复库与原库的目标表结构一致,否则插入数据会触发列不匹配等错误。

内容的提问来源于stack exchange,提问作者Dilshan Prasad

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 09:42:26