2010-03-01 29 views

cevap

78

Eğer bir yedek yapmadıysanız bile, oldukça çok korkmuşlar. Henüz Hareketi tamamlamak olmadıysa

+3

olurdu .. Ben aslında sorguyu çalıştırmadan önce silme ne olması gerektiğini listelemek için seçme sorgusu kullanarak olmalıdır .. güzel ders – Vijay

+3

ne yazık ki durum daha temkinli olmak dayandı. ve evet, silme veya güncellemeyi kullanmadan önce seçimle doğrulamak her zaman iyi bir fikirdir. –

+5

Bu, standart veritabanlarının kusurlarından biri: Tarih yok, sadece "şimdi" nin büyük bir anısı. –

22

, rollback deneyin. İşlemi zaten gerçekleştirdiyseniz (commit veya komut satırı istemcisinden çıkarak), son yedeklemenizdeki verileri geri yüklemeniz gerekir. Eğer transactions kullanılırsa

+0

rollback geri çağırmak için komut satırı istemcisinden çıkmadım. – Vijay

+0

varsayılan olarak komut satırı istemcisi her komuttan sonra otomatik işlemi kullanır. – stmax

+0

@Vijay: "Rollback" yazmanız yeterlidir. + ENTER –

8

Bir "geri alma" çalışır. Bu şekilde sorguları gruplayabilir ve bunlardan yalnızca biri başarısız olursa tüm sorguları geri alabilirsiniz. Zaten işlem taahhüt (veya düzenli DELETE-sorgu kullanılan) ise

Ama geri verilerinizi almanın tek yolu daha önceden yapılmış yedekten kurtarmak etmektir.

0

Geri alma normalde bu silme işlevlerinde çalışmaz ve kesinlikle bir yedekleme sizi kurtarabilir. Yedekleme yoksa, silme sorguları silme sorgulaması sırasında bir kez çalıştırılır.

3

Kabul edilen yanıt her zaman doğru değil. Eğer mysql'de ikili kayıt konfigürasyonunu konfigüre ederseniz, veritabanını halihazırda bir anlık görüntüsünüz ve bin log'unuz olan herhangi bir önceki noktaya geri alabilirsiniz. Bu tesis hakkında bilgi edinmek için http://dev.mysql.com/doc/refman/5.0/en/point-in-time-recovery.html iyi bir başlangıç ​​noktasıdır. Eğer geri alma verileri isterseniz

+0

Şüphem var. İkili günlüğe kaydetme etkinleştirilirse, bir mysql sunucusu altında kapak veritabanlarına sahip olacağını düşünüyorum. Yani, düşünmemiz gereken şeyler, 1. Eğer bir db'yi kurtarmak için bu seçeneği kullanırsak, tüm 2 için toparlanırız. Ve haklıyım, zaman-noktası kurtarma için ikili kayıt kullansak bile , geri yükleme işlemini başlatmak için sunucu/db bir yedeğimiz olduğunda yardımcı olur. – Vijay

0

öncelikle size özdevinimli = 0 yürütmek ve sonra sorgu silmek yürütmek, eklemek veya güncelleştirmek gerekir. sorguları başlamadan önce

2

kullanımı .... sorgu ardından geri alma yürütmek BEGIN TRANSACTION komutu çalıştırdıktan sonra. Böylece herhangi bir zamanda ROLLBACK şeyler yapabilirsiniz. ÖRNEĞİN

:

  1. başlamak işlem
  2. Öğrenci
  3. itibaren Öğrenci Kimliği = 2
  4. select * Öğrenci dan
  5. geri alma
  6. select * dan Öğrenci silmek * seçin
0

Ayrıca, geliştirme veritabanımdan bazı değerleri sildim, ancak QA veritabanında aynı kopyasına sahiptim, bu yüzden bir "oluştur" komut dosyası oluşturdum ve "veriyi yalnızca komut dosyasına veri türü" seçeneğini seçtim ve tablomu seçtikten sonra Aynı veriyi içeren ek ifadeleri aldım ve sonra geliştirme veritabanımdaki komut dosyasını çalıştırıyorum.

0

kahin bu yüzden .... Oops i did yanlış olduğunu geri almanın bir yolu yoktur olmayan bir konu

SQL> delete from Employee where id = '01'; 

1 row deleted. 

SQL> select id, last_name from Employee where id = '01'; 

no rows selected 

SQL> rollback; 

Rollback complete. 

SQL> select * from Employee where id = '01'; 

ID FIRST_NAME LAST_NAME START_DAT END_DATE  SALARY CITY  DESCRIPTION 
---- ---------- ---------- --------- --------- ---------- ---------- --------------- 
01 Jason  Martin  25-JUL-96 25-JUL-06 1234.56 Toronto Programmer 
+0

Aynı işlemleri gerçekleştirebileceğiniz herhangi bir SQL veritabanında da yapabilirsiniz. OP'nin sorusundan net değil, ama zaten işlemi gerçekleştirmiş olduklarını ve geri dönüş için çok geç olduğunu farz ediyorum. –

İlgili konular