반응형

6. 테이블 스페이스 관리

1. 테이블스페이스 생성 조회

 

USER DATA 테이블스페이스

 

gSQL> CREATE TABLESPACE TEST_TBS DATAFILE 'TEST_TBS.dbf' SIZE 10M;

Tablespace created.

 

TEMPORARY 테이블스페이스

 

gSQL> CREATE TEMPORARY TABLESPACE TEST_TEMP_TBS MEMORY 'TEST_TEMP_TBS' SIZE 10M;

Tablespace created.

 

테이블스페이스  조회

 

gSQL> SELECT EXTENT_SIZE FROM V$TABLESPACE WHERE TBS_NAME = 'TEST_TBS';

 

EXTENT_SIZE

-----------

262144

 

 

테이블스페이스의 모든 Extent의 상태는 D$TABLESPACE_EXTENT 테이블을 사용하여 조회 가능하다.

사용중인 Extent는 STATE 칼럼이 ‘U’로 표시되고 free상태의 Extent는 ‘F’로 표시된다.

따라서 현재 테이블스페이스의 공간 중 남은 공간의 크기(Extent의 개수)는 아래와 같이 구할 수 있다

 

gSQL> SELECT COUNT(*) FROM D$TABLESPACE_EXTENT('TEST_TBS') WHERE STATE = 'F';

 

COUNT(*)

--------

38

 

위의 결과에 의하면 현재 TEST_TBS의 빈 공간은 38 * 262144 = 9437184 Byte 인 것을 알 수 있다.

 

2. 테이블스페이스 변경

 

테이블스페이스의 변경은 Add/Remove Data File(Temporary 테이블스페이스의 경우는 Memory) 와 Online/Offline을 할 수 있다.

 

Add/Drop Data File (or Memory)

 

gSQL> ALTER TABLESPACE TEST_TBS ADD DATAFILE 'TEST_TBS2.dbf' SIZE 10M;

gSQL> ALTER TABLESPACE TEST_TEMP_TBS ADD MEMORY 'TEST_TEMP_TBS2' SIZE 10M; (Temporary Tablespace)

 

 

DATA 테이블스페이스의 공간 삭제는 아래와 같은 구문으로 수행한다. 단, 해당 공간을 일부라도 사용했었다면 삭제가 불가능하다.

 

gSQL> ALTER TABLESPACE TEST_TBS DROP DATAFILE 'TEST_TBS2.dbf';

gSQL> ALTER TABLESPACE TEST_TEMP_TBS DROP MEMORY 'TEST_TEMP_TBS2'; (Temporary Tablespace)

 

테이블스페이스 offline

 

gSQL> ALTER TABLESPACE TEST_TBS OFFLINE;

gSQL> ALTER TABLESPACE TEST_TBS ONLINE;

 

 

3. Rename 테이블 스페이스/데이터 파일

 

테이블스페이스의 이름을 변경

 

gSQL> ALTER TABLESPACE TEST_TBS RENAME TO TEST_TBS2;

 

 

테이블스페이스 내의 Data File의 위치를 바꾸어야 할 때

 

gSQL> ALTER TABLESPACE TEST_TBS OFFLINE;

 

OS 명령어로 파일 이름을 변경

mv TEST_TBS.dbf TEST_TBS_1.dbf

 

gSQL> ALTER TABLESPACE TEST_TBS RENAME DATAFILE 'TEST_TBS.dbf' TO 'TEST_TBS_1.dbf';

 

gSQL> ALTER TABLESPACE TEST_TBS ONLINE;

 

 

4. 테이블스페이스 삭제

 

 INCLUDING 이하 구문은 옵션이며, 줄 경우에는 해당 테이블스페이스에 존재하는 모든 내용(Schema Object)들을 삭제하고 Data File들도 삭제한다.

 

gSQL> DROP TABLESPACE TEST_TBS INCLUDING CONTENTS AND DATAFILES;

 

 

 

7. 스키마 오브젝트 관리

GOLDILOCKS는 Table/Index/Sequence 3개의 스키마 오브젝트를 지원한다.

 

1. 테이블

테이블은 사용자의 데이터를 담는 가장 기본적인 저장 단위이다.

현재 Clustered Table, Partitioned Table, Temporary Table을 지원하지 않고, 일반적인 Heap Table(데이터의 저장 순서가 특정 칼럼의 Sorting Order와 상관없는)만 지원한다.

 

- 기본적인 Heap Table만 지원

- Primary Key/Unique/Not Null Constraint 지원

- 지원 DataTypes

- BOOLEAN

- SMALLINT, INTEGER, BIGINT, REAL, DOUBLE, NUERMIC, FLOAT

- CHAR(MAX 2000), VARCHAR(MAX 4000), BINARY, VARBINARY, LONG VARCHAR, LONG VARBINARY

- DATE, TIME, TIMESTAMP, INTERVAL (TIME/TIMESTAMP는 WITH/WITHOUT TIMEZONE 지원)

- BLOB 타입은 지원하지 않음

- 럼 수 / 인덱스 수 제한 없음

- "SELECT * FROM TABLES;" 질의를 통해 전체 테이블 정보를 알 수 있다.

 

2. 인덱스

Primary Key나 Unique Constraint는 자동적으로 해당 컬럼에 인덱스를 생성한다.

 

- B-Link Tree 형태의 Index 지원

GOLDILOCKS는 기본적으로 B-Link Tree 방식으로 구현된 Index를 제공한다..

- Index Node 한 개의 크기는 8KByte

- 최대 Key 칼럼개수는 32개, 최대 Key 길이는 2000byte

- Unique Index 지원

- Ascending/Descending, NULLS FIRST, NULLS LAST 지원

인덱스의 key 컬럼들은 각각 작은 순서대로 Sorting할 것인지(ASC), 혹은 큰 순서대로 Sorting할 것인지(DESC) 정의 할 수 있다.

인덱스의 key 컬럼들에서 NULL값들이 가장 앞에 나열될지(NULLS FIRST), 혹은 가장 나중에 나열될 것인지(NULLS LAST) 정의할 수 있다.

- "SELECT * FROM INDEXES;" 질의로 전체 인덱스 정보를 알 수 있다.

- 인덱스도 테이블과 동일하게 Segment로 구현되므로, 테이블과 유사한 방법으로 index 크기를 계산 가능하다.

 

3. 시퀀스

시퀀스는 사용자에게 Unique한 수를 생성하게 하는 Schema 객체이다.

 

gSQL> CREATE SEQUENCE customers_seq START WITH 1000 INCREMENT BY 1 NOCACHE NOCYCLE;

gSQL> CREATE SEQUENCE seq START WITH 1 CACHE 5;

 

시퀀스의 사용은 NEXTVAL을 이용한다.

 

gSQL> SELECT customers_seq.NEXTVAL FROM dual;

 

시퀀스의 삭제는 아래와 같이 한다.

 

gSQL> DROP SEQUENCE customers_seq;

 

Cluster System으로 구성하여 사용할 경우에는 사용자가 시퀀스를 생성할 경우 자동으로 Global시퀀스 객체가 생성된다.

이 객체는 Cluster System 에 소속된 모든 Member 노드가 공유하여 사용할 수 있는 시퀀스 값들의 Global Pool 을 관리한다.

각각의 Member 노드는 NEXTVAL 호출 시 Global 객체로부터 정해진 갯수의 시퀀스 값들을 할당 받아 사용하게 된다.

 

 

8. 유저 관리

유저 생성SYS 사용자CREATE USER ON DATABASE 권한을 가진 사용자만이 생성할 수 있다.

그리고 생성한 유저로 데이터베이스에 접속을 하기 위해서는 CREATE SESSION ON DATABASE 권한이 필요하다.

 

유저 생성

 

CREATE USER user_identifier IDENTIFIED BY password

[ DEFAULT TABLESPACE tablespace_name ]

[ TEMPORARY TABLESPACE tablespace_name ] ;

 

 

유저 삭제

 

DROP USER [ IF EXISTS ] user_identifier [ <drop behavior> ] ;

 

<drop behavior> ::=

RESTRICT

| CASCADE

 

IF EXISTS 절을 주었을 경우 삭제하려는 유저가 없어도 에러가 발생하지 않음

 

 

유저 변경

 

 ALTER USER의 권한이 필요하며 접속 유저와 동일한 사용자일 경우 권한 없이 수행할 수 있다.

 

ALTER USER user_identifier <alter user action>

IDENTITFIED BY new_password [ REPLACE old_password ]

DEFAULT TABLESPACE tablespace_name

TEMPORARY TABLESPACE tablespace_name

SCHEMA PATH ( { schema_name | CURRENT PATH } [, ...] )

 

 

 

 

9. 기타

1. gsql (GOLDILOCKS interactive sql tool)

gsql은 GOLDILOCKS에 대한 관리를 위해 임의의 SQL을 실행시키기 위한 Interactive command line 유틸리티이다.

DBA는 gsql을 이용해 초기 table schema를 생성하거나, 현재 상태를 점검하는 등의 작업을 수행할 수 있다.

 

gsql 접속

 

% gsql <userid> <passwd>

% gsql --as sysdba

 

gSQL> CREATE TABLE T1 ( COL1 INTEGER );

create success

gSQL> \q

 

%

 

 

2. gloader (GOLDILOCKS data upload/download tool)

Text 파일로 저장된 데이터들을 loading하는 유틸리티이다.

gloader가 사용하는 Text Data file의 형식은 Comma-Separated Value (CSV) 형식이다.

 

사용

 

gloader userid passwd [export|import] control='control_file_name' data='data_file_name' log='log_file_name' bad='bad_file_name'

 

- userid : 사용 할 userid를 명시한다.

- passwd : userid사용자의 비밀번호를 명시한다.

- export | import : gloader를 통해 기존의 테이블의 내용을 data_file_name으로 내려 받을 것인지,

                        data_file_name에 현재 존재하는 데이터들을 control_file_name에 명시된 테이블로 올릴 것인지를 선언한다.

- control : export 혹은 import 작업의 디테일한 설정을 기록한 파일의 경로를 명시한다.

- data : export 될 target data file, 혹은 import할 data file을 명시한다.

- log : import 혹은 export의 진행 상황 및 경과 시간 등을 기록하는 log file의 경로를 명시한다.

- bad : import 시 여러 가지 오류로 인해 insert가 실패한 data record들을 모아 기록하는 bad file의 경로를 명시한다.

 

control file 내용

 

TABLE TEST_TBL

FIELDS TERMINATED BY ','

OPTIONALLY ENCLOSED BY '"'

 

 

 

10. 제공 View

 

기본으로 생성되는 DICTIONARY_SCHEMA / INFORMATION_SCHEMA / PERFORMANCE_VIEW_SCHEMA

gSQL> select table_schema , table_name from dict ; 조회 가능

 

 

11. 모니터링

1. Trace 파일을 이용한 모니터링

 

GOLDILOCKS 인스턴스 시작부터 종료 까지 시스템의 전반적인 오류, 경고, 정보를 기록하는 시스템 로그와 XA 트랜잭션 로그, DDL 로그 같은 trace 로그 SQL Trace Log 제공 .

trace 로그 파일은 $GOLDILOCKS_DATA/trc 디렉터리 밑에 생성 .

trace 로그 파일은 10M 크기를 가지며, 10M 사용하였을 경우 기존 trace 파일의 파일명을 변경하여 보존하고, 새로운 trace 파일을 만들어서 사용 .

-rw-rw----. 1 sunje sunje  1598624 Jun  8 11:03 system.trc

-rw-rw----. 1 sunje sunje 10482228 Jun  1 17:16 system.trc_20170601_171614_0

 

system.trc

gmaster 프로세스가 시작된 종료 까지의 인스턴스에서 발생하는 오류, 경고, 정보를 시스템 로그에 기록한다.

DDL 로그는 TRACE_DDL 프로퍼티 값을 1 설정 하면 된다. Disable 0 으로 설정.

 

로그 레벨은 시스템 로그에 기록되는 로그의 레벨이며 FATAL, ABORT, WARNING, INFO가 있고 다음과 같은 속성을 가진다.

 


 

DDL 로그

GOLDILOCKS 데이터베이스에서 발생한 모든 DDL(생성, 삭제, 변경)에 대해 DDL을 발생시킨 세션과 전체 SQL 구문 및 성공(success), 실패(failure)를 시스템 로그에 추가한다.

 

 

xa.trc

분산 트랜잭션을 처리하기 위한 XA 트랜잭션 인터페이스 start, close, end, rollback, prepare, commit, recover, forget 등에 대한 성공, 실패 로그를 기록한다.

XA 로그는 TRACE_XA 프로퍼티 값을 1 설정 하면 된다. Disable 0 으로 설정

 

listener.trc

Listener 프로세스가 시작된 후 종료될 때까지의 발생하는 오류 및 정보를 listener 로그에 기록한다.

 

2. view 이용한 모니터링

v$lock_wait 이용하여 트랜잭션 간의 Lock 경합을 모니터링 있으며, 시스템 자원의 경합을 모니터링 하기 위해서는 v$latch 참조 한다.

 

 

12. 백업

GOLDILOCKS 지원하는 백업 모드

 

 


 

전체 백업

 

컨트롤 파일 백업 : ALTER DATABASE BACKUP CONTROLFILE TO '/goldilocks_data/backup/backup.ctl';

전체  디비  백업ALTER DATABASE BEGIN BACKUP; --> O/S 상에서 전체 데이터 파일 Copy -->  ALTER DATABASE END BACKUP;

 

증분 백업

증분 백업을 위해 0부터 4까지의 증분 레벨을 지원한다.

처음으로 증분 백업을 수행하는 경우 반드시 레벨 0으로 백업을 수행하여 데이터 파일 전체를 백업한다.

 

증분 백업 시 주어진 레벨은 직전에 같거나, 작은 레벨로 백업한 시점을 찾아서 그 이후에 변경된 부분을 백업할 수 있도록 한다.

 

예를 들어, 다음 그림에서 level 0 백업을 수행한 후 level 2 백업(1)은 level 0 백업 후 변경분만을 백업하고, level 2 백업(2)는 level 2 백업(1) 이후의 변경분만을 백업한다.

동일하게 level 2 백업(3), (4), (5), (6)은 이전 level 2 백업 후의 변경 분을 백업하고, 마지막으로 수행된 level 1 백업은 level 0 백업 후 변경 분을 모두 백업한다.

 


 

전체 DB 증분 백업

먼저 레벨 0으로 전체 데이터베이스의 데이터 파일을 백업한다.

ALTER DATABASE BACKUP INCREMENTAL LEVEL 0;

레벨 1로 레벨 0 이후에 변경된 부분만 백업한다.

 ALTER DATABASE BACKUP INCREMENTAL LEVEL 1;

 

테이블 스페이스 단위 증분 백업

ALTER TABLESPACE TEST_TBS BACKUP INCREMENTAL LEVEL 0;

ALTER TABLESPACE TEST_TBS BACKUP INCREMENTAL LEVEL 1;

 

 

 

13. 복구

데이터베이스는 장애가 발생하거나 데이터 훼손이 발생했을 때, 즉, 데이터의 일관성(consistency)이 깨진 경우 복구를 수행하여 데이터베이스의 데이터의 일관성을 보장한다.

데이터베이스 장애 유형을 살펴 보면 다음과 같다.

 


 

Transaction Failure

수행 중인 transaction을 abort해서 수행되었던 데이터베이스 갱신을 모두 rollback시키고 획득한 lock item을 모두 release하여 해결한다.

 

System Crash

데이터베이스 process들이 종료되어 비 휘발성 저장 장치에 반영되지 못한 체 휘발성 저장 장치에만 남아있던 내용들은 모두 사라진 상태이기 때문에 데이터베이스를 startup하면서 비정상 종료 직전에 일관성 있던 데이터베이스의 상태로 복구하고, 이를 재 시작 복구(Restart Recovery)라고 한다.

재 시작 복구는 장애 직전에 데이터베이스가 사용했던 제어 파일, 데이터 파일 및 로그 파일(redo log)을 이용하여 복구를 수행한다.

 

Media Failure

재 시작 복구를 수행할 수 없는 경우, 즉, 제어 파일, 데이터 파일, 로그 파일이 훼손되거나 존재하지 않는 경우, 백업된 파일을 이용하여 복원한 후 미디어 복구를 수행해야 한다.

미디어 복구는 백업된 제어 파일이나 데이터 파일을 이용하여 복구를 수행함으로써 복구의 시작 로그를 찾는 방법이 재 시작 복구보다 복잡하다.

 

복구를 시작할 첫 번째 로그를 찾는 방법은 모든 데이터 파일의 파일 헤더에 기록된 checkpoint Lsn중 가장 오래된 Lsn을 구하여 제어 파일에 기록된 checkpoint Lsn과 비교하여 최소값을 선택한다.

 


 

Media Failure (Recover with archived log file)

미디어 복구와 재 시작 복구의 또 다른 차이점은 미디어 복구를 위해 구한 최소 checkpoint Lsn이 archive log file에 존재하는 경우, redo log file 뿐만 아니라 archive log file까지 복구를 위해 사용하는 것이다.

백업된 데이터 파일을 이용한 미디어 복구는 백업된 데이터 파일을 이용하여 데이터 파일을 복원한 후 archive log file과 redo log file을 이용한 미디어 복구를 수행한다.

 

파일 복원을 위해서 해당 테이블 스페이스는 OFFLINE 상태이어야 하며,

전체 백업으로 받은 백업 파일을 이용하는 경우는 O/S상의 Copy 명령 이용하여 데이터 파일을 Copy 하고,

증분 백업 이용한 백업을 이용할 경우는 ALTER DATABASE RESTORE; 또는 ALTER DATABASE RESTORE TABLESPACE TEST_TBS; 명령을 이용한다.

복원할 파일을 Restore 후에는 ALTER DATABASE RECOVER; 또는 ALTER DATABASE RECOVER TABLESPACE TEST_TBS; 명령을 이용하여 복구.

 

Drop Table

GOLDILOCKS 테이블, 인덱스에 대한 DDL Rollback 기능을 제공함.

DROP 명령 COMMIT 명시적으로 수행하지 않았을 경우, Rollback 명령으로 테이블이나 인덱스의 삭제를 취소할 있다.

 

반응형

+ Recent posts