(From: http://blog.daum.net/_blog/BlogView.do?blogid=0Idq4&articleno=8429407#ajax_history_home)
다음은 "사용중인 sqlite3 데이터베이스를 온라인으로 백업하는 방법"@H_301_4@ 에 대해서 설명하고 있습니다.
[내용참고]http://www.sqlite.org/backup.html
1 @H_301_4@ #include <stdio.h>@H_301_4@
2 @H_301_4@ #include <stdlib.h>@H_301_4@
3 @H_301_4@ #include <assert.h>@H_301_4@
4 @H_301_4@ #include@H_301_4@ "sqlite3.h"@H_301_4@
5 @H_301_4@
6 @H_301_4@ #pragma warning(disable:4996)@H_301_4@
7 @H_301_4@
8 @H_301_4@ void@H_301_4@ Progress@H_301_4@ (@H_301_4@ int@H_301_4@ nRemain,@H_301_4@ int@H_301_4@ nPageCount)@H_301_4@
9 @H_301_4@ {@H_301_4@
10 @H_301_4@ int@H_301_4@ nPercent =@H_301_4@ 0@H_301_4@ ;@H_301_4@
11 @H_301_4@ nPercent =@H_301_4@ 100@H_301_4@ * (@H_301_4@ nPageCount -@H_301_4@ nRemain) /@H_301_4@ nPageCount;@H_301_4@
12 @H_301_4@ printf@H_301_4@ (@H_301_4@ "Percent %d(%%)@H_301_4@ /n@H_301_4@ "@H_301_4@ ,@H_301_4@ nPercent);@H_301_4@
13 @H_301_4@ }@H_301_4@
14 @H_301_4@
15 @H_301_4@ /**@H_301_4@
16 @H_301_4@ @brief backup sqlite3 database@H_301_4@
17 @H_301_4@
18 @H_301_4@ @param [ in] pDb Database to back up@H_301_4@
19 @H_301_4@ @param [ in] zFilename Name of file to back up to@H_301_4@
20 @H_301_4@ @param [out] xProgress Progress function to invoke@H_301_4@
21 @H_301_4@
22 @H_301_4@ @return on case success 0 is returned,@H_301_4@
23 @H_301_4@ otherwise see sqlite3.h error code@H_301_4@
24 @H_301_4@ */@H_301_4@
25 @H_301_4@ int@H_301_4@ BackupDatabase@H_301_4@ (@H_301_4@ sqlite3 *@H_301_4@ pDb,@H_301_4@ const char@H_301_4@ *@H_301_4@ zFilename,@H_301_4@ void@H_301_4@ (*@H_301_4@ xProgress)(@H_301_4@ int@H_301_4@ ,@H_301_4@ int@H_301_4@ ))@H_301_4@
26 @H_301_4@ {@H_301_4@
27 @H_301_4@ int@H_301_4@ rc;@H_301_4@ /* Function return code */@H_301_4@
28 @H_301_4@ sqlite3 *@H_301_4@ pFile;@H_301_4@ /* Database connection opened on zFilename */@H_301_4@
29 @H_301_4@ sqlite3_backup *@H_301_4@ pBackup;@H_301_4@ /* Backup handle used to copy data */@H_301_4@
30 @H_301_4@
31 @H_301_4@ /* Open the database file identified by zFilename. */@H_301_4@
32 @H_301_4@ rc =@H_301_4@ sqlite3_open@H_301_4@ (@H_301_4@ zFilename,&@H_301_4@ pFile);@H_301_4@
33 @H_301_4@ if@H_301_4@ (@H_301_4@ rc==@H_301_4@ sqlITE_OK ){@H_301_4@
34 @H_301_4@
35 @H_301_4@ /* Open the sqlite3_backup object used to accomplish the transfer */@H_301_4@
36 @H_301_4@ pBackup =@H_301_4@ sqlite3_backup_init@H_301_4@ (@H_301_4@ pFile,@H_301_4@ "main"@H_301_4@ ,@H_301_4@ pDb,@H_301_4@ "main"@H_301_4@ );@H_301_4@
37 @H_301_4@ if@H_301_4@ (@H_301_4@ pBackup ){@H_301_4@
38 @H_301_4@
39 @H_301_4@ /* Each iteration of this loop copies 5 database pages from database@H_301_4@
40 @H_301_4@ ** pDb to the backup database. If the return value of backup_step()@H_301_4@
41 @H_301_4@ ** indicates that there are still further pages to copy,sleep for@H_301_4@
42 @H_301_4@ ** 250 ms before repeating. */@H_301_4@
43 @H_301_4@ do@H_301_4@ {@H_301_4@
44 @H_301_4@ rc =@H_301_4@ sqlite3_backup_step@H_301_4@ (@H_301_4@ pBackup,@H_301_4@ 5@H_301_4@ );@H_301_4@
45 @H_301_4@ xProgress@H_301_4@ (@H_301_4@
46 @H_301_4@ sqlite3_backup_remaining@H_301_4@ (@H_301_4@ pBackup),@H_301_4@
47 @H_301_4@ sqlite3_backup_pagecount@H_301_4@ (@H_301_4@ pBackup)@H_301_4@
48 @H_301_4@ );@H_301_4@
49 @H_301_4@ if@H_301_4@ (@H_301_4@ rc==@H_301_4@ sqlITE_OK ||@H_301_4@ rc==@H_301_4@ sqlITE_BUSY ||@H_301_4@ rc==@H_301_4@ sqlITE_LOCKED ){@H_301_4@
50 @H_301_4@ sqlite3_sleep@H_301_4@ (@H_301_4@ 250@H_301_4@ );@H_301_4@
51 @H_301_4@ }@H_301_4@
52 @H_301_4@ }@H_301_4@ while@H_301_4@ (@H_301_4@ rc==@H_301_4@ sqlITE_OK ||@H_301_4@ rc==@H_301_4@ sqlITE_BUSY ||@H_301_4@ rc==@H_301_4@ sqlITE_LOCKED );@H_301_4@
53 @H_301_4@
54 @H_301_4@ /* Release resources allocated by backup_init(). */@H_301_4@
55 @H_301_4@ (@H_301_4@ void@H_301_4@ )@H_301_4@ sqlite3_backup_finish@H_301_4@ (@H_301_4@ pBackup);@H_301_4@
56 @H_301_4@ }@H_301_4@
57 @H_301_4@ rc =@H_301_4@ sqlite3_errcode@H_301_4@ (@H_301_4@ pFile);@H_301_4@
58 @H_301_4@ }@H_301_4@
59 @H_301_4@
60 @H_301_4@ /* Close the database connection opened on database file zFilename@H_301_4@
61 @H_301_4@ ** and return the result of this function. */@H_301_4@
62 @H_301_4@ (@H_301_4@ void@H_301_4@ )@H_301_4@ sqlite3_close@H_301_4@ (@H_301_4@ pFile);@H_301_4@
63 @H_301_4@ return@H_301_4@ rc;@H_301_4@
64 @H_301_4@ }@H_301_4@
65 @H_301_4@
66 @H_301_4@ int@H_301_4@ main@H_301_4@ (@H_301_4@ int@H_301_4@ argc,@H_301_4@ char@H_301_4@ **@H_301_4@ argv)@H_301_4@
67 @H_301_4@ {@H_301_4@
68 @H_301_4@ sqlite3 *@H_301_4@ db =@H_301_4@ NULL;@H_301_4@
69 @H_301_4@
70 @H_301_4@ assert@H_301_4@ (@H_301_4@ sqlite3_open_v2@H_301_4@ (@H_301_4@ ":memory:"@H_301_4@ ,&@H_301_4@ db,@H_301_4@ sqlITE_OPEN_READWRITE |@H_301_4@ sqlITE_OPEN_CREATE,@H_301_4@ NULL) ==@H_