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 চেষ্টা করে দেখতে পারেন প্রক্রিয়াটি ডিবি ফাইল পরিচালনা করছে। আনলক ডাটাবেস জন্য প্রোগ্রাম বন্ধ করার চেষ্টা করুন
লিনাক্স এবং ম্যাকোজে আপনি অনুরূপ কিছু করতে পারেন, উদাহরণস্বরূপ, যদি আপনার লক করা ফাইল ডেভেলপমেন্ট থাকে d db:
u fuser উন্নয়ন.db
এই কমান্ডটি দেখায় যে ফাইলটি কীভাবে লক করছে তা:
> উন্নয়ন.ডিবি: 5430
কেবল প্রক্রিয়াটি মেরে ফেলুন ...
মেরুন -9 5430
... এবং আপনার ডাটাবেস আনলক করা হবে।
kill
তা ভাল হওয়া উচিত, তবে এটি সঠিকভাবে মেরে ফেলার জন্য আপনার যত্নবান হওয়া দরকার এবং kill -9
সম্ভবত এটি ভুল এবং / অথবা অতিরিক্ত দক্ষতা। যদি প্রক্রিয়াটি স্তব্ধ হয়ে যায় এবং অন্যথায় মারা যায় না, তবে কখনও কখনও আপনার প্রয়োজন হয় kill -9
। তবে আপনি মূল প্রযোজনার কাজটি গিয়ে মেরে ফেলতে চান না যাতে আপনি রিপোর্ট করতে পারেন যে ডেটাবেস আর লক নেই!
একটি লেখার সময় আমার অ্যাপ্লিকেশনটি ক্র্যাশ করে আমার স্ক্লাইট ডিবি লক হয়ে যায়। এখানে আমি এটি স্থির করেছি:
echo ".dump" | sqlite old.db | sqlite new.db
থেকে নেওয়া: http://random.kakaopor.hu/how-to-repair-an-sqlite- ডেটাবেস
sqlite> .dump PRAGMA foreign_keys=OFF; BEGIN TRANSACTION; /**** ERROR: (5) database is locked *****/ ROLLBACK; -- due to errors
FOREIGN KEY constraint failed (RELEASE RESTOREPOINT)
নীচে তালিকাভুক্ত ডাটাবেসআইস লক পৃষ্ঠাটি আর উপলব্ধ নেই। ফাইল লকিং এবং কনকুরেন্সি পৃষ্ঠাটি v3 তে প্রবর্তিত ফাইল লকিং সম্পর্কিত পরিবর্তনগুলি বর্ণনা করে এবং ভবিষ্যতের পাঠকদের জন্য দরকারী হতে পারে। https://www.sqlite.org/lockingv3.html
এসকিউএল উইকি ডেটাবেসআইসলকড পৃষ্ঠাটি এই ত্রুটি বার্তার একটি ভাল ব্যাখ্যা সরবরাহ করে। এটি আংশিকভাবে বলেছে যে বিবাদের উত্সটি অভ্যন্তরীণ (ত্রুটি নির্গত প্রক্রিয়াটিতে)।
এই পৃষ্ঠাটি যা ব্যাখ্যা করে না তা হ'ল এসকিউএলাইট কীভাবে সিদ্ধান্ত নেয় যে আপনার প্রসেসের কিছুতে একটি লক রয়েছে এবং কী কী পরিস্থিতিতে মিথ্যা ধনাত্মক হতে পারে।
জার্নাল ফাইলটি মুছে ফেলা ভীতিজনক ধারণা বলে মনে হচ্ছে। স্ক্লাইটটি ক্র্যাশের পরে ডাটাবেসটিকে একটি সামঞ্জস্যপূর্ণ স্থানে ফিরিয়ে আনতে দেয়। আপনি যদি এটি মুছে ফেলেন যখন ডেটাবেসটি অসঙ্গতিপূর্ণ অবস্থায় রয়েছে, তবে আপনি একটি দূষিত ডাটাবেস রেখে গেছেন। স্ক্লাইট সাইট থেকে একটি পৃষ্ঠা উদ্ধৃত করা :
যদি কোনও ক্রাশ বা পাওয়ার ক্ষতি হয় এবং একটি গরম জার্নালটি ডিস্কে ছেড়ে যায় তবে এটি প্রয়োজনীয় যে মূল ডাটাবেস ফাইল এবং হট জার্নালটি অন্য এসকিউএলাইট প্রক্রিয়া দ্বারা ডেটাবেস ফাইলটি না খোলার এবং ফিরে ঘোরানো না হওয়া পর্যন্ত তাদের মূল নামগুলির সাথে ডিস্কে থাকা জরুরি । [...]
আমরা সন্দেহ করি যে এসকিউএলাইট পুনরুদ্ধারের জন্য একটি সাধারণ ব্যর্থতা মোড এরকম ঘটে: একটি শক্তি ব্যর্থতা ঘটে। শক্তি পুনরুদ্ধার হওয়ার পরে, একটি ভাল-অর্থপূর্ণ ব্যবহারকারী বা সিস্টেম প্রশাসক ক্ষতির জন্য ডিস্কের চারপাশে সন্ধান শুরু করে। তারা "গুরুত্বপূর্ণ.data" নামে তাদের ডাটাবেস ফাইলটি দেখে। এই ফাইলটি সম্ভবত তাদের পরিচিত। তবে ক্রাশের পরে "গুরুত্বপূর্ণ.ডাটা-জার্নাল" নামে একটি হট জার্নালও রয়েছে। তারপরে ব্যবহারকারীরা হট জার্নালটি মুছে ফেলে, এই ভেবে যে তারা সিস্টেমটি পরিষ্কার করতে সহায়তা করছে। আমরা ব্যবহারকারীর শিক্ষা ব্যতীত এটিকে প্রতিরোধ করার কোনও উপায় জানি না।
পরবর্তী সময় ডাটাবেস খোলার সময় রোলব্যাকটি স্বয়ংক্রিয়ভাবে ঘটবে বলে মনে করা হচ্ছে, তবে প্রক্রিয়াটি ডাটাবেস লক করতে না পারলে এটি ব্যর্থ হবে। অন্যরা যেমন বলেছে, এর সম্ভাব্য কারণ হ'ল বর্তমানে অন্য প্রক্রিয়াটি এটির জন্য উন্মুক্ত। আর একটি সম্ভাবনা হল বাসি এনএফএস লক, যদি ডাটাবেসটি এনএফএস ভলিউমে থাকে। সেক্ষেত্রে, একটি কার্যপ্রণালী হ'ল ডাটাবেস ফাইলটিকে একটি নতুন কপি দিয়ে প্রতিস্থাপন করা হবে যা এনএফএস সার্ভারে লক করা হয়নি (এমভি ডাটাবেস.ডিবি অরিজিনাল। ডিবি; সিপি অরিজিনাল। ডিবি ডাটাবেস.ডিবি)। নোট করুন যে স্ক্লাইট এফএকিউ এনএফএস ফাইল লকিংয়ের বগি বাস্তবায়নের কারণে এনএফএস ভলিউমে ডাটাবেসে একযোগে অ্যাক্সেস সম্পর্কে সতর্কতার পরামর্শ দেয়।
জার্নাল ফাইলটি মোছার কারণে আপনি এমন একটি ডাটাবেস লক করতে দেবেন কেন তা আপনি আগে জানাতে পারছিলেন না আমি তা ব্যাখ্যা করতে পারি না। এটা কি পুনরুত্পাদনযোগ্য?
যাইহোক, একটি জার্নাল ফাইল উপস্থিতি অগত্যা বোঝা যাচ্ছে যে একটি ক্র্যাশ হয়েছে বা ফিরে ঘূর্ণায়িত পরিবর্তন আছে। স্ক্লাইটে কয়েকটি আলাদা জার্নাল মোড রয়েছে এবং PERSIST বা TRUNCATE মোডে এটি জার্নাল ফাইলটি সর্বদা স্থানে ফেলে এবং আংশিক লেনদেন পিছনে ফিরে আসে কিনা তা নির্দেশ করার জন্য বিষয়বস্তু পরিবর্তন করে।
আপনি যদি কোনও "ডাটাবেস লক করা আছে" ত্রুটিটি সরিয়ে নিতে চান তবে এই পদক্ষেপগুলি অনুসরণ করুন:
যদি কোনও প্রক্রিয়াতে কোনও এসকিউএল ডিবিতে লক থাকে এবং ক্র্যাশ হয় তবে ডিবি স্থায়ীভাবে লক থাকে। এটাই সমস্যা। এমন নয় যে অন্য কোনও প্রক্রিয়াতে একটি লক রয়েছে।
এসকিউএলাইট ডিবি ফাইলগুলি কেবল ফাইল, তাই প্রথম পদক্ষেপটি কেবল পঠনযোগ্য নয় তা নিশ্চিত করা হবে। অন্যান্য কাজটি হ'ল ডিবি খোলার সাথে আপনার কোনও ধরণের জিইউআই এসকিউএলাইট ডিবি ভিউয়ার না রয়েছে তা নিশ্চিত করা। অন্য শেলটিতে আপনার ডিবি খোলা থাকতে পারে, বা আপনার কোডে ডিবি খোলা থাকতে পারে। সাধারণত আপনি এটি দেখতে পাবেন যদি কোনও আলাদা থ্রেড, বা এসকিউএল ডাটাবেস ব্রাউজারের মতো অ্যাপ্লিকেশনটিতে লেখার জন্য ডিবি খোলা থাকে।
এনএফএস মাউন্টে সঞ্চিত রিমোট সার্ভারে এসকিউএলাইট ডাটাবেস ব্যবহার করে আমার এখনই এই সমস্যা হয়েছিল। ডেটাবেস খোলা থাকাকালীন আমি ব্যবহৃত রিমোট শেল সেশনটি ক্র্যাশ হয়ে যাওয়ার পরে এসকিউএলাইট কোনও লক পেতে সক্ষম হয় নি।
উপরে প্রস্তাবিত পুনরুদ্ধারের রেসিপিগুলি আমার পক্ষে কাজ করে না (প্রথমে সরিয়ে নিয়ে আবার ডাটাবেসটি অনুলিপি করার ধারণাসহ)। তবে এটি একটি এনএনএফএস সিস্টেমে অনুলিপি করার পরে, ডাটাবেসটি ব্যবহারযোগ্য হয়ে উঠেছে এবং ডেটা হারিয়ে গেছে বলে মনে হয় না।
আমার লকটি হ্যাং প্রক্রিয়া দ্বারা নয়, সিস্টেম ক্রাশ হওয়ার কারণে হয়েছিল। এটি সমাধান করার জন্য আমি কেবল ফাইলটির নাম পরিবর্তন করে এরপরে এটি অনুলিপি করে তার মূল নাম এবং অবস্থানটিতে রেখেছি।
এমন একটি লিনাক্স শেল ব্যবহার করে যা ...
mv mydata.db temp.db
cp temp.db mydata.db
আমি Pooling=true
সংযোগের স্ট্রিংয়ে " " যুক্ত করেছি এবং এটি কার্যকর হয়েছে।
আমি এসকিউএলাইটে লক করার বিভিন্ন রাজ্যের ডকুমেন্টেশন খুব সহায়ক বলে খুঁজে পেয়েছি । মাইকেল, আপনি যদি পারফর্ম করতে পারেন তবে ডাটাবেসে লেখার কাজ সম্পাদন করতে না পারলে এর অর্থ হ'ল কোনও প্রক্রিয়াটি আপনার ডাটাবেসে একটি রিসার্ভেড লক পেয়েছে তবে এখনও লেখার সম্পাদন করেনি। আপনি যদি এসকিউএলাইট 3 ব্যবহার করেন তবে পেন্ডিং নামে একটি নতুন লক রয়েছে যেখানে আরও কোনও প্রক্রিয়া সংযোগ করার অনুমতি দেওয়া হয় না তবে বিদ্যমান সংযোগগুলি পড়তে পারে perform
অ্যাপটিতে আমার এমন সমস্যা রয়েছে, যা 2 টি সংযোগ থেকে এসকিউএলাইট অ্যাক্সেস করে - একটি ছিল কেবল পঠনযোগ্য এবং দ্বিতীয়টি লেখার জন্য এবং পড়ার জন্য। দেখে মনে হচ্ছে যে কেবল পঠনযোগ্য সংযোগটি দ্বিতীয় সংযোগ থেকে লেখা অবরুদ্ধ করে। পরিশেষে, দেখা যাচ্ছে যে এটি চূড়ান্ত করতে হবে বা, কমপক্ষে, প্রস্তুত বিবৃতিগুলি ব্যবহারের পরে অবিলম্বে পুনরায় সেট করতে হবে। প্রস্তুত বিবৃতি খোলা না হওয়া পর্যন্ত এটি ডাটাবেসের কারণে লেখার জন্য অবরুদ্ধ ছিল।
কল করবেন না:
sqlite_reset(xxx);
অথবা
sqlite_finalize(xxx);
আইএনডিএক্সএক্স'-এর মতো কিছু ফাংশন খুব দীর্ঘ সময় নিতে পারে - এবং এটি চলার সময় পুরো ডাটাবেসটিকে লক করে দেয়। এর মতো দৃষ্টান্তগুলিতে এটি জার্নাল ফাইলটি ব্যবহার নাও করতে পারে!
সুতরাং আপনার ডাটাবেসটি লক হয়েছে কিনা তা যাচাই করার সর্বোত্তম / একমাত্র উপায় কারণ কোনও প্রক্রিয়া এটিতে আসলেই লেখা হয় (এবং এটির কাজ শেষ না হওয়া পর্যন্ত আপনি এটিকে একা ছেড়ে চলে যান) ফাইলটি দুবার এমডি 5 (অথবা কিছু সিস্টেমে এমডি 5sum) করতে হবে । আপনি যদি অন্য কোনও চেকসাম পান তবে ডাটাবেসটি লেখা হচ্ছে এবং আপনি সত্যিই সত্যিই সেই প্রক্রিয়াটি -9 মারতে চান না কারণ আপনি যদি সহজেই কোনও দুর্নীতিগ্রস্থ টেবিল / ডাটাবেস দিয়ে শেষ করতে পারেন তবে তা করেন।
আমি পুনরুক্তি করব, কারণ এটি গুরুত্বপূর্ণ - সমাধানটি লকিং প্রোগ্রামটি খুঁজে পাওয়া এবং এটি মেরে ফেলার নয় - এটি ডাটাবেসটির কোনও ভাল কারণে লেখার লক রয়েছে কিনা তা খুঁজে বের করতে হবে এবং সেখান থেকে চলে যেতে হবে। কখনও কখনও সঠিক সমাধানটি কেবল একটি কফি বিরতি।
এই লকড-তবে-না-লিখিত-পরিস্থিতি তৈরির একমাত্র উপায় হ'ল যদি আপনার প্রোগ্রামটি চলতে থাকে BEGIN EXCLUSIVE
, কারণ এটি কিছু টেবিল পরিবর্তন বা কিছু করতে চেয়েছিল, তবে যে কোনও কারণেই END
পরে কোনও দিন প্রেরণ করা হয় না এবং প্রক্রিয়াটি কখনও শেষ হয় না । তিনটি শর্ত পূরণ করা কোনও যথাযথভাবে লিখিত কোডে অত্যন্ত অসম্ভব, এবং 100 এর মধ্যে 99 বার যখন কেউ তাদের লকিং প্রক্রিয়া -9 হত্যা করতে চায়, লকিং প্রক্রিয়াটি আসলে কোনও ভাল কারণে আপনার ডাটাবেসকে লক করে রাখে। প্রোগ্রামাররা সাধারণত BEGIN EXCLUSIVE
তাদের প্রয়োজন না থাকলে শর্তটি সাধারণত যুক্ত করে না, কারণ এটি সম্মতি বাধা দেয় এবং ব্যবহারকারীর অভিযোগ বৃদ্ধি করে। এসকিউএলাইট নিজেই এটিকে কেবল তখন যুক্ত করে যখন এটি সত্যিকারের প্রয়োজন (সূচীকরণের মতো)।
অবশেষে, 'লকড' স্ট্যাটাসটি ফাইলের মধ্যে উপস্থিত না থাকায় বেশ কয়েকটি উত্তর বলেছে - এটি অপারেটিং সিস্টেমের কার্নেলটিতে থাকে। যে প্রক্রিয়াটি চলল BEGIN EXCLUSIVE
তাতে ওএস থেকে অনুরোধ করা হয়েছে যে একটি লক ফাইলে রাখা উচিত। এমনকি যদি আপনার একচেটিয়া প্রক্রিয়াটি ক্র্যাশ হয়ে গেছে, আপনার ওএস ফাইল লকটি বজায় রাখা উচিত কিনা তা নির্ধারণ করতে সক্ষম হবে !! কোনও ডাটাবেস যা লক করা আছে তা দিয়ে শেষ করা সম্ভব নয় তবে কোনও প্রক্রিয়া সক্রিয়ভাবে এটি লক করছে না !! : এটা দেখা যা প্রক্রিয়া ফাইল লক করা হয় আসে, তখন তা সাধারণত ব্যবহার করা ভাল lsof বরং ফিউজার (এই একটি ভাল বিক্ষোভ চেয়ে কেন /unix/94316/fuser-vs-lsof- -তে-চেক-ফাইল-ইন-ব্যবহার )। বিকল্পভাবে যদি আপনার ডিট্রেস (ওএসএক্স) থাকে তবে আপনি ফাইলটিতে আইওএসএনওপ ব্যবহার করতে পারেন।
আমার সাথে আমার ঠিক তেমন কিছু ঘটেছিল - আমার ওয়েব অ্যাপ্লিকেশন ডেটাবেস থেকে পড়তে সক্ষম হয়েছিল, তবে কোনও সন্নিবেশ বা আপডেট সম্পাদন করতে পারে নি। অ্যাপাচে একটি রিবুট সমস্যাটি কমপক্ষে সাময়িকভাবে সমাধান করেছে।
মূল কারণটি সন্ধান করতে সক্ষম হওয়াই ভাল লাগবে।
এই লিঙ্কটি সমস্যার সমাধান করে। : যখন স্ক্লাইট দেয়: ডেটাবেস লক করা ত্রুটি এটি সমাধান করেছে আমার সমস্যাটি আপনার পক্ষে কার্যকর হতে পারে।
এবং আপনি ভবিষ্যতে ডেটাবেস লক না করার জন্য শুরু লেনদেন এবং শেষ লেনদেন ব্যবহার করতে পারেন।
ডাটাবেসের অভ্যন্তরীণ সমস্যা হওয়া উচিত ...
আমার জন্য এটি "এসকিউএলাইট ম্যানেজার" দিয়ে ডাটাবেস ব্রাউজ করার চেষ্টা করার পরে প্রকাশ পেয়েছে ...
সুতরাং, যদি আপনি অন্য কোনও প্রক্রিয়া ডাটাবেসে সংযুক্ত না খুঁজে পান এবং আপনি কেবল এটি ঠিক করতে পারেন না, এই মূল সমাধানটি চেষ্টা করে দেখুন:
rake db:migrate
" দিয়ে কার্যকর করুনআমি টার্মিনাল সেশন থেকে পাইথন স্ক্রিপ্টগুলি পরিচালনা করে ম্যাক ওএস এক্স 10.5.7 এ এই একই সমস্যার মধ্যে পড়েছি। যদিও আমি স্ক্রিপ্টগুলি বন্ধ করে দিয়েছি এবং টার্মিনাল উইন্ডো কমান্ড প্রম্পটে বসে ছিল, এটি পরবর্তী সময় এটি চালানোর সময় এই ত্রুটিটি দেবে। সমাধানটি ছিল টার্মিনাল উইন্ডোটি বন্ধ করে আবার এটি খুলতে। আমার কাছে তা বোঝায় না, তবে এটি কার্যকর হয়েছে।
আমারও একই সমস্যা ছিল। স্পষ্টতই রোলব্যাক ফাংশনটি ডিবি ফাইলকে জার্নালের সাথে ওভাররাইট করে যা ডিবি ফাইলের মতো একই তবে সাম্প্রতিক পরিবর্তন ছাড়াই। আমি এটি নীচে আমার কোডটিতে প্রয়োগ করেছি এবং তখন থেকে এটি ঠিকঠাকভাবে কাজ করে যাচ্ছিল, যদিও আমার কোডটি কেবল ডাটাবেস লক থাকায় লুপটিতে আটকে থাকবে।
আশাকরি এটা সাহায্য করবে
##############
#### 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 )
এই ব্যতিক্রম পাওয়ার একটি সাধারণ কারণ হ'ল আপনি যখন কোনও পাঠ্য ক্রিয়াকলাপের জন্য সংস্থান রেখে একটি রাইট অপারেশন করার চেষ্টা করছেন। উদাহরণস্বরূপ, আপনি যদি কোনও টেবিল থেকে নির্বাচন করেন এবং তারপরে প্রথমে আপনার রেজাল্টসেটটি বন্ধ না করে আপনি যা কিছু বেছে নিয়েছেন তা আপডেট করার চেষ্টা করুন।
আমিও একটি বহু-থ্রেড অ্যাপ্লিকেশনটিতে "ডেটাবেস লকড" ত্রুটি ছিল যা SQLITE_BUSY ফলাফল কোড হিসাবে উপস্থিত বলে মনে হয় এবং আমি এটিকে 30000 এর মতো উপযুক্ত কিছুতে sqlite3_busy_Toutout সেট করে সমাধান করেছি ।
(সাইড-নোটে, year বছরের পুরানো প্রশ্নটির ভিত্তিতে কতটা অদ্ভুত বিষয় এটি ইতিমধ্যে কেউ খুঁজে পায়নি! এসকিউএলাইট সত্যই একটি অদ্ভুত এবং আশ্চর্যজনক প্রকল্প ...)
রিবুট বিকল্পটি নীচে যাওয়ার আগে, আপনি স্ক্লাইট ডাটাবেসের ব্যবহারকারী খুঁজে পেতে পারেন কিনা তা সার্থক।
লিনাক্স-এ, কেউ 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
যা দেখিয়েছিল যে আমার কাছে পিড 3556 (ম্যানেজ.পেই) ডেটাবেস ব্যবহার করে আমার একটি পাইথন প্রোগ্রাম ছিল।
একটি পুরানো প্রশ্ন, প্রচুর উত্তর সহ, আমি সম্প্রতি উপরের উত্তরগুলি পড়ার পদক্ষেপগুলি এখানে দিয়েছি, তবে আমার ক্ষেত্রে সমস্যাটি সিআইএফএস সংস্থান ভাগ করে নেওয়ার কারণে হয়েছিল। এই কেসটি এর আগে রিপোর্ট করা হয়নি, সুতরাং আশা করি এটি কারও সাহায্য করবে।
সাথে সংযোগ খোলার সাথে লক মোডকে জোর করার চেষ্টা করুন
final SQLiteConfig config = new SQLiteConfig();
config.setReadOnly(false);
config.setLockingMode(LockingMode.NORMAL);
connection = DriverManager.getConnection(url, config.toProperties());
যদি আপনি কোনও এনএফএস ভাগ করা ফোল্ডারে আপনার এসকিউএলাইট ডিবি ফাইল ব্যবহার করে থাকেন তবে এসকিউএলএফএইকিএইকের এই পয়েন্টটি পরীক্ষা করে দেখুন এবং আপনার বর্ণনাকারী বিকল্পগুলি পর্যালোচনা করুন যাতে আপনার বর্ণনাকারী লকগুলি এখানে বর্ণিত রয়েছে তা নিশ্চিত করে নিন :
//myserver /mymount cifs username=*****,password=*****,iocharset=utf8,sec=ntlm,file,nolock,file_mode=0700,dir_mode=0700,uid=0500,gid=0500 0 0
আমি এখানে বর্ণিত পরিস্থিতি থেকে কিছুটা আলাদা একটি দৃশ্যে এই ত্রুটিটি পেয়েছি।
এসকিউএলাইট ডাটাবেসটি 3 সার্ভারের দ্বারা ভাগ করা একটি এনএফএস ফাইল সিস্টেমে বিশ্রাম নিয়েছিল। 2 টি সার্ভারে আমি ডাটাবেসটিতে সফলভাবে ক্যোরি চালাতে সক্ষম হয়েছি, তৃতীয়টির উপরে আমি ভেবেছিলাম "ডাটাবেস লক হয়ে গেছে" বার্তা পাচ্ছি।
এই 3 য় মেশিনের সাথে জিনিসটি হ'ল এতে কোনও স্থান বাকী ছিল না /var
। প্রতিবারই আমি এই ফাইল সিস্টেমে অবস্থিত যে কোনও এসকিউএলাইট ডাটাবেসে কোয়েরি চালানোর চেষ্টা করেছি আমি "ডাটাবেস লক করা আছে" বার্তা পেয়েছি এবং লগগুলির মধ্যেও এই ত্রুটি:
আগস্ট 8 10:33:38 সার্ভার01 কার্নেল: লকড: 172.22.84.87 নিরীক্ষণ করতে পারে না
এবং এটি একটি:
আগস্ট 8 10:33:38 সার্ভার01 আরপিসি.স্ট্যাটড [30৪৩০]: লিখতে ব্যর্থ: লিখন /var/lib/nfs/statd/sm/other.server.name.com: ডিভাইসে কোনও স্থান বাকি নেই 8 আগস্ট 10:33: 38 সার্ভার01 আরপিসি.স্ট্যাটড [30৪৩০]: এসএমএ_ফোন 172.22.84.87 এর এসএম_আমনের জন্য সার্ভার01 এ
স্থান পরিস্থিতি পরিচালনা করার পরে সবকিছু স্বাভাবিক অবস্থায় ফিরে আসে।
আপনি যদি এসকিউএলাইটের সাথে দেখার জন্য ক্রোম ডাটাবেসটিকে আনলক করার চেষ্টা করছেন , তবে কেবল বন্ধ করুন।
উইন্ডোজ
%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
আপনার পূর্ববর্তী মন্তব্য থেকে আপনি বলেছিলেন যে একটি জার্নাল ফাইল উপস্থিত ছিল।
এর অর্থ এই হতে পারে যে আপনি লেনদেনটি খোলেন এবং (এক্সক্লুসিভ?) এবং এখনও ডেটা প্রতিশ্রুতিবদ্ধ হন নি। আপনার প্রোগ্রাম বা অন্য কোনও প্রক্রিয়া জার্নালটিকে পিছনে ফেলেছে ??
স্ক্লাইট প্রক্রিয়াটি পুনরায় আরম্ভ করা জার্নাল ফাইলটির দিকে নজর দেবে এবং যে কোনও অনিচ্ছাকৃত কর্ম পরিষ্কার করবে এবং জার্নাল ফাইলটি সরিয়ে ফেলবে।
যেমনটি সিউন ওসোয়া বলেছেন, কখনও কখনও কোনও জম্বি প্রক্রিয়া টার্মিনালে লক নিয়ে জড়ো হয়ে বসে থাকে, এমনকি যদি আপনি এটি সম্ভব নাও মনে করেন। আপনার স্ক্রিপ্টটি চলে, ক্র্যাশ হয়ে যায় এবং আপনি প্রম্পটে ফিরে যান তবে একটি জুম্বি প্রক্রিয়াটি কোথাও একটি লাইব্রেরি কল দ্বারা প্রসারিত হয়েছে এবং সেই প্রক্রিয়াটির লক রয়েছে।
আপনি যে টার্মিনালে ছিলেন সেটি বন্ধ করে দেওয়া (ওএসএক্সে) কাজ করতে পারে। রিবুট করার কাজ হবে। আপনি "পাইথন" প্রক্রিয়াগুলি অনুসন্ধান করতে পারেন (উদাহরণস্বরূপ) যা কিছু করছে না এবং তাদের মেরে ফেলবে।
.timeout 100
সময়সীমা নির্ধারণের জন্য : আপনি এটি চেষ্টা করতে পারেন । কমান্ড লাইনে তবে সি # তে কী ঘটে তা আমি জানি না। আমি যখন এটি করি তখন নেট: "UPDATE table-name SET column-name = value;"
আমি ডেটাবেস লক করে রাখি তবে "UPDATE table-name SET column-name = value"
এটি ঠিক হয়ে যায়।
দেখে মনে হচ্ছে আপনি যুক্ত করার সময়;, স্ক্লাইটটি আরও কমান্ড সন্ধান করবে।