/************************************************* Copyright (C), 1988-1999, Nari Tech. Co., Ltd. File name: CRepSet.h Author: LH Version: 1.0 Date: 2011.8.24 Description: 复制动态库头文件 Function List: 1.int InitReplicateSet(void); 初始化复制动态库 2.int ReplicateSql(const vector &sqlVec); 复制sql请求至同步文件 Datetime Action Author Modify ------------------------------------------------------------------- 2011.8.24 Creation LH 2014.03.25 add wp 目前版本具有两套功能, 每套功能 的接口不能混用: 1.复制sql请求至同步文件(原有功能) 相关接口: int InitReplicateSet(void); int ReplicateSql(const vector &sqlVec); int WriteRepSql(const vector &sql_vector); int LogRepWrite(const string remote_db_name, const string &err_msg, int log_flag = 0); int MoveInFileToOutFile(string inFilePath, string outFilePath, string remote_db_name); int MoveFileToCommitDir(string &err_msg); int GetAllDbPubPath(void); int CheckCommitSysFile(string remote_db_name, string uncommit_file_path, vector &commit_sql_vec); int isAutoRep(void); 2.记录复制sql、回滚信息、回滚触发信息至同一个同步文件(新增功能) 可以多线程调用。 调用顺序: 先调用InitReplicateSet初始化,GetRepFileName获取文件名,然后就可以调用函数写入RepSql、RollbackInfo和RollbackTri 相关接口: int InitReplicateSet(int thread_id); int GetRepFileName(const string keyid, const string user_name,string & str_filename); int WriteRepSqlByFilename(const string rep_file_name, const vector &sql_vector); int WriteRollbackInfoByFilename(const string rep_file_name, const vector &sql_vector); int WriteRollbackTriByFilename(const string rep_file_name, const vector &sql_vector); int WriteCommonInfoByFilename(const string rep_file_name, const vector &sql_vector); int WriteOrigStatusByFilename(const string rep_file_name, const string &sql_string); int WriteModifiedStatusByFilename(const string rep_file_name, const string &sql_string); int MoveFileToCommitDir (vector file_name_vec, string &err_msg); int MoveInFileToOutFileByFilename(string file_name);//WriteRepSqlByFilename调用此接口,来移动文件到out目录中 int ReadRepSqlByFilename( const string file_name, vector &str_sql_vec); int ReadRollbackInfoByFilename( const string file_name, vector &rollback_info_vec); int ReadRollbackTriByFilename( const string file_name, vector &rollback_tri_vec); int ReadCommonInfoByFilename( const string file_name, vector &common_vec); int ReadOrigStatusByFilename( const string file_name, string &orig_string; int ReadModifiedStatusByFilename( const string file_name, string &modify_string); int GetAllDbPubPath(void); int GetAutoRepFlag(void); int CheckCommitSysFile(string remote_db_name, string uncommit_file_path, vector &commit_sql_vec); int LogRepWrite(const string dir_name, const string &err_msg, int log_flag, int thread_id); int WriteByFilenameAndSeparator(const string file_name,const string dir_name, const string separator_begin, const string separator_end, const vector &sql_vector); int isAutoRep(void); *************************************************/ #ifndef _CREPSET_H #define _CREPSET_H #ifdef _WINDOWS64 #ifdef DB_REP_LIB_EXPORTS #define DB_REP_LIB_API __declspec(dllexport) #else #define DB_REP_LIB_API __declspec(dllimport) #endif #else #define DB_REP_LIB_API #endif #include #include #include #include #include "paramanage.h" #include "system.h" #include "db_com/wholepubtools.h" #include "db_com/server_define.h" #define ROLLBACK_MAXLINE 8000 const int MAX_PARA_NAME = 64; const int MAX_FILE_NAME = 128; const string FILE_SEPARATOR = "\n_NARI_D5000_NORMAL_SQL_\n"; #ifndef _WINDOWS64 const string FILE_END = "\n_FILE_END_\n"; #else const string _FILE_END_ = "\n_FILE_END_\n"; #define FILE_END _FILE_END_; #endif const string REPSQL = ""; const string REPSQL_END = ""; const string ROLLBACKINFO = ""; const string ROLLBACKINFO_END = ""; const string ROLLBACKTRI = ""; const string ROLLBACKTRI_END = ""; const string COMMONINFO = ""; const string COMMONINFO_END = ""; const string ORIGINALSTATUS = ""; const string ORIGINALSTATUS_END = ""; const string MODIFIEDSTATUS = ""; const string MODIFIEDSTATUS_END = ""; const string ROLLBACKSQL = "[ROLLBACKSQL]"; const string COMMIT_DIR = "commit"; const string INTERFACE_ONE = "INTERFACE_ONE"; //第一套接口 const string INTERFACE_TWO = "INTERFACE_TWO"; //第二套接口 const int SCAN_DIR_NUM_ONE_TIME = 60; const int SCAN_FILE_NUM_ONE_TIME = 36000; class DB_REP_LIB_API CRepSet { public: CRepSet(); ~CRepSet(); public: /* 初始化复制动态库*/ int InitReplicateSet (void); /************************************************* Function: InitReplicateSet(int) Description: 初始化复制动态库 Calls: GetAllDbPubPath Input: void Output: void Return: 0:成功 -1:失败 *************************************************/ int InitReplicateSet (int thread_id); /************************************************* Function: GetRepFileName Description: 获取一个带本地时标的文件名(<128字符)。以便后续向此文件中写入复制内容。 Input: str_filename: 文件名的字符数组名 keyid: 设备keyid user_name: 用户名 op_type: 操作类型MODIFY_OP_INSERT, MODIFY_OP_DELETE, MODIFY_OP_UPDATE, MODIFY_OP_DELALL Output: 将生成的文件名填充到输入参数str_filename中 Return: 0:成功 -1:gettimeofday调用失败 -2: localtime_r调用失败 *************************************************/ int GetRepFileName (const string keyid, const string user_name, int op_type, string & str_filename); /* sql请求复制至文件中 * 返回值:1 成功 * -1 失败 * */ int ReplicateSql (const vector &sqlVec); /************************************************* Function: WriteRepSqlByFilename Description: 写入复制sql至指定的rep_file_name同步文件 Input: const vector &sqlVec const string rep_file_name文件名 Output: void Return: 0:成功 -1:失败 *************************************************/ int WriteRepSqlByFilename (const string rep_file_name, const vector &sql_vector); /************************************************* Function: WriteRollbackInfoByFilename Description: 写入回滚信息至指定的rep_file_name同步文件 Input: const vector &sqlVec const string rep_file_name文件名 Output: void Return: 0:成功 -1:失败 *************************************************/ int WriteRollbackInfoByFilename (const string rep_file_name, const vector &sql_vector); /************************************************* Function: WriteRollbackTriByFilename Description: 写入回滚触发信息至指定的rep_file_name同步文件 Input: const vector &sqlVec const string rep_file_name文件名 Output: void Return: 0:成功 -1:失败 *************************************************/ int WriteRollbackTriByFilename (const string rep_file_name, const vector &sql_vector); /************************************************* Function: WriteCommonInfoByFilename Description: 写入回滚触发信息至指定的rep_file_name同步文件 若为手动,则写入manual目录中 Input: const string rep_file_name文件名 sql_vector为写入的内容: 回滚信息 Output: void Return: 0:成功 -1:失败 *************************************************/ int WriteCommonInfoByFilename (const string rep_file_name, const vector &sql_vector); /************************************************* Function: WriteOrigStatusByFilename Description: 写入原始信息至指定的rep_file_name同步文件 若为手动,则写入manual目录中 Input: const string rep_file_name文件名 sql_string为写入的内容: 原始信息 Output: void Return: 0:成功 -1:失败 *************************************************/ int WriteOrigStatusByFilename (const string rep_file_name, const string &sql_string); /************************************************* Function: WriteModifiedStatusByFilename Description: 写入修改后的信息至指定的rep_file_name同步文件 若为手动,则写入manual目录中 Input: const string rep_file_name文件名 sql_string为写入的内容: 修改后的信息 Output: void Return: 0:成功 -1:失败 *************************************************/ int WriteModifiedStatusByFilename (const string rep_file_name, const string &sql_string); /*将SQL、commit.sys等类型文件转移至同步目录中 * 返回值:1 成功 * -1 失败 * */ int MoveFileToCommitDir (string &err_msg); int MoveFileToCommitDir (vector file_name_vec, string &err_msg); //将图形文件转移至图形专用目录中 // int MoveGraphFileToCommitDir(vector file_path_vec, string &err_msg); /************************************************* Function: MoveInFileToOutFileByFilename Description: 根据文件名将in目录中同步文件移至out目录中. 根据FileName,移动所有远端数据名下的in文件 移动之前,在文件中加入文件结束符,表示其文件完整性 Input: string FileName Output: void Return: 0:成功 -1:失败 *************************************************/ int MoveInFileToOutFileByFilename (string file_name); /************************************************* Function: ReadRepSqlFromFile Description: 1.根据file_name,获取文件下所有sql Calls: Input: 1.file_name Output: 1.vector str_sql_vec Return: 0:成功 -1:失败 *************************************************/ int ReadRepSqlByFilename (const string file_name, vector &str_sql_vec); /************************************************* Function: ReadRollbackInfoByFilename Description: 1.根据全路径文件名file_name,获取文件下回滚信息 Calls: Input: 1.file_name Output: 1.vector rollback_info_vec回滚信息 Return: 0:成功 -1:失败 *************************************************/ int ReadRollbackInfoByFilename (const string file_name, vector &rollback_info_vec); /************************************************* Function: ReadRollbackTriFromFile Description: 1.根据全路径文件名file_name,获取文件下回滚触发信息 Calls: Input: 1.file_name Output: 1.vector rollback_tri_vec回滚信息 Return: 0:成功 -1:失败 *************************************************/ int ReadRollbackTriByFilename (const string file_name, vector &rollback_tri_vec); /************************************************* Function: ReadCommonInfoByFilename Description: 1.根据全路径文件名file_name,获取文件下回滚信息 Input: 1.file_name Output: 1.vector rollback_tri_vec回滚信息 Return: 0:成功 -1:失败 *************************************************/ int ReadCommonInfoByFilename (const string file_name, vector &common_vec); /************************************************* Function: ReadOrigStatusByFilename Description: 1.根据全路径文件名file_name,获取文件下原始信息 Input: 1.file_name Output: 1.string orig_string原始信息 Return: 0:成功 -1:失败 *************************************************/ int ReadOrigStatusByFilename (const string file_name, string &orig_string); /************************************************* Function: ReadModifiedStatusByFilename Description: 1.根据全路径文件名file_name,获取文件下修改后的信息 Input: 1.file_name Output: 1.string modify_string修改后的信息 Return: 0:成功 -1:失败 *************************************************/ int ReadModifiedStatusByFilename (const string file_name, string &modify_string); /************************************************* Function: isAutoRep Description: 获取同步方式:手动/自动 Input: void Output: int Return: >=0:成功. =0手动.=1自动 *************************************************/ int isAutoRep (void); private: bool m_isRepFlag; bool m_isAutoRep; int m_nPid; int m_nThreadid; string m_PubPath; string m_InterfaceIdentity; //标识是使用的哪一组功能接口:INTERFACE_ONE 还是INTERFACE_TWO. 调用InitReplicateSet时确定m_InterfaceIdentity的值 //使用不同组的接口会报错。 vector m_DbNameVec; //所有需要同步的数据库名 map m_remote_in_path_map; map m_remote_out_path_map; map m_remote_backup_path_map; map m_remote_base_path_map; private: /*获取所有同步文件存放路径*/ int GetAllDbPubPath (void); /************************************************* Function: GetAutoRepFlag Description: 根据db_rep.sys文件读取是否自动[auto_replicate]is_auto_replicate=1的部分 Calls: CFindFile::CheckPath() Input: void Output: void Return: 1:成功 -1:失败 *************************************************/ int GetAutoRepFlag (void); /*获取部分复制数据库信息*/ int GetAllPartlyRepInfo (void); int CheckCommitSysFile (string remote_db_name, string uncommit_file_path, vector &commit_sql_vec); string IntToStr (int value); /*写同步文件*/ int WriteRepSql (const vector &sql_vector); /*记录日志函数,默认log_flag为0,记录生成sql文件make日志*/ int LogRepWrite (const string remote_db_name, const string &err_msg, int log_flag = 0); /************************************************* Function: LogRepWrite(const string dir_name, const string &err_msg, int log_flag, int thread_id) Description: 记录日志函数,默认log_flag为0,记录生成sql文件make日志. 多线程版本,将不同线程的日志写入不同的文件中 Calls: CFindFile findfile; Input: const string &err_msg 写入的信息 const string dir_name 目标目录名 int log_flag, int thread_id 传入的线程号 Output: void Return: 1:成功 -1:失败 *************************************************/ int LogRepWrite (const string dir_name, const string &err_msg, int log_flag, int thread_id); /*将同步文件从in 移送至out目录中*/ int MoveInFileToOutFile (string inFilePath, string outFilePath, string remote_db_name); /************************************************* Function: WriteByFilenameAndSeprator Description: 写入信息至指定的file_name文件 Input: const vector &sqlVec const string file_name文件名 const string dir_name文件所在远端数据库名: 如huazhong . 当m_isAutoRep == false时,参数需要为manual const string separator_begin, const string separator_end 开始和结束的分隔符 Output: void Return: 1:成功 -1:失败 *************************************************/ int WriteByFilenameAndSeparator (const string file_name, const string dir_name, const string separator_begin, const string separator_end, const vector &sql_vector); }; #endif