2012-06-05 12 views
6

मेरे पास मेरे स्थानीय होस्ट (विन एनटी) पर SQL डेटाबेस है और इसे वापस लेना चाहते हैं। मैं इस कार्य को पूरा करने के लिए खोल कमांड '.backup' का उपयोग करना चाहता हूं। लेकिन ऐसा लगता है कि मैं बैकअप प्रक्रिया के दौरान डेटाबेस में एक नई पंक्ति डाल सकता हूं।sqlite3 shell कमांड '.backup' और लेनदेन

क्या '.backup' shell कमांड मेरे डेटाबेस पर नया अनन्य लेनदेन शुरू करता है?

मैंने सोचा कि जब मैं '.backup' खोल कमांड निष्पादित करता हूं तो यह मेरे डेटाबेस को लॉक करता है।

उत्तर

3

sqlite3 बैकअप विधि डेटाबेस को लॉक नहीं करता है। मैं निम्नलिखित तरीके का उपयोग करने के लिए सुझाव यदि आप डेटाबेस लॉक करने के लिए चाहते हैं जाएगा:

  • लेन-देन (साझा लॉक)
  • शुरू किसी भी INSERT बयान का उपयोग करके, डेटाबेस एक आरक्षित ताला हो जाता है। हालांकि, यह INSERT कथन खाली हो सकता है।
  • डेटाबेस का बैकअप लें।
  • ROLLBACK या COMMIT का उपयोग कर लेनदेन को समाप्त करें।

कोड:

BEGIN; 
INSERT INTO <anytable> SELECT * FROM <anytable> WHERE 1=0; 
.backup <database> <file> 
ROLLBACK; 

एक कम hacky तरह से अगर आप 'बैकअप' नाम की एक तालिका का उपयोग कर रहे हैं और आप प्रत्येक प्रतिलिपि के लिए एक पंक्ति (तारीख, ..) डालने कर रहे हैं (यदि हो जाएगा यह जानकारी आपके लिए प्रासंगिक है)।