2011-03-07 9 views
16

में अमान्य पृष्ठ शीर्ष लेख मैं अपने PostgreSQL डेटाबेस में एक त्रुटिPostgreSQL: ब्लॉक

ERROR: invalid page header in block 411 of relation "t_value_time" 

हो रही है। यह विभिन्न मशीनों पर हो रहा है। क्या इसे रोकने से रोकने का कोई तरीका है, या कम से कम पीएसक्यूएल को अवैध ब्लॉक पर डेटा को अनदेखा करने और आगे बढ़ने के लिए कह रहा है?

मैं ब्लॉक से डेटा खो देता हूं और बाकी डेटा को पढ़ने के बाद उसे छोड़ देता हूं। क्या इस ब्लॉक को छोड़ने के लिए पीएसक्यूएल को बताने का कोई तरीका है?

उत्तर

2

हर बार समान ब्लॉक?

जो मैंने पढ़ा है, उससे अमान्य ब्लॉक का सबसे आम कारण हार्डवेयर है। Red Hat में उपयोगिता, pg_filedump है, जो "PostgreSQL ढेर, अनुक्रमणिका, और नियंत्रण फ़ाइलों को मानव-पठनीय रूप में स्वरूपित करता है"। मुझे नहीं लगता कि वे 8.4.0 से अधिक पोस्टग्रेएसक्यूएल संस्करण का समर्थन करते हैं, लेकिन मैं गलत हो सकता हूं।

आप साबित करना चाहते हैं कि कठिन, पूरी तरह से डिस्क, रैम और एनआईसी डायग्नोस्टिक्स का उपयोग करके आपका हार्डवेयर अच्छा है।

1

ऐसा करने का कोई आसान तरीका नहीं है, लेकिन डेटा फ़ाइल को सीधे संपादित करके यह करना आसान है (pg_class प्रविष्टि का relfilenode फ़ाइल नाम देता है)।

बस खराब ब्लॉक पर फ़ाइल में कहीं और से एक ब्लॉक कॉपी करें। आदर्श रूप से, एक खाली ब्लॉक को संश्लेषित करें या उस ओवर को अपडेट करें जिसे आप ओवरराइट कर रहे हैं, इसमें कोई वैध टुपल्स नहीं है।

एक बार जब आपको कुछ ऐसा मिलता है जो उस त्रुटि का उत्पादन नहीं करता है, तो तालिका को डंप करें और सुरक्षा के लिए इसे पुनः लोड करें।

0

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

23

चेतावनी: आप कुछ डेटा खो देंगे! pwkg.ork के माध्यम से

database=# SET zero_damaged_pages = on; 
SET 
database=# VACUUM FULL damaged_table; 
WARNING: invalid page header in block xxx of relation base/yyy/zzz; zeroing out page 
[..] 
REINDEX TABLE damaged_table; 

फिक्स:

हम इस पर पाने में कामयाब रहे (देव वीएम दुर्घटनाग्रस्त हो) जारी करके।

+2

यह सही समाधान है। चेतावनी को साफ़ करने के लिए 'वैक्यूम पूर्ण 'और' REINDEX' कड़ाई से जरूरी नहीं है। कोई भी ऑपरेशन जो डिस्क से पृष्ठ को पढ़ता है और "अवैध पृष्ठ शीर्षलेख" त्रुटि को ट्रिगर करता है, यदि 'zero_damaged_pages' चालू है, तो क्षतिग्रस्त पृष्ठ (सभी शून्यों के साथ इसे फिर से लिखकर) ठीक कर देगा, ताकि आप केवल एक क्वेरी कर सकें जो खराब हो पृष्ठ। – simonp