2010-03-01 6 views
46

मैंने गलती से कुछ बड़ी संख्या हटा दी। एक टेबल से पंक्तियों का ..मैं mysql में अपना आखिरी डिलीट कमांड कैसे रोलबैक कर सकता हूं?

मैं इसे वापस कैसे रोल कर सकता हूं?

मैं पोटीन का उपयोग कर क्वेरी निष्पादित ...

मैं आभारी अगर आप में से किसी ने मुझे सुरक्षित रूप से इस से बाहर मार्गदर्शन कर सकते हैं अगर आप एक बैकअप नहीं किया है हो जाएगा ..

उत्तर

78

, आप बहुत ज्यादा झुका हुआ हैं।

+3

होगा तो वहाँ कि पूर्ववत करने के लिए .... गलत उफ़ मैंने किया कोई रास्ता नहीं है .. मुझे यह चुनने के लिए चुनिंदा क्वेरी का उपयोग करना चाहिए कि मुझे वास्तव में क्वेरी निष्पादित करने से पहले क्या हटाया जाना चाहिए .. एक अच्छा सबक लींट अधिक सतर्क होने के लिए – Vijay

+3

दुख की बात है। और हां, हटाएं या अपडेट का उपयोग करने से पहले चयन के साथ सत्यापित करना हमेशा एक अच्छा विचार है। –

+5

यह मानक डेटाबेस की त्रुटियों में से एक है: उनके पास कोई इतिहास नहीं है, "अब" की एक बड़ी याददाश्त है। –

22

यदि आपने अभी तक लेनदेन नहीं किया है, तो rollback आज़माएं। यदि आपने पहले ही लेनदेन किया है (commit द्वारा या कमांड लाइन क्लाइंट से बाहर निकलने के बाद), आपको अपने अंतिम बैकअप से डेटा को पुनर्स्थापित करना होगा।

+0

रोलबैक का आह्वान कैसे करें I कमांड लाइन क्लाइंट से बाहर नहीं निकले हैं .. – Vijay

+0

डिफ़ॉल्ट रूप से कमांड लाइन क्लाइंट प्रत्येक कमांड के बाद ऑटो प्रतिबद्ध का उपयोग करता है। – stmax

+0

@ विजय: बस "रोलबैक" टाइप करें; + –

8

एक "रोलबैक" केवल तभी काम करता है जब आपने transactions का उपयोग किया था। इस तरह आप एक साथ प्रश्नों को समूहबद्ध कर सकते हैं और सभी प्रश्नों को पूर्ववत कर सकते हैं यदि उनमें से केवल एक विफल हो जाता है।

लेकिन यदि आपने पहले ही लेनदेन किया है (या नियमित डेलेटी-क्वेरी का उपयोग किया है), तो आपके डेटा को वापस पाने का एकमात्र तरीका इसे पहले बनाए गए बैकअप से पुनर्प्राप्त करना है।

0

रोलबैक सामान्य रूप से इस हटाए गए कार्यों पर काम नहीं करेगा और निश्चित रूप से एक बैकअप केवल आपको बचा सकता है। यदि कोई बैक अप नहीं है तो इसे पुनर्स्थापित करने का कोई तरीका नहीं है क्योंकि हटाए गए प्रश्न पुटी पर चलते हैं, डर्बी का उपयोग करते हुए .sql फ़ाइलों को स्वचालित रूप से हटाया जाता है जब आप डिलीट क्वेरी को आग लगाते हैं।

3

स्वीकृत उत्तर हमेशा सही नहीं होता है। यदि आप mysql पर बाइनरी लॉगिंग कॉन्फ़िगर करते हैं, तो आप किसी भी पिछले बिंदु पर डेटाबेस को रोलबैक कर सकते हैं जिसके लिए आपके पास अभी भी एक स्नैपशॉट और बिनलॉग है। http://dev.mysql.com/doc/refman/5.0/en/point-in-time-recovery.html इस सुविधा के बारे में जानने के लिए एक अच्छा प्रारंभिक बिंदु है।

+0

मुझे संदेह है। यदि बाइनरी लॉगिंग सक्षम है, तो मुझे लगता है कि इसमें एक MySQL सर्वर के तहत कवर डेटाबेस होंगे। तो जिन चीजों पर हमें विचार करना है, 1. यदि हम एक डीबी के लिए पुनर्प्राप्त करने के लिए इस विकल्प का उपयोग करते हैं, तो हम सभी 2 के लिए पुनर्प्राप्त करना समाप्त कर देते हैं। और मैं सही हूं, भले ही हम पॉइंट-इन-टाइम रिकवरी के लिए बाइनरी लॉग का उपयोग करें , जब प्रक्रिया को पुनर्स्थापित करने के लिए सर्वर/डीबी का बैकअप होता है तो यह मदद करता है .. – Vijay

0

यदि आप रोलबैक डेटा चाहते हैं तो आपको पहले autocommit = 0 निष्पादित करने की आवश्यकता है और फिर क्वेरी को हटाएं, डालें या अपडेट करें। क्वेरी निष्पादित करने के बाद रोलबैक निष्पादित करें ....

2

क्वेरी शुरू करने से पहले BEGIN TRANSACTION कमांड का उपयोग करें। ताकि आप किसी भी समय ROLLBACK चीजें कर सकें।

उदाहरण के लिए

:

  1. शुरू लेनदेन
  2. चयन * छात्र
  3. से
  4. छात्र जहां आईडी = 2
  5. चयन * छात्र से
  6. रोलबैक
  7. चयन * से छात्र से हटा दें
0

मैंने अपने विकास डेटाबेस से कुछ मूल्य भी हटा दिए थे, लेकिन मेरे पास क्यूए डेटाबेस में एक ही प्रतिलिपि थी, इसलिए मैंने जेनरेट स्क्रिप्ट किया और "केवल डेटा" के लिए "स्क्रिप्ट पर डेटा का प्रकार" चुना और मेरी तालिका का चयन किया और फिर मुझे एक ही डेटा के साथ सम्मिलित बयान मिला और फिर मैं अपने विकास डेटाबेस पर स्क्रिप्ट चलाता हूं।

0

Oracle में यह एक गैर मुद्दा

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

आप लेनदेन का समर्थन करने वाले किसी भी SQL डेटाबेस में ऐसा ही कर सकते हैं। यह ओपी के सवाल से स्पष्ट नहीं है, लेकिन मुझे लगता है कि वे पहले ही लेनदेन कर चुके हैं, और रोलबैक के लिए बहुत देर हो चुकी है। –

संबंधित मुद्दे