首页 新闻 会员 周边

SQL server,delete 的数据怎么恢复

0
悬赏园豆:10 [已关闭问题]

有时候delete了一部分数据,就像全部查看以下对不对,结果脑子一热,把delete看成Select了,结果 悲剧了阿。两次了, 不能每次都恢复数据库把。有没有简单点的就像Ctrl+Z一样的方法让数据回来呢?

Jimson.Ma的主页 Jimson.Ma | 菜鸟二级 | 园豆:225
提问于:2010-07-16 14:08
< >
分享
其他回答(2)
0

小心駛得萬年船--SQL指令保險栓
http://blog.darkthread.net/blogs/darkthreadtw/archive/2009/08/11/5033.aspx

  1. 請同事幫忙檢核指令
    每個人都有盲點,在緊急狀況下尤其更會因情緒、壓力而失誤。因此,針對重大更動指令,可仿效核武啟用程序,艦長的發射指令需要經過副艦長、武器官的檢核後才允許被執行。以減少個人疏忽可能引發的災難。
  2. 用begin tran保留反悔機會
    在SQL Sever Management Studio/Query Analyzer上的指令一經執行,就像射出去的箭,想抓都抓不回來。利用begin tran宣告成Transaction,最後的commit tran加上Remark,可以防止手滑按下執行時發生不測。
  3. 分段執行並觀察更動筆數
    如果更動指令有多段,可分段選取及執行, 並留意每段指令更動筆數是否如預期,若有不吻合的狀況,請立刻用rollback tran取消。
  4. UPDATE/DELETE前的範圍檢查
    利用以下技巧,可以在UPDATE, DELETE前先檢查WHERE條件的範圍是否符合預期。另外,用Remark將有殺傷力的部分包裝起來,必須要明確選取才能執行,可防止誤跑傷人。
  5. WHERE條件不嫌多
    在更新, 刪除資料時,若WHERE條件不是Primay Key,不妨多加幾項比對條件。例如: 除了比對姓名外,順便檢查生日、加入會員日期等,很多時候,某些欄位的唯一性並不如我們想像。
  6. 設定手動commit
    SQL Server Management Studio可以預設成每次執行都自動包成Transaction,且不自動Commit。設定後,每次跑完指令都要多下commit tran才算數,較為麻煩,但本著流汗總比流血好的哲學,也是可以考慮。
  7. 快速 表格(Table)備份
    忘了說,還有一招: SELECT * INTO BackupTableName FROM TableName 可以快速把表格內容複製一份保留下來,更新後可用來比對或修復数据,非常好用
WizardWu | 园豆:1402 (小虾三级) | 2010-07-16 14:14
0

如果确实已经犯错在先,只好从备份或日志里恢复碰运气。推荐我的做法:任何delete语句,我都会这样先写一行

delete from mytable where 1=0 and
--我的其他where条件

这样即使不小心F5,也会报错而不执行!

邀月 | 园豆:25475 (高人七级) | 2010-07-16 14:39
0

自己以前也经常受这伤害,不过现在设计系统,会增加一个回收站字段,删除操作时先进回收站,再有清空...

Astar | 园豆:40805 (高人七级) | 2010-07-16 14:54
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册