DBMS 1

DA, SQL, DB보안 등 실무자를 위한 위한 DB기술 바이블!

유틸리티 API

작성자
dataonair
작성일
2021-02-14 17:00
조회
1044



제6장유틸리티 API




내용 목차






6.1. 헤더 파일

6.2. 구조체

6.3. 유틸리티 API 목록


6.3.1.TBConnect

6.3.2.TBDisconnect

6.3.3.TBExport

6.3.4.TBImport


Tibero에서는 유틸리티와 관련된 C와 C++ 함수를 제공하고 있다. 애플리케이션 프로그램 개발자는 유틸리티 API를 사용하여 기존에 명령 프롬프트에서 수행하던 유틸리티를 애플리케이션 프로그램에서 호출할 수 있다.




6.1. 헤더 파일




다음은 유틸리티 API가 사용하는 헤더 파일이다.

헤더 파일명 설명
tbutil.h 유틸리티 API를 선언하고 이와 관련된 구조체를 정의한다.정의할 구조체는 다음과 같다.

  • struct sqlstr
  • structTBExpImpMeta
  • structTBExportIn
  • structTBExportOut
  • structTBExportStruct
  • structTBImportIn
  • structTBImportOut
  • structTBImportStruct
sqlca.h 유틸리티 내부에서 발생한 에러 정보를 애플리케이션 프로그램에 전달하는 구조체를 선언한다. struct sqlca 구조체를 선언한다.
sqlcli.h ODBC 표준인 헤더 파일이며, 표준 API와 매크로를 정의한다.





6.2. 구조체




다음은 유틸리티 API에서 정의할 수 있는 구조체이다.

  • sqlstr 구조체

    필드 용도 타입 설명
    length 입력 SQLSMALLINT 문자열의 길이를 명시한다.
    data 입력 SQLCHAR * 문자열이 저장된 포인터를 명시한다.
  • TBExpImpMeta 구조체

    필드 용도 타입 설명
    fieldTerm 입력 SQLCHAR * 컬럼(필드)의 구분자로, 사용할 문자열을 명시한다.
    fieldTermLen 입력 SQLSMALLINT 컬럼(필드)의 구분자로, 사용할 문자열의 길이를 명시한다.
    lineTerm 입력 SQLCHAR * 레코드의 구분자로, 사용할 문자열을 명시한다.
    lineTermLen 입력 SQLSMALLINT 레코드의 구분자로, 사용할 문자열의 길이를 명시한다.
    enclStart 입력 SQLCHAR * 컬럼의 데이터를 감쌀 시작 문자열을 명시한다.시작 문자열을 큰따옴표(" ")로 명시하면, 컬럼의 데이터 맨 앞에 큰따옴표가 붙게 된다.
    enclStartLen 입력 SQLSMALLINT 컬럼의 데이터를 감쌀 시작 문자열의 길이를 명시한다.
    enclLen 입력 SQLCHAR * 컬럼의 데이터를 감쌀 종료 문자열을 명시한다.종료 문자열을 큰따옴표(" ")로 명시하면, 컬럼의 데이터 맨 뒤에 큰따옴표가 붙게 된다.
    enclEndLen 입력 SQLSMALLINT 컬럼의 데이터를 감쌀 종료 문자열의 길이를 명시한다.
    escape 입력 SQLCHAR * 컬럼의 데이터를 해석할 때, 필요한 ESCAPE 문자열을 명시한다. 단,TBImport구조체에서만 사용한다.
    escapeLen 입력 SQLSMALLINT 컬럼의 데이터를 해석할 때, 필요한 ESCAPE 문자열의 길이를 명시한다. 단,TBImport구조체에서만 사용한다.
  • TBExportIn 구조체

    필드 용도 타입 설명
    iMeta 입력 TBExpImpMeta * TBExpImpMeta 구조체의 포인터이다.데이터를 추출할 때 필요한 입력 메타데이터를 명시한다.
  • TBExportOut 구조체

    필드 용도 타입 설명
    oRowsExported 출력 SQLINTEGER 데이터 파일에 추출된 레코드의 개수가 기록된다.
  • TBExportStruct 구조체



    • 필드 용도 타입 설명
      piDataFileName 입력 SQLCHAR * 추출된 데이터가 저장될 파일의 경로명을 명시한다.
      iDataFileNameLen 입력 SQLSMALLINT 데이터 파일명의 길이를 명시한다.파일명이 NULL 문자로 종료된 경우, SQL_NTS를 명시한다.
      piActionString 입력 sqlstr * SELECT 문을 이용하여 대상 테이블 또는 뷰의 데이터를 지정한다. SELECT문에 명시한 컬럼의 순서대로 추출된 데이터가 저장된다.
      iFileType 입력 SQLSMALLINT 현재는 컬럼 구분자를 사용하는 형태인 SQL_DEL만 사용할 수 있다.
      piMsgFileName 입력 SQLCHAR * 데이터를 추출할 때 발생하는 에러와 경고 그리고 유용한 정보를 기록하는 메시지 파일명을 명시한다.
      iMsgFileNameLen 입력 SQLSMALLINT 메시지 파일명의 길이를 명시한다.파일명이 NULL 문자로 종료된 경우, SQL_NTS를 명시한다.
      piExportInfoIn 입력 TBExportIn * TBExportIn 구조체의 포인터이다.데이터를 추출할 때 필요한 입력 메타데이터를 명시한다.
      piExportInfoOut 입력 TBExportOut * TBExportOut 구조체의 포인터이다.데이터를 추출한 후에 발생한 결과정보를 저장한다.


  • TBImportIn 구조체

    필드 용도 타입 설명
    iMeta 입력 TBExpImpMeta * TBExpImpMeta 구조체의 포인터이다.데이터를 로드할 때 필요한 입력 메타데이터를 명시한다.
    iRowCount 입력 SQLINTEGER 로드할 레코드의 개수를 명시한다.사용자가 값을 0으로 지정한 경우, 데이터 파일의 모든 레코드를 로드한다.
    iSkipCount 입력 SQLINTEGER 데이터 파일에서 로드할 대상을 제외하기 위해 건너뛸 레코드의 개수를 명시한다.
    iCommitCount 입력 SQLINTEGER 데이터를 로드 중에 한 번씩 커밋하려고 할 때, 그 개수를 명시한다. 단, 성능적인 이슈로 사용자가 명시한 개수 단위로 커밋이 일어나지는 않는다.
    iErrorCount 입력 SQLINTEGER 사용자가 허용하는 에러 레코드의 개수이다. 데이터를 로드 중에 에러 레코드 개수가 허용치보다 많으면, 로드를 중단한다.
  • TBImportOut 구조체

    필드 용도 타입 설명
    oRowsRead 출력 SQLINTEGER 데이터 파일에서 읽은 레코드의 개수를 기록 align="left">oRowsSkipped 출력 SQLINTEGER 데이터 파일에서 건너뛴 레코드의 개수를 기록한다.
    oRowsInserted 출력 SQLINTEGER 해당 테이블 또는 뷰에 입력(INSERT 연산)된 레코드의 개수를 기록한다.
    oRowsUpdated 출력 SQLINTEGER 해당 테이블 또는 뷰에 수정(UPDATE 연산)된 레코드의 개수를 기록한다.
    oRowsRejected 출력 SQLINTEGER 데이터 로드에 실패한 레코드의 개수를 기록한다.
    oRowsCommitted 출력 SQLINTEGER 커밋에 성공한 레코드의 개수를 기록한다.
  • TBImportStruct 구조체

    • 필드 용도 타입 설명
      piDataFileName 입력 SQLCHAR * 로드할 데이터 파일의 경로명을 명시한다.
      iDataFileNameLen 입력 SQLSMALLINT 데이터 파일명의 길이를 명시한다.파일명이 NULL 문자로 종료된 경우, SQL_NTS를 명시한다.
      piActionString 입력 sqlstr * 로드할 대상 테이블과 컬럼을 명시하고, 상세한 메타데이터를 명시한 문자열이다.tbLoader유틸리티의 컨트롤 파일에서 사용하는 문자열과 동일한 문법이다. 이 문법에 대한 내용은tbLoader유틸리티의 컨트롤 파일의 형식을 참고한다.
      iFileType 입력 SQLSMALLINT 현재는 컬럼 구분자를 사용하는 형태인 SQL_DEL만 사용할 수 있다.
      piMsgFileName 입력 SQLCHAR * 데이터를 로드할 때 발생하는 에러와 경고 그리고 유용한 정보를 기록하는 메시지 파일명을 명시한다.
      iMsgFileNameLen 입력 SQLSMALLINT 메시지 파일명의 길이를 명시한다.파일명이 NULL 문자로 종료된 경우, SQL_NTS를 명시한다.
      piBadFileName 입력 SQLCHAR * 데이터를 로드할 때 에러가 발생한 데이터를 모아서 기록하는 오류 데이터 파일이다.
      iBadFileNameLen 입력 SQLSMALLINT 오류 데이터 파일명의 길이를 명시한다.파일명이 NULL 문자로 종료된 경우, SQL_NTS를 명시한다.
      iDPL 입력 BOOL 데이터를 로드할 때, Direct Path Load 방식의 사용 여부를 지정한다.
      piImportInfoIn 입력 TBImportIn * TBImportIn 구조체의 포인터이다.데이터를 로드할 때 필요한 입력 메타데이터를 지정한다.
      piImportInfoOut 입력 TBImportOut * TBImportOut 구조체의 포인터이다.데이터를 로드한 후에 발생한 결과정보를 로드한다.
      piImportInfoOut 입력 TBImportOut * TBImportOut 구조체의 포인터이다.데이터를 로드한 후에 발생한 결과정보를 로드한다.






6.3. 유틸리티 API 목록




다음은 유틸리티 API 목록이다.

함수 타입 함수 헤더 파일
데이터베이스 연결 TBConnect tbutil.h
데이터베이스 연결해제 TBDisconnect tbutil.h
데이터 추출 TBExport tbutil.h
데이터 로드 TBImport tbutil.h




6.3.1.TBConnect




데이터베이스 연결정보(SID, 사용자명, 패스워드)를 이용하여Tibero서버에 연결하는 함수이다.TBConnect함수의 세부 내용은 다음과 같다.

  • 문법
    SQLRETURN SQL_API
    TBConnect(SQLCHAR *dnsname, SQLCHAR *username, SQLCHAR *pwd, struct sqlca *pSqlca);
  • 파라미터

    파라미터 용도 설명
    dnsname 입력 tbdsn.tbr(또는tbnet_alias.tbr)파일에 정의된 SID이다.
    username 입력 사용자명을 지정한다.
    pwd 입력 패스워드를 지정한다.
    pSqlca 출력 반환 코드가 SQL_SUCCESS가 아닌 경우, 유틸리티 내부에서 발생한 에러정보를 포함한다.
  • 반환 코드

    반환 코드 설명
    SQL_SUCCESS 함수가 성공적으로 완료된 상태
    SQL_SUCCESS_WITH_INFO 함수가 성공적으로 완료되었으나, 경고 메시지가 있는 상태
    SQL_ERROR 치명적인 에러가 발생한 상태
  • 관련 함수







6.3.2.TBDisconnect




데이터베이스 연결정보(SID)에 해당하는Tibero서버와의 연결을 해제하는 함수이다.TBDisconnect함수의 세부 내용은 다음과 같다.

  • 문법
    SQLRETURN SQL_API
    TBDisconnect(SQLCHAR *dnsname, struct sqlca *pSqlca);
  • 파라미터

    파라미터 용도 설명
    dnsname 입력 tbdsn.tbr(또는tbnet_alias.tbr)파일에 정의된 SID이다.
    pSqlca 출력 반환 코드가 SQL_SUCCESS가 아닌 경우, 유틸리티 내부에서 발생한 에러정보를 포함한다.
  • 반환 코드

    반환 코드 설명
    SQL_SUCCESS 함수가 성공적으로 완료된 상태
    SQL_SUCCESS_WITH_INFO 함수가 성공적으로 완료되었으나, 경고 메시지가 있는 상태
    SQL_ERROR 치명적인 에러가 발생한 상태
  • 관련 함수







6.3.3.TBExport




데이터베이스에 존재하는 데이터를 외부 파일로 추출하는 함수이다. 외부 파일은 추출된 데이터를 텍스트 형태로 표시하며, 컬럼 구분자와 레코드 구분자를 이용하여 컬럼과 레코드를 추출한다. 이렇게 추출된 외부 파일은tbLoader유틸리티의 데이터 파일 형태를 취한다. 사용자는 SELECT 문을 이용하여 추출할 데이터를 선정할 수 있다. 단, 대상 테이블 또는 뷰의 SELECT 권한이 있어야 한다.TBExport함수의 세부 내용은 다음과 같다.

  • 문법
    SQLRETURN SQL_API
    TBExport(SQLINTEGER versionNumber, TBExportStruct *pParamStruct,
    struct sqlca *pSqlca);
  • 파라미터

    파라미터 용도 설명
    versionNumber 입력 유틸리티 라이브러리의 버전번호이다. 이 파라미터는 유틸리티 라이브러리가 변경될 것에 대비하여 하위 버전과의 호환성을 위해 존재한다.현재 버전번호는 1이다.
    pParamStruct 입출력 이 파라미터를 사용하여 추출할 대상 정보를 명시하고, 추출 후에는 결과정보를 받는다.자세한 정보는TBExportStruct 구조체를 참고한다.
    pSqlca 출력 반환 코드가 SQL_SUCCESS가 아닌 경우, 유틸리티 내부에서 발생한 에러 정보를 포함한다.
  • 반환 코드

    반환 코드 설명
    SQL_SUCCESS 함수가 성공적으로 완료된 상태
    SQL_SUCCESS_WITH_INFO 함수가 성공적으로 완료되었으나, 경고 메시지가 있는 상태
    SQL_ERROR 치명적인 에러가 발생한 상태
  • 예제
    #include "tbutil.h"

    #define DNS_NAME "DEFAULT"
    #define USER_NAME "SYS"
    #define PWD "tibero"

    int main(int argc, char *argv[]) {
    SQLRETURN rc = SQL_SUCCESS;
    SQLINTEGER versionNumber = 1;
    SQLCHAR dataFileName[256];
    SQLCHAR actionString[256];
    SQLCHAR msgFileName[256];
    SQLCHAR fieldTerm[5];
    SQLCHAR lineTerm[5];
    SQLCHAR enclStart[5];
    SQLCHAR enclEnd[5];

    struct sqlca ca = {"\0", 0, 0, {0, "\0"}, "\0",
    {0, 0, 0, 0, 0, 0}, "\0", "\0"};
    TBExportStruct exportStruct = {NULL, 0, NULL, NULL, NULL, 0, NULL,
    0, NULL, NULL};
    TBExportIn exportIn = {{NULL, 0, NULL, 0, NULL, 0, NULL, 0, NULL, 0}};
    TBExportOut exportOut = {0};

    rc= TBConnect((SQLCHAR *)DNS_NAME, (SQLCHAR *)USER_NAME, (SQLCHAR *)PWD, &ca);

    if (rc != SQL_SUCCESS) return -1;

    strcpy((char *)dataFileName, "./all_tables.dat");
    strcpy((char *)actionString, "select * from all_tables");
    strcpy((char *)msgFileName, "./all_tables.log");
    strcpy((char *)fieldTerm, ",");
    strcpy((char *)lineTerm, "\n");
    strcpy((char *)enclStart, "\);""
"