제2장 관리의 기본

내용 목차

2.1. 사용자 정의
2.1.1. DBA
2.1.2. SYS
2.1.3. 시스템 관리자
2.1.4. 애플리케이션 프로그램 개발자
2.1.5. 데이터베이스 사용자
2.2. 설치 환경
2.3. tbSQL 유틸리티 사용
2.4. 사용자 및 테이블 생성
2.5. 기동과 종료
2.5.1. tbboot
2.5.2. tbdown

본 장에서는 DBA가 Tibero를 관리하기에 앞서 기본적으로 알아야 할 사항을 설명한다.

2.1. 사용자 정의

Tibero를 크게 사용하는 목적과 역할에 따라 사용자의 유형을 다음과 같이 정의한다.

2.1.1. DBA

DBMS는 적어도 1명의 DBA가 필요하다. 데이터베이스를 사용하는 사용자가 많으면 많을수록 이를 관리하는 개인이나 그룹이 필요하다. DBA는 데이터베이스 환경을 유지하는 데 필요한 제반 활동을 감독하거나 직접 수행하는 개인 또는 그룹이다.

데이터베이스 내용의 정확성이나 통합성을 결정하고 데이터베이스의 내부 저장 구조와 접근 관리 대책을 결정하며, 데이터의 보안 정책을 수립하고 점검하는 등 데이터베이스의 성능을 감시하여 변화하는 요구에 대응하는 책임을 진다. 또한 다양한 데이터베이스 제품에 관한 깊은 경험이 요구된다.

다음은 DBA가 관리해야 할 항목을 간략히 소개한 표이다.

항목설명
DBMS

현재 사용하고 있는 DBMS의 특성을 파악한다.

  • 디스크 용량이 충분한가?

  • 물리적으로 독립된 디스크인 경우 시스템 부하가 제대로 분산이 되고 있는가?

  • 데이터 배치는 잘 되었는가?

  • CPU와 메모리 사용량, 클라이언트의 응답 시간은 어떠한가?

문제가 발생하면 H/W를 확장하거나 데이터베이스를 튜닝한다.

데이터베이스
  • 자주 사용되는 스키마 객체는 무엇인가?

  • 자주 사용되는 SQL 문장은 무엇인가?

  • 자주 사용되는 SQL 문장이 효율적으로 실행되고 있는가?

유지보수
  • Tibero의 설치 및 패치를 수행한다.

  • 데이터베이스의 설계 및 분석, 구현을 한다.

  • 데이터베이스의 생성 및 권한을 설정한다.

  • 사용자의 권한을 설정한다.

정책 및 절차 확립데이터베이스의 관리, 보안, 유지보수 등에 속하는 정책 및 절차를 확립한다.
보안데이터 누출이나 유실을 막기 위해 보안 정책을 수립한다.
백업 및 복구주기적으로 데이터를 백업하고, 문제가 발생할 경우 복구한다.

참고

Tibero는 DBA가 위와 같은 항목을 효율적이고 유연하게 관리할 수 있도록 유틸리티를 제공하고 있다. 자세한 내용은 "Tibero 유틸리티 안내서"를 참고한다.

2.1.2. SYS

Tibero를 설치하고 나면 데이터베이스 자체의 메타데이터를 관리하는 'SYS'라는 사용자가 생성된다. SYS 사용자에 DBA 역할이 부여되며, 이는 UNIX 계열(Linux 포함)의 루트 사용자와 비슷한 역할을 담당한다.

Tibero의 데이터 사전, 기반 테이블, 뷰 등은 모두 SYS 사용자의 스키마에 저장된다. 특히 기반 테이블, 뷰는 Tibero가 동작하는 데 매우 중요한 역할을 한다. 따라서 SYS 사용자 외 다른 사용자가 이를 수정하거나 조작해서는 안 된다.

SYS 사용자의 접속 계정은 다음과 같다.

항목설명
ID

ID는 'SYS'이다.

SYS 사용자는 하나의 스키마를 가진다. 스키마의 이름은 사용자 이름인 SYS와 동일하다.

패스워드패스워드는 Tibero를 설치할 때 사용자가 입력한 값이다. 패스워드는 설치 후에 변경할 수 있다.

2.1.3. 시스템 관리자

일부 사이트는 1명 이상의 시스템 관리자가 있다. 시스템 관리자(또는 sysadmin, 네트워크 관리자 포함)는 컴퓨터 시스템이나 네트워크를 운영하고 유지 보수하는 개인이나 그룹이다. 서버나 다른 컴퓨터에 운영체제를 설치하고, 유지 보수하며 서비스 정지 등의 문제에 대해 관리 책임이 있다.

또한 약간의 프로그래밍 실력 그리고 시스템과 관련된 프로젝트에 대한 관리, 감시, 운영 기술 등을 가지고 있어야 하며 컴퓨터 문제에 대해 기술적 지원을 하는 역할도 수행해야 한다.

2.1.4. 애플리케이션 프로그램 개발자

애플리케이션 프로그램 개발자는 보통 넓은 영역의 컴퓨터 프로그래밍이나 전문적인 프로젝트 관리 분야에서 소프트웨어 개발 작업을 하는 개인이다. 애플리케이션 프로그램 개발자는 일반적으로 개별 프로그램 작업보다는 애플리케이션 프로그램의 수준에서 전반적인 프로젝트에 기여한다.

애플리케이션 프로그램 개발자는 데이터베이스 사용 측면에서 데이터베이스 애플리케이션 프로그램을 설계하고 구현하는 역할을 수행한다.

애플리케이션 프로그램 개발자의 역할은 다음과 같다.

  • 데이터베이스 애플리케이션 프로그램의 설계와 개발

  • 애플리케이션 프로그램을 위한 데이터베이스 구조 설계 및 명세

  • 애플리케이션 프로그램을 위한 저장 공간 요청

  • DBA와 데이터베이스 정보를 공유

  • 개발 중에 애플리케이션 프로그램 튜닝

  • 개발 중에 애플리케이션 프로그램의 보안 정책 수립

2.1.5. 데이터베이스 사용자

데이터베이스 사용자는 Tibero를 사용하는 DBA, 업무 분석가, 애플리케이션 프로그램 개발자, 사용자 모두를 뜻한다.

2.2. 설치 환경

Tibero를 정상적으로 설치했다면 시스템에 다음과 같은 환경변수가 설정된다.

환경변수설명
$TB_HOMETibero가 설치된 홈 디렉터리이다. Tibero 서버, 클라이언트 라이브러리, 다양한 부가 기능을 수행하는 파일이 설치된다.
$TB_SID한 머신에서 Tibero의 인스턴스를 여러 개로 운영할 때 필요한 서비스 ID이다.
$PATH파일 시스템을 통해 특정 파일에 접근하기 위한 디렉터리 경로를 설정한다.

환경변수를 제대로 설정하지 않으면 Tibero를 사용할 수 없다. 따라서 환경변수를 확인하는 절차가 필요하다.

참고

본 안내서에서는 UNIX 셸 명령어를 실행할 때 GNU Bash(http://www.gnu.org/software/bash/) 문법을 따른다. 사용하는 셸의 종류에 따라 문법이 다를 수 있으며, 자세한 내용은 현재 사용 중인 운영체제의 안내서를 참고한다.

UNIX 셸 프롬프트에서 환경변수를 확인하는 방법은 다음과 같다.

  • $TB_HOME

    $ echo $TB_HOME
    /home/tibero/tibero5

    이 디렉터리 안에는 Tibero 서버, 클라이언트 라이브러리, 부가 기능을 지원하는 파일이 있다.

  • $TB_SID

    $ echo $TB_SID
    Tb5

    서비스 ID는 데이터베이스의 이름과 동일하게 설정할 것을 권장한다.

  • $PATH

    $ echo $PATH
    ...:/home/tibero/tibero5/bin:/home/tibero/tibero5/client/bin:...

    $PATH는 다음의 디렉터리를 포함하고 있어야 한다.

    디렉터리설명
    $TB_HOME/binTibero의 실행 파일과 서버 관리를 위한 유틸리티가 위치한 디렉터리이다.
    $TB_HOME/client/binTibero의 클라이언트 실행 파일이 있는 디렉터리이다.

2.3. tbSQL 유틸리티 사용

tbSQLTibero에서 제공하는 대화형 SQL 명령어 처리 유틸리티이다. SQL 질의, 데이터 정의어, 트랜잭션과 관련된 SQL 문장 등을 실행할 수 있다. 본 절에서는 tbSQL 유틸리티를 이용하여 데이터베이스에 접속하는 방법과 그 이후에 간단한 SQL 문장을 실행하는 방법을 설명한다.

tbSQL 유틸리티

tbSQL 유틸리티를 실행하는 방법은 다음과 같다.

[예 2.1] tbSQL 유틸리티의 실행

$ tbsql

tbSQL 5 SP1

Copyright (c) 2008, 2009, 2011 TmaxData Corporation. All rights reserved.

SQL>

tbSQL 유틸리티가 정상적으로 실행되면 이처럼 SQL 프롬프트가 나타난다. 이 프롬프트에서 데이터베이스 사용자는 SQL 문장을 실행할 수 있다. SQL 프롬프트가 나타나지 않고 데이터베이스 접속에 실패한 경우 “Appendix C. 문제 해결”을 참고하여 해결한다.

데이터베이스 접속

tbSQL 유틸리티를 실행한 후 SQL 프롬프트가 나타나면 데이터베이스에 접속할 수 있는 상태가 된다.

데이터베이스에 접속하는 방법은 다음과 같다.

[예 2.2] tbSQL 유틸리티를 이용한 데이터베이스 접속

$ tbsql SYS/tibero

tbSQL 5 SP1

Copyright (c) 2008, 2009, 2011 TmaxData Corporation. All rights reserved.

Connected to Tibero.

SQL>


본 예제에서는 UNIX 셸 프롬프트에서 tbSQL 유틸리티의 실행과 함께 사용자명과 패스워드를 입력한다.

사용자명패스워드를 입력할 때에는 다음과 같은 규칙이 있다.

항목설명
사용자명스키마 객체의 이름과 마찬가지로 대소문자를 구분하지 않는다. 단, 큰따옴표(“ ”)에 사용자명을 입력하는 경우는 예외다.
패스워드패스워드는 대소문자를 구분하므로 입력할 때 주의해야 한다.

tbSQL 유틸리티의 명령어

tbSQL 유틸리티에서 사용할 수 있는 명령어는 대소문자를 구분하지 않고 사용할 수 있으며 SQL 문장을 실행하거나 데이터베이스 관리에 필요한 명령어가 포함되어 있다.

tbSQL 유틸리티에서 사용할 수 있는 명령어는 다음과 같다.

명령어설명
!

운영체제의 명령어를 실행하는 명령어이다.

HOST 명령어와 동일하다.

@, @@

스크립트를 실행하는 명령어이다.

START 명령어와 동일하다.

/

현재 SQL 버퍼 내의 SQL 문장 또는 tbPSM 프로그램을 실행하는 명령어이다.

RUN 명령어와 동일하다.

ACC[EPT]사용자의 입력을 받아 바인드 변수의 속성을 설정하는 명령어이다.
C[HANGE]SQL 버퍼의 현재 라인에서 패턴 문자를 찾아 주어진 문자로 변환하는 명령어이다.
CL[EAR]설정된 옵션을 초기화하거나 지우는 명령어이다.
COL[UMN]컬럼의 출력 속성을 설정하는 명령어이다.
CONN[ECT]특정 사용자 ID로 데이터베이스에 접속하는 명령어이다.
DEFINE바인드 변수를 정의하거나 출력하는 명령어이다.
DELSQL 버퍼에 저장된 라인을 지우는 명령어이다.
DESC[RIBE]지정된 객체의 컬럼 정보를 출력하는 명령어이다.
DISC[ONNECT]현재 데이터베이스로부터 접속을 해제하는 명령어이다.
ED[IT]특정 파일 또는 SQL 버퍼의 내용을 외부 편집기를 이용하여 편집하는 명령어이다.
EXEC[UTE]단일 tbPSM 문장을 수행하는 명령어이다.
EXIT

tbSQL 유틸리티를 종료하는 명령어이다.

QUIT 명령어와 동일하다.

H[ELP]도움말을 출력하는 명령어이다.
HIS[TORY]실행한 명령어의 히스토리를 출력하는 명령어이다.
HO[ST]

운영체제 명령어를 실행하는 명령어이다.

! 명령어와 동일하다.

I[NPUT]SQL 버퍼의 현재 라인 뒤에 새로운 라인을 추가하는 명령어이다.
L[IST]SQL 버퍼 내의 특정 내용을 출력하는 명령어이다.
LOAD[FILE]Tibero의 테이블을 Oracle의 SQL*Loader 툴이 인식할 수 있는 형식으로 저장하는 명령어이다.
LS현재 사용자가 생성한 데이터베이스 객체를 출력하는 명령어이다.
PAU[SE]사용자가 <Enter> 키를 누를 때까지 실행을 멈추는 명령어이다.
PING특정 데이터베이스에 대해 접속 가능한 상태인지를 출력하는 명령어이다.
PRI[NT]사용자가 정의한 바인드 변수의 값을 출력하는 명령어이다.
PRO[MPT]사용자가 정의한 SQL 문장이나 빈 라인을 그대로 화면에 출력하는 명령어이다.
Q[UIT]

tbSQL 유틸리티를 종료하는 명령어이다.

EXIT 명령어와 동일하다.

R[UN]

현재 SQL 버퍼 내의 SQL 문장이나 tbPSM 프로그램을 실행하는 명령어이다.

/ 명령어와 동일하다.

SAVE CREDENTIAL데이터베이스 접속 정보를 암호화하여 파일에 저장하는 명령어이다.
SETtbSQL 유틸리티의 시스템 변수를 설정하는 명령어이다.
SHO[W]tbSQL 유틸리티의 시스템 변수를 출력하는 명령어이다.
SPO[OL]화면에 출력되는 내용을 모두 외부 파일에 저장하는 과정을 시작하거나 종료하는 명령어이다.
STA[RT]

스크립트 파일을 실행하는 명령어이다.

@ 명령어와 동일하다.

[TB]DOWNTibero를 종료하는 명령어이다.
UNDEF[INE]하나 이상의 바인드 변수를 삭제하는 명령어이다.
VAR[IABLE]사용자가 정의한 바인드 변수를 선언하는 명령어이다.
WHENEVER에러가 발생한 경우의 동작을 정의하는 명령어이다.

위 표에서 대괄호([ ])에 포함된 내용은 입력하지 않아도 명령어를 실행할 수 있다.

참고

tbSQL 유틸리티에 대한 자세한 내용은 "Tibero 유틸리티 안내서"를 참고한다.

기본적으로 자신의 스키마에 어떤 객체들이 있는지 알아보기 위해서는 LS 명령어를 사용한다.

다음은 SYS 사용자로 데이터베이스에 접속하여 LS 명령어를 실행하는 예이다.

[예 2.3] LS 명령어의 실행

SQL> LS

NAME                           OBJECT_TYPE
------------------------------ --------------------
SYS_CON100                     INDEX
SYS_CON400                     INDEX
SYS_CON700                     INDEX
_DD_CCOL_IDX1                  INDEX
        ......중간 생략......
UTL_RAW                        PACKAGE
DBMS_STATS                     PACKGE BODY
TB_HIDDEN2                     PACKGE BODY

SQL>

LS 명령어는 tbSQL 유틸리티를 사용할 때 사용자의 편의를 위해 제공되는 명령어이며, SQL 문장을 실행할 때 지원하는 명령어는 아니다. 오직 tbSQL 유틸리티에서만 사용할 수 있다. 즉, tbSQL 유틸리티가 아닌 JDBC, CLI 등을 이용하여 접속한 경우 이 명령어를 사용할 수 없다.

[예 2.3]에서는 SYS 사용자의 스키마에 존재하는 모든 객체가 출력된다. SYS 스키마에는 Tibero가 스스로를 관리하기 위해 내부적으로 사용되는 객체가 많다. 따라서 객체가 많이 출력된다.

다음은 LS 명령어를 실행하여 현재 시스템에 접속하고 있는 사용자를 조회하는 예이다.

[예 2.4] LS 명령어의 실행 - 사용자 조회

SQL> LS USER

USERNAME
------------------------------
SYS

다음은 LS 명령어를 실행하여 현재 데이터베이스에 존재하는 테이블 스페이스를 조회하는 예이다.

[예 2.5] LS 명령어의 실행 - 테이블 스페이스 조회

SQL> LS TABLESPACE

TABLESPACE_NAME
------------------------------
SYSTEM
UNDO
TEMP
USER

SQL 문장의 실행

다음은 V$SESSION이라는 뷰를 이용하여 TYPE 컬럼이 'WTHR'인 데이터를 조회하는 SQL 문장을 실행하는 예이다. V$SESSION은 각각의 세션 ID를 나열하는 뷰이다.

[예 2.6] SQL 문장의 실행 (1)

SQL> SELECT SID, STATUS, TYPE, WTHR_ID FROM V$SESSION WHERE TYPE = 'WTHR';

       SID STATUS                           TYPE        WTHR_ID
---------- -------------------------------- -------- ----------
        10 ACTIVE                           WTHR              1
        13 RUNNING                          WTHR              1

2 rows selected.

다음은 SQL 표준에 대한 간략한 설명이다.

일반적으로 SQL 문장을 실행할 때 지켜야 할 규칙이 있다. 이 규칙은 ANSI(American National Standard Institute)와 ISO/IEC(International Standard Organization/International Electrotechnical Commission)에서 공동으로 제정한 관계형(relational) 또는 객체 관계형(object-relational) 데이터베이스 언어이다. 즉, SQL 표준을 따른다.

SQL 표준은 1992년과 1999년에 각각 버전 2와 버전 3가 제정되었다. 1992년에 발표된 SQL 표준은 SQL2 또는 SQL-92라고 불리며, 관계형 데이터베이스를 위한 언어로 정의되었다.

1999년에 제정된 SQL 표준은 SQL3 또는 SQL-99라고 불리며, SQL2에 객체지향 개념을 추가하여 확장한 객체관계형 데이터베이스 언어이다.

SQL 표준에서 정의하고 있는 SQL 문장은 크게 다음과 같이 나뉜다.

  • 데이터 조작어(Data Manipulation Language, 이하 DML)

  • 데이터 정의어(Data Definition Language, 이하 DDL)

  • 데이터 제어어(Data Control Language, 이하 DCL)

참고

본 안내서에서는 DCL에 포함되는 COMMIT, ROLLBACK 등의 SQL 명령어 일부를 트랜잭션 및 세션 언어로 재구성하였다. 따라서 전체 DCL에 대한 내용은 관련 문서를 참고한다.

DML에 포함되는 SELECT 문을 다음과 같이 실행한다.

[예 2.7] SQL 문장의 실행 (2)

SQL> select SID, STATUS, TYPE, WTHR_ID from v$session where type = 'WTHR';

......[예 2.6]의 실행 결과와 동일......

SQL> select SID, STATUS, TYPE, WTHR_ID from V$SESSION where type = 'WTHR';

......[예 2.6]의 실행 결과와 동일......

SQL> select SID, STATUS, TYPE, WTHR_ID From v$session Where type = 'WTHR';

......[예 2.6]의 실행 결과와 동일......

SQL 표준은 대소문자를 구분하지 않으므로 큰따옴표(" ") 또는 작은따옴표(' ')로 묶은 부분을 제외하고는 대소문자를 혼용하여 사용할 수 있다. 위 예제는 모두 [예 2.6]를 실행한 결과와 동일한 결과가 나타나며 그 의미도 같다.

그러나 다음과 같은 SQL 문장을 실행하면 그 결과와 의미는 달라진다.

SQL> SELECT SID, STATUS, TYPE, WTHR_ID FROM V$SESSION WHERE TYPE = 'wthr';

0 row selected.

2.4. 사용자 및 테이블 생성

본 절에서는 데이터베이스를 사용하기 위해 사용자와 테이블을 생성하는 방법을 설명한다.

사용자의 생성

사용자를 생성하려면 CREATE USER 문을 사용해야 한다.

다음은 'ADMIN'이라는 사용자를 생성하고 세션(CREATE SESSION)과 테이블을 생성(CREATE TABLE)할 수 있는 특권을 부여하는 예이다.

[예 2.8] 사용자의 생성

SQL> CREATE USER ADMIN IDENTIFIED BY 'password123';
      ...'ADMIN'이라는 이름의 사용자를 생성하고 패스워드는 'password123'으로 한다.
User 'ADMIN' created.

SQL> GRANT CREATE SESSION TO ADMIN;
      ...ADMIN 사용자에게 세션을 시작할 수 있는 특권을 부여한다.
Granted.

SQL> GRANT CREATE TABLE TO ADMIN;
      ...ADMIN 사용자에게 테이블을 생성할 수 있는 특권을 부여한다.
Granted.

SQL> CONN ADMIN/PASSWORD123
      ...방금 만든 ADMIN 사용자로 데이터베이스에 접속한다.
TBR-17001: Login failed: invalid user name or password.

No longer connected to server.
      ...패스워드는 대소문자를 구분하므로 데이터베이스 접속에 실패한다.

SQL> CONN ADMIN/password123
      ...패스워드를 올바르게 입력한 후 데이터베이스에 다시 접속한다.
Connected.

SQL> LS
      ...방금 생성된 사용자이므로 스키마 객체가 없다.
NAME                           OBJECT_TYPE
------------------------------ --------------------

SQL>

[예 2.8]의 과정을 모두 완료하면 Tibero에 'ADMIN'이라는 새로운 사용자가 추가된다.

테이블의 생성

테이블을 생성하려면 CREATE TABLE 문을 사용해야 한다.

다음은 'PRODUCT'라는 테이블을 생성하고 4개의 로우 데이터를 삽입(INSERT)하는 예이다.

[예 2.9] CREATE TABLE 문을 이용한 테이블의 생성

SQL> CREATE TABLE "PRODUCT"
    (
      PROD_ID NUMBER(3) NOT NULL CONSTRAINT PROD_ID_PK PRIMARY KEY,
      PROD_NAME VARCHAR(50) NULL,
      PROD_COST NUMBER(10) NULL,
      PROD_PID NUMBER(3) NULL,
      PROD_DATE DATE NULL
    );
Table 'PRODUCT' created.

SQL> SELECT TABLE_NAME FROM USER_TABLES;
      ...USER_TABLES은 현재 데이터베이스에 접속한 사용자의 모든 테이블을 나열하는 정적 뷰이다.

TABLE_NAME
------------------------
PRODUCT

1 row selected.


SQL> DESC "PRODUCT"
      ...DESC는 PRODUCT 테이블에 어떤 컬럼이 있는지 출력하는 tbSQL 유틸리티의 명령어이다.

COLUMN_NAME              TYPE             CONSTRAINT
------------------------ ---------------- --------------------------
PROD_ID                  NUMBER(3)        PRIMARY KEY
                                          NOT NULL
PROD_NAME                VARCHAR(50)
PROD_COST                NUMBER(10)
PROD_PID                 NUMBER(3)
PROD_DATE                DATE

INDEX_NAME               TYPE    COLUMN_NAME
------------------------ ------- ------------------------------
PROD_ID_PK               NORMAL  PROD_ID


SQL> INSERT INTO "PRODUCT" VALUES(601,'TIBERO',7000,'',
     to_date('2004-12-31 09:00:00', 'yyyy-mm-dd hh24:mi:ss'));
      ...SQL 표준에 따라 큰따옴표(" ")로 PRODUCT에 설정하면 스키마 객체나 사용자명을
         영문 대문자가 아닌 임의의 글자로 사용할 수 있다.
      ...SQL 표준에 따라 작은따옴표(' ')는 데이터베이스에 직접 삽입되는 문자열 데이터에
         사용한다.  
1 row inserted.

SQL> INSERT INTO "PRODUCT" VALUES(602,'TIBERO2',8000,'601',
     to_date('2005-06-21 09:00:00', 'yyyy-mm-dd hh24:mi:ss'));
1 row inserted.

SQL> INSERT INTO "PRODUCT" VALUES(603,'TIBERO3',9000,'601',
     to_date('2007-01-01 09:00:00', 'yyyy-mm-dd hh24:mi:ss'));
1 row inserted.

SQL> INSERT INTO "PRODUCT" VALUES(604,'TIBERO4',10000,'601',
     to_date('2009-04-30 09:00:00', 'yyyy-mm-dd hh24:mi:ss'));
1 row inserted.

SQL> SELECT * FROM "PRODUCT";
      ...PRODUCT 테이블의 모든 데이터를 출력하는 SQL 문장이다.

   PROD_ID PROD_NAME             PROD_COST    PROD_PID  PROD_DATE
---------- -------------------  ----------  ----------  ----------
       601 TIBERO                    7000               2004/12/31
       602 TIBERO2                   8000          601  2005/06/21
       603 TIBERO3                   9000          601  2007/01/01
       604 TIBERO4                  10000          601  2009/04/30

4 rows selected.

TiberoUSER_TABLES를 비롯한 여러 정적 뷰를 제공한다. 이 뷰를 통해 현재 데이터베이스에 접속한 사용자가 접근할 수 있는 스키마 객체의 다양한 정보를 볼 수 있다.

참고

정적 뷰에 대한 내용은 "Tibero 참조 안내서"를 참고한다.

테이블 생성과 데이터 삽입을 완료하였으면 이 콘솔 창을 그대로 놔두고 또 다른 콘솔 창을 실행한다.

본 예제에서는 tbSQL 유틸리티를 이용하여 [예 2.8]에서 생성한 ADMIN으로 Tibero에 다음과 같이 접속한다.

$ tbsql ADMIN/password123

tbSQL 5 SP1

Copyright (c) 2008, 2009, 2011 TmaxData Corporation. All rights reserved.

Connected to Tibero.

SQL> SELECT * FROM "PRODUCT";

0 row selected.

위 예를 보면 [예 2.9]에서처럼 4개의 로우 데이터가 출력되지 않는 것을 알 수 있다. 그 이유는 Tibero는 트랜잭션을 지원하기 때문에 한 세션에서 입력한 데이터라도 커밋을 하기 전까지는 다른 세션에서 보이지 않는 현상이다. 따라서 4개의 로우 데이터를 확인하려면 이전 콘솔 창([예 2.9] 화면)으로 이동하여 트랜잭션의 commit 명령을 실행해야 한다.

commit 명령을 실행하는 방법은 다음과 같다.

SQL> COMMIT;
Commit succeeded.

커밋이 완료되면 두 번째 콘솔 창에서 SELECT 문을 실행하여 4개의 로우 데이터가 출력되는지 확인한다.

사용 예제

다음은 가상의 시나리오를 설정하여 SQL 문장을 실행하는 예이다.

시나리오는 다음과 같다.

  • 8,500원 미만의 모든 제품의 가격(PROD_COST 컬럼)을 10% 인상했는데 다시 이전 상태로 복구해야 한다.

  • TIBERO2 제품은 더 이상 판매하지 않는다.

시나리오를 기준으로 SQL 문장을 실행하는 과정은 다음과 같다.

SQL> UPDATE "PRODUCT" SET PROD_COST = PROD_COST * 1.1
     WHERE PROD_COST < 8500;
2 rows updated.

SQL> SELECT PROD_NAME, PROD_COST FROM "PRODUCT";

PROD_NAME                                           PROD_COST
-------------------------------------------------- ----------
TIBERO                                                   7700
TIBERO2                                                  8800
TIBERO3                                                  9000
TIBERO4                                                 10000

4 rows selected.

      ...8,500원 미만의 모든 제품의 가격(PROD_COST 컬럼)을 10% 인상한 SQL 문장이다.

SQL> ROLLBACK;
      ...다시 이전 상태로 복구한다.

Rollback succeeded.


SQL> DELETE FROM "PRODUCT" WHERE PROD_NAME = 'TIBERO2';
      ...TIBERO2 제품은 더는 판매하지 않는다.따라서 PRODUCT 테이블에서 이 제품을 삭제한다.

1 row deleted.

SQL> SELECT PROD_NAME, PROD_COST FROM "PRODUCT";
      ...PRODUCT 테이블을 조회한다. TIBERO2 제품은 삭제되었고,
         10% 인상됐던 TIBERO 제품(8,500원 미만)은 이전 상태의 가격으로 롤백 되었다. 

PROD_NAME                                           PROD_COST
-------------------------------------------------- ----------
TIBERO                                                   7000
TIBERO3                                                  9000
TIBERO4                                                 10000

3 rows selected.

SQL> quit
      ...quit 명령어는 현재 진행 중인 트랜잭션을 먼저 커밋하고 데이터베이스 접속을 종료한다.
         따라서 TIBERO2 제품은 PRODUCT 테이블에서 완전히 제거되었다.
Disconnected.

$

SQL 문장을 실행하는 데 있어 사용자에게 부여된 특권은 매우 중요하다. DBA 역할을 부여 받은 사용자라면 데이터베이스를 관리할 때 편리하게 SQL 문장을 실행할 수 있다. 부여되지 않은 특권 때문에 매번 SYS 사용자나 DBA 역할을 가진 다른 사용자로 접속하여 특권을 부여해줘야 하기 때문이다. 이를 해결하기 위해 여러 특권을 모아 하나의 역할로 생성하는 방법을 사용할 수 있다.

참고

특권과 역할에 대한 자세한 내용은 “5.2. 특권”“5.4. 역할”을 참고한다.

다음은 SYS 사용자로 데이터베이스에 접속한 후 [예 2.8]에서 생성한 ADMIN 사용자에게 DBA 역할을 부여하는 예이다.

$ tbsql SYS/tibero

tbSQL 5 SP1

Copyright (c) 2008, 2009, 2011 TmaxData Corporation. All rights reserved.

Connected to Tibero.

SQL> GRANT DBA TO ADMIN;
Granted.

ADMIN 사용자를 더 이상 사용하지 않을 경우에는 다음과 같은 SQL 명령을 실행한다.

SQL> DROP USER ADMIN;
TBR-7139: cascade is required to remove this user from the system

SQL> DROP USER ADMIN CASCADE;
User 'ADMIN' dropped.

위 예제에서 보듯이 ADMIN 사용자의 스키마에 생성된 모든 객체를 완전히 삭제하려면 CASCADE 옵션을 반드시 사용해야 한다. 그렇지 않으면 TBR-7139 에러가 발생하고, ADMIN 사용자는 더 이상 데이터베이스에 접속할 수 없게 된다.

2.5. 기동과 종료

본 절에서는 Tibero를 기동하고 종료할 때 사용하는 명령어와 이를 사용하는 방법을 설명한다.

2.5.1. tbboot

tbbootTibero가 설치된 머신에서 실행해야 한다. 또한 “2.2. 설치 환경”에서 설명했듯이 tbboot를 실행하기 전에 반드시 환경변수가 제대로 설정되어 있어야 한다. 이 명령어와 관련된 환경변수는 $TB_HOME과 $TB_SID이다.

또한 tbboot는 실행 파일을 실행할 수 있는 권한이 있는 사용자라면 어느 누구든 Tibero를 기동할 수 있다. 따라서 이는 보안 문제가 발생할 수 있어 정책상 Tibero를 설치한 사용자만 Tibero의 실행 파일에 접근할 수 있도록 권한을 설정할 것을 권장한다.

파일의 권한(permission)을 설정하는 방법은 다음과 같다.

$ cd $TB_HOME/bin
$ chmod 700 tbsvr tblistener tbboot tbdown tbctl
$ ls -alF
total 56
drwxr-xr-x  4 tiberotibero 4096 Dec 28 18:12 ./
drwxr-xr-x 13 tiberotibero 4096 Dec 20 11:59 ../

        ...... 중간 생략......

-rwx------  1 ... tbboot*
-rwx------  1 ... tbctl*
-rwx------  1 ... tbdown*
lrwxrwxrwx    1 ... tblistener -> .build/dflt/tblistener*
lrwxrwxrwx    1 ... tbsvr -> .build/dflt/tbsvr*

$ ls -alF .build/dflt        ... 디렉터리 이름은 시스템 환경에 따라 다를 수 있다. ...
total 98332
drwxr-xr-x 2 tiberotibero     4096 Dec 28 18:12 ./
drwxr-xr-x 3 tiberotibero     4096 Oct 30 13:52 ../
-rwx------ 1 tiberotibero   712592 Dec 28 18:12 tblistener*
-rwx------ 1 tiberotibero 30613251 Dec 28 18:12 tbsvr*

tbboot의 사용법은 다음과 같다.

tbboot
tbboot -v
tbboot -h
tbboot -C
tbboot -c
tbboot [-t] [ normal | mount | nomount | resetlogs |
              NORMAL | MOUNT | NOMOUNT | RESETLOGS ]
옵션설명
 옵션이 없는 경우 Tibero를 부트 모드(bootmode) 중 NORMAL로 기동하는 옵션이다.
-htbboot를 사용하기 위한 간단한 도움말을 보여주는 옵션이다.
-vTibero의 버전 정보를 보여주는 옵션이다.
-CTibero에서 사용가능한 character set 정보와 nls_date_lang 정보를 보여주는 옵션이다.
-cTibero가 replication mode로 설정되어 있을 경우 replication mode를 사용하지 않는 옵션이다.
-tTibero 서버를 기동할 수 있는 옵션이다. 이 옵션은 생략이 가능하다.

Tibero에서는 tbboot에 부트 모드(bootmode)를 제공한다.

다음은 각 부트 모드에 대한 설명과 사용 예이다.

NORMAL

정상적으로 데이터베이스의 모든 기능을 사용할 수 있는 모드이다.

사용 예는 다음과 같다.

$ tbboot NORMAL
listener port = 8629

Tibero 5 SP1

Copyright (c) 2008, 2009, 2011 TmaxData Corporation. All rights reserved.

Tibero instance started suspended at NORMAL mode.

참고

데이터베이스를 비정상적으로 종료한 경우 Tibero가 기동할 때 자동으로 파손 복구(crash recovery)를 실행한다. 자세한 내용은 “6.3.2. 파손 복구”를 참고한다.

NOMOUNT

Tibero의 프로세스만 기동시키는 모드이다. 일반적으로는 이 모드를 사용하는 경우는 거의 없고 Tibero가 기동한 다음에 CREATE DATABASE 문을 이용하여 데이터베이스를 생성하는 것밖에 없다.

사용 예는 다음과 같다.

$ tbboot NOMOUNT
listener port = 8629

Tibero 5 SP1

Copyright (c) 2008, 2009, 2011 TmaxData Corporation. All rights reserved.

Tibero instance started suspended at NOMOUNT mode.

MOUNT

미디어 복구를 위해 사용하는 모드이다.

사용 예는 다음과 같다.

$ tbboot MOUNT
listener port = 8629

Tibero 5 SP1

Copyright (c) 2008, 2009, 2011 TmaxData Corporation. All rights reserved.

Tibero instance started suspended at MOUNT mode.

RESETLOGS

Tibero 서버를 기동하는 과정에서 로그 파일을 초기화하며 미디어 복구 이후에 사용하는 모드이다.

사용 예는 다음과 같다.

$ tbboot RESETLOGS
listener port = 8629

Tibero 5 SP1

Copyright (c) 2008, 2009, 2011 TmaxData Corporation. All rights reserved.

Tibero instance started suspended at NORMAL mode.

참고

RESETLOGS 부트 모드는 직전에 데이터베이스가 비정상적으로 종료되었을 경우에는 사용할 수 없으며, 일단 Tibero가 기동되면 NORMAL 모드와 동일하게 동작한다. 자세한 내용은 “6.3.3. 미디어 복구”를 참고한다.

2.5.2. tbdown

tbdown은 현재 동작 중인 Tibero를 종료하는 역할을 수행한다.

tbdown의 사용법은 다음과 같다.

tbdown
tbdown -h
tbdown [-t] [ normal | post_tx | immediate | abort | switchover | abnormal |
              NORMAL | POST_TX | IMMEDIATE | ABORT | SWITCHOVER | ABNORMAL ]
tbdown clean
옵션설명
 옵션이 없는 경우 Tibero를 정상 모드로 종료하는 옵션이다.
-htbdown을 사용하기 위한 간단한 도움말을 보여주는 옵션이다.
-tTibero 서버를 종료할 수 있는 옵션이다. 이 옵션은 생략이 가능하다.
cleanTibero 서버가 비정상 종료된 상태에서 운영 중에 사용하였던 공유 메모리나 세마포어 자원들을 해제하는 옵션이다. Tibero 서버가 운영 중일 때는 사용할 수 없는 옵션이다.

참고

만약 Tibero 서버가 kill과 같은 시스템 내부 명령어에 의해서 비정상적으로 종료된 경우 운영 중에 사용하였던 공유 메모리나 세마포어 자원들이 해제가 안 될 수 있다. 이런 경우에 재부팅을 시도하는 경우 실패를 하게 되고 관리자는 에러 메시지를 통해서 서버가 비정상 종료되었다는 것을 인지하게 된다. 이와 같은 서버의 비정상 종료 후 재부팅을 하기 위해서는 먼저 반드시 tbdown clean으로 기존 자원을 해제시켜야 한다.

비정상적으로 종료되더라도 초기화 파라미터 BOOT_WITH_AUTO_DOWN_CLEAN를 Y로 설정하면 자동으로 이전 운영 중에 사용하였던 자원을 해제시켜 부팅시킬 수 있다. 하지만 관리자가 서버의 비정상 종료 상황을 제대로 인지하지 못하고 서버 운영을 할 수 있으며, 기존 자원이나 프로세스가 제대로 정리가 안 되는 예외적이 상황이 발생하여 충돌이 날 수 있으므로 BOOT_WITH_AUTO_DOWN_CLEAN 옵션을 켜는 것을 권장하지 않는다.

Tibero에서는 tbdown에 다운 모드(downmode)를 제공한다.

다운 모드설명
NORMAL일반적인 종료 모드이다.
POST_TX모든 트랜잭션이 끝날 때까지 기다리고 나서 Tibero를 종료하는 모드이다.
IMMEDIATE현재 수행 중인 모든 작업을 강제로 중단시키며, 진행 중인 모든 트랜잭션을 롤백하고 Tibero를 종료하는 모드이다.
ABORTTibero의 프로세스를 강제로 종료하는 모드이다.
SWITCHOVERStandby DB와 Primary DB를 동기화시킨 후 Primary DB를 NORMAL 모드처럼 종료하는 모드이다.
ABNORMALTibero 서버에 접속하지 않고, 서버 프로세스를 무조건 강제로 종료시키는 모드이다.

tbdown 명령을 이용하여Tibero 서버를 종료시킬 때 ABNORMAL 모드를 제외한 모든 다운 모드(downmode)에서는 tbdown 프로세스가 서버에 직접 접속하여 세션을 맺고 명령을 내려 서버를 종료시킨다.

tbdown 프로세스가 서버에 접속하기 위한 호스트 네임은 localhost로 고정되어 있으며 포트 번호는 초기화 파라미터 '_LSNR_SPECIAL_PORT'와 같다. _LSNR_SPECIAL_PORT의 기본값은 LISTENER_PORT + 1이다. 단, 직접적으로 _LSNR_SPECIAL_PORT로 접속하려면 호스트 네임에 localhost는 사용할 수 없으며, 다른 호스트 네임이나 IP 주소를 명시적으로 사용해야 한다.

리스너는 tbdown 프로세스의 접속 요청을 받아서 일반 워킹 프로세스가 아닌 전용 워킹 프로세스의 워킹 스레드에게 접속을 할당한다.

tbdown 프로세스가 ABNORMAL 모드로 Tibero 서버를 종료시킬 때는 서버에 직접 접속하지 않고 OS의 강제 종료 시그널을 사용하여 서버 프로세스들을 강제로 종료시킨다.

참고

1. 만약 현재 Tibero 서버에 접속하고 있는 세션이 존재하는 경우에 다운 모드 옵션이 없는 tbdown 명령을 하면 NORMAL 모드로 세션이 끝날 때까지 기다렸다가 종료할지, IMMEDIATE 모드로 바로 종료할지 아니면 서버 종료를 취소할 것인지를 선택해야 한다.

2. 이 장에서 설명하는 tbdown 명령과 다운 모드는 SYS 사용자로 접속한 tbSQL의 SQL 프롬프트에서도 가능하다. 이를 통하여 Tibero 서버가 설치되지 않은 원격에서 tbSQL를 이용하여 서버를 종료시킬 수 있다. 단, ABNORMAL 모드의 tbdown 명령은 tbSQL에서 사용할 수 없다.

3. Windows에서 서비스 관리자를 통해서 Tibero 서비스를 중지시킬 경우 기본적으로 IMMEDIATE 모드로 Tibero 서버가 종료된다. 하지만 사용자가 원한다면 초기화 파라미터 'SERVICE_CONTROL_STOP_DOWN'을 이용하여 종료 모드를 설정할 수 있다.

다음은 각 다운 모드의 사용 예이다.

NORMAL

일반적인 종료 모드이다. Tibero에 SYS 사용자로 접속한 다음 다른 모든 세션의 접속이 끊어질 때까지 기다린 후 그 다음 서버를 종료시킨다. 일단 tbdown을 실행하고 나면 어떤 사용자도 더 이상 데이터베이스에 접속할 수 없게 된다. 하지만 tbdown이 실행되기 전에 이미 데이터베이스에 접속한 사용자는 스스로 접속을 끊을 때까지 제한 없이 데이터베이스를 계속 사용할 수 있다.

사용 예는 다음과 같다.

$ tbdown

Tibero instance terminated (NORMAL mode).

POST_TX

모든 트랜잭션이 끝날 때까지 기다리고 나서 Tibero를 종료하는 모드이다.

POST_TX는 Tibero에 SYS 사용자로 접속한 다음 모든 트랜잭션이 끝날 때까지 기다린다. 그 다음 Tibero를 종료시킨다. tbdown 실행이 시작되면 더는 데이터베이스에 접속할 수 없고 이미 열려 있던 세션에서도 새로운 트랜잭션을 시작할 수 없게 된다. 다만, 현재 수행 중인 트랜잭션은 커밋 또는 롤백할 때까지 제한 없이 수행할 수 있으며, 커밋이나 롤백을 하는 순간 자동으로 데이터베이스 접속을 종료하게 된다.

또한 tbdown 실행이 시작되면 데이터베이스에 접속한 클라이언트에게 서버 종료를 알리는 메시지를 보내지 않는다. tbSQL 유틸리티 등에서는 클라이언트가 서버 종료를 즉시 알지 못하고 그 다음 명령을 실행할 때 비로소 Tibero가 종료되었음을 알게 된다.

예를 들면 다음과 같다.

$ tbsql admin/password123

tbSQL 5 SP1

Copyright (c) 2008, 2009, 2011 TmaxData Corporation. All rights reserved.

Connected to Tibero.

SQL> CREATE TABLE T1 (COL1 NUMBER);
Table 'T1' created.

SQL> INSERT INTO T1 VALUES(10);
1 row inserted.

SQL> SELECT * FROM T1;
      COL1
----------
        10

1 row selected.

        ...이 시점에서 tbdown POST_TX 명령을 실행한다.
        ...tbdown 명령은 트랜잭션이 끝나기를 기다린다.

SQL> COMMIT;
Commit succeeded.
        ...이 시점에서 실제로 서버가 종료되고 tbdown 실행이 끝난다.

SQL> SELECT * FROM T1;
TBR-2069: I/O read error
        ...서버가 종료되었으므로 tbSQL 유틸리티의 프롬프트에서는 TBR-2069 에러가 발생된다.

IMMEDIATE

현재 수행 중인 모든 작업을 강제로 중단시키며, 진행 중인 모든 트랜잭션을 롤백하고 Tibero를 종료하는 모드이다.

IMMEDIATE는 Tibero에 SYS 사용자로 접속한 다음 현재 수행 중인 모든 작업을 강제로 종료하고 진행 중이던 모든 트랜잭션을 롤백한 후 Tibero를 종료시킨다. 클라이언트에서 Tibero 종료를 알지 못하는 것은 POST_TX 모드와 같다.

트랜잭션이 오래 걸리는 작업 중에 있었다면, 이를 모두 롤백하기 위해서 다소 시간이 걸릴 수 있다.

사용 예는 다음과 같다.

$ tbdown immediate

Tibero instance terminated (IMMEDIATE mode).

ABORT

Tibero의 프로세스를 강제로 종료하는 모드이다.

ABORT는 Tibero에 SYS 사용자로 접속한 다음 Tibero의 MTHR 프로세스가 모든 프로세스를 OS의 강제 종료 시그널을 전달하여 강제로 종료시키는 모드이다. 따라서 이 모드는 비상시에 사용하며 다음번에 Tibero를 기동할 때 파손 복구 과정이 필요하다.

사용 예는 다음과 같다.

$ tbdown abort

Tibero instance terminated (ABORT mode).

ABORT는 Tibero가 강제로 종료시키므로 사용하던 시스템 리소스를 해제할 기회가 없다.

따라서 서버가 종료된 다음에도 공유 메모리(Shared Memory), 세마포어(Semaphore) 등의 시스템 리소스가 남아있을 수 있으며, 로그 파일이나 데이터 파일도 마찬가지이다. 또한 다음번에 Tibero를 기동할 때 파손 복구에 많은 시간이 걸릴 수도 있다.

ABORT는 다음과 같은 경우에만 제한적으로 사용할 것을 권장한다.

  • Tibero의 내부 에러로 인한 정상적인 종료가 불가능한 경우

  • H/W에 문제가 발생하여 Tibero를 즉시 종료해야 하는 경우

  • 해킹 등의 비상 상태가 발생하여 Tibero를 즉시 종료해야 하는 경우

SWITCHOVER

SWITCHOVER는 Standby DB와 Primary DB를 동기화시킨 후 Primary DB를 NORMAL 모드처럼 종료하는 모드이다. 이와 관련된 자세한 내용은 “제8장 Tibero Standby Cluster”“8.6.1. Switchover”를 참고한다.

ABNORMAL

Tibero 서버에 접속하지 않고 서버 프로세스를 무조건 강제로 종료시키는 모드이다.

ABNORMAL은 Tibero 서버에 접속하지 않고 현재 Tibero 서버 상태와 상관없이 OS의 강제 종료 시그널을 사용하여 무조건 서버 프로세스를 강제로 종료시키는 모드이다. 따라서 이 모드는 비상 시에 사용하며, 다음번에 Tibero를 기동할 때 파손 복구 과정이 필요하다.

사용 예는 다음과 같다.

$ tbdown abnormal

Tibero instance terminated (ABNORMAL mode).

ABNORMAL는 Tibero가 강제로 종료시키므로 사용하던 시스템 리소스를 해제 못 할 수 있다.

따라서 서버가 종료된 다음에도 공유 메모리(Shared Memory), 세마포어(Semaphore) 등의 시스템 리소스가 남아있을 수 있으며, 로그 파일이나 데이터 파일도 마찬가지이다.

또한 다음번에 Tibero를 기동할 때 파손 복구에 많은 시간이 걸릴 수도 있다.

ABNORMAL은 다음과 같은 경우에만 제한적으로 사용할 것을 권장한다.

  • Tibero의 내부 에러로 인한 정상적인 종료가 불가능한 경우

  • ABNORMAL 외 다른 종료 모드로 종료 명령을 내린 후 종료가 지연되고 있을 때 강제로 즉시 종료해야 하는 경우

  • H/W나 OS 등의 외부적인 요인으로 인하여 문제가 발생하여 ABNORMAL 외 다른 종료 모드의 실행이 실패한 경우

  • H/W에 문제가 발생하여 Tibero를 즉시 종료해야 하는 경우

  • 해킹 등의 비상 상태가 발생하여 Tibero를 즉시 종료해야 하는 경우