4. 예제 프로그램#
이 장은 Monitoring API를 사용해서 작성된 C 프로그램 예제를 제공한다.
Makefile#
이 장에서 제공하는 예제 프로그램을 컴파일하기 위한 Makefile이다. Altibase 패키지에 포함되어 있는 altibase_env.mk 파일이 이용된다.
include $(ALTIBASE_HOME)/install/altibase_env.mk
SRCS = $(wildcard *.c)
OBJS = $(SRCS:.c=.$(OBJEXT))
BINS = $(SRCS:.c=$(BINEXT))
all : $(BINS)
sample_1 : sample_1.$(OBJEXT)
$(LD) $(LDOUT) $@ $^ $(LFLAGS) $(LIBOPT)altibaseMonitor$(LIBAFT) $(LIBOPT)odbccli$(LIBAFT) $(LIBS)
sample_2 : sample_2.$(OBJEXT)
$(LD) $(LDOUT) $@ $^ $(LFLAGS) $(LIBOPT)altibaseMonitor$(LIBAFT) $(LIBOPT)odbccli$(LIBAFT) $(LIBS)
sample_3 : sample_3.$(OBJEXT)
$(LD) $(LDOUT) $@ $^ $(LFLAGS) $(LIBOPT)altibaseMonitor$(LIBAFT) $(LIBOPT)odbccli$(LIBAFT) $(LIBS)
sample_4 : sample_4.$(OBJEXT)
$(LD) $(LDOUT) $@ $^ $(LFLAGS) $(LIBOPT)altibaseMonitor$(LIBAFT) $(LIBOPT)odbccli$(LIBAFT) $(LIBS)
sample_5 : sample_5.$(OBJEXT)
$(LD) $(LDOUT) $@ $^ $(LFLAGS) $(LIBOPT)altibaseMonitor$(LIBAFT) $(LIBOPT)odbccli$(LIBAFT) $(LIBS)
sample_6 : sample_6.$(OBJEXT)
$(LD) $(LDOUT) $@ $^ $(LFLAGS) $(LIBOPT)altibaseMonitor$(LIBAFT) $(LIBOPT)odbccli$(LIBAFT) $(LIBS)
sample_7 : sample_7.$(OBJEXT)
$(LD) $(LDOUT) $@ $^ $(LFLAGS) $(LIBOPT)altibaseMonitor$(LIBAFT) $(LIBOPT)odbccli$(LIBAFT) $(LIBS)
sample_8 : sample_8.$(OBJEXT)
$(LD) $(LDOUT) $@ $^ $(LFLAGS) $(LIBOPT)altibaseMonitor$(LIBAFT) $(LIBOPT)odbccli$(LIBAFT) $(LIBS)
sample_9 : sample_9.$(OBJEXT)
$(LD) $(LDOUT) $@ $^ $(LFLAGS) $(LIBOPT)altibaseMonitor$(LIBAFT) $(LIBOPT)odbccli$(LIBAFT) $(LIBS)
sample_10 : sample_10.$(OBJEXT)
$(LD) $(LDOUT) $@ $^ $(LFLAGS) $(LIBOPT)altibaseMonitor$(LIBAFT) $(LIBOPT)odbccli$(LIBAFT) $(LIBS)
clean :
$(RM) $(OBJS) $(BINS) *.log
sample_1.c#
ABIGetVSession과 ABIGetVSessionBySID 함수를 사용해서 V$SESSION 성능 뷰를 조회하는 예제 프로그램이다.
#include <stdio.h>
#include <stdlib.h>
#include <altibaseMonitor.h>
void printVSession( ABIVSession *aVSession, int aRowCount );
void errorHandling( int aErrCode );
int main()
{
ABIVSession *sVSession = NULL, *sVSessionBySID = NULL;
int sRc = 0;
// Test ABIInitialize
sRc = ABIInitialize();
if( sRc < 0 )
{
// Error handling
errorHandling( sRc );
}
// Test ABICheckConnection
if( ABICheckConnection() != -1 )
{
/*
IF the second argument sets to
0 - Return all session information.
1 - Return executing session information only.
*/
// Test ABIGetVSession
sRc = ABIGetVSession( &sVSession, 0 );
if( sRc >= 0 )
{
printf( "*******************************\n" );
printf( "* V$Session *\n" );
printf( "*******************************\n" );
printVSession( sVSession, sRc );
sVSession = NULL;
sRc = 0;
}
else
{
// Error handling
errorHandling( sRc );
}
// Test ABIGetVSession [ Active Only ]
sRc = ABIGetVSession( &sVSession, 1 );
if( sRc >= 0 )
{
printf( "***********************************************\n" );
printf( "* V$Session [ Active Only ] *\n" );
printf( "***********************************************\n" );
printVSession( sVSession, sRc );
sRc = 0;
}
else
{
// Error handling
errorHandling( sRc );
}
// Test ABIGetVSessionBySID
sRc = ABIGetVSessionBySID( &sVSessionBySID, sVSession[0].mID );
if( sRc >= 0 )
{
printf( "*************************************************\n" );
printf( "* V$Session [ specified SID ] *\n" );
printf( "*************************************************\n" );
printVSession( sVSessionBySID, sRc );
sRc = 0;
}
else
{
// Error handling
errorHandling( sRc );
}
}
else
{
// Exception handling
}
// Test ABIFinalize
sRc = ABIFinalize();
if( sRc < 0 )
{
// Error handling
errorHandling( sRc );
}
return 0;
}
void printVSession( ABIVSession *aVSession, int aRowCount )
{
int sI;
for( sI = 0; sI < aRowCount; sI++ )
{
printf( "ID : %d\n", aVSession[sI].mID );
printf( "TRANS_ID : %lld\n", aVSession[sI].mTransID );
printf( "TASK_STATE : %s\n", aVSession[sI].mTaskState );
printf( "COMM_NAME : %s\n", aVSession[sI].mCommName );
printf( "XA_SESSION_FLAG : %d\n", aVSession[sI].mXASessionFlag );
printf( "XA_ASSOCIATE_FLAG : %d\n", aVSession[sI].mXAAssociateFlag );
printf( "QUERY_TIME_LIMIT : %d\n", aVSession[sI].mQueryTimeLimit );
printf( "DDL_TIME_LIMIT : %d\n", aVSession[sI].mDdlTimeLimit );
printf( "FETCH_TIME_LIMIT : %d\n", aVSession[sI].mFetchTimeLimit );
printf( "UTRANS_TIME_LIMIT : %d\n", aVSession[sI].mUTransTimeLimit );
printf( "IDLE_TIME_LIMIT : %d\n", aVSession[sI].mIdleTimeLimit );
printf( "IDLE_START_TIME : %d\n", aVSession[sI].mIdleStartTime );
printf( "ACTIVE_FLAG : %d\n", aVSession[sI].mActiveFlag );
printf( "OPENED_STMT_COUNT : %d\n", aVSession[sI].mOpenedStmtCount );
printf( "CLIENT_PACKAGE_VERSION : %s\n", aVSession[sI].mClientPackageVersion );
printf( "CLIENT_PROTOCOL_VERSION : %s\n", aVSession[sI].mClientProtocolVersion );
printf( "CLIENT_PID : %lld\n", aVSession[sI].mClientPID );
printf( "CLIENT_TYPE : %s\n", aVSession[sI].mClientType );
printf( "CLIENT_APP_INFO : %s\n", aVSession[sI].mClientAppInfo );
printf( "CLIENT_NLS : %s\n", aVSession[sI].mClientNls );
printf( "DB_USERNAME : %s\n", aVSession[sI].mDBUserName );
printf( "DB_USERID : %d\n", aVSession[sI].mDBUserID );
printf( "DEFAULT_TBSID : %lld\n", aVSession[sI].mDefaultTbsID );
printf( "DEFAULT_TEMP_TBSID : %lld\n", aVSession[sI].mDefaultTempTbsID );
printf( "SYSDBA_FLAG : %d\n", aVSession[sI].mSysDbaFlag );
printf( "AUTOCOMMIT_FLAG : %d\n", aVSession[sI]. mAutoCommitFlag );
printf( "SESSION_STATE : %s\n", aVSession[sI].mSessionState );
printf( "ISOLATION_LEVEL : %d\n", aVSession[sI].mIsolationLevel );
printf( "REPLICATION_MODE : %d\n", aVSession[sI].mReplicationMode );
printf( "TRANSACTION_MODE : %d\n", aVSession[sI].mTransactionMode );
printf( "COMMIT_WRITE_WAIT_MODE : %d\n", aVSession[sI].mCommitWriteWaitMode );
printf( "OPTIMIZER_MODE : %d\n", aVSession[sI].mOptimizerMode );
printf( "HEADER_DISPLAY_MODE : %d\n", aVSession[sI].mHeaderDisplayMode );
printf( "CURRENT_STMT_ID : %d\n", aVSession[sI].mCurrentStmtID );
printf( "STACK_SIZE : %d\n", aVSession[sI].mStackSize );
printf( "DEFAULT_DATE_FORMAT : %s\n", aVSession[sI].mDefaultDateFormat );
printf( "TRX_UPDATE_MAX_LOGSIZE : %lld\n", aVSession[sI].mTrxUpdateMaxLogSize );
printf( "PARALLEL_DML_MODE : %d\n", aVSession[sI].mParallelDmlMode );
printf( "LOGIN_TIME : %d\n", aVSession[sI].mLoginTime );
printf( "FAILOVER_SOURCE : %s\n\n", aVSession[sI].mFailoverSource );
}
printf( "\n" );
}
void errorHandling( int aErrCode )
{
const char *sErrMsg = NULL;
ABIGetErrorMessage( aErrCode, &sErrMsg );
printf( "%s\n\n\n", sErrMsg );
exit(1);
}
sample_2.c#
이 예제 프로그램은 ABIGetSessionCount 함수를 사용해서 Altibase 서버에 존재하는 세션의 총 개수와 active 세션의 개수를 조회한다. 그리고 ABIGetMaxClientCount 함수를 사용해서 Altibase 서버에 접속할 수 있는 클라이언트의 최대 개수를 조회한다.
#include <stdio.h>
#include <stdlib.h>
#include <altibaseMonitor.h>
void errorHandling( int aErrCode );
int main()
{
int sRc = 0;
// Test ABIInitialize
sRc = ABIInitialize();
if( sRc < 0 )
{
// Error handling
errorHandling( sRc );
}
// Test ABICheckConnection
if( ABICheckConnection() != -1 )
{
/*
IF the argument sets to
0 - Return all session count.
1 - Return executing session count only.
*/
// Test ABIGetSessionCount
sRc = ABIGetSessionCount( 0 );
if( sRc >= 0 )
{
printf( "***********************************\n" );
printf( "* Session Count *\n" );
printf( "***********************************\n" );
printf( "Session Count : %d\n\n\n", sRc );
sRc = 0;
}
else
{
// Error handling
errorHandling( sRc );
}
// Test ABIGetSessionCount [ Active Only ]
sRc = ABIGetSessionCount( 1 );
if( sRc >= 0 )
{
printf( "***************************************************\n" );
printf( "* Session Count [ Active Only ] *\n" );
printf( "***************************************************\n" );
printf( "Session Count : %d\n\n\n", sRc );
sRc = 0;
}
else
{
// Error handling
errorHandling( sRc );
}
// Test ABIGetMaxClientCount
sRc = ABIGetMaxClientCount();
if( sRc >= 0 )
{
printf( "**************************************\n" );
printf( "* Max Client Count *\n" );
printf( "**************************************\n" );
printf( "Max Client Count : %d\n\n\n", sRc );
sRc = 0;
}
else
{
// Error handling
errorHandling( sRc );
}
}
else
{
// Exception handling
}
// Test ABIFinalize
sRc = ABIFinalize();
if( sRc < 0 )
{
// Error handling
errorHandling( sRc );
}
return 0;
}
void errorHandling( int aErrCode )
{
const char *sErrMsg = NULL;
ABIGetErrorMessage( aErrCode, &sErrMsg );
printf( "%s\n\n\n", sErrMsg );
exit(1);
}
sample_3.c#
ABIGetStatName, ABIGetVSysstat, ABIGetVSesstat, ABIGetVSesstatBySID함수를 사용해서 Altibase 시스템과 세션들의 통계정보를 조회하는 예제 프로그램이다.
#include <stdio.h>
#include <stdlib.h>
#include <altibaseMonitor.h>
void printVSysstat( ABIVSysstat *aVSysstat, int aRowCount, ABIStatName *aStatName );
void printVSesstat( ABIVSesstat *aVSesstat, int aRowCount, ABIStatName *aStatName, int aStatNameRowCount );
void printStatName( ABIStatName *aStatName, int aStatNameRowCount );
void errorHandling( int aErrCode );
int main()
{
ABIVSysstat *sVSysstat = NULL;
ABIVSesstat *sVSesstat = NULL;
ABIStatName *sStatName = NULL;
int sStatNameRowCount = 0;
int sRc = 0;
// Test ABIInitialize
sRc = ABIInitialize();
if( sRc < 0 )
{
// Error handling
errorHandling( sRc );
}
// Test ABICheckConnection
if( ABICheckConnection() != -1 )
{
// Test ABIGetStatName
sStatNameRowCount = ABIGetStatName( &sStatName );
if( sStatNameRowCount >= 0 )
{
printf( "******************************\n" );
printf( "* StatName *\n" );
printf( "******************************\n" );
printStatName( sStatName, sStatNameRowCount );
}
else
{
// Error handling
errorHandling( sStatNameRowCount );
}
// Test ABIGetVSysstat
sRc = ABIGetVSysstat( &sVSysstat );
if( sRc >= 0 )
{
printf( "*******************************\n" );
printf( "* V$Sysstat *\n" );
printf( "*******************************\n" );
printVSysstat( sVSysstat, sRc, sStatName );
sRc = 0;
}
else
{
// Error handling
errorHandling( sRc );
}
// Test ABIGetVSesstat
sRc = ABIGetVSesstat( &sVSesstat, 0 );
if( sRc >= 0 )
{
printf( "*******************************\n" );
printf( "* V$Sesstat *\n" );
printf( "*******************************\n" );
printVSesstat( sVSesstat, sRc, sStatName, sStatNameRowCount );
sRc = 0;
}
else
{
// Error handling
errorHandling( sRc );
}
// Test ABIGetVSesstatBySID
sRc = ABIGetVSesstatBySID( &sVSesstat, sVSesstat[0].mSID );
if( sRc >= 0 )
{
printf( "*************************************************\n" );
printf( "* V$Sesstat [ specified SID ] *\n" );
printf( "*************************************************\n" );
printVSesstat( sVSesstat, sRc, sStatName, sStatNameRowCount );
sRc = 0;
}
else
{
// Error handling
errorHandling( sRc );
}
}
else
{
// Exception handling
}
// Test ABIFinalize
sRc = ABIFinalize();
if( sRc < 0 )
{
// Error handling
errorHandling( sRc );
}
return 0;
}
void printVSysstat( ABIVSysstat *aVSysstat, int aRowCount, ABIStatName *aStatName )
{
int sI;
for( sI = 0; sI < aRowCount; sI++ )
{
printf( "SEQNUM : %d\n", aStatName[sI].mSeqNum );
printf( "NAME : %s\n", aStatName[sI].mName );
printf( "VALUE : %lld\n\n", aVSysstat[sI].mValue );
}
printf( "\n" );
}
void printVSesstat( ABIVSesstat *aVSesstat, int aRowCount, ABIStatName *aStatName, int aStatNameRowCount )
{
int sI, sJ;
for( sI = 0; sI < aRowCount; sI++ )
{
sJ = sI % aStatNameRowCount;
printf( "SID : %d\n", aVSesstat[sI].mSID );
printf( "SEQNUM : %d\n", aStatName[sJ].mSeqNum );
printf( "NAME : %s\n", aStatName[sJ].mName );
printf( "VALUE : %lld\n\n", aVSesstat[sI].mValue );
}
printf( "\n" );
}
void printStatName( ABIStatName *aStatName, int aStatNameRowCount )
{
int sI;
for( sI = 0; sI < aStatNameRowCount; sI++ )
{
printf( "SEQNUM : %d\n", aStatName[sI].mSeqNum );
printf( "NAME : %s\n\n", aStatName[sI].mName );
}
printf( "\n" );
}
void errorHandling( int aErrCode )
{
const char *sErrMsg = NULL;
ABIGetErrorMessage( aErrCode, &sErrMsg );
printf( "%s\n\n\n", sErrMsg );
exit(1);
}
sample_4.c#
ABIGetEventName, ABIGetVSystemEvent, ABIGetVSessionEvent, ABIGetVSessionEventBySID 함수를 사용해서 Altibase 시스템과 세션들의 대기 이벤트들에 대한 통계정보를 조회하는 예제 프로그램이다.
#include <stdio.h>
#include <stdlib.h>
#include <altibaseMonitor.h>
void printVSystemEvent( ABIVSystemEvent *aVSystemEvent, int aRowCount, ABIEventName *aEventName );
void printVSessionEvent( ABIVSessionEvent *aVSessionEvent, int aRowCount, ABIEventName *aEventName, int aEventNameRowCount );
void printEventName( ABIEventName *aEventName, int aEventNameRowCount );
void errorHandling( int aErrCode );
int main()
{
ABIVSystemEvent *sVSystemEvent = NULL;
ABIVSessionEvent *sVSessionEvent = NULL;
ABIEventName *sEventName = NULL;
int sEventNameRowCount = 0;
int sRc = 0;
// Test ABIInitialize
sRc = ABIInitialize();
if( sRc < 0 )
{
// Error handling
errorHandling( sRc );
}
// Test ABICheckConnection
if( ABICheckConnection() != -1 )
{
// Test ABIGetEventName
sEventNameRowCount = ABIGetEventName( &sEventName );
if( sEventNameRowCount >= 0 )
{
printf( "********************************\n" );
printf( "* Event Name *\n" );
printf( "********************************\n" );
printEventName( sEventName, sEventNameRowCount );
}
else
{
// Error handling
errorHandling( sEventNameRowCount );
}
// Test ABIGetVSystemEvent
sRc = ABIGetVSystemEvent( &sVSystemEvent );
if( sRc >= 0 )
{
printf( "************************************\n" );
printf( "* V$System_Event *\n" );
printf( "************************************\n" );
printVSystemEvent( sVSystemEvent, sRc, sEventName );
sRc = 0;
}
else
{
// Error handling
errorHandling( sRc );
}
// Test ABIGetVSessionEvent
sRc = ABIGetVSessionEvent( &sVSessionEvent );
if( sRc >= 0 )
{
printf( "*************************************\n" );
printf( "* V$Session_Event *\n" );
printf( "*************************************\n" );
printVSessionEvent( sVSessionEvent, sRc, sEventName, sEventNameRowCount );
sRc = 0;
}
else
{
// Error handling
errorHandling( sRc );
}
// Test ABIGetVSessionEventBySID
sRc = ABIGetVSessionEventBySID( &sVSessionEvent, sVSessionEvent[0].mSID );
if( sRc >= 0 )
{
printf( "*******************************************************\n" );
printf( "* V$Session_Event [ specified SID ] *\n" );
printf( "*******************************************************\n" );
printVSessionEvent( sVSessionEvent, sRc, sEventName, sEventNameRowCount );
sRc = 0;
}
else
{
// Error handling
errorHandling( sRc );
}
}
else
{
// Exception handling
}
// Test ABIFinalize
sRc = ABIFinalize();
if( sRc < 0 )
{
// Error handling
errorHandling( sRc );
}
return 0;
}
void printVSystemEvent( ABIVSystemEvent *aVSystemEvent, int aRowCount, ABIEventName *aEventName )
{
int sI;
for( sI = 0; sI < aRowCount; sI++ )
{
printf( "EVENT : %s\n", aEventName[sI].mEvent );
printf( "TOTAL_WAITS : %lld\n", aVSystemEvent[sI].mTotalWaits );
printf( "TOTAL_TIMEOUTS : %lld\n", aVSystemEvent[sI].mTotalTimeOuts );
printf( "TIME_WAITED : %lld\n", aVSystemEvent[sI].mTimeWaited );
printf( "AVERAGE_WAIT : %lld\n", aVSystemEvent[sI].mAverageWait );
printf( "TIME_WAITED_MICRO : %lld\n", aVSystemEvent[sI].mTimeWaitedMicro );
printf( "EVENT_ID : %d\n", aEventName[sI].mEventID );
printf( "WAIT_CLASS_ID : %d\n", aEventName[sI].mWaitClassID );
printf( "WAIT_CLASS : %s\n\n", aEventName[sI].mWaitClass );
}
printf( "\n" );
}
void printVSessionEvent( ABIVSessionEvent *aVSessionEvent, int aRowCount, ABIEventName *aEventName, int aEventNameRowCount )
{
int sI, sJ;
for( sI = 0; sI < aRowCount; sI++ )
{
sJ = sI % aEventNameRowCount;
printf( "SID : %d\n", aVSessionEvent[sI].mSID );
printf( "EVENT : %s\n", aEventName[sJ].mEvent );
printf( "TOTAL_WAITS : %lld\n", aVSessionEvent[sI].mTotalWaits );
printf( "TOTAL_TIMEOUTS : %lld\n", aVSessionEvent[sI].mTotalTimeOuts );
printf( "TIME_WAITED : %lld\n", aVSessionEvent[sI].mTimeWaited );
printf( "AVERAGE_WAIT : %lld\n", aVSessionEvent[sI].mAverageWait );
printf( "MAX_WAIT : %lld\n", aVSessionEvent[sI].mMaxWait );
printf( "TIME_WAITED_MICRO : %lld\n", aVSessionEvent[sI].mTimeWaitedMicro );
printf( "EVENT_ID : %d\n", aEventName[sJ].mEventID );
printf( "WAIT_CLASS_ID : %d\n", aEventName[sJ].mWaitClassID );
printf( "WAIT_CLASS : %s\n\n", aEventName[sJ].mWaitClass );
}
printf( "\n" );
}
void printEventName( ABIEventName *aEventName, int aEventNameRowCount )
{
int sI;
for( sI = 0; sI < aEventNameRowCount; sI++ )
{
printf( "EVENT_ID : %d\n", aEventName[sI].mEventID );
printf( "EVENT : %s\n", aEventName[sI].mEvent );
printf( "WAIT_CLASS_ID : %d\n", aEventName[sI].mWaitClassID );
printf( "WAIT_CLASS : %s\n\n", aEventName[sI].mWaitClass );
}
printf( "\n" );
}
void errorHandling( int aErrCode )
{
const char *sErrMsg = NULL;
ABIGetErrorMessage( aErrCode, &sErrMsg );
printf( "%s\n\n\n", sErrMsg );
exit(1);
}
sample_5.c#
ABIGetSqlText, ABIGetLockPairBetweenSessions, ABIGetLockWaitSessionCount 함수를 사용하는 예제 프로그램이다.
#include <stdio.h>
#include <stdlib.h>
#include <altibaseMonitor.h>
void printSqlText( ABISqlText *aSqlText );
void printLockPairBetweenSessions( ABILockPair *aLockPair, int aRowCount );
void errorHandling( int aErrCode );
int main()
{
ABISqlText *sSqlText = NULL;
ABILockPair *sLockPair = NULL;
int sRc = 0;
// Test ABIInitialize
sRc = ABIInitialize();
if( sRc < 0 )
{
// Error handling
errorHandling( sRc );
}
// Test ABICheckConnection
if( ABICheckConnection() != -1 )
{
// Test ABIGetSqlText
sRc = ABIGetSqlText( &sSqlText, 2 );
if( sRc >= 0 )
{
printf( "******************************\n" );
printf( "* SQL Text *\n" );
printf( "******************************\n" );
printSqlText( sSqlText );
sRc = 0;
}
else
{
// Error handling
errorHandling( sRc );
}
// Test ABIGetLockPairBetweenSessions
sRc = ABIGetLockPairBetweenSessions( &sLockPair );
if( sRc >= 0 )
{
printf( "************************************************\n" );
printf( "* Lock Pair Between Sessions *\n" );
printf( "************************************************\n" );
printLockPairBetweenSessions( sLockPair, sRc );
sRc = 0;
}
else
{
// Error handling
errorHandling( sRc );
}
// Test ABIGetLockWaitSessionCount
sRc = ABIGetLockWaitSessionCount();
if( sRc >= 0 )
{
printf( "*********************************************\n" );
printf( "* Lock Wait Session Count *\n" );
printf( "*********************************************\n" );
printf( "Lock Wait Session Count : %d\n\n\n", sRc );
sRc = 0;
}
else
{
// Error handling
errorHandling( sRc );
}
}
else
{
// Exception handling
}
// Test ABIFinalize
sRc = ABIFinalize();
if( sRc < 0 )
{
// Error handling
errorHandling( sRc );
}
return 0;
}
void printSqlText( ABISqlText *aSqlText )
{
printf( "SQL TEXT : %s\n", aSqlText->mSqlText );
printf( "TEXT LENGTH : %d\n\n\n", aSqlText->mTextLength );
printf( "QUERY START TIME : %d\n\n\n", aSqlText->mQueryStartTime );
printf( "EXECUTE FLAG : %d\n\n\n", aSqlText->mExecuteFlag );
printf( "PARSE TIME : %lld\n\n\n", aSqlText->mParseTime);
printf( "SOFT PREPARE TIME : %lld\n\n\n", aSqlText->mSoftPrepareTime);
printf( "LAST QUERY START TIME : %d\n\n\n", aSqlText->mLastQueryStartTime);
printf( "EXECUTE TIME : %lld\n\n\n", aSqlText->mExecuteTime);
printf( "FETCH TIME : %lld\n\n\n", aSqlText->mFetchTime);
printf( "FETCH START TIME : %d\n\n\n", aSqlText->mFetchStartTime);
printf( "TOTAL TIME : %lld\n\n\n", aSqlText->mTotalTime);
printf( "VALIDATE TIME : %lld\n\n\n", aSqlText->mValidateTime);
printf( "OPTIMIZE TIME : %lld\n\n\n", aSqlText->mOptimizeTime);
}
void printLockPairBetweenSessions( ABILockPair *aLockPair, int aRowCount )
{
int sI;
for( sI = 0; sI < aRowCount; sI++ )
{
printf( "HOLDER : %d,\t\tWAITER : %d\n", aLockPair[sI].mHolderSID, aLockPair[sI].mWaiterSID );
}
printf( "\n\n" );
}
void errorHandling( int aErrCode )
{
const char *sErrMsg = NULL;
ABIGetErrorMessage( aErrCode, &sErrMsg );
printf( "%s\n\n\n", sErrMsg );
exit(1);
}
sample_6.c#
ABIGetDBInfo, ABIGetReadCount 함수를 사용하는 예제 프로그램이다.
#include <stdio.h>
#include <stdlib.h>
#include <altibaseMonitor.h>
void printDBInfo( ABIDBInfo *aDBInfo );
void printReadCount( ABIReadCount *aReadCount );
void errorHandling( int aErrCode );
int main()
{
ABIDBInfo *sDBInfo = NULL;
ABIReadCount *sReadCount = NULL;
int sRc = 0;
// Testing ABIInitialize
sRc = ABIInitialize();
if( sRc < 0 )
{
// Error handling
errorHandling( sRc );
}
// Testing ABICheckConnection()
if( ABICheckConnection() != -1 )
{
// Testing ABIGetDBInfo
sRc = ABIGetDBInfo( &sDBInfo );
if( sRc >= 0 )
{
printf( "*****************************\n" );
printf( "* DB Info *\n" );
printf( "*****************************\n" );
printDBInfo( sDBInfo );
sRc = 0;
}
else
{
// Error handling
errorHandling( sRc );
}
// Testing ABIGetReadCount
sRc = ABIGetReadCount( &sReadCount );
if( sRc >= 0 )
{
printf( "********************************\n" );
printf( "* Read Count *\n" );
printf( "********************************\n" );
printReadCount( sReadCount );
sRc = 0;
}
else
{
// Error handling
errorHandling( sRc );
}
}
else
{
// Exception handling
}
// Testing ABIFinalize
sRc = ABIFinalize();
if( sRc < 0 )
{
// Error handling
errorHandling( sRc );
}
return 0;
}
void printDBInfo( ABIDBInfo *aDBInfo )
{
printf( "DB NAME : %s\n", aDBInfo->mDBName );
printf( "VERSION : %s\n\n\n", aDBInfo->mDBVersion );
}
void printReadCount( ABIReadCount *aReadCount )
{
printf( "Logical Read Count : %d\n", aReadCount->mLogicalReadCount );
printf( "Physical Read Count : %d\n\n\n", aReadCount->mPhysicalReadCount );
}
void errorHandling( int aErrCode )
{
const char *sErrMsg = NULL;
ABIGetErrorMessage( aErrCode, &sErrMsg );
printf( "%s\n\n\n", sErrMsg );
exit(1);
}
sample_7.c#
pthread_mutex_t 타입의 전역 변수를 사용하여 두 쓰레드에서 ABIGetVSession와 ABIGetSessionCount 함수 호출을 동기화하는 예제 프로그램이다.
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#include <unistd.h>
#include <altibaseMonitor.h>
#define LOOP_COUNT 1000
pthread_mutex_t gMutex;
void *call_ABIGetVSession( void *aArgs );
void *call_ABIGetSessionCount( void *aArgs );
void errorHandling( int aErrCode );
int main()
{
pthread_t sThread[2];
int sRc = 0;
sRc = ABIInitialize();
if( sRc < 0 )
{
// Error handling
errorHandling( sRc );
}
sRc = pthread_mutex_init( &gMutex, NULL );
if( sRc != 0 )
{
printf( "Mutex init" );
exit(1);
}
sRc = pthread_create( &( sThread[0] ), NULL, call_ABIGetVSession, NULL );
if( sRc != 0 )
{
printf( "Create thread_1 [ Calling ABIGetVSession ]" );
exit(1);
}
sRc = pthread_create( &( sThread[1] ), NULL, call_ABIGetSessionCount, NULL );
if( sRc != 0 )
{
printf( "Create thread_2 [ Calling ABIGetSessionCount ]" );
exit(1);
}
pthread_join( sThread[0], NULL );
pthread_join( sThread[1], NULL );
pthread_mutex_destroy( &gMutex );
sRc = ABIFinalize();
if( sRc < 0 )
{
// Error handling
errorHandling( sRc );
}
return 0;
}
void *call_ABIGetVSession( void *aArgs )
{
ABIVSession *sVSession = NULL;
int sRc = 0;
int sI;
for( sI = 0; sI < LOOP_COUNT; sI++ )
{
pthread_mutex_lock( &gMutex );
sRc = ABIGetVSession( &sVSession, 1 );
pthread_mutex_unlock( &gMutex );
if( sRc < 0 )
{
// Error handling
errorHandling( sRc );
}
sleep( 0.05 );
}
return NULL;
}
void *call_ABIGetSessionCount( void *aArgs )
{
int sRc = 0;
int sI;
for( sI = 0; sI < LOOP_COUNT; sI++ )
{
pthread_mutex_lock( &gMutex );
sRc = ABIGetSessionCount( 1 );
pthread_mutex_unlock( &gMutex );
if( sRc < 0 )
{
// Error handling
errorHandling( sRc );
}
}
return NULL;
}
void errorHandling( int aErrCode )
{
const char *sErrMsg = NULL;
ABIGetErrorMessage( aErrCode, &sErrMsg );
printf( "%s\n\n\n", sErrMsg );
exit(1);
}
sample_8.c#
ABIGetVSessionWait, ABIGetVSessionWaitBySID 함수를 사용해서 Altibase 서버에 접속중인 세션들의 대기 이벤트 정보를 조회하는 예제 프로그램이다.
#include <stdio.h>
#include <stdlib.h>
#include <altibaseMonitor.h>
void printVSessionWait( ABIVSessionWait *aVSessionWait, int aRowCount );
void errorHandling( int aErrCode );
int main()
{
ABIVSessionWait *sVSessionWait = NULL, *sVSessionWaitBySID = NULL;
int sRc = 0;
// Test ABIInitialize
sRc = ABIInitialize();
if( sRc < 0 )
{
// Error handling
errorHandling( sRc );
}
// Test ABICheckConnection
if( ABICheckConnection() != -1 )
{
/*
IF the second argument sets to
0 - Return all session information.
1 - Return executing session information only.
*/
// Test ABIGetVSessionWait
sRc = ABIGetVSessionWait( &sVSessionWait );
if( sRc >= 0 )
{
printf( "************************************\n" );
printf( "* V$Session_Wait *\n" );
printf( "************************************\n" );
printVSessionWait( sVSessionWait, sRc );
sRc = 0;
}
else
{
// Error handling
errorHandling( sRc );
}
// Test ABIGetVSessionWaitBySID
sRc = ABIGetVSessionWaitBySID( &sVSessionWaitBySID, sVSessionWait[0].mSID );
if( sRc >= 0 )
{
printf( "******************************************************\n" );
printf( "* V$Session_Wait [ specified SID ] *\n" );
printf( "******************************************************\n" );
printVSessionWait( sVSessionWaitBySID, sRc );
sRc = 0;
}
else
{
// Error handling
errorHandling( sRc );
}
}
else
{
// Exception handling
}
// Test ABIFinalize
sRc = ABIFinalize();
if( sRc < 0 )
{
// Error handling
errorHandling( sRc );
}
return 0;
}
void printVSessionWait( ABIVSessionWait *aVSessionWait, int aRowCount )
{
int sI;
for( sI = 0; sI < aRowCount; sI++ )
{
printf( "SID : %d\n", aVSessionWait[sI].mSID );
printf( "SEQNUM : %d\n", aVSessionWait[sI].mSeqNum );
printf( "P1 : %lld\n", aVSessionWait[sI].mP1 );
printf( "P2 : %lld\n", aVSessionWait[sI].mP2 );
printf( "P3 : %lld\n", aVSessionWait[sI].mP3 );
printf( "WAIT_CLASS_ID : %d\n", aVSessionWait[sI].mWaitClassID );
printf( "WAIT_TIME : %lld\n", aVSessionWait[sI].mWaitTime );
printf( "SECOND_IN_TIME : %lld\n\n", aVSessionWait[sI].mSecondInTime );
}
printf( "\n" );
}
void errorHandling( int aErrCode )
{
const char *sErrMsg = NULL;
ABIGetErrorMessage( aErrCode, &sErrMsg );
printf( "%s\n\n\n", sErrMsg );
exit(1);
}
sample_9.c#
ABIGetErrorMessage 함수를 사용해서 에러 메시지를 검사하는 예제 프로그램이다.
#include <stdio.h>
#include <stdlib.h>
#include <altibaseMonitor.h>
void printErrorMessage( int aErrCode, const char *aErrMsg );
void errorHandling( int aErrCode );
int main()
{
int sI;
int sRc = 0;
const char *sErrMsg = NULL;
// Test ABIInitialize
sRc = ABIInitialize();
if( sRc < 0 )
{
// Error handling
errorHandling( sRc );
}
// Test ABICheckConnection
if( ABICheckConnection() != -1 )
{
printf( "***********************************\n" );
printf( "* Error Message *\n" );
printf( "***********************************\n" );
for( sI = -21; sI < 0; sI++ )
{
// Test ABIGetErrorMessage
ABIGetErrorMessage( sI, &sErrMsg );
printErrorMessage( sI, sErrMsg );
}
printf( "\n" );
}
else
{
// Exception handling
}
// Test ABIFinalize
sRc = ABIFinalize();
if( sRc < 0 )
{
// Error handling
errorHandling( sRc );
}
return 0;
}
void printErrorMessage( int aErrCode, const char *aErrMsg )
{
printf( "Error Code : %d\n", aErrCode );
printf( "%s\n\n", aErrMsg );
}
void errorHandling( int aErrCode )
{
const char *sErrMsg = NULL;
ABIGetErrorMessage( aErrCode, &sErrMsg );
printf( "%s\n\n\n", sErrMsg );
exit(1);
}
sample_10.c#
ABIGetRepGap, ABIGetRepSentLogCount 함수를 사용하는 예제 프로그램이다.
#include <stdio.h>
#include <stdlib.h>
#include <altibaseMonitor.h>
void printRepGap( ABIRepGap *aRepGap, int aRowCount );
void printRepSentLogCount( ABIRepSentLogCount *aRepSentLogCount, int aRowCount );
void errorHandling( int aErrCode );
int main()
{
ABIRepGap *sRepGap = NULL;
ABIRepSentLogCount *sRepSentLogCount = NULL;
int sRc = 0;
// Test ABIInitialize
sRc = ABIInitialize();
if( sRc < 0 )
{
// Error handling
errorHandling( sRc );
}
// Test ABICheckConnection
if( ABICheckConnection() != -1 )
{
// Test ABIRepGap
sRc = ABIGetRepGap( &sRepGap );
if( sRc >= 0 )
{
printf( "*******************************\n" );
printf( "* RepGap *\n" );
printf( "*******************************\n" );
printRepGap( sRepGap, sRc );
sRepGap = NULL;
sRc = 0;
}
else
{
// Error handling
errorHandling( sRc );
}
// Test ABIGetRepSentLogCount
sRc = ABIGetRepSentLogCount( &sRepSentLogCount );
if( sRc >= 0 )
{
printf( "***********************************************\n" );
printf( "* RepSentLogCount *\n" );
printf( "***********************************************\n" );
printRepSentLogCount( sRepSentLogCount, sRc );
sRepSentLogCount = NULL;
sRc = 0;
}
else
{
// Error handling
errorHandling( sRc );
}
}
else
{
// Exception handling
}
// Test ABIFinalize
sRc = ABIFinalize();
if( sRc < 0 )
{
// Error handling
errorHandling( sRc );
}
return 0;
}
void printRepGap( ABIRepGap *aRepGap, int aRowCount )
{
int sI;
for( sI = 0; sI < aRowCount; sI++ )
{
printf( "REP_NAME : %s\n", aRepGap[sI].mRepName );
printf( "REP_GAP : %lld\n", aRepGap[sI].mRepGap );
}
printf( "\n" );
}
void printRepSentLogCount( ABIRepSentLogCount *aRepSentLogCount, int aRowCount )
{
int sI;
for( sI = 0; sI < aRowCount; sI++ )
{
printf( "REP_NAME : %s\n", aRepSentLogCount[sI].mRepName );
printf( "TABLE_NAME : %s\n", aRepSentLogCount[sI].mTableName );
printf( "INSERT_LOG_COUNT : %d\n", aRepSentLogCount[sI].mInsertLogCount );
printf( "DELETE_LOG_COUNT : %d\n", aRepSentLogCount[sI].mDeleteLogCount );
printf( "UPDATE_LOG_COUNT : %d\n", aRepSentLogCount[sI].mUpdateLogCount );
}
printf( "\n" );
}
void errorHandling( int aErrCode )
{
const char *sErrMsg = NULL;
ABIGetErrorMessage( aErrCode, &sErrMsg );
printf( "%s\n\n\n", sErrMsg );
exit(1);
}