📄 datasplit.pc
字号:
/******************************重新给原表创建索引:开始*********************************/
sprintf( g_strLogLine, " Now create indexes on source db table\n" );
WriteLog( g_strLogLine );
/****重建表的索引****/
/*连接历史库*/
if ( ConnectDB(g_strDestDB)!=1 )
{
sprintf( g_strLogLine, "Connect to destination db failed,please check! \n\n" );
WriteLog( g_strLogLine );
return 0;
}
/**/
for(i=0;i< 10;i++)
{
memset(g_suCrtTabIdx[i].Index_Name,'\0',sizeof(g_suCrtTabIdx[i].Index_Name));
memset(g_suCrtTabIdx[i].sql_script,'\0',sizeof(g_suCrtTabIdx[i].sql_script));
}
/*get表的索引*/
if((iRtn=GetCrtIndexSql(pTabParameter->Table_Name,"O"))<0)
{
sprintf( g_strLogLine, "get %s index failed GetCrtIndexSql() error\n\n",pTabParameter->Table_Name);
WriteLog( g_strLogLine );
/*return 0; 不结束,以后可手动建索引*/
}
iRtn = ReleaseDB();
/*连接源库*/
if ( ConnectDB(g_strSrcDB)!=1 )
{
sprintf( g_strLogLine, " Connect to source db failed! \n\n" );
WriteLog( g_strLogLine );
return 0;
}
/**重建表的索引**/
if((iRtn=CrtTabIdx(pTabParameter->Table_Name))<0)
{
sprintf( g_strLogLine, "repeat create %s index failed CrtTabIdx() error\n\n",pTabParameter->Table_Name);
WriteLog( g_strLogLine );
/*return 0; 不结束,以后可手动建索引*/
}
else
{
sprintf( g_strLogLine, " repeat create %s index success!\n",pTabParameter->Table_Name);
WriteLog( g_strLogLine );
}
iRtn = ReleaseDB();
/******************************重新给原表创建索引:结束*********************************/
/*drop 在线用户在另一用户下创建的临时表(函数内部连库)*/
DropTempTab(pTabParameter->Table_Name);
sprintf( g_strLogLine, " Deal public phone number Success! \n" );
WriteLog( g_strLogLine );
return 1;
}/*end fun*/
/************************************************************************************
//功能:倒prepay_detail改为A类表处理(保留三个月以内的),WORK_ORDER(保留state<>'P0P'的)表数据。
//参数:参数:表名、保留月份数等
//返回值:<0表示失败,1表示成功
************************************************************************************/
int DoBClass(pTabParameter)
struct Tab_Parameter *pTabParameter;
{
char szCurTime[15];
int iRtn = 0; /*获得函数调用的返回值*/
long lSRows = 0; /*记录表处理之前的记录数*/
long lRows = 0; /*中间变量*/
char szCntSQL[256]; /*构建统计表记录数的SQL语句*/
char szIMPstmt[256]; /*构建IMPORT的系统语句*/
char szEXPstmt[256]; /*构建EXPORT的系统语句*/
struct PFILE pFile; /*记录创建EXPORT参数文件的必须内容*/
long lAllRows; /*记录3个表的倒换之前的所有记录数*/
long lPartRows[2]; /*记录3个表与临时表关联倒换的DMP记录数*/
char szAllDFile[80]; /*全表备份时保存倒出的DMP文件名*/
char szPartDFile[2][80];/*分离数据时保存倒出的DMP文件名*/
char chPartRows[13]; /*保存长整型转换为字串的值*/
int i=0;
memset(szCurTime,'\0',sizeof(szCurTime));
sprintf( g_strLogLine, " deal B Class begin! \n" );
WriteLog( g_strLogLine );
/******************************统计倒换之前表中记录数:开始*****************************/
sprintf( g_strLogLine, " count all records\n" );
WriteLog( g_strLogLine );
if ( ConnectDB(g_strSrcDB)!=1 )
{
sprintf( g_strLogLine, "DoBClass Connect to source db failed\n\n" );
WriteLog( g_strLogLine );
return 0;
}
/*统计表的记录数*/
sprintf( g_strLogLine, " select count(1) from %s \n",pTabParameter->Table_Name);
WriteLog( g_strLogLine );
lAllRows = CountRows(pTabParameter->Table_Name);
if ( lAllRows < 0 )
{
/*统计出错*/
sprintf( g_strLogLine, "count is failed or record rows = 0! \n\n" );
WriteLog( g_strLogLine );
iRtn = ReleaseDB();
return 0;
}
else
{
/*统计成功*/
sprintf( g_strLogLine, " rows of %s = %ld! \n",pTabParameter->Table_Name,lAllRows );
WriteLog( g_strLogLine );
}
ReleaseDB();
/******************************统计倒换之前表中记录数:结束*****************************/
/******************************将倒换表做全备份:开始*************************************/
/*时间不够,不做全备
sprintf( g_strLogLine, " all data back\n" );
WriteLog( g_strLogLine );
*/
/*dump 表*/
/*sprintf( g_strLogLine, " Now begin dump %s table indexs and all rows\n",pTabParameter->Table_Name);
WriteLog( g_strLogLine );
lRows = 0;
strcpy( pFile.USERID, g_strSrcDB );
strcpy( pFile.TABLE, pTabParameter->Table_Name );
pFile.PARTITION[0] = '\0';
pFile.QUERY[0] = '\0';
*/
/*sprintf( pFile.QUERY, " where rownum < 2");*/
/*lRows = expData( &pFile );
strcpy( szAllDFile, pFile.dmpFileName );
sleep(2);
if ( lRows == lAllRows )
{
*/
/*成功*/
/* sprintf( g_strLogLine, " dump %s indexs and all rows succeed! dump file name is %s\n",pTabParameter->Table_Name,pFile.dmpFileName );
WriteLog( g_strLogLine );
}
else
{
*/
/*失败*/
/* sprintf( g_strLogLine, "dump table %s indexs and all rows failed! \n\n",pTabParameter->Table_Name);
WriteLog( g_strLogLine );
return 0;
}
*/
/******************************做全备份:结束*************************************/
/******************************与临时表关联生成多个DMP并保留DMP文件名:开始*************/
sprintf( g_strLogLine, " Now begin split table data\n" );
WriteLog( g_strLogLine );
sprintf( g_strLogLine, " Now begin export data %s\n",pTabParameter->Table_Name);
WriteLog( g_strLogLine );
/*第一个dump*/
if ( ConnectDB(g_strSrcDB)!=1 )
{
sprintf( g_strLogLine, "DoBClass Connect to source db failed,please check! \n\n" );
WriteLog( g_strLogLine );
return 0;
}
/*与临时表关联生成要DUMP online的临时表*/
if(strcmp(pTabParameter->Table_Name,"PREPAY_DETAIL")==0)
iRtn=CrtPrepayDetail(pTabParameter->Table_Name,"O");
else if(strcmp(pTabParameter->Table_Name,"WORK_ORDER")==0)
iRtn=CrtWorkOrder(pTabParameter->Table_Name,"O");
else
{
sprintf( g_strLogLine, "There is not %s in B class ,failed! \n\n",pTabParameter->Table_Name);
WriteLog( g_strLogLine );
}
if (iRtn != 1 )
{
sprintf( g_strLogLine, "create online temp %s failed! \n\n",pTabParameter->Table_Name);
WriteLog( g_strLogLine );
return 0;
}
iRtn = ReleaseDB();
/*DMP*/
strcpy( pFile.USERID, g_strTempDB );
strcpy( pFile.TABLE, pTabParameter->Table_Name );
pFile.PARTITION[0] = '\0';
pFile.QUERY[0] = '\0';
lRows = 0;
lRows = expData( &pFile );
lPartRows[0] = lRows;
strcpy( szPartDFile[0], pFile.dmpFileName );
sleep(2);/*避免重名*/
/*第二个dump*/
if ( ConnectDB(g_strSrcDB)!=1 )
{
sprintf( g_strLogLine, "Connect to source db failed! \n\n" );
WriteLog( g_strLogLine );
return 0;
}
/*与临时表关联生成要DUMP his的临时表*/
if(strcmp(pTabParameter->Table_Name,"PREPAY_DETAIL")==0)
iRtn=CrtPrepayDetail(pTabParameter->Table_Name,"H");
else
iRtn=CrtWorkOrder(pTabParameter->Table_Name,"H");
if (iRtn != 1 )
{
sprintf( g_strLogLine, "create his temp %s failed! \n\n",pTabParameter->Table_Name);
WriteLog( g_strLogLine );
return 0;
}
iRtn = ReleaseDB();
/*DMP*/
/*strcpy( pFile.USERID, g_strTempDB);继承上一个dmp的条件(一样的)
strcpy( pFile.TABLE, pTabParameter->Table_Name );
pFile.PARTITION[0] = '\0';
pFile.QUERY[0] = '\0';*/
lRows = 0;
lRows = expDataHisDmp( &pFile );
lPartRows[1] = lRows;
strcpy( szPartDFile[1], pFile.dmpFileName );
sleep(2);
/*判分离是否成功*/
sprintf( g_strLogLine, " %s counts[%ld]= 1st[%ld] + 2nd[%ld]\n",pTabParameter->Table_Name,lAllRows,lPartRows[0],lPartRows[1] );
WriteLog( g_strLogLine );
if ( lAllRows == ( lPartRows[0] + lPartRows[1] ) )
{
/*成功*/
sprintf( g_strLogLine, " %s dump succeed! file is:one[%s]\n\t\t\ttwo[%s]\n",pTabParameter->Table_Name,szPartDFile[0], szPartDFile[1] );
WriteLog( g_strLogLine );
}
else
{
/*失败*/
sprintf( g_strLogLine, "%s dump failed!\n\n",pTabParameter->Table_Name);
WriteLog( g_strLogLine );
return 0;
}
/******************将第二个DMP的相关数据信息保存在his_imp_tab_info表中***************/
if ( ConnectDB(g_strDestDB)!=1 )
{
sprintf( g_strLogLine, "Connect to source hisdb failed! \n\n" );
WriteLog( g_strLogLine );
return 0;
}
iRtn=SaveHisDmpInfo(pTabParameter->Table_Name,"",szPartDFile[1],lPartRows[1]);
if ( iRtn != 1 )
{
sprintf( g_strLogLine, "deal table %s call SaveHisDmpInfo failed! \n\n",pTabParameter->Table_Name);
WriteLog( g_strLogLine );
return 0;
}
iRtn = ReleaseDB();
/******************************与临时表关联生成多个DMP并保留DMP文件名:结束*************/
/******************************TRUNCATE原表、删除索引:开始*****************************/
sprintf( g_strLogLine, " Now begin truncate data and drop indexes\n" );
WriteLog( g_strLogLine );
if ( ConnectDB(g_strSrcDB)!=1 )
{
sprintf( g_strLogLine, "Connect to source db failed,please check! \n\n" );
WriteLog( g_strLogLine );
return 0;
}
/*删除索引*/
iRtn = DropAllIndexes(pTabParameter->Table_Name);
if ( iRtn != 0 )
{
sleep(10);
iRtn = DropAllIndexes(pTabParameter->Table_Name);
}
sprintf( g_strLogLine, " Drop table %s Indexes succeed! \n",pTabParameter->Table_Name);
WriteLog( g_strLogLine );
/*TRUNCATE原表*/
iRtn = TruncateTab(pTabParameter->Table_Name);
if ( iRtn == 0 )
{
sprintf( g_strLogLine, "Truncate table %s failed! \n\n",pTabParameter->Table_Name);
WriteLog( g_strLogLine );
iRtn = ReleaseDB();
return 0;
}
sprintf( g_strLogLine, " Truncate table %s succeed! \n",pTabParameter->Table_Name);
WriteLog( g_strLogLine );
ReleaseDB();
/******************************TRUNCATE原表、删除索引:结束*****************************/
/******************************数据到原表并验证:开始********************************/
sprintf( g_strLogLine, " Now import data to save into source db\n" );
WriteLog( g_strLogLine );
/*IMPORT第一个DMP到原库的 表中*/
sprintf( g_strLogLine, " Now begin import %s 1st dump to online DB\n",pTabParameter->Table_Name);
WriteLog( g_strLogLine );
GetSysTime(szCurTime);
sprintf( pFile.logFileName, "./log/imp%s%s.log",pTabParameter->Table_Name,szCurTime );
sprintf( szIMPstmt, "imp %s tables = %s ignore = y commit=y indexes = n grants = n buffer = 4096000 feedback=500000 file = %s log = %s",g_strSrcDB,pTabParameter->Table_Name,szPartDFile[0], pFile.logFileName );
WriteLog( szIMPstmt );
WriteLog( "\n" );
system( szIMPstmt );
sprintf( g_strLogLine, " IMP %s 1st dmp complete!log file:%s\n",pTabParameter->Table_Name,pFile.logFileName );
WriteLog( g_strLogLine );
/*通过读日志文件判断IMP的正确性*/
lRows = 0;
lRows = readLogFile( pFile.logFileName );
if ( lRows == lPartRows[0] )
{
/*IMP的记录数与需要的一致*/
sprintf( g_strLogLine, " IMP %s 1st dmp succeed! Import rows = %d\n",pTabParameter->Table_Name,lRows );
WriteLog( g_strLogLine );
}
else
{
sprintf( g_strLogLine, "IMP %s 1st dmp failed! Import rows is %d\n\n",pTabParameter->Table_Name,lRows );
WriteLog( g_strLogLine );
return 0;
}
/******************************IMP数据到原表并验证:结束********************************/
/******************************重新给原表创建索引:开始*********************************/
sprintf( g_strLogLine, " Now create indexes on source db table\n" );
WriteLog( g_strLogLine );
/****重建表的索引****/
/*连接历史库*/
if ( ConnectDB(g_strDestDB)!=1 )
{
sprintf( g_strLogLine, "Connect to destination db failed,please check! \n\n" );
WriteLog( g_strLogLine );
return 0;
}
/**/
for(i=0;i< 10;i++)
{
memset(g_suCrtTabIdx[i].Index_Name,'\0',sizeof(g_suCrtTabIdx[i].Index_Name));
memset(g_suCrtTabIdx[i].sql_script,'\0',sizeof(g_suCrtTabIdx[i].sql_script));
}
/*get表的索引*/
if((iRtn=GetCrtIndexSql(pTabParameter->Table_Name,"O"))<0)
{
sprintf( g_strLogLine, "get %s index failed GetCrtIndexSql() error\n\n",pTabParameter->Table_Name);
WriteLog( g_strLogLine );
/*return 0; 不结束,以后可手动建索引*/
}
iRtn = ReleaseDB();
/*连接源库*/
if ( ConnectDB(g_strSrcDB)!=1 )
{
sprintf( g_strLogLine, " Connect to source db failed! \n\n" );
WriteLog( g_strLogLine );
return 0;
}
/**重建表的索引**/
if((iRtn=CrtTabIdx(pTabParameter->Table_Name))<0)
{
sprintf( g_strLogLine, "repeat create %s index failed CrtTabIdx() error\n\n",pTabParameter->Table_Name);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -