Theory
શુક્રવાર, સાંજે 4:55: બધું backup કરો
પરિણામનું અઠવાડિયું પૂરું થાય છે. પરીક્ષા વિભાગનો છેલ્લો આદેશ: "એક file જેમાં આખું database હોય: students, marks, તપાસનું log, trigger, બધું. અને દેખાડો કે એ ખરેખર પાછું આવે છે."
ગયા પાઠમાં તમે એક કોષ્ટક dump કર્યું. મોટું કરવું એટલે કોષ્ટકો પર loop કરવો નહીં: તમે trigger, indexes, ક્રમ ભૂલી જાઓ.
Shell પાસે એક શબ્દનો જવાબ છે: argument વગરનું .dump: આખું database એક ફરી ચલાવી શકાય એવી SQL ની script તરીકે.
Theory
આખું વાનગીઓનું પુસ્તક
એક કોષ્ટકનું dump એ વાનગીનું કાર્ડ હતું. ખુલ્લું .dump આખું વાનગીઓનું પુસ્તક લખે છે: દરેક કોષ્ટક, દરેક index, દરેક trigger, આધારના ક્રમમાં, ઉપર BEGIN TRANSACTION અને અંતે COMMIT સાથે.
Transaction નું આવરણ કેમ? જેથી restore બધું કે કંઈ નહીં રાંધે: જો ફરી ચલાવવું લીટી 900 પર નિષ્ફળ જાય, તો નવો database અધકચરો રંધાયેલો રહી ન જાય. તમારો એકમ 1 નો transactions નો પાઠ, વધારાનું કામ કરતો.
Follow along
પૂરું backup, પ્રમાણભૂત ક્રમ
- sqlite3 college.db Backup કરવાના database પર shell ખોલો.
- .output full_backup.sql Shell જે કંઈ છાપે એ બધું file માં મોકલો.
- .dump કોઈ argument નહીં = આખું database: બધાં કોષ્ટકો, data, indexes, triggers, એક transaction માં વીંટાળેલાં.
- .output stdout પછી .quit પડદા પર છાપવાનું પાછું લાવો, shell છોડો. full_backup.sql એ તમારું વાનગીઓનું પુસ્તક છે.
- એક લીટીનો વિકલ્પ (shell ના session વગર): sqlite3 college.db .dump > full_backup.sql Terminal નું redirect .output નું કામ કરે છે; scripts અને cron ના કામમાં હાથવગું.
Theory
ફક્ત અમુક કોષ્ટકો, અને restore
પસંદ કરેલાં કોષ્ટકો: .dump students marks ફક્ત એ બે લખે છે (ગમે તેટલાં નામ). નોંધો: બીજાં કોષ્ટકોના triggers અને indexes સામેલ થતાં નથી; ફક્ત ખુલ્લું .dump જ બધાની ખાતરી આપે છે.
Restore એ SQL ના લખાણને પાછું database માં ફેરવે છે:
- Terminal માંથી:
sqlite3 restored.db < full_backup.sql - Shell ની અંદર:
.read full_backup.sql
નવી, ખાલી file માં restore કરો: જે database માં એ કોષ્ટકો પહેલેથી હોય એમાં CREATE TABLE ફરી ચલાવવાથી ભૂલ સાથે અટકે છે.
Quiz
તમારે **ફક્ત** students અને marks નાં કોષ્ટકો (data સાથે) સાથીના યંત્ર પર વાંચી શકાય એવા SQL તરીકે ખસેડવાં છે. કઈ command એ file બનાવે છે?
- .dump students marks (.output transfer.sql પછી)
- .dump કોઈ argument વગર
- .schema students marks
- .read students marks
Show the answer
.dump students marks (.output transfer.sql પછી)
.dump કોષ્ટકનાં નામોની યાદી સ્વીકારે છે અને બરાબર એટલાં જ નિકાસ કરે છે, માળખું વત્તા data. ખુલ્લું .dump તપાસનું log અને બાકીનું બધું પણ ખેંચી લાવત (ચાલે, પણ 'ફક્ત' ને અવગણે). .schema data વગર માળખું આપે છે, અને .read એ restore ની દિશા છે: એ SQL ની files બનાવવાને બદલે વાપરે છે. Command ને પ્રવાસની દિશા સાથે મેળવવી એ જ આખો પ્રશ્ન છે.
Think first
Restore ની આગાહી કરો
એક student sqlite3 college.db < full_backup.sql ચલાવે છે, મૂળ database માં restore કરતાં જેમાં હજી બધાં કોષ્ટકો છે. Tap કરતાં પહેલાં: શું થાય છે, અને એમણે શું કરવું જોઈતું હતું?
Show the answer
ફરી ચલાવવાનું શરૂ થાય છે અને તરત CREATE TABLE students... પર અથડાય છે જ્યાં students પહેલેથી હાજર છે: ભૂલ, અને transaction નું આવરણ પ્રયાસ પાછો વાળે છે. કશું ગુમાવાતું નથી, પણ કશું restore પણ થતું નથી.
સાચી પ્રથા: નવી file માં restore કરો: sqlite3 restored_college.db < full_backup.sql, પછી SELECT થી ચકાસો, અને બદલવાનું જ ધ્યેય હોય તો જ પછી files બદલો. Restore ની રિહર્સલ ખાલી મંચ પર થાય છે.
Watch out
કારકિર્દી બચાવતા backup ના નિયમો
જે backup તમે ક્યારેય restore કર્યું નથી એ backup નહીં, આશા છે: હંમેશા કામચલાઉ file માં ફરી ચલાવીને ચકાસો.
આંશિક dumps triggers ભૂલી જાય છે: .dump marks એ marks_log પરનું તપાસનું trigger વહન કરતું નથી; આખા database ના કામ માટે ખુલ્લું .dump જોઈએ.
.read ના રસ્તા તમે sqlite3 ક્યાંથી શરૂ કર્યું એની સાપેક્ષ છે: 'file not found' નો સામાન્ય રીતે અર્થ છે કે તમે ખોટા folder માં ઊભા છો, file ગઈ નથી.
Theory
આ વિષયના બાકીના ભાગ સાથે આ ક્યાં મળે છે
Dump ની file શુદ્ધ SQL નું લખાણ છે, એટલે એકમ 1 નું બધું એની અંદર લાગુ પડે છે: તમે એ ખોલીને તમે લખેલું CREATE TRIGGER, તમારા transaction એ commit કરેલા INSERT વાંચી શકો છો. એકમ 3 માં, Python આ workflow આપોઆપ કરશે (program દ્વારા dump માટે જ iterdump() છે), અને આગલા CSV ના પાઠ તમને બીજું નિકાસનું સ્વરૂપ આપે છે: ફક્ત data, databases ને બદલે spreadsheets માટે.
Summary
Key takeaways
- ખુલ્લું .dump = આખું database SQL તરીકે: કોષ્ટકો, data, indexes, triggers, એક transaction માં.
- .dump name1 name2 ફક્ત પસંદ કરેલાં કોષ્ટકો નિકાસ કરે છે (બીજે આવેલાં એમનાં triggers સામેલ થતાં નથી).
- પ્રમાણભૂત ક્રમ: .output file.sql, .dump, .output stdout; કે એક લીટીમાં: sqlite3 db .dump > file.sql.
- sqlite3 fresh.db < file.sql થી, કે shell ની અંદર .read file.sql થી, ખાલી database માં restore કરો.
- Transaction નું આવરણ restore ને બધું-કે-કંઈ નહીં બનાવે છે.
- દરેક backup ને એક વાર ખરેખર restore કરીને ચકાસો.
- Memory hook: આખું વાનગીઓનું પુસ્તક, ખાલી મંચ પર રિહર્સલ કરાયેલું.