콘텐츠로 이동

5.기타 Utilities#

altiAudit#

개요#

감사가 Altibase 서버에서 수행 중이라면, \$ALTIBASE_HOME/trc 디렉토리에 기본적으로 감사 로그 파일이 생성되고 로그가 기록될 것이다. 감사 로그 파일의 위치는 AUDIT_LOG_DIR 프로퍼티로 변경 가능하다. 이 파일에는 사용자가 읽을 수 없는 바이너리 형태의 감사 로그가 기록되어 있다. altiAudit 유틸리티는 감사 로그 파일을 문자 형태로 변환하여 출력함으로써 사용자가 감사 로그를 분석할 수 있게 한다.

altiAudit [-s] {audit_log_file_name}

구문#

설명#

서버가 남긴 감사 로그를 문자 형태로 변환하여 출력한다.

-s 옵션을 사용해서 CSV 형태로 출력할 수도 있다.

사용예#

아래는 감사 로그를 일반 텍스트 형태로 출력하는 명령어이다.

$ altiAudit $ALTIBASE_HOME/trc/alti-1366989680-0.aud

아래와 같은 형태의 결과가 출력된다.

[2015/03/05 14:59:29]
Session Info 
  User Name        = SYS
  Session ID       = 1                   
  Client IP        = 127.0.0.1
  Client Type      = CLI-64LE
  Client App Info  = isql
  Action           = INSERT
  Auto Commit      = 1                        (0:non-autocommit 1:autocommit)

Query Info 
  Statement ID      = 65540               
  Transaction ID    = 150657              
  Execute result    = 4                       (0:failure 1:rebuild 2:retry 3:queue empty 4:success)
  Fetch result      = 2                       (0:failure 1:success 2:no result set)
  Success count     = 1                   
  Failure count     = 0                   
  Return code       = 0x02000
  Processed row     = 1                   
  Used memory       = 0                       bytes
  XA flag           = 0                       (0:non-XA 1:XA)

Query Elapsed Time 
  Total time        = 0                   
  Soft prepare time = 0                   
  Parse time        = 0                   
  Validation time   = 0                   
  Optimization time = 0                   
  Execution time    = 0                   
  Fetch time        = 0                   

SQL 
--------------------------------------------------------------------------------
insert into t1 values ('aaaa', 1)
-------------------------------------------------------------------------------- 

아래는 감사 로그를 CSV 형태로 출력하는 명령어이다.

$ altiAudit -s $ALTIBASE_HOME/trc/alti-1366989680-0.aud

아래와 같이 CSV 형태의 결과가 출력된다.

1425535169,SYS,1,127.0.0.1,CLI-64LE,isql,INSERT,1,65540,150657,4,2,1,0,1,0,0,0,0,0,0,0,0,0,"insert
into t1 values ('aaaa', 1)"

출력 항목#

출력 항목과 의미는 아래 표와 같다.

필드 이름 타입 설명
Session Info
User Name 문자열 세션에 접속한 사용자 이름
Session ID INTEGER 세션 ID
Client IP 문자열 클라이언트 IP 주소
Client Type 문자열 접속한 클라이언트의 타입
Client App Info 문자열 애플리케이션 정보
Action 문자열 실행된 구문의 종류
Auto Commit INTEGER 0: Non-auto commit mode 1: auto commit mode
Query Info
Statement ID INTEGER Statement ID
Transaction ID INTEGER 트랜잭션 ID
Execute result INTEGER 수행 결과 0: failure 1: rebuild 2: retry 3: query empty 4: success
Fetch result INTEGER Fetch 결과 0: failure 1: success 2: no result set
Success count INTEGER 감사 조건에 부합하는 구문이 성공한 횟수이다. BY SESSION 조건일 경우, 감사 조건에 부합하는 구문의 수행에 성공한 횟수의 누적 값이다. BY ACCESS 조건일 경우, 감사 조건에 부합하는 구문이 성공적으로 수행된 경우 1이 표시된다.
Failure count INTEGER 감사 조건에 부합하는 구문이 실패한 횟수이다. BY SESSION 조건일 경우, 감사 조건에 부합하는 구문의 수행에 실패한 횟수의 누적 값이다. BY ACCESS 조건일 경우, 감사 조건에 부합하는 구문의 수행이 실패한 경우 1이 표시된다.
Return code INTEGER 감사 조건에 부합하는 구문이 수행된 결과 코드이다. BY ACCESS 조건일 경우에만, 수행 결과가 표시된다.
Processed row INTEGER 처리된 레코드의 개수
Used memory INTEGER 사용된 메모리 (향후 확장 예정)
XA flag INTEGER 0: Non-XA 1: XA
Query Elapsed Time
Total time BIGINT 쿼리 수행에 소요된 총 시간
Soft prepare time BIGINT Prepare 수행에 소요된 시간
Parse time BIGINT 파싱 수행에 소요된 시간
Validation time BIGINT 정당성 검사에 소요된 시간
Optimization time BIGINT 최적화 수행에 소요된 시간
Execution time BIGINT 실행에 소요된 시간
Fetch time BIGINT Fetch 수행에 소요된 시간
SQL
문자열 실행된 SQL 구문

altibase#

개요#

‘altibase’는 Altibase의 모든 서비스를 관장하는 서버 프로세스를 실행하는 파일이다.

altibase {-v|n}

구문#

파라미터#

파라미터 설명
-v 설치되어 있는 Altibase 제품의 버전 정보를 출력한다.
-n Altibase를 포그라운드에서 수행한다.

설명#

‘altibase’는 Altibase의 모든 서비스를 관장하는 서버 프로세스의 실행 가능(executable) 파일이다.

Altibase를 구동하거나 종료하기 위해 이 커맨드를 직접 사용하면 안 된다. 대신에 iSQL에 SYSDBA 모드로 접속한 뒤, 구동이나 종료 명령을 사용하거나 server 커맨드를 사용해야 한다. server 커맨드는 실제로 Altibase 구동과 종료에 관련된 일련의 명령을 묶어놓은 쉘 스크립트이다. 관련 내용은 본 문서의 server 항목을 참조한다.

보다 자세한 Altibase의 구동 및 종료에 관한 내용은 iSQL User’s Manual이나 Getting Started Guide 를 참조한다.

iSQL로 구동된 Altibase 서버 프로세스는 백그라운드에서 운영된다. 반면, 쉘 프롬프트에서 altibase 커맨드를 -n옵션으로 수행할 경우 Altibase는 포그라운드에서 구동된다. 이는 Altibase 디버깅을 위한 용도로만 사용되며, 실 운영 시에는 사용하지 않도록 한다.

-v 옵션으로 altibase 커맨드를 실행하면 현재 설치된 Altibase 제품의 버전 정보를 출력한다.

참고사항#

Getting Started Guide

Administrator’s Manual

iSQL User’s Manual

altierr#

개요#

altierr은 Altibase 서버 에러 코드에 대한 상세한 설명을 검색하여 출력하는 유틸리티이다. 에러 번호나 에러 메시지 패턴을 이용하여 검색이 가능하다.

altierr {-w keyword pattern | [-n] error number}

구문#

파라미터#

파라미터 설명
-w 지정한 검색 패턴을 포함하는 에러 메시지를 찾는다.
검색 패턴을 포함하는 모든 에러 메시지를 출력한다.
-n 에러 번호를 사용하여 검색한다. 에러 번호는 16진수/양의 정수/음의 정수 형태로 입력 가능하다.
에러 코드와 정확히 일치하는 레코드만 검색된다.
에러 번호를 사용하여 검색할 경우 파라미터(“-n”)를 생략할 수 있다.

설명#

altierr은 Altibase 서버의 에러 코드 번호나 에러 메시지에 포함된 문자열을 이용하여 에러에 대한 상세한 설명을 검색하고 출력해 주는 유틸리티이다.

에러 상세 설명에는 에러 코드 번호, 에러 코드 문자열, 에러 설명, 에러가 발생한 원인, 그리고 에러에 대한 조치 사항이 포함된다.

Altibase 서버는 에러 상황 발생시 해당 코드를 “ERR-{에러번호}” 형태로 altibase_boot.log에 출력한다. 여기에서 에러 번호는 16진수 값으로, 해당 에러에 대한 상세 설명을 검색하기 위해 altierr을 다음과 같이 사용할 수 있다.

For ‘ERR-00015’
$ altierr 0x00015
$ altierr –w 00015
$ altierr 21

C/C++ Precompiler나 ODBC로 작성된 애플리케이션의 경우 SQL 관련 기능 수행 시 SQLCODE나 ODBC 함수의 리턴 코드에 에러 코드가 설정이 된다. 이 때 설정되는 에러 코드는 음의 정수 값이 설정되며, 해당 에러에 대한 상세 설명을 검색하기 위해 다음과 같이 altierr을 사용할 수 있다.

For -266286
$ altierr -266286
$ altierr 266286
$ altierr 0x4102E

altierr은 에러 메시지에 포함된 키워드를 이용한 검색을 지원하며, 이 경우 여러 개의 레코드가 검색될 수 있다. 키워드 패턴을 이용한 검색은 다음과 같다.

$ altierr –w connect
$ altierr –w “does not”

참고 사항#

Error Message Reference 참조

altipasswd#

개요#

altipasswd는 $ALTIBASE_HOME/conf/syspassword 파일을 변경한다. 데이터베이스가 서비스 상태가 아닐때는 SYSDBA 옵션으로 iSQL을 구동하여 관리자 작업을 수행하는데, 이때 syspassword 파일을 읽어 sys 계정의 패스워드를 체크한다. 따라서, 데이터베이스 상에서 ALTER USER 문으로 sys 암호를 변경하는 경우, altipasswd로 syspassword 파일의 암호도 동일하게 변경해야 한다. 데이터베이스내의 sys 암호와 syspassword 암호가 동일하게 유지되지 않으면, 데이터베이스 구동, 종료 등 SYSDBA 작업을 할 때 오류가 발생하게 된다.

altipasswd

구문#

설명#

SYS 사용자의 암호를 변경한다.

사용예#

SYS 사용자의 암호 “manager”를 “manager1234”로 변경한다면 쉘 프롬프트 상에서 다음과 같이 수행한다.

$ altipasswd
Previous Password : manager
New Password : manager1234
Retype New Password : manager1234

altiProfile#

개요#

Altibase 서버 내에서 수행되는 작업과 서버의 상태 정보를 파일로 기록하여 분석할 수 있다. 서버가 남긴 상태 파일을 프로파일이라 하며 altiProfile은 이 프로파일을 문자 형태로 변환하여 출력하거나, STATEMENT 관련 데이터만 추출하여 통계 정보를 구축하여 출력한다. 이 정보를 사용하여 사용자는 시스템의 상태를 분석할 수 있다.

altiProfile [-stat query|session] {profile_name [profile_name2 [profile_name3] ...}

구문#

파라미터#

파라미터 설명
-h 도움말을 출력한다.
-stat query/session 서버가 남긴 프로파일에서 STATEMENT의 통계 정보를 구축하여, 텍스트와 CSV 형태의 파일로 출력한다.
구축되는 통계 정보에 대한 자세한 설명은 아래의 "사용 방법"을 참고하기 바란다.

설명#

서버가 남긴 프로파일을 문자 형태로 변환하거나, STATEMENT 관련 데이터만 추출하여 통계 정보를 구축한다.

사용예#

iSQL> ALTER SYSTEM SET QUERY_PROF_FLAG = 1;
Alter success.
iSQL> ALTER SYSTEM SET TIMED_STATISTICS = 1;
Alter success.
iSQL>    --(Execute an SQL query here.)

$ cd $ALTIBASE_HOME/trc
$ altiProfile alti-1286503704-0.prof

$ altiProfile -stat query $ALTIBASE_HOME/trc/*.prof

사용 방법#

서버의 상태 및 작업 내용을 기록하려면 QUERY_PROF_FLAG 프로퍼티를 0보다 큰 값으로 설정하여야 한다. QUERY_PROF_FLAG 프로퍼티의 값에 따라 다음의 정보들이 기록된다.

이름 설명
0 기록하지 않음
1 [STATEMENT] SQL 문이 실행될 때마다 실행된 SQL문, 실행시간, 실행정보, 색인 및 디스크 접근 정보 출력.
단, 실행시간이 제대로 출력되게 하려면 TIMED_STATISTICS 프로퍼티를 1로 설정해야 한다.
TIMED_STATISTICS 프로퍼티에 대한 자세한 설명은 General Reference를 참조하기 바란다.
2 [BIND] SQL 문이 실행될 때마다 BIND 파라미터 출력
4 [PLAN] SQL 문이 실행될 때마다 실행계획 출력
8 [SESSION STAT] 3초마다 세션 정보 출력(V\$SESSTAT 정보)
16 [SYSTEM STAT] 3초마다 시스템 정보 출력(V\$SYSSTAT 정보)
32 [MEMORY STAT] 3초마다 메모리 정보 출력(V\$MEMSTAT 정보)

위의 값을 조합하여 원하는 정보를 기록하도록 설정한다. 예를 들어, 프로퍼티를 1+4+32=37로 설정하면 SQL 문이 실행될 때마다 SQL 문의 실행정보와 실행계획을 출력하고 3초마다 메모리 정보를 출력한다.

프로퍼티가 설정되면, 서버는 alti-#시간-#번호.prof 이름의 파일에 정보를 남긴다. 사용자는 altiProfile 명령어로 상태 파일을 변환하여 분석할 수 있다.

통계 정보 출력#

altiProfile은 -stat 옵션을 사용해서 실행된 SQL문에 대한 통계 정보를 구축하고 출력할 수 있다. 이 정보는 튜닝 대상이 되는 SQL문을 찾는데 도움이 된다.

-stat query 옵션을 실행하여 구축되는 통계 정보는 아래와 같다.

  • COUNT: QUERY가 실행된 횟수

  • AVG: QUERY 수행에 걸린 평균 시간 (microseconds 단위)

  • TOTAL: QUERY 수행에 걸린 시간 합계 (microseconds 단위)

  • MIN: QUERY 수행에 걸린 최소 시간 (microseconds 단위)

  • MAX: QUERY 수행에 걸린 최대 시간 (microseconds 단위)

  • SUCCESS: QUERY 실행에 성공한 횟수

  • FAIL: QUERY 실행에 실패한 횟수

  • QUERY: 수행된 SQL문

-stat session 옵션으로 수행한다면, query 옵션을 실행하여 구축되는 통계 정보에 SESSION ID가 추가된다.

아래는 \$ALTIBASE_HOME/trc 디렉토리에 생성된 모든 프로파일을 분석하여 SQL문 별로 통계 정보를 구축하는 altiProfile 실행 예제이다.

$ altiProfile -stat query $ALTIBASE_HOME/trc/*.prof

### Processing [/altibase_home/trc/alti-1423543095-0.prof]...
100% [====================]

### Writing CSV File [alti-prof-stat-1423543711.csv]...

### Writing TEXT File [alti-prof-stat-1423543711.txt]...

### Successfully done.

위에 실행 로그를 살펴보면, 통계 정보는 CSV 형식과 텍스트 형식의 파일로 저장된다. 출력된 파일의 이름은 'alti-prof-stat-#시간.csv'과 'alti-prof-stat-#시간.txt'로 자동 생성된다.

다음은 텍스트 파일의 내용이다. 통계 정보는 TOTAL 값으로 정렬되어 출력된다.

$cat alti-prof-stat-1423543711.txt
COUNT      AVG          TOTAL         MIN         MAX    SUCCESS  FAIL   QUERY
===========================================================================================================
     5     0.003730     0.018650     0.003035     0.004640     5     0    DROP VIEW REVENUE
     5     0.003523     0.017616     0.003004     0.003745     5     0    CREATE VIEW REVENUE (
...

다음은 CSV 파일의 내용이다. 텍스트 파일과 동일한 내용이 CSV 형식으로 출력된다. CSV 형식의 파일은 excel 같은 스프레드시트 애플리케이션을 사용해서 사용자가 원하는 포맷으로 가공할 수 있다.

$ cat alti-prof-stat-1423543711.csv
COUNT,AVG,TOTAL,MIN,MAX,SUCCES,FAIL,QUERY
5,  0.003730,  0.018650,  0.003035,  0.004640,5,0,"DROP VIEW REVENUE"
5,  0.003523,  0.017616,  0.003004,  0.003745,5,0,"CREATE VIEW REVENUE (
...

주의 사항#

프로파일링 기능을 동작시킬 경우, 서버 내에서 실행되는 모든 SQL 문에 대해 실행 정보를 기록하며 또한 매 3초마다 세션 및 시스템 정보 등 서버의 상태를 기록하므로 시스템에 부하를 줄 수 있다.

또한 프로파일링 기능을 설정할 때 프로파일이 커져 디스크가 꽉 찰 수 있으므로 신중해야 한다.

출력항목#

다음과 같은 형식으로 출력된다.

[STATEMENT]
..
[BIND]
..
[PLAN]
..
[SESSION STAT]
..
[SYSTEM STAT]
..
[MEMORY STAT]
..

각 정보는 아래와 같은 형식으로 출력된다.

[STATEMENT]#

다음의 표는 실행한 STATEMENT에 대한 정보를 나타낸다.

필드 이름 설명
SQL 문자열 실행된 SQL 문
User Info
User ID INTEGER 사용자 식별자
Client PID BIGINT 클라이언트 프로세스 아이디
Client Type VARCHAR(40) 접속한 클라이언트의 타입
Client AppInfo VARCHAR(128) 클라이언트의 정보 문자열
Elapsed Time for this SQL statemen
Total BIGINT 총 쿼리 수행 시간
Parse BIGINT 파싱 수행 시간
Valid BIGINT 정당성 검사 수행 시간
Optim BIGINT 최적화 수행 시간
Execu BIGINT 실행 수행 시간
Fetch BIGINT Fetch 수행 시간
Query Execute Info
EXECUTE Result INTEGER 0: failure 1: rebuild 2: retry 3: queue empty 4: success
Optimizer Mode BIGINT 최적화 모드
Cost Mode BIGINT 최적화 비용
Used Memory BIGINT 향후 확장 예정
SUCCESS SUM BIGINT 실행 성공 횟수의 총합
FAILURE SUM BIGINT 실행 실패 횟수의 총합
PROCESSED ROW BIGINT 처리된 레코드 개수
Result Set Info
FETCH Result INTEGER 0: failure 1: success 2: no results
Index Access Info
Memory Full Scan Count BIGINT 메모리 테이블에 대한 Full Scan이 발생한 횟수
Memory Index Scan Count BIGINT 메모리 테이블에 대한 Index Scan이 발생한 횟수
Disk Full Scan Count BIGINT 디스크 테이블에 대한 Full Scan이 발생한 횟수
Disk Index Scan Count BIGINT 디스크 테이블에 대한 Iindex Scan이 발생한 횟수
Disk Access Info
READ DATA PAGE BIGINT 질의 수행 시 디스크 페이지에 대한 읽기 연산 횟수
WRITE DATA PAGE BIGINT 사용하지 않음
GET DATA PAGE BIGINT 질의 수행 시 디스크 페이지에 대한 버퍼 접근 횟수
CREATE DATA PAGE BIGINT 질의 수행 시 디스크 페이지 생성 횟수
READ UNDO PAGE BIGINT 질의 수행 시 UNDO 영역 디스크 페이지에 대한 읽기 연산 횟수
WRITE UNDO PAGE BIGINT 사용하지 않음
GET UNDO PAGE BIGINT 질의 수행 시 UNDO 영역 디스크 페이지에 대한 버퍼 접근 횟수
CREATE UNDO PAGE BIGINT 질의 수행 시 UNDO 영역 디스크 페이지 생성 횟수
[BIND]#

SQL 문에 바인드 되는 변수들에 대한 정보이다.

[PLAN]#

실행된 SQL 문의 실행 계획이 출력된다. 실행 계획에 관한 자세한 내용은 Performance Tuning Guide를 참고한다.

[SESSION STAT]#

매 3초마다 V\$SESSTAT 정보가 출력된다. V\$SESSTAT의 자세한 내용은 General Reference 의 성능 뷰 부분을 참고한다.

[SYSTEM STAT]#

매 3초마다 V\$SYSSTAT 정보가 출력된다. V\$SYSSTAT의 자세한 내용은 General Reference의 성능 뷰 부분을 참고한다.

[MEMORY STAT]#

매 3초마다 V\$MEMSTAT 정보가 출력된다. V\$MEMSTAT의 자세한 내용은 General Reference의 성능 뷰 부분을 참고한다.

altiwrap#

개요#

altiwrap은 PSM(Persistent Stored Module)으로 작성된 코드 프로그램을 암호화할 수 있는 유틸리티이다. altiwrap을 사용하여 코드를 암호화하면 다른 개발자에게 저장 프로시저 및 저장 함수 등의 PSM 코드가 노출되는 것을 방지할 수 있다.

altiwarp {--iname input_file} [--oname output_file]

구문#

altiwrap

파라미터#

파라미터 설명
-h/--h 도움말을 출력한다.
--iname 암호화 할 파일의 이름을 지정한다. 파일의 확장자를 생략하면, '.sql'로 인식한다.
--oname 코드 프로그램이 암호화되어 저장될 파일의 이름을 지정한다.
파일의 확장자를 생략하면, '.plb'로 저장된다.

설명#

altiwrap을 실행하여 개발자가 작성한 저장 프로시저 및 저장 함수의 코드 프로그램을 암호화하여, 다른 개발자 또는 경쟁사에 노출되는 것을 방지할 수 있다.

Altibase가 암호화할 수 있는 구문은 아래와 같다.

  • CREATE [OR REPLACE] PROCEDURE

  • CREATE [OR REPLACE] FUNCTION

  • CREATE [OR REPLACE] TYPESET

  • CREATE [OR REPLACE] PACKAGE

  • CREATE [OR REPLACE] PACKAGE BODY

주의 사항#

  • 코드 프로그램이 암호화 된 후에는 프로그램을 변경할 수 없다. 프로그램을 변경할 때에는 암호화 전의 원본 프로그램에서 변경한 후 다시 암호화해야 한다.

  • 트리거(trigger)는 암호화할 수 없다.

  • 암호화된 프로그램 코드는 구문(syntax) 및 시맨틱(semantic)의 오류를 검사하지 못한다.

사용예제#

altiwrap을 사용하여 sample1.sql 파일을 암호화한 후, 암호화된 파일을 출력한다.

아래는 sample1.sql 파일이다.

iSQL> create or replace procedure proc1 as
type arr1 is table of char(30) index by integer;
v1 arr1;
begin
v1[0] := 'create or replace';
v1[1] := 'typeset';
v1[2] := 'is';
v1[3] := 'success';
println( v1[0] || v1[1] || v1[2] || v1[3] || '!' );
end;
/

sample1.sql 파일을 암호화한다.

$ altiwrap --iname sample1.sql --oname --sample1.plb

암호화된 코드 프로그램을 isql에서 실행하면 된다.

iSQL> @sample1.plb
iSQL> create or replace procedure proc1 WRAPPED
'MjQz
MTk2
AAhjcmVhdGUgb3IgcmVwbGFjZSBwcm9jZWR1cqQBAAQxIGFzCnR5cGUgYXJyMSBpcyB0YWJsQAYAAWYgY2hhcigzMCkgaW5kZXggYnlAAQZ0ZWdlcjsKdjGYBQAEOwpiZWdpbgp2MVswXSA6PSAnY3JlYSu5ASdyBVsxtAN/DHNldK0CMq4CaXO5ATO4AQNzdWNjZXNsAgZwcmludGxuKCC2C3x8YAFACaABVAegAVwGDHx8ICchJyApOwplbmQ7ChEAADVBRDlBRkIzMDE0MzI1Q0U0MzY1RjYxNEI2NkYwQzRDREMzMTdDQTU=
';
/
Create success.
iSQL> exec proc1;
create or replace typeset is success!
Execute success.

awrite#

개요#

로그 파일을 생성할 때 사용되는 시스템 콜의 응답 시간을 출력한다. 출력 값은 LOG_CREATE_METHOD 프로퍼티에서 시스템 콜을 결정하는데 참고된다.

구문#

awrite

설명#

write()와 fallocate() 시스템 콜의 응답 시간을 출력한다.

사용예#

아래와 같은 결과를 출력한다.

$ awrite
fallocate to expand file size to 1GB
 Elapsed Time ==>            2.564 seconds
write to expand file size to 1GB
 Elapsed Time ==>            4.020 seconds

checkServer#

개요#

Altibase 프로세스를 감시하며, 프로세스가 비정상 종료하면 지정된 스크립트 파일을 실행한다.

checkServer [-n] {-f server-restart-script-file}

구문#

checkserver

파라미터#

파라미터 설명
-n checkServer를 foreground에서 수행 파라미터 생략시 checkServer는 background에서 수행
-f Altibase 종료시 실행할 스크립트 파일의 이름

설명#

checkServer는 주기적으로 Altibase 프로세스가 실행 중인지를 검사하여 Altibase 프로세스가 종료 되었을 경우 사용자가 지정한 스크립트를 수행한다.

Altibase가 비정상 종료 되었을 경우 Altibase 재구동 스크립트를 수행하는 것이 일반적이며, 재구동 스크립트는 다음과 같은 형식으로 작성할 수 있다.

  • Altibase 구동 스크립트 ‘restart.sh’
#! /bin/sh
${ALTIBASE_HOME}/bin/server start

checkServer는 구동시 \$ALTIBASE_HOME/trc 디렉토리에 checkServer.pid와 checkServer.log 파일을 생성한다. checkServer.pid파일은 또 다른 checkServer가 동시에 수행되지 못하도록 하는 락의 역할을 하며 checkServer.log에는 checkServer의 동작 상태가 주기적으로 기록된다.

checkServer를 ‘kill -9’등의 방법으로 강제 종료했을 경우에 checkServer.pid 파일이 디렉터리에 계속 남아있게 되어 checkServer를 다시 수행할 수 없게 된다. 이 때는 checkServer.pid파일을 삭제하면 checkServer를 정상적으로 시작할 수 있다.

checkServer를 종료하기 위해선 반드시 killCheckServer 유틸리티를 이용한다.

주의 사항#

checkServer는 Altibase 서버가 “server stop” 커맨드를 사용하지 않고 종료된 경우에만, 지정한 재시작 스크립트를 실행한다. “server stop” 커맨드를 사용하여 Altibase 서버를 정상 종료하는 경우, checkServer 프로세스도 역시 종료되어, 재시작 스크립트를 실행하지 않게 된다. 이것은 checkServer가 “server stop” 커맨드를 사용하여 종료하는 것만 정상 종료라고 판단하기 때문이다.

사용예#

쉘 프롬프트 상에서 다음과 같이 수행한다.

$ checkServer –f restart.sh &

dumpbi#

개요#

dumpbi는 이진 형식으로 저장된 backupinfo 파일의 백업 정보를 문자 형식으로 보여준다.

dumpbi  <backupinfo_file_name>

구문#

dumpbi

설명#

backupinfo 파일의 내용을 텍스트 형식으로 보여준다.

사용예#

쉘 프롬프트 상에서 다음과 같이 수행한다.

$ dumpbi backupinfo

출력 항목#

dumpbi는 backupinfo 의 백업 정보를 다음과 같은 섹션으로 구분하여 출력한다.

[BACKUO INFO FILE HDR]#
필드 이름 값(단위 바이트) 설명
Backup info slot count 0 \~ unsigned int 타입의 최대값 저장되어 있는 backupinfo slot의 수
(= 현재까지 백업된 파일의 수)
Last backup LSN FileNo, Offset 가장 최근에 수행된 백업 시점의 LSN
(유효한 backupinfo 파일인지 검증하기 위한 값)
Database name 문자열 데이터베이스 이름
[BACKUP INFO SLOT]#
필드 이름 값(단위 바이트) 설명
Slot index 0 \~ unsigned int 타입의 최대값 slot의 순번
Begin backup time YYYY-MM-DD HH:MM:SS 백업 시작 일시
End backup time YYYY-MM-DD HH:MM:SS 백업 완료 일시
Incremental backup chunk cnt 0 \~ unsigned int 타입의 최대값 데이터파일에서 변경된 페이지를 포함한 incremental chunk의 수
(= 백업된 incremental chunk의 수)
Incremental backup chunk size 0 \~ unsigned int 타입의 최대값 백업이 수행될 당시의 INCREMENTAL_BACKUP_CHUNK_SIZE의 값
Backup target 1: DATABASE
2: TABLESPACE
백업 대상
Backup level 1: level 0
2: level 1
백업 레벨
Backup Type 1: full backup
2: differentail backup
3: cumulative backup
백업 유형
Tablespace ID 0 \~ unsigned short 타입의 최대값 백업 대상 데이터파일이 속한 테이블스페이스의 ID
File ID 0 \~ unsigned short 타입의 최대값 백업 대상 데이터파일의 ID
Original file size 0 \~ unsigned long 타입의 최대값 백업된 시점의 데이터파일 크기
Backup Tag 문자열 백업 태그 이름
Backup file name 문자열 백업 파일의 경로와 이름

dumpct#

개요#

dumpct는 이진 형식으로 저장된 changeTracking 파일의 정보를 문자 형식으로 보여준다.

dumpct  <changeTracking_file_name>

구문#

dumpct

설명#

changeTracking 파일의 내용을 텍스트 형식으로 보여준다.

사용예#

쉘 프롬프트 상에서 다음과 같이 수행한다.

$ dumpct changeTracking

출력#

dumpct는 changeTracking 파일 내의 변경 추적 정보를 다음과 같은

으로 구분하여 출력한다.

[CHANGE TRACKING FILE HDR]#
필드 이름 값(단위 바이트) 설명
Change tracking body count 0 \~ unsigned int 타입의 최대값 changeTracking 파일이 가진 body의 수 (changeTracking 파일은 header와 body로 나뉜다. body의 크기는 10Mbytes이며 공간이 부족하면 바디 단위로 확장된다.)
Icremental backup chunk size 0 \~ unsigned int 타입의 최대값 changeTracking 파일 생성시점의 INCREMENTAL_BACKUP_CHUNK_SIZE 프로퍼티 값
Last flush LSN FileNo, Offset 메모리상의 변경된 데이터가 파일로 기록된 시점의 LSN
Database name 문자열 데이터베이스 이름
[CHANGE TRACKING FILE BODY]#
필드 이름 값(단위 바이트) 설명
Change tracking body ID 0 \~ unsigned int 타입의 최대값 body의 ID
Flush LSN FileNo, Offset body가 flush 된 시점의 LSN(파일 검증용)
Datafile descriptor slot
Slot ID 0 \~ unsigned int 타입의 최대값 slot의 ID
Tracking state 0: 추적 비활성화 1: 추적 활성화 데이터파일 변경 사항 추적 상태
Tablespace type 0: memory TBS 1: disk TBS 테이블스페이스 유형
Page size 0 \~ unsigned int 타입의 최대값 페이지 크기
Bitmap extent count 0 \~ unsigned short 타입의 최대값 할당된 비트맵 익트텐트 개수
Current tracking list ID 0 \~ unsigned short 타입의 최대값 현재 추적중인 bitmap extent list의 ID
Differential0 BmpExt list
List 0 \~ unsigned int 타입의 최대값 bitmap extent list에 매달린 block ID
Hint 0 \~ unsigned int 타입의 최대값
Differential1 BmpExt list
List 0 \~ unsigned int 타입의 최대값 bitmap extent list에 매달린 block ID
Hint 0 \~ unsigned int 타입의 최대값
Cumulative BmpExt list
List 0 \~ unsigned int 타입의 최대값 bitmap extent list에 매달린 block ID
Hint 0 \~ unsigned int 타입의 최대값
Tablespace ID 0 \~ unsigned short 타입의 최대값 데이터파일이 속한 테이블스페이스의 ID
File ID 0 \~ unsigned short 타입의 최대값 데이터파일의 ID

dumpdb#

개요#

dumpdb는 메모리 체크포인트 이미지 파일로부터 메모리 테이블스페이스에 대한 정보를 출력하거나 또는 메모리 테이블스페이스의 증분 백업 파일의 내용을 문자 형식으로 보여주는 유틸리티이다.

dumpdb {-j job_number } [-i pingpong_number] [-o] [-f file_name] [-s] [-p] [-d]

구문#

dumpdb

파라미터#

파라미터 설명
-j job_number 어떤 정보를 출력할 것인지를 지정한다. 지정 가능한 값과 각 값에 대해 추가로 지정할 수 있는 인자는 다음과 같다.
0: META (-s -f)
1: TABLESPACE (-s -f) 2: TABLESPACE-FLI (-s -d)
3: TABLESPACE-FREE-PAGE-LIST (-s)
4: TABLE (-o -d)
5: TABLE-ALLOC-PAGE-LIST (-o)
6: PAGE (-s -p -d)
7: INCREMENTAL_BACKUP_META (-f)
-i pingpong_number 체크포인트 이미지 파일의 핑퐁 번호이다. 생략하면 0이 사용된다.
-o 분석할 객체의 ID를 지정한다.
-f file_name 체크포인트 이미지 파일의 이름을 지정한다.
-s 분석할 테이블스페이스의 ID를 지정한다.
-p 분석할 페이지의 ID를 지정한다.
-d 정보를 상세히 출력한다.

설명#

메모리 체크포인트 이미지 파일을 분석하여 메타 헤더, 페이지 등의 정보를 텍스트 형태로 출력하거나 또는 메모리 테이블스페이스의 증분 백업 파일에서 백업 정보를 텍스트 형태로 출력한다.

이 유틸리티는 디스크에 저장된 체크포인트 이미지 파일을 분석하기 때문에, Altibase 서버가 구동 중이 아니더라도 이 유틸리티를 수행하여 데이터베이스에 생성되어 있는 스키마를 확인할 수 있다.

하지만 DDL 직후 서버가 비정상 종료되어 갱신된 스키마가 디스크에 기록되지 못하면 해당 정보를 확인할 수 없다.

사용예#

쉘 프롬프트 상에서 다음과 같이 수행한다.

$ dumpdb -j 1
$ dumpdb -j 1 -s 0
$ dumpdb -j 2
$ dumpdb -j 3
$ dumpdb -j 4
$ dumpdb -j 4 -d
$ dumpdb -j 4 -o 65536
$ dumpdb -j 5 -o 65536
$ dumpdb -j 6 -s 0 -p 4

\<예제 1> 다음은 메모리 테이블스페이스에 관한 정보를 출력한다. –s 인자를 추가하여 특정 테이블스페이스에 관한 정보만 출력할 수도 있다.

$ dumpdb -j 1

\<예제 2> 다음은 메모리 테이블스페이스의 FreeListInfo(FLI) 페이지에 관한 정보를 출력한다. –s 인자를 추가하여 특정 테이블스페이스에 관한 정보만 출력할 수 있고, -d 인자를 추가해서 FLI 페이지의 유효하지 않은 부분도 출력할 수 있다.

% dumpdb -j 2

\<예제 3> 다음은 메모리 테이블스페이스의 FreePage들을 출력한다. –s 인자를 추가하여 특정 테이블스페이스에 관한 정보만 출력할 수도 있다.

% dumpdb -j 3

\<예제 4> 다음은 데이터베이스에 생성되어 있는 모든 객체 정보를 출력한다. –o 인자(아래 예제에서 SelfOID 항목)를 추가하여 특정 객체에 관한 정보만 상세히 출력할 수도 있다. –d 인자를 추가해서 객체의 칼럼 정보와 인덱스 정보 등도 출력할 수 있다.

% dumpdb -j 4

\<예제 5> 다음은 데이터베이스에 생성되어 있는 모든 객체의 정보를 칼럼 정보와 인덱스 정보 등과 함께 출력한다.

% dumpdb -j 4 -d

\<예제 6> 다음은 특정 테이블의 스키마와 데이터를 출력한다.

% dumpdb -j 4 -o 65568

\<예제 7> 다음은 특정 테이블이 사용하는 페이지 목록을 출력한다.

% dumpdb -j 5 -o 65568

\<예제 8> 다음은 메모리 데이터베이스의 특정 페이지를 출력한다.

% dumpdb –j 6 -s 0 -p 4

\<예제 9> 다음은 증분 백업 파일에 대해 dumpdb를 수행하여 백업 정보를 출력한다.

% dumpdb -j 7 -f SYS_TBS_MEM_DATA-0-0_TAG_MONDAY.ibak
dumpdb: Release 6.3.1.0.0 - Production on Oct 31 2012 22:12:21
(c) Copyright 2001 ALTIBase Corporation.  All rights reserved.

[BEGIN CHECKPOINT IMAGE HEADER]
Binary DB Version             [ 6.2.1 ]
Redo LSN       [ 1, 5867599 ]
Create LSN     [0, 1385 ]
DataFileDescSlot ID           [ 1, 1 ] 

//백업파일에 저장된 incremental backup정보
  [BEGIN BACKUPFILE INFORMATION]

        Begin Backup Time             [ 2012_11_06 23:18:43 ]
        End Backup Time               [ 2012_11_06 23:18:44 ]
        IBChunk Count                 [ 0 ]
        Backup Target                 [ DATABASE ]
        Backup Level                  [ LEVEL0 ]
        Backup Type                   [ FULL ]
        TableSpace ID                 [ 1 ]
        File ID                       [ 0 ]
        Backup Tag Name               [ MONDAY ]
        Backup File Name              [ /backup_dir/TAG_MONDAY/SYS_TBS_MEM_DATA-0-0_TAG_MONDAY.ibak ]

  [END BACKUPFILE INFORMATION]

[END CHECKPOINT IMAGE HEADER]

Dump complete.

출력 항목#

다음의 표는 증분 백업 파일에 대해 dumpdb 유틸리티를 실행하여 출력되는 항목들에 한하여 설명한다.

필드 이름 설명
Binary DB Version 데이터 파일의 버전
Redo LSN 미디어 복구를 위한 Redo LSN. 로그 앵커의 Redo LSN값이 데이터 파일의 Redo LSN보다 크면, 이 항목에 출력되는 Redo LSN 부터 미디어 복구가 필요하다.
Create LSN 체크포인트 이미지 생성 시점의 LSN
DataFileDescSlot ID 메모리 체크포인트 이미지와 묶여있는 ChangeTracking의 DataFileDescSlot ID

dumpddf#

개요#

dumpddf는 데이터 파일의 헤더 정보 또는 데이터 파일 내의 특정 페이지를 출력한다. 또는 증분 백업 파일에 대해 dumpddf를 수행하면 백업 파일의 헤더 정보와 백업 정보가 출력된다.

dumpddf {-f datafile_name} {-m | -p pid}

구문#

dumpddf

파라미터#

파라미터 설명
-f 정보를 얻고 싶은 데이터 파일의 이름 이 옵션은 반드시 입력해야 한다. 생략하면 dumpddf는 에러 메시지를 출력하고 종료한다.
-m 데이터 파일의 헤더 정보를 출력한다.
-p 정보를 얻고 싶은 데이터 파일내의 페이지 ID

설명#

데이터 파일의 헤더의 정보 또는 데이터 파일 내의 특정 페이지를 텍스트 형태로 출력한다. 지정한 페이지가 테이블이나 인덱스의 페이지이면 논리적으로 구성하여 출력한다.

사용예#

쉘 프롬프트 상에서 다음과 같이 수행한다.

$ dumpddf –f datafile –m
$ dumpddf –f datafile –p page_id

출력 항목#

다음은 dumpddf의 출력 예이다.

[BEGIN DATABASE FILE HEADER]
Binary DB Version             [ 5.4.1 ]
Redo LSN                      [0, 734497 ]
Create LSN                    [0, 1886 ]
MustRedo LSN                  [0, 0 ]

출력 내용 중, 필드들은 다음과 같은 의미를 갖는다.

필드 이름 설명
Binary DB Version 데이터 파일의 버전
Redo LSN 미디어 복구를 위한 Redo LSN. 로그앵커의 Redo LSN값이 데이터 파일의 Redo LSN보다 크면, 이 Redo LSN 부터 미디어 복구가 필요하다.
Create LSN 데이터 파일 생성 시점의 LSN
MustRedo LSN 미디어 복구 시 이 Redo LSN까지 수행해야 한다.
DataFileDescSlot ID Disk datafile과 묶여있는 ChangeTracking의 DataFileDescSlot ID

다음은 증분 백업 파일을 dumpddf로 출력한 예이다.

% dumpddf -m -f system001.dbf_TAG_MONDAY.ibak
-----------------------------------------------------------------
     Altibase Client Dump Disk Database File utility.
     Release Version 6.3.1.0.0
     Copyright 2000, ALTIBASE Corporation or its subsidiaries.
     All Rights Reserved.
-----------------------------------------------------------------
[BEGIN DATABASE FILE HEADER]

Binary DB Version             [ 6.2.1 ]
Redo LSN                      [1, 5867599 ]
Create LSN                    [0, 1914 ]
MustRedo LSN                  [0, 0 ]
DataFileDescSlot ID           [ 1, 2 ]

[BEGIN BACKUPFILE INFORMATION] -->백업파일에 저장된 incremental backup정보

        Begin Backup Time             [ 2012_11_06 23:18:44 ]
        End Backup Time               [ 2012_11_06 23:18:46 ]
        IBChunk Count                 [ 0 ]
        Backup Target                 [ DATABASE ]
        Backup Level                  [ LEVEL0 ]
        Backup Type                   [ FULL ]
        TableSpace ID                 [ 2 ]
        File ID                       [ 0 ]
        Backup Tag Name               [ MONDAY ]
        Backup File Name              [ /backup_dir/TAG_MONDAY/system001.dbf_TAG_MONDAY.ibak ]

  [END BACKUPFILE INFORMATION]

[END DATABASE FILE HEADER]

dumpla#

개요#

dumpla는 이진 형식으로 저장된 loganchor 파일의 내용을 문자 형식으로 보여준다.

loganchor는 Altibase의 물리적인 저장 정보(테이블스페이스, 데이터 파일)와 복구를 위해 필요한 정보들이 저장되는 파일이다. Altibase는 데이터베이스 생성 시(CREATE DATABASE 실행 시)에 이 파일을 생성하고 altibase.properties에 설정된 세 개의 LOGANCHOR_DIR 디렉토리에 loganchor#(#은 1, 2, 3)의 이름으로 저장, 관리한다. 세 개의 파일은 모두 같은 내용으로 파일이 손상될 경우를 대비해 복사본을 유지하는 것이다. 데이터베이스 생성 시에 현재 데이터베이스에 존재하는 테이블스페이스와 이에 속한 데이터 파일, 그리고 복구 관련 정보들이 저장된다. 데이터베이스 구동 시에 이 정보들을 이용하여 데이터베이스를 메모리에 적재하고 서비스를 준비한다.

dumpla <loganchor_file_name>

구문#

dumpla

설명#

loganchor 파일의 내용을 텍스트 형식으로 보여준다.

사용예#

쉘 프롬프트 상에서 다음과 같이 수행한다.

$ dumpla loganchor0

출력 항목#

dumpla는 loganchor의 내용을 다음과 같은 섹션으로 구분하여 출력한다.

[LOGANCHOR ATTRIBUTE SIZE]#

현재 Loganchor에 어떤 데이터들이 얼마만큼의 공간을 사용하고 있는지를 나타낸다. 내용은 다음과 같다.

필드 이름 값(단위 바이트) 설명
Loganchor Static Area 0 \~ unsigned int 타입의 최대값 Loganchor에 고정적으로 들어가는 정보의 크기를 나타낸다. 주로 복구 시 필요한 정보들이다.
Tablespace Attribute 0 \~ unsigned int 타입의 최대값 저장된 Tablespace Attribute의 크기
Checkpoint Path Attribute 0 \~ unsigned int 타입의 최대값 저장된 Checkpoint Path의 크기
Checkpoint Image Attribute 0 \~ unsigned int 타입의 최대값 저장된 Checkpoint Image Attribute의 크기
Disk Datafile Attribute 0 \~ unsigned int 타입의 최대값 저장된 Disk Datafile Attribute의 크기
[LOGANCHOR HEADER]#

데이터베이스의 버전 및 체크포인트 Log Sequence Number (LSN) 등의 loganchor Header 정보를 나타낸다. LSN에 대한 자세한 설명은 “dumplf 의 출력”절을 참고하기 바란다.

필드 이름 설명
Binary DB Version Major.minor.patch ex) 6.2.1 현재 Loganchor를 생성한 데이터베이스 실행 파일의 데이터베이스 버전이다.
Archivelog Mode Archivelog |No-Archivelog 데이터베이스가 아카이브 모드로 운영 중인지를 나타낸다.
Transaction Segment Entry Count
Begin Checkpoint LSN FileNo, Offset Begin Checkpoint의 LSN을 나타낸다.
End Checkpoint LSN FileNo, Offset End Checkpoint의 LSN을 나타낸다.
Disk Redo LSN FileNo, Offset DRDB의 Redo 시작 위치를 나타낸다.
LSN for Recovery from Replication FileNo, Offset 이중화를 이용한 복구 시 이 LSN부터 시작한다.
Server Status SERVER_SHUTDOWN |SERVER_STARTED 서버의 상태를 기록한다. 서버 시작 시 이 값이 SERVER_STARTED로 바뀌고 종료 시 SERVER_SHUTDOWN으로 바뀐다. 서버 시작 시에 이 값이 SERVER_STATED로 되어있다면 이전에 서버가 비정상 종료한 것이므로 재구동시 복구를 수행한다.
End LSN FileNo, Offset 서버가 정상 종료한 후 재구동시 첫 번째 기록되는 로그의 LSN
ResetLog LSN FileNo, Offset 불완전 복구시 설정된 Reset LSN
Last Created Logfile Num 0 \~ unsigned int 타입의 최대값 가장 최근에 생성된 로그 파일 번호
Delete Logfile(s) Range 삭제되는 첫 번째 \~ 마지막 파일 번호 가장 최근에 삭제된 로그 파일의 범위. 체크포인트 완료 후 더 이상 필요 없는 파일을 삭제하는데 이 때 지워지는 파일의 범위를 기록한다.
Update And Flush Count 0 \~ unsigned int 타입의 최대값 logAnchor 파일이 변경되고 플러시된 횟수
New Tablespace ID 0 \~ unsigned int 타입의 최대값 새로운 테이블스페이스 식별자. 테이블스페이스가 생성될 경우 이 값을 자신의 테이블스페이스 식별자로 사용하고 이 값을 증가시킨다.
[TABLESPACE ATTRIBUTE]#

메모리 테이블스페이스 정보를 나타낸다. 내용은 다음과 같다.

필드 이름 설명
Tablespace ID 0 \~ unsigned int 타입의 최대값 테이블스페이스 식별자
Tablespace Name 문자열 ex) SYS_TBS_MEM_DIC 테이블스페이스 이름
New Database File ID 0 \~ unsigned int 타입의 최대값 테이블스페이스에서 새로 파일이 추가될 때 파일이 가지게 될 파일의 식별자
Extent Management FREE EXTENT BITMAP TABLESPACE 디스크 테이블스페이스의 extent가 어떤 방식으로 관리되는지를 나타낸다. 현재는 FREE EXTENT BITMAP TABLESPACE만 지원한다. FREE EXTENT BITMAP TABLESPACE를 enable하면, 디스크 테이블스페이스의 free extents를 관리하는데 bitmaps을 사용한다.
Tablespace Status 아래 TABLESPACE ATTRIBUTE 설명 참조 테이블스페이스의 현재 상태를 나타낸다.
Tablespace Type 0 \~ 8 아래 TABLESPACE ATTRIBUTE 설명 참조 테이블스페이스의 타입
Checkpoint Path Count Checkpoint Path 개수 체크포인트 이미지 파일들의 경로. 메모리 테이블스페이스에만 적용된다.
Autoextend Mode AutoExtend |Non-AutoExtend 테이블스페이스가 자동으로 크기가 확장되는지 여부를 가리킨다. 메모리 테이블스페이스에만 적용된다.
Shared Memory Key 0 \~ unsigned int 타입의 최대값 데이터베이스가 공유 메모리 버전이면 이 때 공유 메모리에 데이터베이스가 사용한 공유 메모리의 키
Stable Checkpoint Image Num 0|1 체크포인트가 완료된 체크포인트 이미지의 파일 번호 메모리 테이블스페이스에만 적용된다.
Init Size 0 \~ unsigned int 타입의 최대값 초기 크기(Mbyte)
Next Size 0 \~ unsigned int 타입의 최대값 자동 확장되는 증가분의 크기(Mbyte)
Maximum Size 0 \~ unsigned int 타입의 최대값 최대 크기
Split File Size 0 \~ unsigned int 타입의 최대값 메모리 테이블스페이스는 파일을 이 크기 단위로 생성한다. 예를 들어 테이블스페이스가 1G이고, Split file size가 100MB이면 10개의 파일이 생성된다.

[TABLESPACE ATTRIBUTE] 내용 중 Tablespace Status의 의미는 다음과 같다.

설명
OFFLINE 오프라인 상태
ONLINE 온라인 상태
INCONSISTENT 비일관적인 상태
CREATING 생성 중
DROPPING 삭제를 수행한 트랜잭션이 아직 커밋하지 않아 삭제 중인 상태
DROP_PENDING 삭제를 수행한 트랜잭션이 커밋 이후 Pending 연산 중인 상태
DROPPED 삭제된 상태
DISCARDED Discard된 상태
BACKUP 백업 중
SWITCHING_TO_OFFLINE OFFLINE으로 바뀌고 있는 중
SWITCHING_TO_ONLINE ONLINE으로 바뀌고 있는 중

[TABLESPACE ATTRIBUTE] 내용 중 Tablespace Type의 의미는 다음과 같다.

설명
0 MEMORY SYSTEM DICTIONARY
1 MEMORY SYSETM DATA
2 MEMORY USER DATA
3 DISK SYSTEM DATA
4 DISK USER DATA
5 DISK SYSTEM TEMP
6 DISK USER TEMP
7 DISK SYSTEM UNDO
8 VOLATILE USER DATA
[MEMORY CHECKPOINT PATH ATTRIBUTE]#

메모리 테이블스페이스의 체크포인트 저장 경로를 나타낸다. 내용은 다음과 같다.

필드 이름 설명
Tablespace ID 0 \~ unsigned int 타입의 최대값 테이블스페이스 식별자
Checkpoint Path 문자열 체크포인트 이미지 파일의 경로
[MEMORY CHECKPOINT IMAGE ATTRIBUTE]#

메모리 테이블스페이스의 체크포인트 이미지 정보를 나타낸다. 내용은 다음과 같다.

필드 이름 설명
Tablespace ID 0 \~ unsigned int 타입의 최대값 테이블스페이스 식별자
File Number 0 \~ unsigned int 타입의 최대값 파일 번호
Create LSN \< FileNo, Offset> 데이터 파일 생성 시점의 LSN
Create On Disk (PingPong 0) Created|None 0번 체크포인트 이미지 파일 생성 유무
Create On Disk (PingPong 1) Created|None 1번 체크포인트 이미지 파일 생성 유무
ChangeTracking DataFileDescSlot ID 0 \~ unsigned int 타입의 최대값 Memory checkpoint image와 묶여있는 ChangeTracking의 DataFileDescSlot ID
[DISK DATABASE FILE ATTRIBUTE]#

디스크 테이블스페이스의 데이터 파일 저장 경로를 나타낸다. 내용은 다음과 같다.

필드 이름 설명
Tablespace ID 0 \~ unsigned int 타입의 최대값 테이블스페이스 식별자
Database File ID 0 \~ unsigned int 타입의 최대값 데이터 파일 식별자
Database File Path 문자열 데이터 파일의 경로
Create LSN \< FileNo, Offset> 데이터 파일이 생성된 시점의 시스템 로그의 마지막 LSN
Database File Status 아래 DISK_DATABASE_FILE_ATTRIBUTE 설명 참조 파일의 상태
Autoextend Mode AutoExtend| Non-AutoExtend 자동 확장 설정 여부
Create Mode 0|1 0: 재사용 1: 새로 생성한 파일
Initialize Size 0 \~ unsigned int 타입의 최대값 초기 크기(MByte)
Current Size 0 \~ unsigned int 타입의 최대값 현재 크기(MByte)
Next Size 0 \~ unsigned int 타입의 최대값 확장 단위 크기(MByte)
Maximum Size 0 \~ unsigned int 타입의 최대값 최대 크기(MByte)
ChangeTracking DataFileDescSlot ID 0 \~ unsigned int 타입의 최대값 Disk datafile과 묶여있는 ChangeTracking의 DataFileDescSlot ID

[DISK DATABASE FILE ATTRIBUTE] 내용 중 Database File Status의 의미는 다음과 같다.

설명
OFFLINE 오프라인 상태
ONLINE 온라인 상태
CREATING 생성 중
BACKUP_BEGIN 백업을 시작한 상태
BACKUP_END 백업을 종료 중인 상태
DROPPING 삭제 중인 상태
RESIZING 크기를 바꾸고 있는 상태
DROPPED 삭제된 상태

다음은 dumpla의 출력 결과 중 일부분을 예로 보인 것이다.

[ DISK DATABASE FILE ATTRIBUTE ]
Tablespace ID                  [ 2 ]
Database File ID               [ 0 ]
Database File Path C:\altibase_home\dbs\system001.dbf]
Create LSN                     [0, 4443 ]
Database File Status           [ ONLINE ]
Autoextend Mode                [ Non-Autoextend ]
Create Mode                    [ 0 ]
Initialize Size                [10 MBytes(1280 Pages)]
Current Size                   [10 MBytes(1280 Pages)]
Next Size                      [0 MBytes(0 Pages)]
Maximum Size                   [0 MBytes(0 Pages)]
[Change Tracking ATTRIBUTE]#

changeTracking 파일에 대한 정보를 나타낸다. 내용은 다음과 같다.

필드 이름 설명
Last Flush LSN FileNo, Offset 메모리상의 변경된 데이터가 파일로 기록된 시점의 LSN
Change Tracking Manager State 문자열 ex) CHANGE TRACKING MGR ENABLED 페이지 변경 추적 기능의 상태
Change Tracking File Name 문자열 변경 추적 파일의 경로
[Backup Info ATTRIBUTE]#

backupinfo 파일에 대한 정보를 나타낸다. 내용은 다음과 같다.

필드 이름 설명
Delete Archivelog File Range FileNo, Offset 삭제해도 완전 복구가 가능한 아카이브 로그 파일의 번호
Last Backup LSN FileNo, Offset 최근에 수행된 백업 시점의 LSN
Before Backup LSN FileNo, Offset 최근에 수행된 백업이전에 수행된 LSN
Backup Info Manager State 문자열 예) BACKUP INFO MGR INITIALIZED 백업 정보 파일 관리자의 상태
Backup Directory Path 문자열 예) /backup_dir/ 백업 경로
Backup Info File Name 문자열 백업 정보 파일 이름

dumplf#

개요#

Altibase는 복구를 위해서 트랜잭션이 변경 연산(INSERT, DELETE, UPDATE 등)을 수행할 때, 데이터베이스 영역(DB File)외의 별도 파일에 로그를 남긴다. 이 로그는 IO 최소화를 위해서 이진(binary) 형식으로 기록되어 있다. 이 로그가 기록되는 로그 파일은 altibase.properties의 LOG_DIR 프로퍼티에 설정되는 디렉토리에 logfile#(#은 로그파일 번호로 계속 증가한다) 형태로 저장된다.

dumplf는 이 로그 파일의 내용을 텍스트 형식으로 변환해서 보여주는 유틸리티이다. 이 로그를 통해서 데이터베이스에 수행된 연산의 종류 및 변경 연산을 수행하는 트랜잭션의 빈도를 측정할 수 있다.

dumplf {-f log_file_name} [-t transaction_id][-s] [-l][-S lsn [-F path] [-g]]

구문#

파라미터#

파라미터 설명
-f 출력할 로그 파일의 이름
-t 출력할 로그에 해당하는 트랜잭션 ID
-s 로그 파일의 헤더만 출력하고자 할 때 명시
-l 로그의 유형 (LT 필드) 또는 서브로그유형 (OPTYPE 과 UTYPE 필드)과 관련된 정보만 출력
-S MMDB에서 INSERT, UPDATE, DELETE, COMMIT, ROLLBACK의 로그 개수를 출력한다. 특정 lsn을 입력하면 해당 lsn 이후의 로그만, '0,0'을 입력하면 전체 로그를 보여준다.
-F 로그를 분석할 대상 경로를 지정할 수 있으며, 생략할 경우 \$ALTIBASE_HOME/logs 의 경로를 분석한다.
-g 테이블의 오브젝트 ID별 통계가 전체 통계 정보와 함께 출력된다. 생략하면 전체 통계 정보만 출력된다.

설명#

로그 파일의 내용을 텍스트 형식으로 변환해서 보여준다.

사용예#

쉘 프롬프트 상에서 다음과 같이 수행한다.

$ dumplf -f logfile0

출력 항목#

다음은 dumplf의 출력 예이다.

LSN=<0,820>, COMP:N, MAGIC:820, TID: 6400,BE: N, REP: Y, ISVP: N, ISVP_DEPTH: 0 PLSN=<0,739>, LT: SMR_LT_MEMTRANS_COMMIT, SZ: 45

로그 파일의 내용 중, 필드들은 다음과 같은 의미를 갖는다.

필드 이름 설명
LSN 형식: ( FileNo, Offset) 각 값의 범위: 0 - unsigned int 타입의 최대값 , 로그의 sequence number로 로그의 물리적인 위치를 표시한다. LSN은 파일 번호, 오프셋으로 구성된다.
COMP Y|N Y: 로그가 압축(compress)되었음 N: 압축되지 않음
MAGIC 0 - unsigned short 타입의 최대값 로그 레코드가 유효하다는 것을 나타내기 위해서 로그 LSN의 로그 파일 번호와 오프셋으로 이 값을 만들고 Redo, Undo시 로그를 읽었을 때 이 값이 현재 로그의 LSN과 동일한지 검사한다.
TID 0 - unsigned int 타입의 최대값 트랜잭션 식별자
BE Y|N Y : Begin Transaction Log
REP Y|N Y: 이중화가 걸려있는 경우 Sender가 Standby로 보내거나 참조하는 로그이다. N: Sender는 이 로그를 무시한다
ISVP Y|N Y: 묵시적 저장점 (Implicit Savepoint) 로그. 문장(Statement) 시작 후 처음으로 찍힌 로그이다. 트랜잭션이 문장을 수행했을 때 오류가 발생하면 이 로그까지 부분 철회(Partial Rollback)을 한다.
ISVP_DEPTH 0 - 255 어떤 SQL 구문이 다른 구문 내에 중첩되었을 때 묵시적 저장점의 중첩 깊이
PLSN 형식: (FileNo, Offset) 각 값의 범위: 0 - unsigned int 타입의 최대값 Previous Log LSN으로 이 값을 이용하여 같은 트랜잭션이 기록한 로그들끼리 체인(Chain)으로 연결되어 있다.
LT 문자열 로그의 유형을 나타낸다. 자세한 내용은 아래 로그 유형에 대한 표를 참고한다.
SZ 0 - unsigned int 타입의 최대값 로그 크기 (단위: bytes)
RdSz 0 - unsigned int 타입의 최대값 로그 레코드의 크기 (단위: bytes)
DMIOff 0 - unsigned int 타입의 최대값 논리적 로그의 위치. 트랜잭션 언두 또는 이중화에서 사용한다.
TableOID 0 - unsigned int 타입의 최대값 테이블의 오브젝트 ID
OID 0 - unsigned int 타입의 최대값 테이블을 제외한 모든 오브젝트의 ID. 레코드 오브젝트도 포함한다.
ContType 0, 1 이중화를 위해 사용하는 내부 값
OPTYPE LogTypeName\<LogTypeNumber> Nested Top Action (NTA) 로그의 작업 유형
AFTER SZ: \<size>, Value: \<value> 로그 레코드의 변경 후 이미지 (after image)
BEFORE SZ: \<size>, Value: \<value> 로그 레코드의 변경 전 이미지 (before image)
UTYPE LogTypeName\<LogTypeNumber> UPDATE 로그의 작업 유형
UPOS 형식: (SPACEID:\<SpaceID>, PID:\<PageID>, OFFSET:\<Offset> => OID:\<OID>) 변경된 객체의 주소. 또한 변경 작업 동안 발생한 정보도 포함한다.
SPACEID 0 - unsigned short 타입의 최대값 변경된 객체를 포함하고 있는 테이블스페이스의 ID
PID 0 - unsigned int 타입의 최대값 변경된 객체를 포함하고 있는 페이지의 ID
Offset 0 - unsigned int 타입의 최대값 변경된 객체를 포함하고 있는 페이지 내에서의 offset
FLISlot PrevPID NextPID 형식: (\<BeforePID> => \<AfterPID>) 메모리 테이블스페이스를 관리하기 위해 사용하는 내부 값
ESLSN 형식: (FileNo, Offset) 각 값의 범위: 0 - unsigned int 타입의 최대값 복구 수행 시 시작할 LSN
Lob Locator 0 - unsigned long 타입의 최대값 이중화에서 LOB타입과 관련해서 내부적으로 사용하는 값

dumplf의 결과 중 LT (Log Type: 로그 유형)의 의미는 다음과 같다.

설명
SMR_LT_DUMMY Dummy 로그
SMR_LT_CHKPT_BEGIN Checkpoint Begin 로그
SMR_LT_DIRTY_PAGE Dirty Page 로그
SMR_LT_CHKPT_END Checkpoint End 로그
SMR_LT_MEMTRANS_COMMIT Memory Transaction Commit 로그
SMR_LT_MEMTRANS_ABORT Memory Transaction Abort 로그
SMR_LT_DSKTRANS_COMMIT Disk Transaction Commit 로그
SMR_LT_DSKTRANS_ABORT Disk Transaction Abort 로그
SMR_LT_SAVEPOINT_SET Savepoint Set 로그
SMR_LT_SAVEPOINT_ABORT Savepoint Abort Begin 로그
SMR_LT_XA_PREPARE XA Prepare 로그
SMR_LT_TRANS_PREABORT Abort Begin 로그
SMR_LT_DDL DDL (Data Definition Language) 로그
SMR_LT_XA_SEGS XA Prepare Transaction Segment Information
SMR_LT_LOB_FOR_REPL 이중화를 위한 LOB 로그
SMR_LT_UPDATE MMDB(Main Memory Database) Update 로그
SMR_LT_NTA MMDB NTA(Nested Top Action) 로그
SMR_LT_COMPENSATION Compensation 로그
SMR_LT_DUMMY_COMPENSATION Dummy Compensation 로그
SMR_LT_FILE_BEGIN File Begin 로그
SMR_LT_FILE_TBS_UPDATE Tablespace Update 로그
SMR_LT_FILE_END File End 로그
SMR_DLT_READONLY DRDB(Disk Resident Database) Redo Only 로그
SMR_DLT_UNDOABLE DRDB Undo 로그
SMR_DLT_NTA DRDB NTA 로그
SMR_DLT_COMPENSATION DRDB Compensation 로그
SMR_DLT_REF_NTA DRDB Reference NTA 로그
SMR_LT_TABLE_META 이중화를 위한 테이블 메타 로그

OPTYPE 과 UTYPE 에 가능한 로그 타입 이름

설명
SMR_OP_SMM_PERS_LIST_ALLOC
SMR_OP_SMC_FIXED_SLOT_ALLOC
SMR_OP_SMC_VAR_SLOT_ALLOC
SMR_OP_SMC_FIXED_SLOT_FREE
SMR_OP_SMC_VAR_SLOT_FREE
MMDB의 페이지와 슬롯에 관련된 로그
SMR_OP_CREATE_TABLE
SMR_OP_CREATE_INDEX
SMR_OP_DROP_INDEX
SMR_OP_ALTER_TABLE
SMR_OP_SMM_CREATE_TBS
SMR_OP_INSTANT_AGING_AT_ALTER_TABLE
SMR_OP_SMC_TABLEHEADER_ALLOC
MMDB에서 DDL 구문 수행과 관련된 로그
SMR_MEM_LOB_CURSOR_OPEN
SMR_DISK_LOB_CURSOR_OPEN
SMR_LOB_CURSOR_CLOSE
SMR_PREPARE4WRITE
SMR_FINISH2WRITE
MMDB에서 LOB 데이터 제어와 관련된 로그
SDR_OP_SDP_CREATE_TABLE_SEGMENT
SDR_OP_SDP_CREATE_LOB_SEGMENT
SDR_OP_SDP_CREATE_INDEX_SEGMENT
SDR_OP_SDP_ADD_LOB_PAGE_TO_AGINGLIST
SDR_OP_SDC_ALLOC_UNDO_PAGE
SDR_OP_SDPTB_ALLOCATE_AN_EXTENT_FROM_TBS
SDR_OP_SDPTB_ALLOCATE_AN_EXTDIR_FROM_LIST
SDR_OP_SDPTB_RESIZE_GG
SDR_OP_SDPST_ALLOC_PAGE
SDR_OP_SDPSF_ALLOC_PAGE
SCT_UPDATE_MRDB_CREATE_TBS
SCT_UPDATE_MRDB_CREATE_CIMAGE_FILE
SCT_UPDATE_MRDB_DROP_TBS
SCT_UPDATE_MRDB_ALTER_AUTOEXTEND
SCT_UPDATE_MRDB_ALTER_TBS_ONLINE
SCT_UPDATE_MRDB_ALTER_TBS_OFFLINE
SCT_UPDATE_DRDB_CREATE_TBS
SCT_UPDATE_DRDB_DROP_TBS
SCT_UPDATE_DRDB_ALTER_TBS_ONLINE
SCT_UPDATE_DRDB_ALTER_TBS_OFFLINE
SCT_UPDATE_DRDB_CREATE_DBF
SCT_UPDATE_DRDB_DROP_DBF
SCT_UPDATE_DRDB_EXTEND_DBF
SCT_UPDATE_DRDB_SHRINK_DBF
SCT_UPDATE_DRDB_AUTOEXTEND_DBF
SCT_UPDATE_DRDB_ALTER_DBF_ONLINE
SCT_UPDATE_DRDB_ALTER_DBF_OFFLINE
SCT_UPDATE_VRDB_CREATE_TBS
SCT_UPDATE_VRDB_DROP_TBS
SCT_UPDATE_VRDB_ALTER_AUTOEXTEND
SCT_UPDATE_COMMON_ALTER_ATTR_FLAG
테이블스페이스와 세그먼트에 관련된 로그
SDR_OP_SDPST_UPDATE_WMINFO_4DPATH
SDR_OP_SDPST_UPDATE_MFNL_4DPATH
SDR_OP_SDPST_UPDATE_BMP_4DPATH
SDR_OP_SDPSF_ADD_PIDLIST_PVTFREEPIDLIST_4DPATH
SDR_OP_SDPSF_MERGE_SEG_4DPATH
SDR_OP_SDPSF_UPDATE_HWMINFO_4DPATH
SDR_OP_SDP_DPATH_ADD_SEGINFOSET
DRDB에서 Direct Page Insert를 위한 페이지 관리와 관련된 로그
SDR_OP_SDN_INSERT_KEY_WITH_NTA
SDR_OP_SDN_DELETE_KEY_WITH_NTA
DRDB에서 B-tree 인덱스를 위한 NTA 로그
SDR_OP_STNDR_INSERT_KEY_WITH_NTA
SDR_OP_STNDR_DELETE_KEY_WITH_NTA
DRDB에서 R-tree 인덱스를 위한 NTA 로그
SDR_SDP_1BYTE
SDR_SDP_2BYTE
SDR_SDP_4BYTE
SDR_SDP_8BYTE
SDR_SDP_BINARY
물리적 DRDB 로그
SDR_SDP_PAGE_CONSISTENT
SDR_SDP_INIT_PHYSICAL_PAGE
SDR_SDP_INIT_LOGICAL_HDR
SDR_SDP_INIT_SLOT_DIRECTORY
SDR_SDP_FREE_SLOT
SDR_SDP_FREE_SLOT_FOR_SID
SDR_SDP_RESTORE_FREESPACE_CREDIT
SDR_SDP_RESET_PAGE
SDR_SDP_WRITE_PAGEIMG
SDR_SDP_WRITE_DPATH_INS_PAGE
DRDB의 페이지와 슬롯에 관련된 로그
SDR_SDPST_INIT_SEGHDR
SDR_SDPST_INIT_BMP
SDR_SDPST_INIT_LFBMP
SDR_SDPST_INIT_EXTDIR
SDR_SDPST_ADD_RANGESLOT
SDR_SDPST_ADD_SLOTS
SDR_SDPST_ADD_EXTDESC
SDR_SDPST_ADD_EXT_TO_SEGHDR
SDR_SDPST_UPDATE_WM
SDR_SDPST_UPDATE_MFNL
SDR_SDPST_UPDATE_PBS
SDR_SDPST_UPDATE_LFBMP_4DPATH
SDR_SDPSC_INIT_SEGHDR
SDR_SDPSC_INIT_EXTDIR
SDR_SDPSC_ADD_EXTDESC_TO_EXTDIR
SDR_SDPTB_INIT_LGHDR_PAGE
SDR_SDPTB_ALLOC_IN_LG
SDR_SDPTB_FREE_IN_LG
DRDB를 위한 세그먼트와 테이블스페이스에 관련된 로그
SDR_SDC_INSERT_ROW_PIECE
SDR_SDC_INSERT_ROW_PIECE_FOR_UPDATE
SDR_SDC_INSERT_ROW_PIECE_FOR_DELETEUNDO
SDR_SDC_UPDATE_ROW_PIECE
SDR_SDC_OVERWRITE_ROW_PIECE
SDR_SDC_CHANGE_ROW_PIECE_LINK
SDR_SDC_DELETE_FIRST_COLUMN_PIECE
SDR_SDC_ADD_FIRST_COLUMN_PIECE
SDR_SDC_DELETE_ROW_PIECE_FOR_UPDATE
SDR_SDC_DELETE_ROW_PIECE SDR_SDC_LOCK_ROW
DRDB의 테이블 레코드 관리에 관련된 로그
SDR_SDC_UPDATE_LOBDESC
SDR_SDC_UPDATE_LOBDESC_KEY
SDR_SDC_LOB_WRITE_PIECE
SDR_SDC_LOB_WRITE_PIECE4DML
SDR_SDC_INIT_LOBPAGE
SDR_SDC_LOB_PAGE_TO_AGING_LIST
DRDB에서 LOB 타입 사용에 관련된 로그
SDR_SDC_PK_LOG DRDB에서 이중화를 위한 프라이머리 키 사용에 관련된 로그
SDR_SDC_INIT_CTL
SDR_SDC_EXTEND_CTL
SDR_SDC_BIND_CTS
SDR_SDC_UNBIND_CTS
SDR_SDC_BIND_ROW
SDR_SDC_UNBIND_ROW
SDR_SDC_ROW_TIMESTAMPING
SDR_SDC_DATA_SELFAGING
DRDB에서 레코드를 위한 MVCC 관련된 로그
SDR_SDC_BIND_TSS
SDR_SDC_UNBIND_TSS
SDR_SDC_SET_INITSCN_TO_TSS
SDR_SDC_INIT_TSS_PAGE
SDR_SDC_INIT_UNDO_PAGE
SDR_SDC_INSERT_UNDO_REC
DRDB에서 Trasaction Status Slots (TSS)과 언두 레코드에 관련된 로그
SDR_SDN_INSERT_INDEX_KEY
SDR_SDN_FREE_INDEX_KEY
SDR_SDN_INSERT_UNIQUE_KEY
SDR_SDN_INSERT_DUP_KEY
SDR_SDN_DELETE_KEY_WITH_NTA
SDR_SDN_FREE_KEYS
SDR_SDN_COMPACT_INDEX_PAGE
DRDB에서 B-tree 인덱스 관련된 로그
SDR_SDN_MAKE_CHAINED_KEYS
SDR_SDN_MAKE_UNCHAINED_KEYS
SDR_SDN_KEY_STAMPING
SDR_SDN_INIT_CTL
SDR_SDN_EXTEND_CTL
SDR_SDN_FREE_CTS
DRDB에서 B-tree 인덱스 키를 위한 MVCC에 관련된 로그
SDR_STNDR_MAKE_CHAINED_KEYS
SDR_STNDR_MAKE_UNCHAINED_KEYS
SDR_STNDR_KEY_STAMPING
DRDB에서 R-tree 인덱스 관련된 로그
SMR_PHYSICAL MMDB에서 물리적 로그
SMR_SMM_MEMBASE_SET_SYSTEM_SCN
SMR_SMM_MEMBASE_ALLOC_PERS_LIST
SMR_SMM_MEMBASE_ALLOC_EXPAND_CHUNK
SMR_SMM_PERS_UPDATE_LINK
SMR_SMM_PERS_UPDATE_NEXT_FREE_PAGE_LINK
SMR_SMM_MEMBASE_INFO
MMDB에서 기본 정보와 관련된 로그
SMR_SMC_TABLEHEADER_INIT
SMR_SMC_TABLEHEADER_UPDATE_INDEX
SMR_SMC_TABLEHEADER_UPDATE_COLUMNS
SMR_SMC_TABLEHEADER_UPDATE_INFO
SMR_SMC_TABLEHEADER_SET_NULLROW
SMR_SMC_TABLEHEADER_UPDATE_ALL
SMR_SMC_TABLEHEADER_UPDATE_ALLOCINFO
SMR_SMC_TABLEHEADER_UPDATE_FLAG
SMR_SMC_TABLEHEADER_SET_SEQUENCE
SMR_SMC_TABLEHEADER_UPDATE_TABLE_COLUMN_COUNT
SMR_SMC_TABLEHEADER_UPDATE_TABLE_SEGMENT
SMR_SMC_TABLEHEADER_UPDATE_FLAG_FOR_MEDIA_RECV
SMR_SMC_TABLEHEADER_SET_SEGSTOATTR
SMR_SMC_TABLEHEADER_SET_INSERTLIMIT
SMR_SMC_INDEX_SET_FLAG
SMR_SMC_INDEX_SET_SEGATTR
SMR_SMC_INDEX_SET_SEGSTOATTR
SMR_SMC_INDEX_SET_DROP_FLAG
MMDB에서 테이블 헤더와 인덱스 헤더에 관련된 로그
SMR_SMC_PERS_INIT_FIXED_PAGE
SMR_SMC_PERS_INIT_FIXED_ROW
SMR_SMC_PERS_UPDATE_FIXED_ROW
SMR_SMC_PERS_UPDATE_FIXED_ROW_NEXT_FREE
SMR_SMC_PERS_UPDATE_FIXED_ROW_NEXT_VERSION
SMR_SMC_PERS_SET_FIX_ROW_DROP_FLAG
SMR_SMC_PERS_SET_FIX_ROW_DELETE_BIT
SMR_SMC_PERS_INIT_VAR_PAGE
SMR_SMC_PERS_UPDATE_VAR_ROW_HEAD
SMR_SMC_PERS_UPDATE_VAR_ROW
SMR_SMC_PERS_SET_VAR_ROW_FLAG
SMR_SMC_PERS_SET_VAR_ROW_NXT_OID
SMR_SMC_PERS_WRITE_LOB_PIECE
SMR_SMC_PERS_INSERT_ROW
SMR_SMC_PERS_UPDATE_INPLACE_ROW
SMR_SMC_PERS_UPDATE_VERSION_ROW
SMR_SMC_PERS_DELETE_VERSION_ROW
MMDB에서 테이블 레코드와 관련된 로그

MVCC와 관련된 자세한 설명은 Administrator’s Manual 을 참고하기 바란다.

dumptrc#

개요#

Altibase 서버가 비정상 종료될 때 \$ALTIBASE_HOME/trc 디렉토리에 기록되는 트레이스 로그 파일을 사용자가 식별할 수 있는 형태로 변환하여 출력한다.

dumptrc [-h |[-p file_path][-c [-s]]
[-a|-i file_name [-i file_name]..|-e file_name [-e file_name]..] [-n file_count] [-x] |-f |-v]

구문#

파라미터#

파라미터 설명
-h 도움말을 출력한다. 파라미터를 생략하거나 다른 파라미터와 중복하여 사용할 경우 도움말이 우선한다.
-p 트레이스 로그 파일을 가져오는 경로를 지정한다. 경로를 지정하지 않으면 기본적으로 \$ALTIBASE_HOME/trc 디렉토리의 로그 파일을 가져온다.
-c altibase_error.log에 기록된 ALTIBASE 프로세스 콜 스택을 사용자가 식별할 수 있는 함수명으로 변환하여 출력한다. 콜 스택의 주소를 함수명으로 변경하지 않으려면 -s 옵션를 사용한다. 파라미터 -a, -i, -e, -n과 함께 사용하지 않으면 콜 스택만 기록된다.
-s 트레이스 로그에 기록된 콜 스택만을 출력하고 함수명으로 변경하지 않는다.
-a 트레이스 로그 파일의 전부를 정렬하여 출력한다.
-i 지정하는 트레이스 로그 파일을 출력한다. 복수의 로그 파일이 출력 가능하다. '-e' 파라미터와 함께 사용할 수 없다.
-e 지정한 트레이스 로그 파일을 제외한 모든 파일을 출력한다. 반복하여 복수의 로그 파일을 제거할 수 있으며, '-i' 파라미터와 함께 사용할 수 없다.
-n 한 번에 출력할 로그의 개수를 지정한다. 1\~127개의 로그를 출력할 수 있으며, 지정하지 않으면 10개의 로그가 출력된다.
-f 트레이스 로그 파일이 기록될 때마다 추가되는 로그 메세지를 출력한다.
-x altibase버전과 dumptrc버전이 틀린 경우도 콜 스택을 출력한다.
-v dumptrc의 버전을 출력한다.

설명#

프로세스 콜 스택에는 Altibase 종료 당시 수행되던 Altibase 내부 모듈에 대한 정보가 기록된다. dumptrc를 이용하여 가져올 수 있는 트레이스 로그 파일은 \$ALTIBASE_HOME/trc 디렉터리에 기록되는 아래의 파일들을 사용할 수 있다.

  • ERROR : altibase_error.log
  • SERVER : altibase_boot.log
  • SM : altibase_sm.log
  • RP : altibase_rp.log
  • QP : altibase_qp.log
  • JOB : altibase_job.log
  • DK : altibase_dk.log
  • DR : altibase_dr.log
  • XA : altibase_xa.log
  • MM : altibase_mm.log
  • RP_CONFLICT : altibase_rp_conflict.log
  • DUMP : altibase_dump.log
  • TRC : altibase_trace.log
  • SNMP : altibase_snmp.log
  • CM : altibase_cm.log
  • MISC : altibase_misc.log
  • SD : altibase_sd.log

만약 \$ALTIBASE_HOME/trc가 아닌 다른 경로에 있는 트레이스 로그 파일을 출력할 때에는 '-p'를 사용하여 경로를 변경할 수 있다.

Altibase 서버가 비정상 종료할 경우, 프로세스 콜 스택을 dumptrc로 변환하여 Altibase 기술서비스 팀에 송부하면, 보다 빨리 문제를 해결할 수 있을 것이다.

주의 사항#

Altibase의 실행 파일의 버전과 dumptrc의 버전이 동일해야 정확한 콜 스택 정보를 확인할 수 있다.버전이 틀릴 경우는 잘못된 값이 나올 수 있기 때문에 기본적으로 경고메시지를 보여주고 콜 스택을 출력하지 않는다. 버전이 틀릴때도 강제로 콜스택을 출력하기 위해서는 -x옵션을 사용하면 된다.

사용예#

altibase_error.log와 altibase_boot.log를 묶어서 출력한다.

$ dumptrc -i server -i error
[2015/10/21 17:29:42 55C][PID:32702][Thread-2]
  ==> Initialize Disaster Recovery Manager  
[2015/10/21 17:29:42 55D][PID:32702][Thread-2]
  ... [SUCCESS] 
[2015/10/21 17:29:42 55E][PID:32702][Thread-2]
  ==> Initialize MMX Service  
[2015/10/21 17:29:42 55F][PID:32702][Thread-2]
  ... [SUCCESS] 
[2015/10/21 17:29:42 560][PID:32702][Thread-2]
  ==> Initialize Audit Service  
[2015/10/21 17:29:42 561][PID:32702][Thread-2]
  ... [SUCCESS] 
[2015/10/21 17:29:42 562][PID:32702][Thread-2]
  ==> Initialize Job Manager  
[2015/10/21 17:29:42 563][PID:32702][Thread-2]
  ... [SUCCESS] 
[2015/10/21 17:29:42 564][PID:32702][Thread-2]
--- STARTUP Process SUCCESS ---
[2015/10/21 17:30:51 57B] Dump of Stack
SIGNAL INFORMATION ==============================
Signal 6(SIGABRT) caught.
    Sent by process : 2331
    Sent by user    : 1000
BEGIN-DUMP ======================================
===== SERVER =====
ALTIBASE hdb
    Product version  : 7.3.0.0.0
    CPU              : X86
    Operating System : x86_64-unknown-linux-gnu
    Process ID       : 32698
    Thread No        : 0
END-DUMP ========================================
BEGIN-STACK [CRASH] =============================
Caller[0] 00000000011E0EBF
Caller[1] 0000000000426CFE
Caller[2] 00007FD306FD4CB0
Caller[3] 00007FD30609F763
Caller[4] 000000000042F66F
Caller[5] 00000000004213CE
Caller[6] 000000000041D1E0
Caller[7] 00007FD305FD376D
Caller[8] 00000000004206BD
END-STACK =======================================
10 logs printed.

error.log만 제외하고 출력한다.

$ dumptrc -e error
[2015/10/21 17:29:48 571][PID:32702][Thread-2]
[EXEC_DDL_BEGIN : DROP TABLE T1]
[2015/10/21 17:29:48 572][PID:32702][Thread-2]
[EXEC_DDL_END : SUCCESS]
[2015/10/21 17:29:49 573][PID:32702][Thread-2]
[EXEC_DDL_BEGIN : CREATE TABLE T1 ( I1 INTEGER )]
[2015/10/21 17:29:49 574][PID:32702][Thread-2]
[EXEC_DDL_END : SUCCESS]
[2015/10/21 17:29:49 575][PID:32702][Thread-2]
[EXEC_DDL_BEGIN : DROP TABLE T1]
[2015/10/21 17:29:49 576][PID:32702][Thread-2]
[EXEC_DDL_END : SUCCESS]
[2015/10/21 17:29:53 577][PID:32702][Thread-2]
[EXEC_DDL_BEGIN : CREATE TABLE T1 ( I1 INTEGER )]
[2015/10/21 17:29:53 578][PID:32702][Thread-2]
[EXEC_DDL_END : SUCCESS]
[2015/10/21 17:29:53 579][PID:32702][Thread-2]
[EXEC_DDL_BEGIN : DROP TABLE T1]
[2015/10/21 17:29:53 57A][PID:32702][Thread-2]
[EXEC_DDL_END : SUCCESS]
10 logs printed.

콜 스택과 altibase_boot.log, altibase_sm.log을 함께 출력하되 상위 20개 로그 출력한다.

$ dumptrc -c -i error -i server -i sm -n 20
=================================================
= Callstack Information 0
=================================================
[2015/10/21 17:29:42 551][PID:32702][Thread-2]
  ==> Initialize Security Module  
[2015/10/21 17:29:42 552][PID:32702][Thread-2]
  ... [SUCCESS] 
...
[2015/10/21 17:29:42 564][PID:32702][Thread-2]
--- STARTUP Process SUCCESS ---
[2015/10/21 17:30:51 57B] Dump of Stack
SIGNAL INFORMATION ==============================
Signal 6(SIGABRT) caught.
    Sent by process : 2331
    Sent by user    : 1000
BEGIN-DUMP ======================================
===== SERVER =====
ALTIBASE hdb
    Product version  : 7.3.0.0.0
    CPU              : X86
    Operating System : x86_64-unknown-linux-gnu
    Process ID       : 32698
    Thread No        : 0
END-DUMP ========================================
BEGIN-STACK [CRASH] =============================
Caller[0] 00000000011E0EBF  => iduStack::dumpStack(iduSignalDef const*, siginfo*, ucontext*)
Caller[1] 0000000000426CFE  => mmmSignalHandler
Caller[2] 00007FD306FD4CB0  => not found
Caller[3] 00007FD30609F763  => not found
Caller[4] 000000000042F66F  => mmtSessionManager::run()
Caller[5] 00000000004213CE  => mmi::serverStart(int, int)
Caller[6] 000000000041D1E0  => main
Caller[7] 00007FD305FD376D  => not found
Caller[8] 00000000004206BD  => _start
END-STACK =======================================
20 logs printed.

다른 디렉토리의 trc 로그에서 콜 스택을 가져와서 출력한다.

$ dumptrc -p ./altibase_home/trc -c -n 20

Path : ./altibase_home/trc
=================================================
= Callstack Information 0
=================================================
[2015/10/21 17:29:45 568][PID:32702][Thread-2]
[EXEC_DDL_END : SUCCESS]
[2015/10/21 17:29:45 569][PID:32702][Thread-2]
[EXEC_DDL_BEGIN : DROP TABLE T1]
...
[2015/10/21 17:30:51 57B] Dump of Stack
SIGNAL INFORMATION ==============================
Signal 6(SIGABRT) caught.
    Sent by process : 2331
    Sent by user    : 1000
BEGIN-DUMP ======================================
===== SERVER =====
ALTIBASE hdb
    Product version  : 7.3.0.0.0
    CPU              : X86
    Operating System : x86_64-unknown-linux-gnu
    Process ID       : 32698
    Thread No        : 0
END-DUMP ========================================
BEGIN-STACK [CRASH] =============================
Caller[0] 00000000011E0EBF  => iduStack::dumpStack(iduSignalDef const*, siginfo*, ucontext*)
Caller[1] 0000000000426CFE  => mmmSignalHandler
Caller[2] 00007FD306FD4CB0  => not found
...
Caller[8] 00000000004206BD  => _start
END-STACK =======================================
20 logs printed.

killCheckServer#

개요#

killCheckServer는 실행 중인 checkServer를 종료한다.

killCheckServer

구문#

killcheckserver

설명#

killCheckServer는 실행 중인 checkServer를 종료한다.

server stop 또는 server kill 명령을 사용해서 Altibase 서버를 종료할 경우, checkServer가 동작 중이라면 서버 종료 전에 먼저 server 스크립트 내에서 killCheckServer가 checkServer의 동작을 동작을 멈추도록 되어 있다. 그리고, \$ALTIBASE_HOME/trc 디렉토리의 killCheckServer.log 파일에 killCheckServer 수행 결과가 아래와 같이 기록된다.

  • checkServer가 동작 중일 때:
checkServer killed.
  • checkServer가 동작 중이 아닐 때:
ERROR CODE : -27

그러나, 사용자가 직접 killCheckServer 명령어를 실행할 경우에는 killCheckServer.log에 수행 결과가 기록되지 않는다.

사용예#

쉘 프롬프트 상에서 다음과 같이 수행한다.

$ killCheckServer

server#

개요#

Altibase 데이터베이스의 생성, 구동 및 종료시키기 위한 쉘 스크립트이다.

server { start | stop | restart | kill | status | create db_charset national_charset | startRoleManager | stopRoleManager } 

구문#

server

파라미터#

파라미터 설명
start Altibase 프로세스를 구동한다.
stop Altibase 프로세스를 종료한다.
restart Altibase 프로세스를 재구동한다.
kill Altibase 프로세스를 강제 종료한다.
status 데이터베이스 내의 테이블 목록을 출력한다.
create 크기 10M, 노아카이브 로그로 입력된 캐릭터 셋으로 데이터베이스를 생성한다.
startRoleManager Altibase 프로세스를 Disaster Recovery의 역할 관리자로서 구동한다.
stopRoleManager 역할 관리자를 종료한다.

설명#

Altibase의 구동 및 종료, 데이터베이스 생성은 iSQL상에서 SQL 구문으로 수행해야 한다. Altibase는 사용자 편의를 위해 관리자가 자주 사용하는 이러한 구문들을 묶어서 쉘 스크립트 파일 형태로 제공한다.

server 스크립트가 제공하는 기능은 다음과 같다.

  • Altibase 프로세스의 구동

  • Altibase 프로세스의 종료

  • Altibase 프로세스의 재구동

  • Altibase 프로세스의 강제 종료

  • “SELECT * FROM TAB;” 결과 출력

  • Altibase 데이터베이스 생성

  • Altibase 프로세스를 역할 관리자로 구동

  • 역할 관리자 종료

Altibase 관리를 위한 SQL 구문에 대한 자세한 내용은 SQL Reference를 참조한다.

사용예#

사용 방법은 다음과 같다.

$ server start
$ server restart
$ server stop
$ server status
$ server kill
$ server create ksc5601 utf16
$ server startRoleManager
$ server stopRoleManager

참고사항#

Administrator’s Manual, SQL Reference를 참고하기 바란다.