PostgreSQL
 sql >> डेटाबेस >  >> RDS >> PostgreSQL

क्या मैं पहले से किए गए लेन-देन को रोलबैक कर सकता हूं? (डेटा हानि)

नहीं, आप किसी कमिट को पूर्ववत, रोलबैक या रिवर्स नहीं कर सकते।

डेटाबेस बंद करो!

(नोट:यदि आपने फाइल सिस्टम से डेटा निर्देशिका को हटा दिया है, तो डेटाबेस को बंद न करें। निम्नलिखित सलाह DELETE की आकस्मिक प्रतिबद्धता पर लागू होती है। या समान, rm -rf /data/directory . नहीं परिदृश्य)।

यदि यह डेटा महत्वपूर्ण था, तो अपना डेटाबेस अभी बंद करें और इसे पुनरारंभ न करें। pg_ctl stop -m immediate Use का उपयोग करें ताकि शटडाउन पर कोई चेकपॉइंट न चले।

एक बार लेन-देन करने के बाद आप उसे वापस नहीं ले सकते। आपको बैकअप से डेटा को पुनर्स्थापित करना होगा, या पॉइंट-इन-टाइम पुनर्प्राप्ति का उपयोग करना होगा, जिसे पहले सेट किया जाना चाहिए था दुर्घटना हुई।

यदि आपके पास कोई PITR / WAL संग्रह सेट अप नहीं है और आपके पास बैकअप नहीं है, तो आप वास्तविक संकट में हैं।

तत्काल शमन

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

कॉपी बनाने का तरीका इस बात पर निर्भर करता है कि आप कौन सा ऑपरेटिंग सिस्टम चला रहे हैं। डेटा डीआईआर कहां है इस पर निर्भर करता है कि आप किस ओएस पर चल रहे हैं और आपने पोस्टग्रेएसक्यूएल कैसे स्थापित किया है।

जिस तरह से कुछ डेटा बच सकता था

यदि आप अपने डीबी को जल्दी से रोक देते हैं तो आपको टेबल से कुछ डेटा पुनर्प्राप्त करने की उम्मीद हो सकती है। ऐसा इसलिए है क्योंकि PostgreSQL अपने भंडारण के लिए समवर्ती पहुंच का प्रबंधन करने के लिए बहु-संस्करण समवर्ती नियंत्रण (MVCC) का उपयोग करता है। कभी-कभी यह नए संस्करण write लिखेगा उन पंक्तियों में से जिन्हें आप तालिका में अपडेट करते हैं, पुरानी पंक्तियों को छोड़ देते हैं लेकिन "हटाए गए" के रूप में चिह्नित होते हैं। थोड़ी देर के बाद ऑटोवैक्यूम साथ आता है और पंक्तियों को खाली स्थान के रूप में चिह्नित करता है, ताकि उन्हें बाद में INSERT द्वारा अधिलेखित किया जा सके। या UPDATE . इस प्रकार, UPDATE . के पुराने संस्करण हो सकता है कि d पंक्तियाँ अभी भी आस-पास पड़ी हों, मौजूद हों लेकिन पहुंच से बाहर हों।

इसके अतिरिक्त, पीजी दो चरणों में लिखता है। पहला डेटा राइट-फ़ॉरवर्ड लॉग (WAL) को लिखा जाता है। केवल एक बार इसे वाल और हिट डिस्क पर लिखे जाने के बाद, इसे "हीप" (मुख्य टेबल) में कॉपी किया जाता है, संभवतः वहां मौजूद पुराने डेटा को ओवरराइट कर दिया जाता है। WAL सामग्री को bgwriter . द्वारा मुख्य ढेर में कॉपी किया जाता है और समय-समय पर चौकियों द्वारा। डिफ़ॉल्ट रूप से हर 5 मिनट में चौकियां होती हैं। यदि आप चेकपॉइंट होने से पहले डेटाबेस को रोकने का प्रबंधन करते हैं और इसे हार्ड-किल करके, मशीन पर प्लग खींचकर, या pg_ctl का उपयोग करके रोक दिया है। immediate . में हो सकता है कि आपने चेकपॉइंट होने से पहले से डेटा कैप्चर किया हो, इसलिए आपके पुराने डेटा के अभी भी ढेर में होने की अधिक संभावना है।

अब जब आपने डेटा डीआईआर की पूरी फाइल-सिस्टम-स्तरीय प्रतिलिपि बना ली है तो आप अपने डेटाबेस को बैक अप शुरू कर सकते हैं यदि आपको वास्तव में आवश्यकता हो; डेटा अभी भी चला जाएगा, लेकिन आपने वह किया है जो आप अपने आप को इसे पुनर्प्राप्त करने की कुछ आशा देने के लिए कर सकते हैं। पसंद को देखते हुए मैं शायद सुरक्षित रहने के लिए डीबी को बंद रखूंगा।

पुनर्प्राप्ति

डेटा पुनर्प्राप्ति प्रयास में आपकी सहायता करने के लिए अब आपको PostgreSQL के इनर्ड में एक विशेषज्ञ को नियुक्त करने की आवश्यकता हो सकती है। एक पेशेवर को उनके समय के लिए भुगतान करने के लिए तैयार रहें, संभवतः काफी समय।

मैंने इसके बारे में Pg मेलिंग सूची पर पोस्ट किया है, और иктор Егоров depesz की पोस्ट pg_dirtyread पर लिंक किया गया है, जो वैसा ही दिखता है जैसा आप चाहते हैं, हालांकि यह TOAST को पुनर्प्राप्त नहीं करता है एड डेटा तो यह सीमित उपयोगिता का है। इसे आज़माएं, अगर आप भाग्यशाली हैं तो यह काम कर सकता है।

देखें:GitHub पर pg_dirtyread.

मैंने इस अनुभाग में जो लिखा था उसे हटा दिया है क्योंकि यह उस टूल द्वारा अप्रचलित है।

PostgreSQL पंक्ति संग्रहण मूल बातें भी देखें

रोकथाम

मेरी ब्लॉग प्रविष्टि देखें PostgreSQL डेटाबेस भ्रष्टाचार को रोकना।

एक अर्ध-संबंधित साइड-नोट पर, यदि आप दो चरण प्रतिबद्ध का उपयोग कर रहे थे तो आप ROLLBACK PREPARED कर सकते थे एक लेन-देन के लिए जो प्रतिबद्ध होने के लिए तैयार था लेकिन पूरी तरह से प्रतिबद्ध नहीं था। यह पहले से ही किए गए लेन-देन को वापस करने के सबसे करीब है, और यह आपकी स्थिति पर लागू नहीं होता है।




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PostgreSQL में किसी मौजूदा तालिका में स्वत:वृद्धिशील प्राथमिक कुंजी कैसे जोड़ें?

  2. मणि इंस्टॉल पीजी ओएसएक्स शेर पर काम नहीं करता है

  3. पोस्टग्रेज़ के साथ डेटा डालें और विदेशी कुंजियाँ सेट करें

  4. Django+Postgres:वर्तमान लेनदेन निरस्त कर दिया गया है, लेनदेन ब्लॉक के अंत तक आदेशों को अनदेखा कर दिया गया है

  5. डेटाबेस में तैयार विवरण सम्मिलित करना - PSQL