Database 관리 기본
TIbero Database 관리 시작 전 DBA가 알아야 하는 기본 사항을 안내합니다.
사용자 정의
사용하는 목적과 역할에 따라 Tibero의사용자의 유형을 아래와 같이 정의 할 수 있습니다.
DBA
SYS
시스템 관리자(sysadmin)
애플리케이션 프로그램 개발자(Application Developers)
데이터베이스 사용자(Database Users)
DBA
DBMS는 최소 1명의 DBA가 필요합니다. 데이터베이스를 사용하는 사용자가 많으면 많을수록 이를 관리하는 개인이나 그룹이 필요합니다.
DBA는 데이터베이스 환경을 유지하는 데 필요한 제반 활동을 감독하거나 직접 수행하는 개인 또는 그룹입니다.
다양한 데이터베이스 제품에 관한 깊은 경험이 요구되는 DBA는 데이터베이스 내용의 정확성이나 통합성, 데이터베이스의 내부 저장 구조와 접근 관리 대책을 결정하며, 데이터의 보안 정책을 수립하고 점검하는 등 데이터베이스의 성능을 감시해 변화하는 요구에 대응하는 책임이 있습니다.
아래는 DBA가 관리해야 할 항목을 간략히 소개합니다.
DBMS
현재 사용하고 있는 DBMS의 특성을 파악
문제 발생 시 H/W를 확장하거나 데이터베이스를 튜닝
디스크 용량이 충분한가?
물리적으로 독립된 디스크인 경우 시스템 부하가 제대로 분산이 되고 있는가?
데이터 배치는 잘 됐는가?
CPU와 메모리 사용량, 클라이언트의 응답 시간은 어떠한가?
데이터베이스
자주 사용되는 스키마 객체는 무엇인가?
자주 사용되는 SQL 문장은 무엇인가?
자주 사용되는 SQL 문장이 효율적으로 실행되고 있는가?
유지보수
Tibero의 설치 및 패치를 수행
데이터베이스의 설계 및 분석, 구현
데이터베이스의 생성 및 권한을 설정
사용자의 권한을 설정
정책 및 절차 확립
데이터베이스의 관리, 보안, 유지보수 등에 속하는 정책 및 절차를 확립
보안
데이터 누출이나 유실을 막기 위해 보안 정책을 수립
백업 및 복구
주기적으로 데이터를 백업하고, 문제가 발생할 경우 복구
SYS
Tibero를 설치하고 나면 데이터베이스 자체의 메타데이터를 관리하는 'SYS'라는 사용자가 생성됩니다. SYS 사용자에 DBA 역할이 부여되며, 이는 UNIX 계열(Linux 포함)의 루트 사용자와 비슷한 역할을 담당합니다.
Tibero의 데이터 사전, 기반 테이블, 뷰 등은 모두 SYS 사용자의 스키마에 저장됩니다. 특히 기반 테이블, 뷰 는 Tibero가 동작하는 데 매우 중요한 역할을 하므로 SYS 사용자 외 다른 사용자가 이를 수정하거나 조작하지 않습니다.
아래는 SYS 사용자의 접속 계정 입니다.
시스템 관리자
시스템 관리자(또는 sysadmin, 네트워크 관리자 포함)는 컴퓨터 시스템이나 네트워크를 운영하고 유지 보수하는 개인이나 그룹으로, 일부 사이트는 1명 이상의 시스템 관리자가 있습니다. 서버나 다른 컴퓨터에 운 영체제를 설치하고, 유지 보수하며 서비스 정지 등의 문제에 대해 관리 책임이 있습니다.
또한 시스템 관리자에게는 약간의 프로그래밍 실력 및 시스템과 관련된 프로젝트에 대한 관리, 감시, 운영 기술이 요구되며 컴퓨터 문제에 대해 기술적 지원을 하는 역할도 수행해야 합니다.
애플리케이션 프로그램 개발자
애플리케이션 프로그램 개발자(Application Developers)는 보통 넓은 영역의 컴퓨터 프로그래밍이나 전문적인 프로젝트 관리 분야에서 소프트웨어 개발 작업을 하는 개인을 지칭합니다.
애플리케이션 프로그램 개발자는 일반적으로 개별 프로그램 작업보다는 애플리케이션 프로그램의 수준에서 전반적인 프로젝트에 기여하고 데이터베이스 사용 측면에서 데이터베이스 애플리케이션 프로그램을 설계하고 구현하는 역할을 수행합니다.
애플리케이션 프로그램 개발자 역할
데이터베이스 애플리케이션 프로그램의 설계와 개발
애플리케이션 프로그램을 위한 데이터베이스 구조 설계 및 명세
애플리케이션 프로그램을 위한 저장 공간 요청
DBA와 데이터베이스 정보 공유
개발 중에 애플리케이션 프로그램 튜닝
개발 중에 애플리케이션 프로그램의 보안 정책 수립
데이터베이스 사용자
데이터베이스 사용자(Database Users)는 Tibero를 사용하는 DBA, 업무 분석가, 애플리케이션 프로그램개발자, 사용자 모두를 지칭합니다.
설치 환경
Tibero가 설치되면 시스템에 아래와 같은 환경변수가 설정됩니다.
$TB_HOME
Tibero가 설치된 홈 디렉터리
Tibero 서버, 클라이언트 라이브러리, 다양한 부가 기능을 수행하는 파일이 설치
$TB_SID
한 머신에서 Tibero의 인스턴스를 여러 개로 운영할 때 필요한 서비스 ID
$PATH
파일 시스템을 통해 특정 파일에 접근하기 위한 디렉터리 경로를 설정
환경변수를 제대로 설정하지 않으면 Tibero를 사용할 수 없으므로, 환경변수를 확인하는 절차가 필요합니다.
아래는UNIX 셸 프롬프트에서 환경변수를 확인하는 방법 입니다.
$TB_HOME
$ echo $TB_HOME
/home/tibero/tibero7
$TB_SID
$ echo $TB_SID
Tb7
$PATH
$ echo $PATH
...:/home/tibero/tibero7/bin:/home/tibero/tibero7/client/bin:...
$PATH는 다음의 디렉터리를 포함하고 있어야 합니다.
$TB_HOME/bin
Tibero의 실행 파일과 서버 관리를 위한 유틸리티가 위치한 디렉터리
$TB_HOME/client/bin
Tibero의 클라이언트 실행 파일이 있는 디렉터리
tbSQL 유틸리티 사용
tbSQL은 Tibero에서 제공하는 대화형 SQL 명령어 처리 유틸리티로, SQL 질의, 데이터 정의어, 트랜잭션과 관련된 SQL 문장 등을 실행할 수 있습니다.
본 절에서는 tbSQL 유틸리티를 이용하여 데이터베이스에 접속하는 방법과 그 이후에 간단한 SQL 문장을 실행하는 방법을 설명합니다.
1. tbSQL 유틸리티
tbSQL 유틸리티의 실행 예시는 아래와 같습니다.
tbSQL 유틸리티의 실행
$ tbsql
tbSQL 7
TmaxData Corporation Copyright (c) 2008-. All rights reserved.
SQL>
tbSQL 유틸리티가 정상적으로 실행되면 이처럼 SQL 프롬프트가 나타납니다. 이 프롬프트에서 데이터베이스 사용자는 SQL 문장을 실행할 수 있습니다.
2. 데이터베이스 접속
tbSQL 유틸리티를 실행한 후 SQL 프롬프트가 나타나면 데이터베이스에 접속할 수 있는 상태입니다.
데이터베이스에 접속하는 방법 예시는 아래와 같습니다.
tbSQL 유틸리티를 이용한 데이터베이스 접속
$ tbsql SYS/tibero
tbSQL 7
TmaxData Corporation Copyright (c) 2008-. All rights reserved.
Connected to Tibero.
SQL>
사용자명과 패스워드를 입력할 때에는 아래와 같은 규칙이 있습니다.
사용자명
스키마 객체의 이름과 마찬가지로 대소문자 미 구분
(단, 큰따옴표 “ ” 에 사용자명을 입력하는 경우는 예외)
패스워드
패스워드로 대소문자 미 구분
(단, 작은따옴표' '에 패스워드를 입력하는 경우는 예외)
tbSQL 유틸리티 명령어
tbSQL 유틸리티에서 사용할 수 있는 명령어는 대소문자를 구분하지 않고 사용할 수 있으며 SQL 문장을 실행하거나 데이터베이스 관리에 필요한 명령어가 포함되있습니다.
대괄호([ ])에 포함된 내용은 입력하지 않아도 명령어를 실행할 수 있으며, tbSQL 유틸리티에서 사용할 수 있는 명령어는 아래와 같습니다.
!
운영체제의 명령어를 실행한다. HOST 명령어와 동일하다.
%
히스토리 버퍼에 저장된 명령어를 재수행한다.
@, @@
스크립트를 실행한다. START 명령어와 동일하다.
/
현재 SQL 버퍼 내의 SQL 문장 또는 tbPSM 프로그램을 실행한다. RUN 명령 어와 동일하다.
ACC[EPT]
사용자의 입력을 받아 바인드 변수의 속성을 설정한다.
ARCHIVE LOG
Redo 로그 파일 정보를 출력한다.
C[HANGE]
SQL 버퍼의 현재 라인에서 패턴 문자를 찾아 주어진 문자로 변환한다.
CL[EAR]
설정된 옵션을 초기화하거나 지우는 명령어이다.
COL[UMN]
컬럼의 출력 속성을 설정한다.
CONN[ECT]
특정 사용자 ID로 데이터베이스에 접속한다.
DEF[INE]
바인드 변수를 정의하거나 출력한다.
DEL
SQL 버퍼에 저장된 라인을 지우는 명령어이다.
DESC[RIBE]
지정된 객체의 컬럼 정보를 출력한다.
DISC[ONNECT]
현재 데이터베이스로부터 접속을 해제한다.
ED[IT]
특정 파일 또는 SQL 버퍼의 내용을 외부 편집기를 이용하여 편집한다.
EXEC[UTE]
단일 tbPSM 문장을 수행한다.
EXIT
tbSQL 유틸리티를 종료한다. QUIT 명령어와 동일하다.
EXP[ORT]
SELECT 문장의 수행 결과나 테이블 데이터를 파일로 출력한다.
H[ELP]
도움말을 출력한다.
HIS[TORY]
실행한 명령어의 히스토리를 출력한다.
HO[ST]
운영체제 명령어를 실행한다. ! 명령어와 동일하다.
I[NPUT]
SQL 버퍼의 현재 라인 뒤에 새로운 라인을 추가한다.
L[IST]
SQL 버퍼 내의 특정 내용을 출력한다.
LOAD[FILE]
Tibero의 테이블을 Oracle의 SQL*Loader 툴이 인식할 수 있는 형식으로 저장 한다.
LOOP
단일 명령어를 무한 반복 수행한다.
LS
현재 사용자가 생성한 데이터베이스 객체를 출력한다.
PASSW[ORD]
사용자 패스워드를 변경한다.
PAU[SE]
사용자가 <Enter> 키를 누를 때까지 실행을 멈춘다.
PING
특정 데이터베이스에 대해 접속 가능한 상태인지를 출력한다.
PRI[NT]
사용자가 정의한 바인드 변수의 값을 출력한다.
PRO[MPT]
사용자가 정의한 SQL 문장이나 빈 라인을 그대로 화면에 출력한다.
Q[UIT]
tbSQL 유틸리티를 종료한다. EXIT 명령어와 동일하다.
REST[ORE]
선택한 정보를 파일로부터 복원한다.
R[UN]
현재 SQL 버퍼 내의 SQL 문장이나 tbPSM 프로그램을 실행한다. / 명령어와 동일하다.
SAVE
선택한 정보를 파일에 저장한다.
SET
tbSQL 유틸리티의 시스템 변수를 설정한다.
SHO[W]
tbSQL 유틸리티의 시스템 변수를 출력한다.
SPO[OL]
화면에 출력되는 내용을 모두 외부 파일에 저장하는 과정을 시작하거나 종료 한다.
STA[RT]
스크립트 파일을 실행한다. @ 명령어와 동일하다.
TBDOWN
Tibero를 종료한다.
UNDEF[INE]
하나 이상의 바인드 변수를 삭제한다.
VAR[IABLE]
사용자가 정의한 바인드 변수를 선언한다.
WHENEVER
에러가 발생한 경우의 동작을 정의한다.
자신의 스키마에 어떤 객체들이 있는지 알아보기 위해서는 기본적으로 LS 명령어를 사용하며, SYS 사용자로 데이터베이스에 접속하여 LS 명령어를 실행하는 예시는 아래와 같습니다.
LS 명령어의 실행
SQL> LS
NAME SUBNAME OBJECT_TYPE
------------------------------ ------------- --------------------
SYS_CON100 INDEX
SYS_CON400 INDEX
SYS_CON700 INDEX
_DD_CCOL_IDX1 INDEX
......중간 생략......
UTL_RAW PACKAGE
DBMS_STATS PACKAGE BODY
TB_HIDDEN2 PACKAGE BODY
SQL>
위 예시에서는 SYS 사용자의 스키마에 존재하는 모든 객체가 출력됩니다. SYS 스키마에는 Tibero가 스스로를 관리하기 위해 내부적으로 사용되는 객체가 많으므로 객체가 많이 출력됩니다.
LS 명령어는 tbSQL 유틸리티를 사용할 때 사용자의 편의를 위해 제공되는 명령어로서 SQL 문장을 실행할 때 지원하는 명령어는 아니며 오직 tbSQL 유틸리티에서만 사용할 수 있습니다. 즉, tbSQL 유틸리티가 아닌 JDBC, CLI 등을 이용하여 접속한 경우에는 LS 명령어를 사용할 수 없습니다.
아래는 LS 명령어를 실행하여 현재 시스템에 접속하고 있는 사용자를 조회하는 예시입니다.
LS 명령어의 실행 - 사용자 조회
SQL> LS USER
USERNAME
------------------------------
SYS
아래는 LS 명령어를 실행하여 현재 데이터베이스에 존재하는 테이블 스페이스를 조회하는 예시입니다.
LS 명령어의 실행 - 테이블 스페이스 조회
SQL> LS TABLESPACE
TABLESPACE_NAME
------------------------------
SYSTEM
UNDO
TEMP
USER
3. SQL 문장 실행
V$SESSION은 각각의 세션 ID를 나열하는 뷰로, 아래는 V$SESSION 뷰를 이용하여 TYPE 컬럼이 'WTHR'인 데이터를 조회하는 SQL 문장을 실행 하는 예시 입니다.
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)
DML에 포함되는 SELECT 문을 아래와 같이 실행합니다.
SQL 문장의 실행 (2)
SQL> select SID, STATUS, TYPE, WTHR_ID from v$session where type = 'WTHR';
......SQL 문장의 실행 (1)의 실행 결과와 동일......
SQL> select SID, STATUS, TYPE, WTHR_ID from V$SESSION where type = 'WTHR';
......SQL 문장의 실행 (1)의 실행 결과와 동일......
SQL> select SID, STATUS, TYPE, WTHR_ID From v$session Where type = 'WTHR';
......SQL 문장의 실행 (1)의 실행 결과와 동일......
SQL 표준은 대소문자를 구분하지 않으므로 큰따옴표(" ") 또는 작은따옴표(' ')로 묶은 부분을 제외하고는 대소문자를 혼용하여 사용할 수 있습니다. 위 예제는 모두 'SQL 문장의 실행 (1)' 예제를 실행한 결과와 동일하며 그 의미도 같습니다.
그러나 아래와 같은 SQL 문장을 실행하면 그 결과와 의미는 달라집니다.
SQL> SELECT SID, STATUS, TYPE, WTHR_ID FROM V$SESSION WHERE TYPE = 'wthr';
0 row selected.
사용자 및 테이블 생성
본 절에서는 데이터베이스를 사용하기 위해 사용자와 테이블을 생성하는 방법을 안내합니다.
사용자 생성
사용자 생성 시 CREATE USER 문을 사용합니다.
아래는 'ADMIN'이라는 사용자를 생성하고 세션(CREATE SESSION)과 테이블을 생성(CREATE TABLE) 할 수 있는 특권을 부여하는 예시 입니다.
사용자의 생성
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
...방금 생성된 사용자이므로 스키마 객체가 없다.
SQL>
위 예시를 모두 완료하면 Tibero에 'ADMIN'이라는 새로운 사용자가 추가됩니다.
테이블의 생성
테이블 생성 시 CREATE TABLE 문을 사용합니다.
아래는 'PRODUCT'라는 테이블을 생성하고 4개의 로우 데이터를 삽입(INSERT)하는 예시 입니다.
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.
Tibero는 USER_TABLES를 비롯한 여러 정적 뷰를 제공합니다. 이 뷰를 통해 현재 데이터베이스에 접속한 사용자가 접근할 수 있는 스키마 객체의 다양한 정보를 볼 수 있습니다.
테이블 생성과 데이터 삽입 완료 후에는 이 콘솔 창을 그대로 두고 또 다른 콘솔 창을 실행합니다.
본 예제에서는 tbSQL 유틸리티를 이용하여 사용자의 생성 예제에서 생성한 ADMIN으로 Tibero에 접속합니다.
$ tbsql ADMIN/password123
tbSQL 7
TmaxData Corporation Copyright (c) 2008-. All rights reserved.
Connected to Tibero.
SQL> SELECT * FROM "PRODUCT";
0 row selected.
위 예시를 보면 CREATE TABLE 문을 이용한 테이블의 생성예시같은 4개의 로우 데이터가 출력되지 않는 것을 알 수 있습니다. 그 이유는 Tibero는 트랜잭션을 지원하기 때문에 한 세션에서 입력한 데이터라도 커밋을 하기 전까지는 다른 세션에서 보이 지 않기 때문 입니다.
따라서 4개의 로우 데이터 확인은 이전 콘솔 창 CREATE TABLE 문을 이용한 테이블의 생성으로 이동하여 트랜잭션의 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 역할을 가진 다른 사용자로 접속하여 특권을 부여해줘야 하는 불편함이 있으므로 이를 해결하기 위해 여러 특권을 모아 하나의 역할로 생성하는 방법을 사용할 수 있습니다.
아래는 SYS 사용자로 데이터베이스에 접속한 후 사용자의 생성예시에서 생성한 ADMIN 사용자에게 DBA 역할을 부여하는 예시입니다.
$ tbsql SYS/tibero
tbSQL 7
TmaxData Corporation Copyright (c) 2008-. 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 사용자는 더 이상 데이터베이스에 접속할 수 없게 됩니다.
기동과 종료
본 절에서는 Tibero를 기동하고 종료할 때 사용하는 명령어와 이를 사용하는 방법을 안내합니다.
tbboot
tbboot는 Tibero가 설치된 머신에서 실행합니다. 또한 위의 설치 환경 에서 언급된 것과 같이 tbboot를 실행하기 전에 반드시 환경변수가 정상적으로 설정되있어야 합니다.
이 명령어와 관련된 환경변수는 $TB_HOME 과 $TB_SID 입니다.
tbboot는 실행 파일을 실행할 수 있는 권한이 있는 사용자라면 어느 누구든 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 tbsvr*
lrwxrwxrwx 1 tblistener*
lrwxrwxrwx 1 ... tbdown -> $TB_HOME/bin/tbsvr*
tbboot 사용방법
tbboot
tbboot -v
tbboot -h
tbboot -C
tbboot -c
tbboot [-t] [ normal | mount | nomount | resetlogs |
NORMAL | MOUNT | NOMOUNT | RESETLOGS ]
tbboot -w
옵션이 없는 경우 Tibero를 부트 모드(bootmode) 중 NORMAL로 기동하는 옵션
-h
tbboot를 사용하기 위한 간단한 도움말을 보여주는 옵션
-v
Tibero의 버전 정보를 보여주는 옵션
-C
Tibero에서 사용 가능한 character set 정보와 nls_date_lang 정보를 보여주는 옵션.
-c
Tibero가 replication mode로 설정되어 있을 경우 replication mode를 사용하지 않는 옵션
-t
Tibero 서버를 기동할 수 있는 옵션 (생략가능)
NORMAL : 정상적으로 데이터베이스의 모든 기능을 사용할 수 있는 모드
NOMOUNT : Tibero의 프로세스만 기동시키는 모드
MOUNT : 미디어 복구를 위해 사용하는 모드
RESETLOGS : Tibero 서버를 기동하는 과정에서 로그 파일을 초기화하며 미디어 복구 이후에 사용하는 모드
Tibero에서는 tbboot에 부트 모드(bootmode)를 제공합니다. 각 모드에 대한 자세한 내용은 해당 절의 내용을 참고합니다.
-w
Tibero가 보안 지갑을 열고 기동하는 옵션
기동 시 안내에 따라 보안 지갑의 패스워드 입력필요
입력된 보안 지갑의 패스워드가 일치하는 경우, NORMAL 모드로 기동
불일치 하는 경우 MOUNT 모드로 기동, MOUNT 모드로 기동하는 경우에는 해당 옵션으로 보안지갑을 열 수 없음
NORMAL
정상적으로 데이터베이스의 모든 기능을 사용할 수 있는 모드 입니다.
NORMAL 모드사용 예시
$ tbboot NORMAL
listener port = 8629
Tibero 7
TmaxData Corporation Copyright (c) 2008-. All rights reserved.
Tibero instance started suspended at NORMAL mode.
NOMOUNT
Tibero의 프로세스만 기동시키는 모드 입니다.
NOMOUNT 모드 사용 예시
$ tbboot NOMOUNT
listener port = 8629
Tibero 7
TmaxData Corporation Copyright (c) 2008-. All rights reserved.
Tibero instance started suspended at NOMOUNT mode.
MOUNT
미디어 복구를 위해 사용하는 모드 입니다.
MOUNT 모드 사용 예시
$ tbboot MOUNT
listener port = 8629
Tibero 7
TmaxData Corporation Copyright (c) 2008-. All rights reserved.
Tibero instance started suspended at MOUNT mode.
RESETLOGS
Tibero 서버를 기동하는 과정에서 로그 파일을 초기화하며 미디어 복구 이후에 사용하는 모드 입니다.
RESETLOGS 모드 사용 예시
$ tbboot RESETLOGS
listener port = 8629
Tibero 7
TmaxData Corporation Copyright (c) 2008-. All rights reserved.
Tibero instance started suspended at NORMAL mode.
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를 정상 모드로 종료하는 옵션
-h
tbdown을 사용하기 위한 간단한 도움말을 보여주는 옵션
-t
Tibero 서버를 종료할 수 있는 옵션 (생략가능)
NORMAL : 일반적인 종료 모드
POST_TX : 모든 트랜잭션이 끝날 때까지 기다리고 나서 Tibero를 종료하는 모드
IMMEDIATE : 현재 수행 중인 모든 작업을 강제로 중단시키며, 진행 중인 모든 트랜잭션을 롤백하고 Tibero를 종료하는 모드
ABORT : Tibero의 프로세스를 강제로 종료하는 모드
SWITCHOVER : Standby DB와 Primary DB를 동기화시킨 후 Primary DB를 NOR MAL 모드처럼 종료하는 모드
ABNORMAL : Tibero 서버에 접속하지 않고, 서버 프로세스를 무조건 강제로 종료시키는 모드
Tibero에서는 tbdown에 다운 모드(downmode)를 제공합니다. 각 모드에 대한 자세한 내용은 해당 절의 내용을 참고합니다.
clean
Tibero 서버가 비정상 종료된 상태에서 운영 중에 사용하였던 공유 메모리나 세마포어 자원들을 해제하는 옵션, Tibero 서버가 운영 중일 때는 사용 불가
tbdown 명령으로 Tibero 서버 종료 시, ABNORMAL 모드를 제외한 모든 다운 모드(downmode) 에서는 tbdown 프로세스가 서버에 직접 접속하여 세션을 맺고 명령을 내려 서버를 종료시킵니다.
tbdown 프로세스가 서버에 접속하기 위한 호스트 네임은 locahost로 고정되어 있으며 포트 번호는 초기화 파라미터 '_LSNR_SPECIAL_PORT'와 같습니다.
_LSNR_SPECIAL_PORT의 기본값은 LISTENER_PORT+ 1 입니다. 다만 직접적으로 _LSNR_SPECIAL_PORT로 접속 시 호스트 네임에 localhost는 사용할 수 없으며 다른 호스트 네임이나 IP를 명시적으로 사용해야 합니다.
리스너는 tbdown프로세스의 접속 요청을 받아서 일반 워킹 프로세스가 아닌 전용 워킹 프로세스의 워킹 스레드에게 접속을 할당합니다.
tbdown 프로세스가 ABNORMAL 모드로 Tibero 서버 종료시, 서버에 직접 접속하지 않고 OS의 강제 종료 시그널을 사용하여 서버 프로세스들을 강제로 종료시킵니다.
NORMAL
일반적인 종료 모드로, Tibero에 SYS 사용자로 접속 후 다른 모든 세션의 접속이 끊어질 때까지 기다린 다음 서버를 종료시킵니다. 일단 tbdown을 실행하면 어떤 사용자도 더 이상 데이터베이스에 접속할 수 없게 됩니다. 그러나 tbdown이 실행되기 전에 이미 데이터베이스에 접속한 사용자는 스스로 접속을 끊을 때까지 제한 없이 데이터베이스를 계속 사용할 수 있습니다.
NORMAL 사용 예시
$ tbdown
Tibero instance terminated (NORMAL mode).
POST_TX
모든 트랜잭션이 끝날 때까지 기다리고 나서 Tibero를 종료하는 모드 입니다.
POST_TX는 Tibero에 SYS 사용자로 접속한 다음 모든 트랜잭션이 끝날 때까지 기다린 후 그 다음 Tibero를 종료시킵니다. tbdown 실행이 시작되면 더는 데이터베이스에 접속할 수 없고 이미 열려 있던 세션에서도 새로운 트랜잭션을 시작할 수 없게 됩니다. 다만, 현재 수행 중인 트랜잭션은 커밋 또는 롤백할 때까지 제한 없이 수행할 수 있으며, 커밋이나 롤백을 하는 순간 자동으로 데이터베이스 접속을 종료하게 됩니다.
또한 tbdown 실행이 시작되면 데이터베이스에 접속한 클라이언트에게 서버 종료를 알리는 메시지를 보내지 않습니다. tbSQL 유틸리티 등에서는 클라이언트가 서버 종료를 즉시 알지 못하고 그 다음 명령을 실행 할 때 비로소 Tibero가 종료되었음을 알 수 있습니다.
예시
$ tbsql admin/password123
tbSQL 7
TmaxData Corporation Copyright (c) 2008-. 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-2131: Generic I/O error.
IMMEDIATE
...서버가 종료되었으므로 tbSQL 유틸리티의 프롬프트에서는 TBR-2131 에러가 발생된다.
IMMEDIATE
현재 수행 중인 모든 작업을 강제로 중단시키며, 진행 중인 모든 트랜잭션을 롤백하고 Tibero를 종료하는 모드입니다. IMMEDIATE는 Tibero에 SYS 사용자로 접속한 다음 현재 수행 중인 모든 작업을 강제로 종료하고 진행 중이던 모든 트랜잭션을 롤백한 후 Tibero를 종료시킵니다. 클라이언트에서 Tibero 종료를 알지 못하는 것은 POST_TX 모드와 같습니다. 트랜잭션이 오래 걸리는 작업 중에 있었다면, 이를 모두 롤백하기 위 해서 다소 시간이 걸릴 수 있습니다.
IMMEDIATE 사용 예시
$ tbdown immediate
Tibero instance terminated (IMMEDIATE mode).
ABORT
Tibero의 프로세스를 강제로 종료하는 모드입니다. ABORT는 Tibero에 SYS 사용자로 접속한 다음 Tibero 의 MONP 프로세스가 모든 프로세스를 OS의 강제 종료 시그널을 전달하여 강제로 종료시키는 모드이므로 비상시에 사용하며, 다음 번에 Tibero를 기동할 때 파손 복구 과정이 필요합니다.
ABORT 사용 예시
$ tbdown abort
Tibero instance terminated (ABORT mode).
ABORT는 Tibero가 강제로 종료시키므로 사용하던 시스템 리소스를 해제할 기회가 없습니다.
따라서 서버가 종료된 다음에도 공유 메모리(Shared Memory), 세마포어(Semaphore) 등의 시스템 리소스가 남아있을 수 있으며, 로그 파일이나 데이터 파일도 동일합니다. 또한 다음 번에 Tibero를 기동할 때 파손 복구에 많은 시간이 걸릴 수 있습니다.
SWITCHOVER
SWITCHOVER는 Standby DB와 Primary DB를 동기화시킨 후 Primary DB를 NORMAL 모드처럼 종료하는 모드 입니다.
ABNORMAL
Tibero 서버에 접속하지 않고 서버 프로세스를 무조건 강제로 종료시키는 모드입니다.
ABNORMAL은 Tibero 서버에 접속하지 않고 현재 Tibero 서버 상태와 상관없이 OS의 강제 종료 시그널을 사용하여 무조건 서버 프로세스를 강제로 종료시키는 모드이므로 비상 시에 사용하며, 다음번에 Tibero를 기동할 때 파손 복구 과정이 필요합니다.
ABNORMAL 사용 예시
$ tbdown abnormal
Tibero instance terminated (ABNORMAL mode).
ABNORMAL는 Tibero가 강제로 종료시키므로 사용하던 시스템 리소스를 해제 못할 수 있습니다.
따라서 서버가 종료된 다음에도 공유 메모리(Shared Memory), 세마포어(Semaphore) 등의 시스템 리소스가 남아있을 수 있으며, 로그 파일이나 데이터 파일도 동일합니다. 또한 다음 번에 Tibero를 기동할 때 파손 복구에 많은 시간이 걸릴 수도 있습니다.
Binary TIP 사용
Binary TIP(이하 BTIP)은 Tibero Initialization Parameter 값을 바이너리 파일 형태로 저장하는 기능입니다. 기존의 TIP 파일과 차이점은 운영 중 변경한 파라미터의 값을 저장하여 다음 부팅할 때 반영할 수 있습니다.
BTIP의 생성은 아래의 DDL 구문을 실행합니다.
SQL> CREATE BTIP FROM TIP;
...$TB_HOME/config 하위의 TIP 파일로부터 BTIP을
...$TB_HOME/config/$TB_SID.btip로 생성한다.
SQL> CREATE BTIP='PATH' FROM TIP;
...BTIP을 $TB_HOME/config 아닌곳에 생성하고
...싶은 경우 BTIP 파일명의 절대경로를 주면된다.
...파일 확장명은 반드시 .btip 이어야 한다.
BTIP 파일로 부팅하기 위해서는 $TB_HOME/config 하위에 $TB_SID.tip에 BTIP_FILE_PATH를 추가해야 합니다. 이 파라미터는 BTIP 파일의 절대경로를 나타냅니다.
기본적으로 부팅할 때 $TB_SID.tip 파일에 BTIP_FILE_PATH 파라미터가 설정되어 있다면, BTIP_FILE_PATH의 BTIP 파일에서 파라미터를 읽어옵니다. BTIP 파일을 사용하기 위해서는 $TB _SID.tip 파일에는 BTIP_FILE_PATH만 설정되어 있어야 합니다.
사용 중인 TIP 파일 정보는 아래와 같이 조회할 수 있습니다.
SQL> SELECT TIP_FILE FROM V$INSTANCE;
TIP_FILE
--------------------------------------------------------------------------------
/home/tibero/work/7/config/t7.btip
...$TB_HOME/config 하위의 BTIP 파일을 사용중이다.
운영 중 파라미터 동적 변경을 BTIP에 저장 시, 아래의 DDL 구문을 이용하여 반영할 scope을 지정합니다.
SQL> ALTER SYSTEM SET PARAMETER1 = NEW_VALUE SCOPE BTIP ;
...PARAMETER1의 변경된 값 NEW_VALUE는 BTIP에만 반영하여
...다음 부팅부터 PARAMETER1의 값은 NEW_VALUE로 동작한다.
...DDL 구문수행 후 PARAMETER1의 값은 OLD_VALUE이다.
SQL> ALTER SYSTEM SET PARAMETER1 = NEW_VALUE SCOPE MEMORY ;
...PARAMETER1의 변경된 값 NEW_VALUE는 운영 중인 시점에만 반영하고
...다음 부팅시 PARAMETER1의 값은 OLD_VALUE이다.
SQL> ALTER SYSTEM SET PARAMETER1 = NEW_VALUE SCOPE BOTH ;
...PARAMETER1의 변경된 값 NEW_VALUE는 운영 시점과 BTIP 모두 반영하며
...다음 부팅시 PARAMETER1의 값은 NEW_VALUE이다.
...DDL 구문 수행 후 PARAMETER1의 값도 NEW_VALUE이다.
BTIP에서 TIP 파일 생성은 운영 중인 서버가 BTIP을 사용중일 때 가능합니다.
SQL> CREATE TIP FROM BTIP;
Last updated