dbd实例

BTree读写

[cpp]  view plain copy
  1. Db db(NULL,DB_CXX_NO_EXCEPTIONS);//环境指针  
  2.   
  3. //事务指针,数据库类别,访问标志(创建,只读,自动提交事务,线程安全),mode在windows中忽略  
  4. if(db.open(NULL,"test.db",NULL,DB_BTREE,DB_CREATE|DB_TRUNCATE,0)!=0)  
  5. {  
  6.     cout<<"同名数据库存在"<
  7. }  
  8.   
  9. //基本写  
  10. int  nKey=1;  
  11. char szBuf[100]="愚蠢的人类啊";  
  12. Dbt key,value;  
  13. key.set_data(&nKey);  
  14. key.set_size(4);  
  15. value.set_data(szBuf);  
  16. value.set_size(sizeof(szBuf));  
  17. if(db.put(NULL,&key,&value,0)!=0)  
  18. {  
  19.     cout<<"写入失败"<
  20. }  
  21.   
  22. //基本读  
  23. char szBufRead[100]={0};  
  24. Dbt readKey,readValue;  
  25. readKey.set_data(&nKey);  
  26. readKey.set_size(4);  
  27. readValue.set_data(szBufRead);  
  28. readValue.set_ulen(100);  
  29. readValue.set_flags(DB_DBT_USERMEM);  
  30. if(db.get(NULL,&readKey,&readValue,0)!=0)  
  31. {  
  32.     cout<<"读取失败"<
  33. }  
  34.   
  35. cout<


 

Queue读写

[cpp]  view plain copy
  1. Db db(NULL,DB_CXX_NO_EXCEPTIONS);//环境指针     
  2.   
  3. db.set_re_len(100);  
  4. db.set_re_pad(0);  
  5.     
  6. //事务指针,数据库类别,访问标志(创建,只读,自动提交事务,线程安全),mode在windows中忽略     
  7. if(db.open(NULL,"DB\\test.db",NULL,DB_QUEUE,DB_CREATE|DB_TRUNCATE,0)!=0)    
  8. {    
  9.     std::cout<<"同名数据库存在"<
  10. }    
  11.     
  12. //基本写   
  13. char szBuf[100]="愚蠢的人类啊";    
  14. int nkey=0;  
  15. Dbt key(&nkey,sizeof(nkey));  
  16. Dbt value;  
  17. value.set_data(szBuf);    
  18. value.set_size(sizeof(szBuf));    
  19. if(db.put(NULL,&key,&value,DB_APPEND)!=0)    
  20. {    
  21.     cout<<"写入失败"<
  22. }    
  23. cout<<"返回的记录号为:"<<*((int*)key.get_data())<

游标基本读写删

[cpp]  view plain copy
  1. Db db(NULL,DB_CXX_NO_EXCEPTIONS);//环境指针  
  2. //事务指针,数据库类别,访问标志(创建,只读,自动提交事务,线程安全),mode在windows中忽略     
  3. if(db.open(NULL,"test.db",NULL,DB_BTREE,DB_CREATE|DB_TRUNCATE,0)!=0)    
  4. {    
  5.     cout<<"同名数据库存在"<
  6. }    
  7.     
  8. //基本写     
  9. int  nKey=1;    
  10. char szBuf[100]="愚蠢的人类啊";    
  11.   
  12. Dbt key,value;    
  13. key.set_data(&nKey);    
  14. key.set_size(4);    
  15. value.set_data(szBuf);    
  16. value.set_size(sizeof(szBuf));    
  17.   
  18. for(int i=0;i<100;++i)  
  19. {  
  20.     nKey=i;  
  21.     if(db.put(NULL,&key,&value,0)!=0)    
  22.     {    
  23.         cout<<"写入失败"<
  24.     }    
  25. }  
  26.   
  27. //游标读  
  28. Dbc *p=0;  
  29. db.cursor(NULL,&p,0);  
  30. Dbt key1,value1;  
  31. while(p->get(&key1,&value1,DB_NEXT)==0)  
  32. {  
  33.     cout<<"键:"<<(*((int *)key1.get_data()))<<"值:"<<(char*)(value1.get_data())<
  34. }  
  35. //备注:游标没有函数返回当前有多少个键  
  36.   
  37. //查找  
  38. nKey=80;  
  39. key1.set_data(&nKey);  
  40. key1.set_size(sizeof(int));  
  41. p->get(&key1,&value1,DB_SET);  
  42. p->del(0);  
  43.   
  44. //游标读  
  45. Dbc *p1=0;  
  46. db.cursor(NULL,&p1,0);  
  47. while(p1->get(&key1,&value1,DB_NEXT)==0)  
  48. {  
  49.     cout<<"键:"<<(*((int *)key1.get_data()))<<"值:"<<(char*)(value1.get_data())<
  50. }  

数据库支持重复记录

[cpp]  view plain copy
  1. Db db(NULL,DB_CXX_NO_EXCEPTIONS);//环境指针     
  2.     
  3.     db.set_flags(DB_DUP);  
  4.   
  5.     //事务指针,数据库类别,访问标志(创建,只读,自动提交事务,线程安全),mode在windows中忽略     
  6.     if(db.open(NULL,"test.db",NULL,DB_BTREE,DB_CREATE|DB_TRUNCATE,0)!=0)    
  7.     {    
  8.         cout<<"同名数据库存在"<
  9.     }    
  10.     
  11.     //基本写        
  12.     int  nKey=1;      
  13.     char szBuf[100]="愚蠢的人类啊";      
  14.     
  15.     Dbt key,value;      
  16.     key.set_data(&nKey);      
  17.     key.set_size(4);      
  18.     value.set_data(szBuf);      
  19.     value.set_size(sizeof(szBuf));      
  20.     
  21.     for(int i=0;i<5;++i)    
  22.     {     
  23.         if(db.put(NULL,&key,&value,0)!=0)      
  24.         {      
  25.             cout<<"写入失败"<
  26.         }      
  27.     }    
  28.   
  29.     //游标读     
  30.     Dbc *p=0;    
  31.     db.cursor(NULL,&p,0);    
  32.     Dbt key1,value1;    
  33.     while(p->get(&key1,&value1,DB_NEXT)==0)    
  34.     {    
  35.         cout<<"键:"<<(*((int *)key1.get_data()))<<"值:"<<(char*)(value1.get_data())<
  36.     }    

基本环境操作

[cpp]  view plain copy
  1. DbEnv evn(0);  
  2. if(evn.open("DB",DB_CREATE|DB_INIT_MPOOL,0)!=0)  
  3. {  
  4.     cout<<"打开环境错误"<
  5.     return 0;  
  6. }  
  7. Db db(&evn,DB_CXX_NO_EXCEPTIONS);//环境指针     
  8.    
  9.   
  10. //事务指针,数据库类别,访问标志(创建,只读,自动提交事务,线程安全),mode在windows中忽略     
  11. if(db.open(NULL,"test.db",NULL,DB_BTREE,DB_CREATE|DB_TRUNCATE,0)!=0)    
  12. {    
  13.     cout<<"同名数据库存在"<
  14. }    

游标的覆盖操作

[cpp]  view plain copy
  1. Db db(NULL,DB_CXX_NO_EXCEPTIONS);  
  2. db.set_flags(DB_DUP);  
  3. if(db.open(NULL,"DB\\test.db",NULL,DB_BTREE,DB_CREATE|DB_TRUNCATE,0)!=0)  
  4. {  
  5.     cout<<"打开错误"<
  6.     return 0;  
  7. }  
  8.   
  9. int nkey=1;  
  10. char szBuf[100]="愚蠢的地球人";  
  11. Dbt key(&nkey,sizeof(int));  
  12. Dbt value(szBuf,strlen(szBuf));  
  13.   
  14. for(int i=0;i<5;++i)  
  15. {  
  16.     db.put(NULL,&key,&value,0);  
  17. }  
  18.   
  19. Dbc *currsor=0;  
  20. db.cursor(NULL,&currsor,0);  
  21.   
  22. Dbt key1;  
  23. Dbt value1;  
  24. sprintf(szBuf,"愚蠢的火星人");  
  25. currsor->get(&key1,&value1,DB_FIRST);  
  26. currsor->get(&key1,&value1,DB_NEXT);  
  27. nkey=100;  
  28. if(currsor->put(&key,&value,DB_CURRENT)!=0)  
  29. {  
  30.     cout<<"put失败"<
  31. }  
  32. currsor->get(&key1,&value1,DB_FIRST);  
  33. cout<<*((int *)key1.get_data())<<":"<<(char*)value1.get_data()<
  34.   
  35. while(currsor->get(&key1,&value1,DB_NEXT)==0)  
  36. {  
  37.     cout<<*((int *)key1.get_data())<<":"<<(char*)value1.get_data()<
  38. }  

二级数据库 没成功

[cpp]  view plain copy
  1. struct Info  
  2. {  
  3.     char name[20];  
  4.     int  age;  
  5. };  
  6.   
  7. int Fun(Db *pSecondary,const Dbt *key,const Dbt *value,Dbt *result)  
  8. {  
  9.     //result->set_flags(DB_DBT_APPMALLOC);  
  10.     Info *p=(Info *)value->get_data();  
  11.     result->set_data((void *)(p->age));  
  12.     result->set_size(sizeof(int));  
  13.     //result->set_ulen(4);  
  14.     return 0;  
  15. };  
  16.   
  17. int _tmain(int argc, _TCHAR* argv[])  
  18. {  
  19.     Db dbPrimary(NULL,DB_CXX_NO_EXCEPTIONS);  
  20.     if(dbPrimary.open(NULL,"DB\\Primary.db",NULL,DB_BTREE,DB_CREATE|DB_TRUNCATE,0)!=0)  
  21.     {  
  22.         cout<<"打开错误"<
  23.         return 0;  
  24.     }  
  25.   
  26.     Dbt key,value;  
  27.     int nID=0;  
  28.     Info info;  
  29.     key.set_data(&nID);  
  30.     key.set_size(sizeof(int));  
  31.     value.set_data(&info);  
  32.     value.set_size(sizeof(Info));  
  33.       
  34.     int nReturn=0;  
  35.   
  36.     nID=100;  
  37.     sprintf(info.name,"张三");  
  38.     info.age=20;  
  39.     nReturn+=dbPrimary.put(NULL,&key,&value,0);  
  40.   
  41.     nID=200;  
  42.     sprintf(info.name,"里斯");  
  43.     info.age=10;  
  44.     nReturn+=dbPrimary.put(NULL,&key,&value,0);  
  45.   
  46.     nID=300;  
  47.     sprintf(info.name,"周杰伦");  
  48.     info.age=40;  
  49.     nReturn+=dbPrimary.put(NULL,&key,&value,0);  
  50.   
  51.     if(nReturn!=0)  
  52.     {  
  53.         cout<<"出错啦"<
  54.         return 0;  
  55.     }  
  56.   
  57.   
  58.     Db dbSecondary(NULL,DB_CXX_NO_EXCEPTIONS);  
  59.     if(dbSecondary.open(NULL,"DB\\Secondary.db",NULL,DB_BTREE,DB_CREATE|DB_TRUNCATE,0)!=0)  
  60.     {  
  61.         cout<<"打开错误"<
  62.         return 0;  
  63.     }  
  64.   
  65.     if(dbPrimary.associate(NULL,&dbSecondary,Fun,DB_CREATE)!=0)  
  66.     {  
  67.         cout<<"associate错误"<
  68.         return 0;  
  69.     }  
  70.   
  71.   
  72.     /*Dbc *pCursor=0; 
  73.     if(dbSecondary.cursor(NULL,&pCursor,0)!=0) 
  74.     { 
  75.         cout<<"cursor创建错误"< 
  76.         return 0; 
  77.     } 
  78.     */  
  79.     nID=100;  
  80.     if(dbSecondary.get(NULL,&key,&value,0)==0)  
  81.     {  
  82.         cout<<((Info *)value.get_data())->name<
  83.     }  
  84.   
  85.   
  86.     /*Dbt key1; 
  87.     Dbt value1; 
  88.  
  89.     nID=20; 
  90.     if(pCursor->get(&key1,&value1,DB_FIRST|DB_GET_BOTH)!=0) 
  91.     { 
  92.         if(pCursor->get(&key1,&value1,DB_FIRST)==DB_NOTFOUND) 
  93.             cout<<"没有元素"< 
  94.         cout<<"get错误"< 
  95.         return 0; 
  96.     } 
  97.     cout<<*((int *)key1.get_data())<<":"<<((Info *)value1.get_data())->name< 
  98.     while(pCursor->get(&key1,&value1,DB_NEXT)!=0) 
  99.     { 
  100.         cout<<*((int *)key1.get_data())<<":"<<(char *)value1.get_data()< 
  101.     }*/  
  102.   
  103.     return 0;  
  104. }  

部分写

[cpp]  view plain copy
  1. Db dbPrimary(NULL,DB_CXX_NO_EXCEPTIONS);  
  2. if(dbPrimary.open(NULL,"DB\\Primary.db",NULL,DB_BTREE,DB_CREATE|DB_TRUNCATE,0)!=0)  
  3. {  
  4.     cout<<"打开错误"<
  5.     return 0;  
  6. }  
  7.   
  8. Dbt key,value;  
  9. int nID=0;  
  10. Info info;  
  11. key.set_data(&nID);  
  12. key.set_size(sizeof(int));  
  13. value.set_data(&info);  
  14. value.set_size(sizeof(Info));  
  15.       
  16. int nReturn=0;  
  17.   
  18. nID=100;  
  19. sprintf(info.name,"张三");  
  20. info.age=20;  
  21. nReturn+=dbPrimary.put(NULL,&key,&value,0);  
  22.   
  23. nID=200;  
  24. sprintf(info.name,"里斯");  
  25. info.age=10;  
  26. nReturn+=dbPrimary.put(NULL,&key,&value,0);  
  27.   
  28. nID=300;  
  29. sprintf(info.name,"周杰伦");  
  30. info.age=40;  
  31. nReturn+=dbPrimary.put(NULL,&key,&value,0);  
  32.   
  33. if(nReturn!=0)  
  34. {  
  35.     cout<<"出错啦"<
  36.     return 0;  
  37. }  
  38.   
  39. nID=200;  
  40. char name[20]={"四"};  
  41. Dbt bt;  
  42. bt.set_flags(DB_DBT_PARTIAL);  
  43. bt.set_data(name);  
  44. bt.set_size(20);  
  45. bt.set_doff(0);  
  46. bt.set_dlen(20);  
  47. if(dbPrimary.put(NULL,&key,&bt,NULL)==0)  
  48. {  
  49.     cout<<"成功"<
  50.   
  51.     Dbc *pCursor=0;  
  52.     dbPrimary.cursor(NULL,&pCursor,0);  
  53.   
  54.     Dbt key1,value1;  
  55.     while(pCursor->get(&key1,&value1,DB_NEXT)==0)  
  56.     {  
  57.         cout<<*((int *)(key1.get_data()))<<":"<<((Info *)(value1.get_data()))->name<<":"<<((Info *)(value1.get_data()))->age<
  58.     }  
  59. }  

事务

[cpp]  view plain copy
  1. DbEnv env(0);  
  2. env.set_data_dir("Database");  
  3. env.set_lg_dir("Log");  
  4. //日志系统木默认是开启的  
  5. env.open("Environment",DB_CREATE|DB_INIT_MPOOL|DB_INIT_TXN|DB_INIT_LOCK|DB_PRIVATE,0);  
  6.   
  7. Db dbPrimary(&env,DB_CXX_NO_EXCEPTIONS);  
  8.   
  9. DbTxn *pTxn;  
  10. env.txn_begin(NULL,&pTxn,0);  
  11. if(dbPrimary.open(pTxn,"Primary.db",NULL,DB_BTREE,DB_CREATE,0)!=0)  
  12. {  
  13.     cout<<"打开错误"<
  14.     return 0;  
  15. }  
  16. pTxn->commit(0);  
  17.   
  18. Dbt key,value;  
  19. int nID=0;  
  20. Info info;  
  21. key.set_data(&nID);  
  22. key.set_size(sizeof(int));  
  23. value.set_data(&info);  
  24. value.set_size(sizeof(Info));  
  25.       
  26. int nReturn=0;  
  27.   
  28. nID=100;  
  29. sprintf(info.name,"张三");  
  30. info.age=20;  
  31.   
  32. nReturn+=dbPrimary.put(NULL,&key,&value,0);  
  33.   
  34.   
  35. nID=200;  
  36. sprintf(info.name,"里斯");  
  37. info.age=10;  
  38.   
  39. int ntime1=timeGetTime();  
  40.   
  41. for(int i=0;i<1000000;++i)  
  42. {  
  43.     nID+=1;  
  44.     env.txn_begin(NULL,&pTxn,0);  
  45.     dbPrimary.put(pTxn,&key,&value,0);  
  46.     pTxn->abort();  
  47. }  
  48. int ntime2=timeGetTime();  
  49. cout<
  50.   
  51. env.txn_begin(NULL,&pTxn,0);  
  52. nID=300;  
  53. sprintf(info.name,"周杰伦");  
  54. info.age=40;  
  55. nReturn+=dbPrimary.put(pTxn,&key,&value,0);  
  56. pTxn->abort();  
  57.   
  58. if(nReturn!=0)  
  59. {  
  60.     cout<<"出错啦"<
  61.     return 0;  
  62. }  
  63.   
  64. Dbc *pCursor=0;  
  65. dbPrimary.cursor(NULL,&pCursor,0);  
  66.   
  67. Dbt key1,value1;  
  68. while(pCursor->get(&key1,&value1,DB_NEXT)==0)  
  69. {  
  70.     cout<<*((int *)(key1.get_data()))<<":"<<((Info *)(value1.get_data()))->name<<":"<<((Info *)(value1.get_data()))->age<
  71. }  

最终方案

[cpp]  view plain copy
  1. DbEnv env(0);  
  2. env.set_data_dir("Database");  
  3. env.set_lg_dir("Log");  
  4.   
  5. env.set_cachesize(0,500*1024*1024,0);  
  6. env.log_set_config(DB_TXN_NOSYNC,1);  
  7. env.set_lg_bsize(300*1024*1024);  
  8.   
  9.   
  10. //日志系统木默认是开启的  
  11. env.open("Environment",DB_CREATE|DB_INIT_MPOOL|DB_INIT_TXN|DB_INIT_LOCK|DB_PRIVATE|DB_RECOVER,0);  
  12.   
  13. //打开数据库  
  14. Db dbPrimary(&env,DB_CXX_NO_EXCEPTIONS);  
  15. DbTxn *pTxn;  
  16. env.txn_begin(NULL,&pTxn,0);  
  17. if(dbPrimary.open(pTxn,"Primary.db",NULL,DB_BTREE,DB_CREATE,0)!=0)  
  18. {  
  19.     cout<<"打开错误"<
  20.     return 0;  
  21. }  
  22. pTxn->commit(0);  
  23.   
  24. Dbt key,value;  
  25. int nID=0;  
  26. Info info;  
  27. key.set_data(&nID);  
  28. key.set_size(sizeof(int));  
  29. value.set_data(&info);  
  30. value.set_size(sizeof(Info));  
  31.       
  32. nID=200;  
  33. sprintf(info.name,"里斯");  
  34. info.age=10;  
  35.   
  36. int ntime1=timeGetTime();   
  37. env.txn_begin(NULL,&pTxn,0);  
  38. for(int i=0;i<20000;++i)  
  39. {  
  40.     nID+=1;  
  41.     dbPrimary.put(pTxn,&key,&value,0);  
  42. }  
  43. pTxn->commit(0);  
  44. int ntime2=timeGetTime();    
  45. cout<<(ntime2-ntime1)/1000<
  46. system("pause");  

一些配置

[cpp]  view plain copy
  1. DbEnv env(0);  
  2.     env.set_data_dir("Database");  
  3.     env.set_lg_dir("Log");  
  4.   
  5.     env.set_cachesize(0,500*1024*1024,0);  
  6.     env.log_set_config(DB_TXN_NOSYNC,1);  
  7.     env.set_lg_bsize(300*1024*1024);  
  8.     //db_env->set_lg_max()  
  9.   
  10.     //日志系统木默认是开启的  
  11.     env.open("Environment",DB_CREATE|DB_INIT_MPOOL|DB_INIT_TXN|DB_INIT_LOCK|DB_PRIVATE|DB_RECOVER,0);  
  12.     env.set_flags(DB_HOTBACKUP_IN_PROGRESS,1);  
  13.     env.txn_checkpoint(0,0,DB_FORCE);  
  14.     env.log_archive(NULL,DB_ARCH_REMOVE);  
  15.     env.log_set_config(DB_LOG_AUTO_REMOVE,1);  
  16.     env.txn_checkpoint(0,0,DB_FORCE);   

复制

[cpp]  view plain copy
  1. //Master  
  2. DbEnv env(0);  
  3. env.set_data_dir("Database");  
  4. env.set_lg_dir("Log");  
  5.   
  6. env.set_cachesize(0,300*1024*1024,0);  
  7. env.log_set_config(DB_TXN_NOSYNC,1);  
  8. env.set_lg_bsize(300*1024*1024);  
  9. //db_env->set_lg_max()  
  10.   
  11.   
  12. DbSite *p;  
  13. env.repmgr_site("192.168.1.182",6000,&p,0);  
  14. p->set_config(DB_LOCAL_SITE,1);  
  15. p->set_config(DB_GROUP_CREATOR,1);  
  16. p->close();  
  17. env.rep_set_priority(100);  
  18. env.repmgr_set_ack_policy(DB_REPMGR_ACKS_NONE);  
  19.   
  20. env.open("Environment",DB_CREATE|DB_INIT_MPOOL|DB_INIT_TXN|DB_INIT_LOCK|DB_PRIVATE|DB_RECOVER|DB_INIT_REP|DB_THREAD,0);  
  21. env.set_flags(DB_HOTBACKUP_IN_PROGRESS,1);  
  22.   
  23. env.repmgr_start(3,DB_REP_MASTER);  
  24.   
  25. //打开数据库  
  26. Db dbPrimary(&env,DB_CXX_NO_EXCEPTIONS);  
  27. DbTxn *pTxn;  
  28. env.txn_begin(NULL,&pTxn,0);  
  29. if(dbPrimary.open(pTxn,"Primary.db",NULL,DB_BTREE,DB_CREATE,0)!=0)  
  30. {  
  31.     cout<<"打开错误"<
  32.     return 0;  
  33. }  
  34. pTxn->commit(0);  
  35.   
  36. Dbt key,value;  
  37. int nID=0;  
  38. Info info;  
  39. key.set_data(&nID);  
  40. key.set_size(sizeof(int));  
  41. value.set_data(&info);  
  42. value.set_size(sizeof(Info));  
  43.       
  44. nID=100;  
  45. sprintf(info.name,"里斯");  
  46. info.age=10;  
  47.   
  48. int ntime1=timeGetTime();   
  49. for(int j=0;j<10000;++j)  
  50. {  
  51.     for(int i=0;i<10000;++i)  
  52.     {  
  53.         env.txn_begin(NULL,&pTxn,0);  
  54.         nID+=1;  
  55.         dbPrimary.put(pTxn,&key,&value,0);  
  56.         pTxn->commit(0);  
  57.     }  
  58.     cout<<"插入"<
  59. }  
  60. int ntime2=timeGetTime();    
  61. cout<<(ntime2-ntime1)/1000<
  62.   
  63. Dbc *pCursor=0;  
  64. dbPrimary.cursor(NULL,&pCursor,0);  
  65. Dbt key1,value1;  
  66.   
  67. pCursor->get(&key1,&value1,DB_LAST);  
  68. cout<<*((int *)(key1.get_data()))<<":"<<((Info *)(value1.get_data()))->name<<":"<<((Info *)(value1.get_data()))->age<
  69.   
  70. /*while(pCursor->get(&key1,&value1,DB_NEXT)==0) 
  71. { 
  72.     cout<<*((int *)(key1.get_data()))<<":"<<((Info *)(value1.get_data()))->name<<":"<<((Info *)(value1.get_data()))->age< 
  73. }*/  
  74.   
  75. //end Master---------------------------------------------  
  76.   
  77.   
  78. //参与者  
  79. DbEnv env(0);  
  80.   
  81. env.set_data_dir("Database");  
  82. env.set_lg_dir("Log");  
  83.   
  84. env.set_cachesize(0,300*1024*1024,0);  
  85. env.log_set_config(DB_TXN_NOSYNC,1);  
  86. env.set_lg_bsize(300*1024*1024);  
  87.   
  88.   
  89. DbSite *p;  
  90. env.repmgr_site("127.0.0.1",5000,&p,0);  
  91. p->set_config(DB_LOCAL_SITE,1);  
  92. p->close();  
  93. env.rep_set_priority(100);  
  94.   
  95. DbSite *pOther;  
  96. env.repmgr_site("192.168.1.182",6000,&pOther,0);  
  97. pOther->set_config(DB_BOOTSTRAP_HELPER,1);  
  98. pOther->close();  
  99.   
  100. env.open("Environment",DB_CREATE|DB_INIT_MPOOL|DB_INIT_TXN|DB_INIT_LOCK|DB_PRIVATE|DB_RECOVER|DB_INIT_REP|DB_THREAD,0);  
  101. env.set_flags(DB_HOTBACKUP_IN_PROGRESS,1);  
  102.   
  103. int a=env.repmgr_start(3,DB_REP_CLIENT);  
  104.   
  105. while(true)  
  106. {  
  107.     Sleep(1000);  
  108. }  

你可能感兴趣的:(c++)