برنامج SQLite - النسخ الاحتياطي لقاعدة بيانات إلى ملف

هناك عدة طرق لعمل نسخ احتياطي لقاعدة بيانات SQLite إلى ملف وهي :
• استخدم الأمر .backup .
• استخدم الأمر .clone .
• استخدم الأمر .dump .
•نسخ الملف في نظام الملفات.

الأمر .backup:

هذا الأمر يقوم بإنشاء نسخة احتياطية من قاعدة البيانات في ملف. ويقبل استعمال الاختصار واسم الملف الذي يتم النسخ الاحتياطي إليه.
عند تجاهل اسم الاختصار لقاعدة البيانات فسيتم استعمال قاعدة البيانات الرئيسية.
وهذا مثال على ذلك :
 .backup mybackup.db 
هذا الأمر يمكننا من إنشاء ملف مسمى backup.db يحتوي على النسخة الاحتياطية لقاعدة البيانات. يمكن ربط هذه النسخة بسطر الأوامر لبرنامج SQLite3 بعدها نقوم بكتابة الأمر .databases لعرض قائمة قواعد البيانات لهذا الاتصال.
 sqlite> ATTACH DATABASE 'mybackup.db' AS MyBackup; 
sqlite> .databases 
seq  name             file                                                      
---  ---------------  ----------------------------------------------------------
0    main             /Users/data/entreprise.sq3                           
1    temp                                                                       
2    MyBackup         /Users/data/mybackup.db    
عمليا, يجب القيام بعملية النسخ الاحتياطي إلى مسار مختلف ، وعليه، يجب كتابة المسار كاملا بعد كتابة الأمر .backup ، مثلا:
 .backup  /remote/folder/mybackup.db 

الأمر .clone :

الأمر .clone هو شبيه للأمر .backup . في حين أن الأمر .clone يستعمل قاعدة البيانات الحالية فقط، لذا لا يمكن تحديد قاعدة بينات أخرى للاستنساخ.
لاستنساخ قاعدة البيانات الحالية ، نكتب .clone متبوعة باسم ملف قاعدة البيانات الذي نقوم بعملية الاستنساخ البيانات إليه. كما يلي :
 .clone myclone.db 
نتيجة تنفيذ هذا الأمر تبدو كما يلي :
 sqlite> .clone myclone.db 
employers... done
attestations... done
attestations1... done
archives... done
Genres... done
يمكن ربط قاعدة البيانات المستنسخة كما يلي :
 sqlite> ATTACH DATABASE 'myclone.db' AS MyClone; 
sqlite> .databases
seq  name             file                                                      
---  ---------------  ----------------------------------------------------------
0    main             /Users/data/entreprise.sq3                            
1    temp                                                                       
2    MyBackup         /Users/data/mybackup.db                         
3    MyClone          /Users/data/myclone.db  

الأمر .dump:

يمكن استعمال الأمر .dump لتفريغ قاعدة البيانات في ملف من نوع ASCII . فمثلا، يمكن التفريغ في ملف من نوع .SQL الذي يحتوي على عبارات SQL لتوليد قاعدة البيانات منه.

تفريغ قاعدة البيانات كليا:

هذا المثال يقوم بتفريغ قاعدة البيانات entreprise.sq3 بكل محتوايتها في الملف entreprise.sql
 sqlite3 entreprise.sq3 .dump >  entreprise.sql 
محتوى الملف entreprise.sql:
PRAGMA foreign_keys=OFF;
BEGIN TRANSACTION;
/* Tables */
CREATE TABLE ATTESTATIONS (
  ATTESTATIONID       INTEGER NOT NULL,
  ATESSTATIONLIBELLE  VARCHAR(100) NOT NULL,
  ATTESTATIONDATE     DATE,
  EMPLOYERID          INTEGER NOT NULL
);
CREATE TABLE ATTESTATIONS01 (
  ATTESTATIONID       INTEGER NOT NULL,
  ATESSTATIONLIBELLE  VARCHAR(100) NOT NULL,
  ETABLISSEMENTDATE   DATE,
  EMPLOYERID          INTEGER NOT NULL
);
CREATE TABLE EMPLOYERS (
  EMPLOYERID    INTEGER NOT NULL,
  EMPLOYERNAME  VARCHAR(100) NOT NULL
);
CREATE TABLE GENRES (
  GENREID  INTEGER NOT NULL,
  GENRE    VARCHAR(10) NOT NULL
);
COMMIT;
/* Data for table "ATTESTATIONS" */
INSERT INTO ATTESTATIONS (ATTESTATIONID, ATESSTATIONLIBELLE, ATTESTATIONDATE, EMPLOYERID) VALUES (1, 'ATTESTATION DE TRAVAIL', '2016-08-05', 1);
INSERT INTO ATTESTATIONS (ATTESTATIONID, ATESSTATIONLIBELLE, ATTESTATIONDATE, EMPLOYERID) VALUES (2, 'ATTESTATION DE TRAVAIL', '2016-08-06', 4);
INSERT INTO ATTESTATIONS (ATTESTATIONID, ATESSTATIONLIBELLE, ATTESTATIONDATE, EMPLOYERID) VALUES (3, 'ATTESTATION DE TRAVAIL', '2016-08-05', 9);
INSERT INTO ATTESTATIONS (ATTESTATIONID, ATESSTATIONLIBELLE, ATTESTATIONDATE, EMPLOYERID) VALUES (4, 'ATTESTATION DE TRAVAIL', '2016-08-04', 8);
INSERT INTO ATTESTATIONS (ATTESTATIONID, ATESSTATIONLIBELLE, ATTESTATIONDATE, EMPLOYERID) VALUES (5, 'ATTESTATION DE TRAVAIL', '2016-08-05', 7);
INSERT INTO ATTESTATIONS (ATTESTATIONID, ATESSTATIONLIBELLE, ATTESTATIONDATE, EMPLOYERID) VALUES (6, 'ATTESTATION DE TRAVAIL', '2016-08-06', 3);
COMMIT;
/* Data for table "ATTESTATIONS01" */
INSERT INTO ATTESTATIONS01 (ATTESTATIONID, ATESSTATIONLIBELLE, ETABLISSEMENTDATE, EMPLOYERID) VALUES (1, 'ATTESTATION DE TRAVAIL', '2016-08-05', 1);
INSERT INTO ATTESTATIONS01 (ATTESTATIONID, ATESSTATIONLIBELLE, ETABLISSEMENTDATE, EMPLOYERID) VALUES (2, 'ATTESTATION DE TRAVAIL', '2016-08-06', 4);
INSERT INTO ATTESTATIONS01 (ATTESTATIONID, ATESSTATIONLIBELLE, ETABLISSEMENTDATE, EMPLOYERID) VALUES (3, 'ATTESTATION DE TRAVAIL', '2016-08-05', 9);
INSERT INTO ATTESTATIONS01 (ATTESTATIONID, ATESSTATIONLIBELLE, ETABLISSEMENTDATE, EMPLOYERID) VALUES (4, 'ATTESTATION DE TRAVAIL', '2016-08-04', 8);
INSERT INTO ATTESTATIONS01 (ATTESTATIONID, ATESSTATIONLIBELLE, ETABLISSEMENTDATE, EMPLOYERID) VALUES (5, 'ATTESTATION DE TRAVAIL', '2016-08-05', 7);
INSERT INTO ATTESTATIONS01 (ATTESTATIONID, ATESSTATIONLIBELLE, ETABLISSEMENTDATE, EMPLOYERID) VALUES (6, 'ATTESTATION DE TRAVAIL', '2016-08-06', 3);
COMMIT;
/* Data for table "EMPLOYERS" */
INSERT INTO EMPLOYERS (EMPLOYERID, EMPLOYERNAME) VALUES (1, 'Amar Lakhdar');
INSERT INTO EMPLOYERS (EMPLOYERID, EMPLOYERNAME) VALUES (2, 'Kamel Benahmed');
INSERT INTO EMPLOYERS (EMPLOYERID, EMPLOYERNAME) VALUES (3, 'Kamel Benkamel');
INSERT INTO EMPLOYERS (EMPLOYERID, EMPLOYERNAME) VALUES (4, 'Said');
INSERT INTO EMPLOYERS (EMPLOYERID, EMPLOYERNAME) VALUES (5, 'Faird');
INSERT INTO EMPLOYERS (EMPLOYERID, EMPLOYERNAME) VALUES (6, 'Lakhder');
INSERT INTO EMPLOYERS (EMPLOYERID, EMPLOYERNAME) VALUES (7, 'Nassim');
INSERT INTO EMPLOYERS (EMPLOYERID, EMPLOYERNAME) VALUES (8, 'Fouad');
INSERT INTO EMPLOYERS (EMPLOYERID, EMPLOYERNAME) VALUES (9, 'Mounir');
INSERT INTO EMPLOYERS (EMPLOYERID, EMPLOYERNAME) VALUES (10, 'Nadir');
INSERT INTO EMPLOYERS (EMPLOYERID, EMPLOYERNAME) VALUES (11, 'Tarik Moussafer');
COMMIT;
/* Data for table "GENRES" */
INSERT INTO GENRES (GENREID, GENRE) VALUES (1, 'MASCULIN');
INSERT INTO GENRES (GENREID, GENRE) VALUES (2, 'FEMENIN');
COMMIT;
/* Constraints */
ALTER TABLE ATTESTATIONS
  ADD PRIMARY KEY (ATTESTATIONID);
ALTER TABLE ATTESTATIONS01
  ADD PRIMARY KEY (ATTESTATIONID);
ALTER TABLE EMPLOYERS
  ADD PRIMARY KEY (EMPLOYERID);
ALTER TABLE GENRES
  ADD PRIMARY KEY (GENREID);
COMMIT;
/* Foreign Keys */
ALTER TABLE ATTESTATIONS
  ADD FOREIGN KEY (EMPLOYERID)
    REFERENCES EMPLOYERS(EMPLOYERID)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION;
ALTER TABLE ATTESTATIONS01
  ADD FOREIGN KEY (EMPLOYERID)
    REFERENCES EMPLOYERS(EMPLOYERID)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION;
COMMIT;

الطريقة السابقة تسمح لنا بعمل نسخ احتياطي لقاعدة البيانات باستعمال سطر أوامر SQLite3 .
يمكن أيضا القيام بعمليتي نسخ/لصق لملف قاعدة البيانات ضمن نظام الملفات على القرص.
وللتأكذ من مسار الملف على القرص، يمكن استعمال الأمر .databases للعثور على موقعه.
 sqlite> .databases  
seq  name             file                                                      
---  ---------------  ----------------------------------------------------------
0    main             /Users/data/entreprise.sq3                           
1    temp
وباستعمال هذه المعلومة، يمكن الانتقال إلى المجلد /Users/data/entreprise.sq3 ثم ننسخ الملف entreprise.sq3 ثم لصقه في مكان آمن.

ليست هناك تعليقات:

إرسال تعليق

المشاركات الشائعة