⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 datasplit.pc

📁 一个LINUX下面
💻 PC
📖 第 1 页 / 共 5 页
字号:
		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);
		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 pay datum over! \n\n" );
	WriteLog( g_strLogLine );
	/******************************总账表倒换公免数据:开始*********************************/
	/*if( strcmp(pTabParameter->Table_Name,"PAYMENT")!=0 && strcmp(pTabParameter->Table_Name,"BILL")!=0 )
		if(DoAClassPublic(pTabParameter)<=0)
			return 0;
	*/
	/******************************总账表倒换公免数据:结束*********************************/

	sprintf( g_strLogLine, "DoAClass deal Success! \n\n\n" );
	WriteLog( g_strLogLine );
	return 1;
}/*end fun*/
/************************************************************************************
//功能:倒总帐表公免数据。
//参数:参数:表名、保留月份数等
//返回值:<0表示失败,1表示成功
************************************************************************************/
int DoAClassPublic(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 public phone number begin! \n" );
	WriteLog( g_strLogLine );
	/******************************统计倒换之前表中记录数:开始*****************************/
	sprintf( g_strLogLine, " count all records\n" );
	WriteLog( g_strLogLine );
	if ( ConnectDB(g_strSrcDB)!=1 )
	{
		sprintf( g_strLogLine, "DoAClass 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, "DoAClass Connect to source db failed,please check! \n\n" );
		WriteLog( g_strLogLine ); 
		return 0;
	}
	/*与临时表关联生成要DUMP online的临时表*/
	iRtn=CrtPublicTab(pTabParameter->Table_Name,"O");
	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的临时表*/
	iRtn=CrtPublicTab(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数据到原表并验证:结束********************************/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -