콘텐츠로 이동

2. 데이터 타입#

이 장은 Monitoring API와 함께 사용되는 데이터 타입에 대해서 설명한다.

데이터 구조체#

이 절은 Monitoring API의 함수를 호출할 때 인자로 사용하는 데이터 구조체를 설명한다.

ABIVSession#

V$SESSION 성능 뷰의 조회 결과를 저장하는 데 사용되는 데이터 구조체이다.

이 구조체는 아래 표와 같은 멤버를 가진다. 각 칼럼의 의미는 General Reference에서 V$SESSION 성능 뷰를 참고한다.

멤버 타입 V$SESSION의 대응하는 칼럼
mID int ID
mTransID long long TRANS_ID
mTaskState[11+1] char TASK_STATE
mCommName[64+1] char COMM_NAME
mXASessionFlag int XA_SESSION_FLAG
mXAAssociateFlag int XA_ASSOCIATE_FLAG
mQueryTimeLimit int QUERY_TIME_LIMIT
mDdlTimeLimit int DDL_TIME_LIMIT
mFetchTimeLimit int FETCH_TIME_LIMIT
mUTransTimeLimit int UTRANS_TIME_LIMIT
mIdleTimeLimit int IDLE_TIME_LIMIT
mIdleStartTime int IDLE_START_TIME
mActiveFlag int ACTIVE_FLAG
mOpenedStmtCount int OPENED_STMT_COUNT
mClientPackageVersion[40+1] char CLIENT_PACKAGE_VERSION
mClientProtocolVersion[40+1] char CLIENT_PROTOCOL_VERSION
mClientPID long long CLIENT_PID
mClientType[40+1] char CLIENT_TYPE
mClientAppInfo[128+1] char CLIENT_APP_INFO
mClientNls[40+1] char CLIENT_NLS
mDBUserName[40+1] char DB_USERNAME
mDBUserID int DB_USERID
mDefaultTbsID long long DEFAULT_TBSID
mDefaultTempTbsID long long DEFAULT_TEMP_TBSID
mSysDbaFlag int SYSDBA_FLAG
mAutoCommitFlag int AUTOCOMMIT_FLAG
mSessionState[13+1] char SESSION_STATE
mIsolationLevel int ISOLATION_LEVEL
mReplicationMode int REPLICATION_MODE
mTransactionMode int TRANSACTION_MODE
mCommitWriteWaitMode int COMMIT_WRITE_WAIT_MODE
mOptimizerMode int OPTIMIZER_MODE
mHeaderDisplayMode int HEADER_DISPLAY_MODE
mCurrentStmtID int CURRENT_STMT_ID
mStackSize int STACK_SIZE
mDefaultDateFormat[64+1] char DEFAULT_DATE_FORMAT
mTrxUpdateMaxLogSize long long TRX_UPDATE_MAX_LOGSIZE
mParallelDmlMode int PARALLEL_DML_MODE
mLoginTime int LOGIN_TIME
mFailOverSource[64+1] char FAILOVER_SOURCE

ABIVSysstat#

데이터베이스 시스템 전체의 통계 정보를 보여주는 V$SYSSTAT 성능 뷰의 조회 결과를 저장하는 데 사용되는 데이터 구조체이다.

이 구조체는 아래 표와 같은 멤버를 가진다. 각 칼럼의 의미는 General Reference에서 V$SYSSTAT 성능 뷰를 참고한다.

멤버 타입 V$SYSSTAT의 대응하는 칼럼
mValue long long VALUE

ABIVSesstat#

세션 별 통계 정보를 보여주는 V$SESSTAT 성능 뷰의 조회 결과를 저장하는 데 사용되는 데이터 구조체이다.

이 구조체는 아래 표와 같은 멤버를 가진다. 각 칼럼의 의미는 General Reference에서 V$SESSTAT 성능 뷰를 참고한다.

멤버 타입 V$SESSTAT의 대응하는 칼럼
mSID int SID
mValue long long VALUE

ABIStatName#

V$SYSSTAT 또는 V$SESSTAT 성능 뷰의 고정 칼럼들의 조회 결과를 저장하는 데 사용되는 데이터 구조체이다.

이 구조체는 아래 표와 같은 멤버를 가진다. 각 칼럼의 의미는 General Reference에서 V$SYSSTAT와 V$SESSTAT 성능 뷰를 참고한다.

멤버 타입 V$SYSSTAT 또는 V$SESSTAT의 대응하는 칼럼
mSeqNum int SEQNUM
mName[128+1] char NAME

ABIVSystemEvent#

V$SYSTEM_EVENT 성능 뷰의 조회 결과를 저장하는 데 사용되는 데이터 구조체이다.

이 구조체는 아래 표와 같은 멤버를 가진다. 각 칼럼의 의미는 General Reference에서 V$SYSTEM_EVENT 성능 뷰를 참고한다.

멤버 타입 V$SYSTEM_EVENT의 대응하는 칼럼
mTotalWaits long long TOTAL_WAITS
mTotalTimeOuts long long TOTAL_TIMEOUTS
mTimeWaited long long TIME_WAITED
mAverageWait long long AVERAGE_WAIT
mTimeWaitedMicro long long TIME_WAITED_MICRO

ABIVSessionEvent#

V$SESSION_EVENT 성능 뷰의 조회 결과를 저장하는 데 사용되는 데이터 구조체이다.

이 구조체는 아래 표와 같은 멤버를 가진다. 각 칼럼의 의미는 General Reference에서 V$SESSION _EVENT 성능 뷰를 참고한다.

멤버 타입 V$SESSION_EVENT의 대응하는 칼럼
mSID int SID
mTotalWaits long long TOTAL_WAITS
mTotalTimeOuts long long TOTAL_TIMEOUTS
mTimeWaited long long TIME_WAITED
mAverageWait long long AVERAGE_WAIT
mMaxWait long long MAX_WAIT
mTimeWaitedMicro long long TIME_WAITED_MICRO

ABIEventName#

V$SYSTEM_EVENT 또는 V$SESSION_EVENT 성능 뷰의 고정 칼럼들의 조회 결과를 저장하는 데 사용되는 데이터 구조체이다.

이 구조체는 아래 표와 같은 멤버를 가진다. 각 칼럼의 의미는 General Reference에서 V$SYSTEM_EVENT와 V$SESSION_EVENT 성능 뷰를 참고한다.

멤버 타입 V$SYSTEM_EVENT 또는 V$SESSION_EVENT의 대응하는 칼럼
mEventID int EVENT_ID
mEvent[128+1] char EVENT
mWaitClassID int WAIT_CLASS_ID
mWaitClass[128+1] char WAIT_CLASS

ABIVSessionWait#

V$SESSION_WAIT 성능 뷰의 조회 결과를 저장하는 데 사용되는 데이터 구조체이다.

이 구조체는 아래 표와 같은 멤버를 가진다. 각 칼럼의 의미는 General Reference에서 V$SESSION_WAIT 성능 뷰를 참고한다.

멤버 타입 V$SESSION_WAIT의 대응하는 칼럼
mSID int SID
mSeqNum int SEQNUM
mP1 long long P1
mP2 long long P2
mP3 long long P3
mWaitClassID int WAIT_CLASS_ID
mWaitTime long long WAIT_TIME
mSecondInTime long long SECOND_IN_TIME

ABISqlText#

Statement ID로 SQL문 텍스트, 쿼리 시작 시간, 쿼리의 수행 여부를 조회하는 데 사용되는 데이터 구조체이다.

이 구조체는 아래 표와 같은 멤버를 가진다.

멤버 타입 설명
mSessID int 세션 ID
mStmtID int Statement ID
mSqlText char * SQL문 텍스트
mTextLength int mSqlText에 저장된 문자열의 길이
mQueryStartTime int 쿼리 시작 시간
mExecuteFlag int 쿼리의 수행 여부 0 : 수행됨 1: 수행안됨
mParseTime long 파싱 소요 시간
mSoftPrepareTime long Prepare 과정중 SQL Plan Cache에서 plan 탐색 시간
mLastQueryStartTime int 가장 최근의 쿼리 시작 시간
mExecuteTime long 실행 소요 시간
mFetchTime long Fetch 소요 시간
mFetchStartTime int 현재 Fetch 시작 시간
mTotalTime long 총 경과 시간
mValidateTime long 정당성 검사 소요 시간
mOptimizeTime long 최적화 소요 시간

ABILockPair#

락(Lock)을 잡고 있는 세션과 이 락을 획득하기 위해 대기하는 세션의 쌍을 조회하는 데 사용되는 데이터 구조체이다.

이 구조체는 아래 표와 같은 멤버를 가진다.

멤버 타입 설명
mHolderSID int 락을 잡고 있는 세션의 ID
mWaiterSID int 락을 잡고 있는 세션(mHolderSID)으로 인해 대기중인 세션의 ID
mLockDesc[32+1] char 대기중인 세션(mWaiterSID)이 획득하고자 하는 락 모드

ABIDBInfo#

데이터베이스의 이름, 버전 번호를 조회하는 데 사용되는 데이터 구조체이다.

이 구조체는 아래 표와 같은 멤버를 가진다.

멤버 타입 설명
mDBName[128+1] char 데이터베이스 이름
mDBVersion[128+1] char 데이터베이스 버전 번호

ABIReadCount#

Altibase 서버에서 발생한 데이터 페이지 읽기 횟수를 조회하는 데 사용되는 데이터 구조체이다.

이 구조체는 아래 표와 같은 멤버를 가진다.

멤버 타입 설명
mLogicalReadCount int 메모리 버퍼에서 데이터 페이지를 읽은 횟수
mPhysicalReadCount int 디스크에서 데이터 페이지를 읽은 횟수

ABIRepGap#

Altibase 서버에서 발생하는 이중화 송신자의 작업 로그 레코드와 가장 최근에 생성된 로그 레코드간의 차이를 조회하는데 사용되는 데이터 구조체이다.

이 구조체는 아래 표와 같은 멤버를 가진다.

멤버 타입 설명
mRepName[40+1] char 이중화 객체의 이름
mRepGap long long 마지막으로 전송된 로그 레코드의 번호(REP_LAST_SN)와 현재 전송중인 로그 레코드(REP_SN)의 차이

ABIRepSentLogCount#

Altibase 서버에서 이중화 송신자가 전송한 로그의 개수를 조회하는데 사용되는 데이터 구조체이다.

이 구조체는 아래 표와 같은 멤버를 가진다.

멤버 타입 설명
mRepName[40+1] char 이중화 객체의 이름
mTableName[128+1] char 테이블 객체의 이름
mInsertLogCount int INSERT 로그의 개수
mDeleteLogCount int DELETE 로그의 개수
mUpdateLogCount int UPDATE 로그의 개수


열거형#

Monitoring API 애플리케이션 작성을 위해 제공되는 열거형은 다음과 같다.

enum ABIPropType#

Altibase 서버에 접속하기 위한 사용자와 사용자 암호를 지정하기 위해 ABISetProperty 함수와 함께 사용되는 열거형이다.

이 열거형의 원소는 다음과 같다

원소 설명
ABI_USER 사용자 이름을 지정할 때 사용된다.
ABI_PASSWD 사용자 암호를 지정할 때 사용된다.
ABI_LOGFILE Monitoring API에서 발생하는 에러 메시지가 기록되는 파일을 지정할 때 사용된다.


주의사항#

Monitoring API 함수 대부분은 위의 절에서 설명한 구조체를 인자로 가진다. 이 절은 이들 구조체를 인자로 사용할 때의 주의점을 설명한다.

애플리케이션에서는 구조체형 포인터 변수를 선언하고, 이 포인터의 주소값(이중 포인터)을 Monitoring API 함수에 전달해야 한다. Monitoring API 함수는 전달받은 포인터에 힙 메모리를 할당하고 데이터베이스에서 조회한 결과를 셋팅함으로써 애플리케이션에 결과 셋을 반환한다.

즉, Monitoring API용의 데이터 구조체를 위한 메모리 할당과 해제는 Monitoring API 함수 내부에서 이루어지므로, 애플리케이션에서는 직접 해당 구조체형 포인터에 메모리를 할당하거나 함수 수행 결과로 반환받은 메모리를 해제하지 않아야 한다.

아래 예제 코드에서 보듯이 애플리케이션에서는 ABIVSession 구조체형 포인터 변수를 선언할 뿐, sVSession에 메모리를 할당해서는 안 된다. 또한 함수 수행 후 sVSession에서 결과 값을 참조할 때 결과 셋의 로우 개수 내에서 배열 요소들을 액세스해야 한다.

ABIVSession *sVSession;
int sRowCount;

sRowCount = ABIGetVSession(  &sVSession, 0 );

/* sVSession에서 조회된 결과 참조하기 */
for (int i=0; i<sRowCount; i++)
{
    /* sVSession[i].mID; */
    /* sVSession[i].mTransID; */
}