2011-01-29 17 views
8

में क्वेरी निष्पादन को पूर्ववत करने के लिए कैसे करें phpmyadmin में क्वेरी निष्पादन को पूर्ववत करें।phpmyadmin

कोई रोलबैक कार्यक्षमता है? किसी भी शरीर को समाधान पता है कृपया मेरी मदद करो?

+3

आपका मतलब है, एक प्रारंभिक क्वेरी रोकें, या एक पूर्ण (और प्रतिबद्ध) कथन के परिवर्तनों को पूर्ववत करें? – GolezTrol

+0

हां – learner

उत्तर

24

यदि कथन अभी भी चल रहा है तो आप KILL QUERY <thread_id> का उपयोग कर सकते हैं।

यदि कथन पूरा हो गया है लेकिन आपने अभी तक लेनदेन नहीं किया है तो आप ROLLBACK का उपयोग कर सकते हैं।

यदि कथन पूरा हो गया है और लेनदेन पहले से ही प्रतिबद्ध है (या आपने लेनदेन शुरू नहीं किया है) तो अपने नवीनतम बैकअप से डेटा को पुनर्स्थापित करें।

  • जब हमेशा पहले कहां खंड लिखना ताकि आप डॉन 'एक को हटाने या अद्यतन लेखन:


    इसके अलावा यहां के क्रम पहली जगह में हो रहा स्थिति के इस प्रकार को रोकने के लिए कुछ सुझाव दिए गए सलाह कर रहे हैं इसे भूल जाओ।

  • यह सुनिश्चित करने के लिए कि आप सही पंक्तियों को अपडेट कर रहे हैं, एक SELECT कथन में अपने WHERE खंड का परीक्षण करें।
  • यदि आप जानते हैं कि आपको केवल एक पंक्ति अपडेट करनी चाहिए तो आप अपने अपडेट स्टेटमेंट में LIMIT 1 जोड़ सकते हैं। फिर यदि उपर्युक्त तकनीकों का उपयोग करने के बावजूद आपको अभी भी एक त्रुटि है तो कम से कम केवल एक पंक्ति प्रभावित होगी, पूरे डेटाबेस पर नहीं।
+0

समाप्त होने वाले परिवर्तनों को पूर्ववत करें लेकिन यह केवल आगे निष्पादन को रोक देगा, क्वेरी को पूर्ववत नहीं करेगा, है ना? लेकिन किलिंग – NikiC

+0

के लिए +1 हाय मैंने पहले से ही क्वेरी निष्पादित की है। यह पूरी तरह से पूरे डेटा में एक अद्यतन एक फ़ील्ड। क्या मैं पुराने डेटा को किसी भी तरह से पुनः प्राप्त कर सकता हूं? – learner

+2

मुझे उम्मीद है कि आपके पास बैकअप है ... –

2

अगर आप कुछ फिर हटा दिया आप प्रक्रियाओं 'पेज और प्रेस' मार '

1

पर जा सकते हैं मुझे नहीं लगता है कि इसके वापस आने के लिए जब तक आप एक backup.I एसक्यूएल आप कभी कभी कर सकते हैं पता था जा रहा एसक्यूएल कमांड की श्रृंखला में प्रतिबद्ध होने से पहले रोलबैक कॉल करें, लेकिन केवल लेनदेन में, और आपको उन्हें पहले शुरू करना होगा (जो phpMyAdmin उपयोग नहीं करता है)।

0

यदि आप पहले से ही लेनदेन कर चुके हैं, तो इसे "पूर्ववत करने" का कोई तरीका नहीं है, मुझे डर है। यह एसीआईडी ​​के मूल सिद्धांतों में से एक है। यदि आपने इसे नहीं किया है: बस rollback करें, और आप ठीक हैं।

आपको बैकअप से डेटा को पुनर्स्थापित करने की आवश्यकता होगी - या यदि क्वेरी चल रही है, तो kill query का उपयोग करके मार्क बेयर्स का सुझाव देने का प्रयास करें।

1

यदि आपको किसी प्रतिबद्ध अद्यतन से पहले पिछले डेटा को पुनर्स्थापित करने की क्षमता की आवश्यकता है, तो आप अपडेट का उपयोग करके अपने डेटाबेस को दोबारा कर सकते हैं और मौजूदा डेटा/टाइमस्टैम्प के साथ पुराने डेटा को संग्रह तालिका में संग्रहीत करने के लिए ट्रिगर्स को हटा सकते हैं (अधिमानतः) एक लेनदेन आईडी मान (और सुनिश्चित करें कि आवेषण हमेशा एक वर्तमान दिनांक/टाइमस्टैम्प या लेनदेन आईडी मान संग्रहीत करते हैं) ... प्रभावी रूप से आपके डेटाबेस में किए गए प्रत्येक परिवर्तन के पूरे इतिहास को बनाए रखते हैं। सावधान रहें, आपका डेटाबेस अविश्वसनीय दर से बढ़ेगा ... यह केवल मिशन-महत्वपूर्ण डेटा के लिए एक समाधान है जहां इतिहास आवश्यक है, क्योंकि इसे लागू करने के लिए बहुत सारे प्रयास किए जाते हैं, और बनाए रखने के लिए बहुत सारी महंगी डिस्क स्थान होती है। फिर भी, यदि प्रभावित डेटा के बाद के अपडेट हुए हैं तो यह बहुत जटिल हो सकता है; और पिछले इतिहास में वापस आने पर आपको "खोने" की आवश्यकता हो सकती है।

मैं केवल कुछ ही सिस्टमों के बारे में सोच सकता हूं जो इस प्रकार के इतिहास रखरखाव को लागू करते हैं ... जैसे ओरेकल फाइनेंशियल या एचआर।

वैकल्पिक रूप से, कुछ डेटाबेस हैं (मैं पुराने डीईसी आरडीबीएमएस के साथ काम करता था) जो आरयूजे (रन यूनिट जर्नल) को बनाए रख सकते हैं जिसका उपयोग बैकअप से और सेट समय/लेनदेन तक बहाल करने के लिए किया जा सकता है।हालांकि MySQL इस श्रेणी में नहीं आता है। दोबारा, इसमें बहुत सी डिस्क स्पेस की आवश्यकता होती है, और केवल तभी व्यावहारिक होता है जब आप अपने डेटा के नियमित बैकअप करते हैं, और पुनर्प्राप्ति प्रक्रिया अधिक जटिल होती है। MySQL (जहां तक ​​मुझे पता है) इस सुविधा का समर्थन नहीं करता है।

अधिकांश लोगों के लिए, अधिक व्यावहारिक दृष्टिकोण बैकअप से एक साधारण बहाली है, संभवतः कुछ मैन्युअल मनोरंजन के बाद। दुर्भाग्य से, आजकल ज्यादातर लोग बैकअप नहीं लेते हैं।