sqlite> DELETE FROM mails WHERE (`id` = 71);
SQL error: database is locked
मैं डेटाबेस को कैसे अनलॉक करूंगा ताकि यह काम करे?
sqlite> DELETE FROM mails WHERE (`id` = 71);
SQL error: database is locked
मैं डेटाबेस को कैसे अनलॉक करूंगा ताकि यह काम करे?
जवाबों:
खिड़कियों में आप इस कार्यक्रम की कोशिश कर सकते हैं http://www.nirsoft.net/utils/opened_files_view.html यह पता लगाने के लिए कि प्रक्रिया db फ़ाइल को संभाल रही है। अनलॉक डेटाबेस के लिए उस प्रोग्राम को बंद करने का प्रयास करें
लिनक्स और macOS में आप कुछ ऐसा ही कर सकते हैं, उदाहरण के लिए, यदि आपकी लॉक की गई फ़ाइल का विकास है।
$ fuser development.db
यह कमांड दिखाएगा कि कौन सी प्रक्रिया फ़ाइल को लॉक कर रही है:
> development.db: 5430
बस प्रक्रिया को मार डालो ...
मार-९ ५४३०
... और आपका डेटाबेस अनलॉक हो जाएगा।
kill
ठीक होना चाहिए, लेकिन आपको इसे ठीक से मारने के लिए सावधान रहने की आवश्यकता है, और kill -9
शायद गलत है और / या ओवरकिल है। यदि प्रक्रिया लटका दी गई है और अन्यथा नहीं मर जाएगी, तो कभी-कभी आपको ज़रूरत होती है kill -9
। लेकिन आप मुख्य प्रोडक्शन जॉब को जाना और मारना नहीं चाहते हैं, इसलिए आप रिपोर्ट कर सकते हैं कि डेटाबेस अब लॉक नहीं है!
मैंने एक लेखन के दौरान एक ऐप को क्रैश करके अपने साइक्लाइट डीबी को लॉक कर दिया। यहां बताया गया है कि मैंने इसे कैसे तय किया:
echo ".dump" | sqlite old.db | sqlite new.db
से लिया गया: http://random.kakaopor.hu/how-to-repair-an-sqlite.dadabase
sqlite> .dump PRAGMA foreign_keys=OFF; BEGIN TRANSACTION; /**** ERROR: (5) database is locked *****/ ROLLBACK; -- due to errors
FOREIGN KEY constraint failed (RELEASE RESTOREPOINT)
नीचे सूचीबद्ध DatabaseIsLocked पृष्ठ अब उपलब्ध नहीं है। फ़ाइल लॉकिंग और कॉन्सैरेसी पेज v3 में शुरू की गई फ़ाइल लॉकिंग से संबंधित परिवर्तनों का वर्णन करता है और भविष्य के पाठकों के लिए उपयोगी हो सकता है। https://www.sqlite.org/lockingv3.html
SQLite wiki DatabaseIsLocked पृष्ठ इस त्रुटि संदेश की एक अच्छी व्याख्या प्रदान करता है। यह बताता है कि भाग में, विवाद का स्रोत आंतरिक है (त्रुटि को छोड़ने वाली प्रक्रिया के लिए)।
यह पृष्ठ जो यह नहीं समझाता है कि SQLite यह कैसे तय करता है कि आपकी प्रक्रिया में कोई चीज लॉक है और किन स्थितियों के कारण झूठी सकारात्मक हो सकती है।
-Journal फ़ाइल को हटाना एक भयानक विचार की तरह लगता है। यह एक दुर्घटना के बाद डेटाबेस को एक सुसंगत स्थिति में वापस रोल करने की अनुमति देने के लिए है। यदि आप डेटाबेस को असंगत स्थिति में रखते हुए इसे हटा देते हैं, तो आपको एक दूषित डेटाबेस के साथ छोड़ दिया जाता है। साइक्लाइट साइट से एक पृष्ठ का हवाला देते हुए :
यदि कोई क्रैश या पावर लॉस होता है और डिस्क पर एक हॉट जर्नल छोड़ दिया जाता है, तो यह आवश्यक है कि मूल डेटाबेस फ़ाइल और हॉट जर्नल डिस्क पर अपने मूल नामों के साथ तब तक रहें जब तक कि डेटाबेस फ़ाइल को किसी अन्य SQLite प्रक्रिया द्वारा खोला और वापस रोल न किया जाए। । [...]
हमें संदेह है कि SQLite वसूली के लिए एक सामान्य विफलता मोड इस तरह होता है: एक बिजली विफलता होती है। बिजली बहाल होने के बाद, एक अच्छी तरह से अर्थ वाला उपयोगकर्ता या सिस्टम व्यवस्थापक क्षति के लिए डिस्क पर चारों ओर देखना शुरू कर देता है। वे अपने डेटाबेस फ़ाइल को "important.data" नाम से देखते हैं। यह फ़ाइल शायद उनसे परिचित है। लेकिन दुर्घटना के बाद, "important.data-journal" नाम का एक हॉट जर्नल भी है। उपयोगकर्ता तब हॉट पत्रिका को हटा देता है, यह सोचकर कि वे सिस्टम को साफ करने में मदद कर रहे हैं। हम उपयोगकर्ता शिक्षा के अलावा इसे रोकने का कोई तरीका नहीं जानते हैं।
अगली बार डेटाबेस खोले जाने पर रोलबैक स्वचालित रूप से होने वाला है, लेकिन यह विफल हो जाएगा यदि प्रक्रिया डेटाबेस को लॉक नहीं कर सकती है। जैसा कि दूसरों ने कहा है, इसका एक संभावित कारण यह है कि वर्तमान में एक और प्रक्रिया खुली है। एक और संभावना एक बासी एनएफएस लॉक है, अगर डेटाबेस एनएफएस वॉल्यूम पर है। उस स्थिति में, डेटाबेस फ़ाइल को NFS सर्वर (mv database.db original.db; cp original.db database.db) पर लॉक नहीं की गई ताज़ा प्रतिलिपि के साथ बदलना है। ध्यान दें कि NFS फ़ाइल लॉकिंग के छोटे कार्यान्वयन के कारण, SQLLIT FAQ, NFS वॉल्यूम पर डेटाबेस के समवर्ती पहुँच के बारे में सावधानी बरतने की सलाह देता है।
मैं स्पष्ट नहीं कर सकता कि -journal फ़ाइल को हटाने से आप एक डेटाबेस को लॉक कर देंगे जो आप पहले नहीं कर सकते थे। क्या वह प्रजनन योग्य है?
वैसे, एक -journal फ़ाइल की उपस्थिति का मतलब यह नहीं है कि कोई दुर्घटना हुई थी या कि वापस रोल करने के लिए परिवर्तन हैं। Sqlite में कुछ अलग जर्नल मोड हैं, और PERSIST या TRUNCATE मोड में यह -journal फ़ाइल को हमेशा जगह पर छोड़ता है, और यह इंगित करने के लिए सामग्री को बदलता है कि वापस रोल करने के लिए आंशिक लेनदेन हैं या नहीं।
यदि आप "डेटाबेस लॉक है" त्रुटि को दूर करना चाहते हैं तो इन चरणों का पालन करें:
यदि किसी प्रोसेस में SQLite DB पर लॉक होता है और क्रैश हो जाता है, तो DB स्थायी रूप से लॉक हो जाता है। यही समस्या है। ऐसा नहीं है कि किसी अन्य प्रक्रिया में ताला है।
SQLite db फाइलें सिर्फ फाइलें हैं, इसलिए यह सुनिश्चित करने के लिए पहला कदम होगा कि यह केवल पढ़ने के लिए नहीं है। दूसरी बात यह सुनिश्चित करना है कि आपके पास किसी प्रकार का GUI SQLite DB दर्शक DB ओपन के साथ नहीं है। आप किसी अन्य शेल में DB ओपन कर सकते हैं, या आपके कोड में DB ओपन हो सकता है। आमतौर पर आप यह देखेंगे कि यदि कोई अलग धागा, या एप्लिकेशन जैसे कि SQLite डेटाबेस ब्राउज़र में लिखने के लिए DB खुला है।
मुझे अभी यह समस्या थी, एक NFS माउंट पर संग्रहीत रिमोट सर्वर पर SQLite डेटाबेस का उपयोग करके। SQLite दूरस्थ खोल सत्र के बाद एक लॉक प्राप्त करने में असमर्थ था जो डेटाबेस के खुले रहने पर दुर्घटनाग्रस्त हो गया था।
ऊपर सुझाई गई पुनर्प्राप्ति के लिए व्यंजनों ने मेरे लिए काम नहीं किया (विचार के लिए पहले कदम और फिर डेटाबेस को कॉपी करें)। लेकिन गैर-एनएफएस प्रणाली में इसे कॉपी करने के बाद, डेटाबेस प्रयोग करने योग्य नहीं हो गया और डेटा खो गया प्रतीत नहीं होता है।
मेरा लॉक सिस्टम के दुर्घटनाग्रस्त होने के कारण हुआ था न कि किसी हैंगिंग प्रक्रिया द्वारा। इसे हल करने के लिए मैंने केवल फ़ाइल का नाम बदला और फिर इसे मूल नाम और स्थान पर कॉपी कर दिया।
एक linux shell का उपयोग करना ...
mv mydata.db temp.db
cp temp.db mydata.db
मैंने Pooling=true
कनेक्शन स्ट्रिंग में " " जोड़ा और यह काम किया।
मैंने SQLite में लॉकिंग के विभिन्न राज्यों के प्रलेखन को बहुत मददगार पाया। माइकल, अगर आप पढ़ सकते हैं, लेकिन डेटाबेस में राइट्स नहीं कर सकते हैं, तो इसका मतलब है कि एक प्रक्रिया ने आपके डेटाबेस पर एक RESERVED लॉक प्राप्त कर लिया है, लेकिन अभी तक राइट को निष्पादित नहीं किया है। यदि आप SQLite3 का उपयोग कर रहे हैं, तो PENDING नामक एक नया लॉक है जहां कोई और प्रक्रिया कनेक्ट करने की अनुमति नहीं है, लेकिन मौजूदा कनेक्शन रीडिंग प्रदर्शन कर सकते हैं, इसलिए यदि यह वह समस्या है जिसे आपको इसके बजाय देखना चाहिए।
मुझे ऐप के भीतर ऐसी समस्या है, जो 2 कनेक्शन से SQLite तक पहुंचता है - एक केवल पढ़ने के लिए और लिखने और पढ़ने के लिए दूसरा था। ऐसा लगता है कि दूसरे कनेक्शन से रीड-ओनली कनेक्शन ब्लॉकिंग राइटिंग। अंत में, यह पता चला है कि उपयोग के बाद कम से कम, तैयार किए गए स्टेटमेंट IMMEDIATELY को अंतिम रूप देना या करना आवश्यक है। जब तक तैयार बयान नहीं खोला जाता है, तब तक यह डेटाबेस के कारण लेखन के लिए अवरुद्ध हो गया था।
मत भूलो कॉल:
sqlite_reset(xxx);
या
sqlite_finalize(xxx);
INDEX'ing जैसे कुछ कार्यों में बहुत लंबा समय लग सकता है - और यह चलते समय पूरे डेटाबेस को लॉक कर देता है। इस तरह के मामलों में, यह जर्नल फ़ाइल का उपयोग भी नहीं कर सकता है!
तो सबसे अच्छा / एकमात्र तरीका यह जांचने के लिए कि क्या आपका डेटाबेस लॉक है क्योंकि एक प्रक्रिया ACTIVELY इसे लिख रही है (और इस प्रकार आपको इसे तब तक अकेला छोड़ देना चाहिए जब तक कि इसका ऑपरेशन पूरा न हो जाए) md5 (या कुछ सिस्टम पर md5sum) फ़ाइल को दो बार । यदि आप एक अलग चेकसम प्राप्त करते हैं, तो डेटाबेस लिखा जा रहा है, और आप वास्तव में वास्तव में वास्तव में -9 को उस प्रक्रिया को मारना नहीं चाहते हैं क्योंकि आप आसानी से एक भ्रष्ट तालिका / डेटाबेस के साथ समाप्त कर सकते हैं यदि आप करते हैं।
मैं दोहराऊंगा, क्योंकि यह महत्वपूर्ण है - समाधान लॉकिंग प्रोग्राम को खोजने और इसे मारने के लिए नहीं है - यह पता लगाना है कि क्या डेटाबेस में अच्छे कारण के लिए राइट लॉक है, और वहां से जाएं। कभी-कभी सही समाधान सिर्फ एक कॉफी ब्रेक होता है।
इस बंद-से-नहीं-लेकिन-लिखित-स्थिति को बनाने का एकमात्र तरीका यह है कि यदि आपका कार्यक्रम चलता है BEGIN EXCLUSIVE
, क्योंकि यह कुछ तालिका परिवर्तन या कुछ करना चाहता था, तो जो भी कारण कभी भी END
बाद में नहीं भेजता है , और प्रक्रिया कभी भी समाप्त नहीं होती है । सभी तीन शर्तों को पूरा किया जा रहा है, किसी भी ठीक से लिखे गए कोड में अत्यधिक संभावना नहीं है, और 100 में से 99 बार जब कोई अपनी हत्या प्रक्रिया -9 को मारना चाहता है, तो लॉकिंग प्रक्रिया वास्तव में एक अच्छे कारण के लिए आपके डेटाबेस को लॉक कर रही है। प्रोग्रामर आमतौर पर इस BEGIN EXCLUSIVE
शर्त को नहीं जोड़ते हैं जब तक कि उन्हें वास्तव में ज़रूरत न हो, क्योंकि यह संक्षिप्तता को रोकता है और उपयोगकर्ता की शिकायतों को बढ़ाता है। SQLite ही इसे तब जोड़ता है जब इसे वास्तव में आवश्यकता होती है (जैसे कि अनुक्रमण करते समय)।
अंत में, 'लॉक' स्थिति फ़ाइल के अंदर मौजूद नहीं है क्योंकि कई उत्तर बताए गए हैं - यह ऑपरेटिंग सिस्टम के कर्नेल में रहता है। BEGIN EXCLUSIVE
OS से लॉक होने का अनुरोध करने वाली प्रक्रिया को फ़ाइल पर लॉक रखा जाना चाहिए। यहां तक कि अगर आपकी अनन्य प्रक्रिया दुर्घटनाग्रस्त हो गई है, तो आपका ओएस यह पता लगाने में सक्षम होगा कि उसे फ़ाइल लॉक बनाए रखना चाहिए या नहीं !! एक डेटाबेस के साथ समाप्त होना संभव नहीं है जो बंद है लेकिन कोई भी प्रक्रिया सक्रिय रूप से इसे बंद नहीं कर रही है !! जब यह देखने की बात आती है कि कौन सी प्रक्रिया फ़ाइल को लॉक कर रही है, तो आमतौर पर fuser के बजाय lsof का उपयोग करना बेहतर होता है (यह क्यों का एक अच्छा प्रदर्शन है: /unix/94316/fuser-vs-lsof- करने के लिए चेक-इन-उपयोग )। वैकल्पिक रूप से यदि आपके पास DTrace (OSX) है, तो आप फ़ाइल पर iosnoop का उपयोग कर सकते हैं।
मेरे पास बस कुछ ऐसा ही था - मेरा वेब एप्लिकेशन डेटाबेस से पढ़ने में सक्षम था, लेकिन कोई आवेषण या अपडेट नहीं कर सका। अपाचे के रिबूट ने इस मुद्दे को कम से कम अस्थायी रूप से हल किया।
हालांकि, मूल कारण को ट्रैक करने में सक्षम होना अच्छा होगा।
यह लिंक समस्या का समाधान करता है। : जब Sqlite देता है: डेटाबेस बंद त्रुटि यह मेरी समस्या को हल किया आप के लिए उपयोगी हो सकता है।
और आप भविष्य में डेटाबेस को लॉक नहीं करने के लिए लेनदेन शुरू करने और अंत लेनदेन का उपयोग कर सकते हैं।
डेटाबेस की आंतरिक समस्या होनी चाहिए ...
मेरे लिए "SQLite manager" के साथ डेटाबेस ब्राउज़ करने की कोशिश करने के बाद इसे प्रकट किया गया है ...
इसलिए, यदि आपको डेटाबेस से कनेक्ट होने वाली कोई अन्य प्रक्रिया नहीं मिल रही है और आप इसे ठीक नहीं कर सकते, तो डेटाबेस बस इस कट्टरपंथी समाधान की कोशिश करो:
rake db:migrate
" के साथ निष्पादित करेंमैं मैक ओएस एक्स 10.5.7 पर इसी समस्या में एक टर्मिनल सत्र से पायथन स्क्रिप्ट चला रहा था। हालाँकि मैंने स्क्रिप्ट्स को रोक दिया था और टर्मिनल विंडो कमांड प्रॉम्प्ट पर बैठा था, यह अगली बार चलने पर यह त्रुटि देगा। इसका समाधान टर्मिनल विंडो को बंद करना था और फिर इसे फिर से खोलना था। मेरे लिए कोई मतलब नहीं है, लेकिन यह काम किया।
मुझे भी यही समस्या थी। जाहिरा तौर पर रोलबैक फ़ंक्शन जर्नल के साथ db फ़ाइल को अधिलेखित करने के लिए लगता है जो db फ़ाइल के समान है लेकिन सबसे हाल के बदलाव के बिना। मैंने इसे नीचे दिए गए अपने कोड में लागू किया है और यह तब से ठीक काम कर रहा है, जबकि इससे पहले कि मेरा कोड लूप में फंस जाता, क्योंकि डेटाबेस लॉक रहता था।
उम्मीद है की यह मदद करेगा
##############
#### Defs ####
##############
def conn_exec( connection , cursor , cmd_str ):
done = False
try_count = 0.0
while not done:
try:
cursor.execute( cmd_str )
done = True
except sqlite.IntegrityError:
# Ignore this error because it means the item already exists in the database
done = True
except Exception, error:
if try_count%60.0 == 0.0: # print error every minute
print "\t" , "Error executing command" , cmd_str
print "Message:" , error
if try_count%120.0 == 0.0: # if waited for 2 miutes, roll back
print "Forcing Unlock"
connection.rollback()
time.sleep(0.05)
try_count += 0.05
def conn_comit( connection ):
done = False
try_count = 0.0
while not done:
try:
connection.commit()
done = True
except sqlite.IntegrityError:
# Ignore this error because it means the item already exists in the database
done = True
except Exception, error:
if try_count%60.0 == 0.0: # print error every minute
print "\t" , "Error executing command" , cmd_str
print "Message:" , error
if try_count%120.0 == 0.0: # if waited for 2 miutes, roll back
print "Forcing Unlock"
connection.rollback()
time.sleep(0.05)
try_count += 0.05
##################
#### Run Code ####
##################
connection = sqlite.connect( db_path )
cursor = connection.cursor()
# Create tables if database does not exist
conn_exec( connection , cursor , '''CREATE TABLE IF NOT EXISTS fix (path TEXT PRIMARY KEY);''')
conn_exec( connection , cursor , '''CREATE TABLE IF NOT EXISTS tx (path TEXT PRIMARY KEY);''')
conn_exec( connection , cursor , '''CREATE TABLE IF NOT EXISTS completed (fix DATE, tx DATE);''')
conn_comit( connection )
इस अपवाद को प्राप्त करने का एक सामान्य कारण यह है कि जब आप पढ़े हुए ऑपरेशन के लिए संसाधनों को पकड़े हुए एक लेखन कार्य करने का प्रयास कर रहे हों। उदाहरण के लिए, यदि आप किसी तालिका से चयन करते हैं, और फिर पहले अपने ResultSet को बंद किए बिना आपके द्वारा चयनित कुछ को अपडेट करने का प्रयास करें।
मुझे बहु-थ्रेडेड एप्लिकेशन में "डेटाबेस लॉक है" त्रुटियां हो रही थीं, जो SQLITE_BUSY परिणाम कोड प्रतीत होता है , और मैंने इसे sqlite3_busy_timeout सेट करने के साथ हल किया 30000 की तरह लंबे समय तक कुछ करने के लिए ।
(एक साइड-नोट पर, कितना अजीब है कि 7 साल पुराने सवाल पर किसी को भी यह पता नहीं चला! SQLite वास्तव में एक अजीब और आश्चर्यजनक परियोजना है ...)
रिबूट विकल्प से नीचे जाने से पहले, यह देखने योग्य है कि क्या आप साइक्लाइट डेटाबेस के उपयोगकर्ता को ढूंढ सकते हैं।
लिनक्स पर, कोई fuser
इसे अंत तक नियोजित कर सकता है :
$ fuser database.db
$ fuser database.db-journal
मेरे मामले में मुझे निम्नलिखित प्रतिक्रिया मिली:
philip 3556 4700 0 10:24 pts/3 00:00:01 /usr/bin/python manage.py shell
जिसमें पता चला कि मैंने डेटाबेस का उपयोग करते हुए pid 3556 (manage.py) के साथ एक और पायथन प्रोग्राम किया था।
एक पुराना सवाल, बहुत सारे जवाबों के साथ, यहाँ उन चरणों के बारे में बताया गया है, जिनका मैंने हाल ही में ऊपर दिए गए उत्तरों को पढ़ने के बाद किया है, लेकिन मेरे मामले में यह समस्या cifs के साझाकरण के कारण थी। यह मामला पहले रिपोर्ट नहीं किया गया है, इसलिए आशा है कि यह किसी की मदद करता है।
कनेक्शन खोलने पर लॉक मोड को बल देने का प्रयास करें
final SQLiteConfig config = new SQLiteConfig();
config.setReadOnly(false);
config.setLockingMode(LockingMode.NORMAL);
connection = DriverManager.getConnection(url, config.toProperties());
यदि आपका NFS साझा फ़ोल्डर में अपनी SQLite db फ़ाइल का उपयोग कर रहा है, तो जाँच करें SQLite faq के इस बिंदु की करें , और अपने बढ़ते तालों को सुनिश्चित करने के लिए अपने बढ़ते कॉन्फ़िगरेशन विकल्पों की समीक्षा करें, जैसा कि यहाँ वर्णित है :
//myserver /mymount cifs username=*****,password=*****,iocharset=utf8,sec=ntlm,file,nolock,file_mode=0700,dir_mode=0700,uid=0500,gid=0500 0 0
मुझे यह त्रुटि इस परिदृश्य में मिली कि यहाँ वर्णन करने वाले लोगों से थोड़ा अलग है।
SQLite डेटाबेस 3 सर्वर द्वारा साझा एक NFS फाइल सिस्टम पर आराम करता है। सर्वरों में से 2 पर मैं सफलतापूर्वक डेटाबेस पर क्वेरीज़ चलाने में सक्षम था, तीसरे एक विचार पर मुझे "डेटाबेस लॉक किया गया" संदेश मिल रहा था।
इस 3rd मशीन की बात यह थी कि इसमें कोई जगह नहीं बची थी /var
। हर बार जब मैंने इस फाइल सिस्टम में स्थित किसी भी SQLite डेटाबेस में एक क्वेरी चलाने की कोशिश की तो मुझे "डेटाबेस लॉक हो गया" संदेश मिल गया और लॉग पर यह त्रुटि भी:
अगस्त 8 10:33:38 server01 कर्नेल: लॉकड: 172.22.84.87 की निगरानी नहीं कर सकता
और यह भी एक:
अगस्त 8 10:33:38 server01 rpc.statd [7430]: सम्मिलित करने में विफल: /var/lib/nfs/statd/sm/other.server.name.com लिखना: डिवाइस पर कोई स्थान नहीं छोड़ा गया Aug 8 10:33 38 server01 rpc.statd [7430]: STAT_FAIL to server01 17_.22.84.87 के SM_MON के लिए
अंतरिक्ष की स्थिति को संभालने के बाद सब कुछ सामान्य हो गया।
यदि आप इसे SQLite के साथ देखने के लिए Chrome डेटाबेस को अनलॉक करने का प्रयास कर रहे हैं , तो बस क्रोम शट डाउन।
खिड़कियाँ
%userprofile%\Local Settings\Application Data\Google\Chrome\User Data\Default\Web Data
or
%userprofile%\Local Settings\Application Data\Google\Chrome\User Data\Default\Chrome Web Data
मैक
~/Library/Application Support/Google/Chrome/Default/Web Data
आपकी पिछली टिप्पणियों से आपने कहा था कि -journal फ़ाइल मौजूद थी।
इसका मतलब यह हो सकता है कि आपने खोला है और (EXCLUSIVE?) लेनदेन किया है और अभी तक डेटा नहीं किया है। क्या आपका कार्यक्रम या कोई अन्य प्रक्रिया -जूरनल को पीछे छोड़ गई ??
Sqlite प्रक्रिया को फिर से शुरू करने से जर्नल फ़ाइल दिखाई देगी और किसी भी अवांछित कार्रवाई को साफ करेगी और -journal फ़ाइल को हटा देगी।
जैसा कि सेउन ओसेवा ने कहा है, कभी-कभी एक ज़ोंबी प्रक्रिया टर्मिनल में ताला लगाकर बैठ जाएगी, भले ही आप इसे संभव न समझें। आपकी स्क्रिप्ट चलती है, क्रैश हो जाती है, और आप तुरंत वापस चले जाते हैं, लेकिन एक लाइब्रेरी कॉल द्वारा कहीं न कहीं एक ज़ोंबी प्रक्रिया शुरू हो जाती है, और उस प्रक्रिया में लॉक होता है।
आपके द्वारा (OSX पर) टर्मिनल को बंद करने से काम चल सकता है। रीबूटिंग से काम चल जाएगा। आप "अजगर" प्रक्रियाओं को देख सकते हैं (उदाहरण के लिए) जो कुछ भी नहीं कर रहे हैं, और उन्हें मार दें।
आप इसे आज़मा सकते हैं: .timeout 100
टाइमआउट सेट करने के लिए। मुझे नहीं पता कि कमांड लाइन में क्या होता है लेकिन जब मैं ऐसा करता हूं तो C # .Net में: "UPDATE table-name SET column-name = value;"
मुझे लगता है कि डेटाबेस लॉक है लेकिन यह"UPDATE table-name SET column-name = value"
ठीक है।
जब आप जोड़ते हैं तो ऐसा लगता है;