Azure同服务器下从其他数据库恢复误删表数据的可行方案咨询
我太懂这种误删数据的慌乱了!Azure SQL确实没有内置的跨库直接恢复单表数据的功能,但咱们有几个靠谱的办法能把db2里的users表数据导回db1,一步步来:
方案1:直接用T-SQL跨库插入(最快最直接)
因为两个数据库在同一Azure SQL服务器上,只要你有足够的权限,直接写SQL就能搞定:
- 先确认db1的
users表和db2的结构完全匹配(字段名、数据类型、约束都得对应),如果结构有差异,得先调整db1的表结构; - 执行插入语句(如果db1的users表还有残留数据,先考虑要不要清空,用
TRUNCATE TABLE users或者DELETE FROM users,一定要谨慎操作!):
USE db1; GO -- 全量插入db2的users数据到db1 INSERT INTO users SELECT * FROM db2.dbo.users; -- 如果只需要恢复特定范围的数据,加WHERE条件过滤 -- INSERT INTO users -- SELECT * FROM db2.dbo.users WHERE user_id BETWEEN 100 AND 200; GO
- 要是担心主键冲突,用
MERGE语句更稳妥,能根据主键判断是插入新数据还是更新现有数据:
USE db1; GO MERGE INTO users AS target USING db2.dbo.users AS source ON target.user_id = source.user_id -- 这里替换成你的主键字段 WHEN NOT MATCHED THEN INSERT (user_id, username, email, create_time) -- 列出所有字段 VALUES (source.user_id, source.username, source.email, source.create_time); GO
方案2:导出-导入BACPAC文件(适合需要先校验数据的场景)
如果不想直接写SQL,或者想先确认数据没问题再导入:
- 导出db2的
users表:在Azure门户找到db2数据库,进入「导出」选项,选择导出到你的Azure存储账户,在导出设置里指定只导出users表(避免导出整个库浪费时间); - 导入到db1:找到db1数据库,进入「导入」选项,选择刚才导出的BACPAC文件,导入时指定只导入
users表; - 这个方法的好处是可以先把BACPAC下载到本地,用SQL Server Management Studio(SSMS)打开校验数据,没问题再导入生产库,风险更低。
方案3:临时配置事务复制(适合大数据量或增量同步)
如果users表数据量很大,或者之后需要临时保持两个表的同步,可以用Azure SQL的事务复制:
- 把db2设置为发布服务器,创建一个只包含
users表的发布; - 把db1设置为订阅服务器,订阅这个发布,触发数据同步;
- 数据同步完成后,直接删除发布和订阅即可,不会留下长期影响。
重要提醒
不管用哪个方案,恢复前一定要给db1做一次完整备份或者数据库快照! 万一操作失误,还能快速回滚到之前的状态。
内容的提问来源于stack exchange,提问作者Faseeh Haris
相关产品推荐
相关产品推荐

