일일 정리

오라클 자동 실행, Tablespace와 data file

mysecurity 2025. 4. 19. 23:59

목차

1. 오라클 자동 실행

1-1 오라클 자동 실행 설정

 

2. Tablespace와 data file

2-1 Tablespace와 Data file 상태 조회

2-2 Tablespace 생성

2-3 Tablespace 확장 1 - 수동

2-4 Tablespace 확장 2 - 자동

2-5 Tablespace 삭제

2-6 Tablespace READ ONLY

2-7 OPEN 상태에서 tablespace 이동

2-8 Close 상태에서 tablespace 이동

2-9 Default permanent tablespace

2-10 Temporary tablespace 생성과 default temporary tablespace 변경

2-11 Undo 관련 설정 및 상태 확인

 

 

1. 오라클 자동 실행

1-1 오라클 자동 실행 설정

오라클 서버를 시작함과 동시에 오라클 데이터베이스를 자동으로 스타트업하도록 설정할 수 있다. 설정은 root 계정으로 진행한다.

 

① /etc/oratab 파일 수정

오라클 데이터베이스 자동 실행을 위해 /etc/oratab 파일을 수정한다.

 

# vi /etc/oratab

/etc/oratab 파일 수정

- 기본 값은 문장 끝이 N이므로 Y로 수정하여 자동 실행을 하도록 설정한다.

 

② /etc/rc.d/rc.local 파일 수정

/etc/rc.d/rc.local에 다음과 같이 실행 스크립트를 추가한다.

 

# vi /etc/rc.d/rc.local

/etc/rc.d/rc.local 파일 수정

- ora19c 계정으로 '-c' 뒤의 커맨드를 실행한다.

- 이런 식의 명령어는 공백을 읽지 못하므로 lsnrctl start 는 따옴표로 묶어 작성한다.

- 리스너 프로세스와 데이터베이스를 스타트한다.

 

설정 후 반드시 rc.local 파일에 x 퍼미션을 추가한다.

 

다음과 같이 오라클 서버 부팅 시 자동으로 오라클 데이터베이스가 OPEN 상태인 것을 확인할 수 있다.

오라클 자동 실행

 

2. Tablespace와 data file

2-1 Tablespace와 Data file 상태 조회

● 사용 명령어

SQL> SELECT tablespace_name, status, contents,
2    extent_management, segment_space_management
3    FROM dba_tablespaces;

- 테이블 스페이스의 상태를 조회한다.

- STATUS : 사용 가능여부

- CONTENTS : 저장 세그먼트의 종류

- EXTENT_MANAGEMENT : Extent의 할당 및 관리 방식

- SEGMENT_SPACE_MANAGEMENT : 블록 내의 공간 관리 방식

 

SQL> SELECT tablespace_name, bytes, file_name
2    FROM dba_data_files;

- 테이블 스페이스별 데이터 파일의 상태를 조회 한다.

- BYTES : 데이터 파일의 크기

- FILE_NAME : 데이터 파일의 경로명을 포함한 이름

 

SQL> SELECT t.name tablespace_name, d.bytes, d.name file_name
2    FROM v$tablespace t, v$datafile d
3    WHERE t.ts#=d.ts#;

- 테이블 스페이스 별 데이터 파일의 상태를 조회 한다.

- 딕셔너리가 아니라 퍼포먼스 뷰를 조회하는 것이므로 MOUNT 상태에서도 조회 가능하다.

 

두 번째 sql 예시문은 딕셔너리에서, 세 번째 sql 예시문은 퍼포먼스 뷰에서 조회하지만 같은 결과를 조회한다. 

 

● 실습

- 테이블 스페이스의 상태를 조회 한다. 테이블 스페이스 생성 시 기본적으로 auto로 생성된다.

- 데이터 파일의 상태를 조회한다.

- 템프 파일의 상태를 조회한다.

- TEMPORARY 파일은 데이터 파일이 아닌 템프 파일로 분류된다.

 

- 테이블 스페이스 넘버, 파일 넘버, 이름을 조회한다.

- 파일 넘버는 다음 두 종류가 있다. 현재 조회된 파일 넘버는 앱솔루트 파일 넘버이다.

   : Absolute : 절대 파일 넘버 

   : Relative : 상대 파일 넘버

 

2-2 Tablespace 생성

● 사용 명령어

SQL> CREATE TABLESPACE
2    DATAFILE '<data file>' SIZE <크기>;

- 오라클 10g 이후 버전에서 사용자용 테이블 스페이스를 생성하는 명령어이다.

- 생성 시 기본적으로 AUTO 방식으로 생성된다.

 

● 실습

 

2-3 Tablespace 확장 1 - 수동

● 사용 명령어

SQL> ALTER DATABASE DATAFILE
2   '<data file>' RESIZE <크기>;

- 지정된 파일의 크기를 늘린다.

 

SQL> ALTER TABLESPACE <tablespace명>
 2   ADD DATAFILE '<추가될 data file>' SIZE <크기>;

- 데이터 파일을 추가한다.

 

● 실습

- 원래 크기가 1M인 데이터 파일의 크기를 2M로 늘린다.

- insa 테이블 스페이스에 2M 크기의 데이터 파일을 추가한다.

- 시스템은 insa 테이블 스페이스를 4M의 공간으로 인식한다.

 

2-4 Tablespace 확장 2 - 자동

● 사용 명령어

SQL> CREATE TABLESPACE <tablespace명>                                         
 2   DATAFILE '<data file명>' SIZE <크기>
 3   AUTOEXTEND ON NEXT <크기> MAX SIZE <크기>;

- 자동으로 커지는 데이터 파일을 갖는 테이블 스페이스를 생성한다.

- NEXT : 증가치

- MAX SIZE : 최대 크기로 기재하지 않을 시 파티션이 다 찰때까지 늘릴 수 있다.

 

SQL> ALTER TABLESPACE <tablespace명>
 2   ADD DATAFILE '<추가될 data file명>' SIZE <크기>
 3   AUTOEXTEND ON NEXT <크기> MAX SIZE <크기>;

- 테이블 스페이스에 자동으로 커지는 데이터 파일을 추가한다.

 

SQL> ALTER DATABASE
 2   DATAFILE '<변경할 data file명>
 3   AUTOEXTEND [ON | OFF] NEXT <크기> MAX SIZE <크기>;

- 지정한 데이터 파일에 자동 증가를 설정한다.

 

● 실습

- 각각 설정이 서로 다른 세 개의 데이터 파일을 추가 한다. 크기가 자동으로 증가하는 autoextend 설정은 데이터 파일 별로 따로 설정한다.

 

- 데이터 파일의 자동 증가는 데이터 파일 각각의 설정이므로 기존 테이블 스페이스에 자유롭게 추가할 수 있다.

- INCREMENT_BY : 블록 갯수를 나타낸다.

 

2-5 Tablespace 삭제

● 사용 명령어

SQL> DROP TABLESPACE <tablespace 명>
 2   [INCLUDING CONTENTS AND DATAFILES CASCADE CONSTRAINTS];

- 지정된 테이블 스페이스를 삭제한다.

- INCLUDING CONTENT : 테이블 스페이스에 세그먼트가 존재할 때 세그먼트를 함께 삭제한다.

- CASCADE CONSTRAINTS : 삭제되는 테이블 스페이스의 테이블을 다른 테이블 스페이스의 테이블이 참조하는 경우, 해당 제약 조건을 함께 삭제한다.

- AND DATAFILES : 테이블 스페이스에 포함된 데이터 파일을 같이 지운다. 이 옵션을 쓰지 않으면 데이터 파일은 OS상에서 직접 지워야한다.

 

● 실습

- users 테이블 스페이스는 디폴트 퍼머넌트 테이블 스페이스로 지정되어 있으므로 삭제되지 않는다.

- 비어있는 테이블 스페이스만 삭제가 가능하다.

- 테이블 스페이스를 삭제하더라도 실제 데이터 파일이 삭제되지 않으므로 직접 삭제한다.

 

 

2-6 Tablespace READ ONLY

● 사용 명령어

SQL> ALTER TABLESPACE <tablespace명> [ READ ONLY / READ WRITE ]

- 지정한 테이블 스페이스를 읽기전용 / 읽기쓰기 모드로 변경한다.

- 읽기전용 테이블 스페이스에 대한 DML 작업은 불가하나 drop 작업은 가능하다.

: drop 작업은 딕셔너리에서 해당 테이블 등록 정보를 지우므로 테이블 스페이스에 접근할 필요가 없다.

: 읽기전용 모드는 사용자에게 제약을 거는 것이 아닌 오라클이 해당 테이블 스페이스에 대한 동기화 작업을 하지 않게 하기 위해 사용된다. 복구에 대한 부담이 없어 기민한 데이터베이스 사용이 가능하다.

 

2-7 OPEN 상태에서 tablespace 이동

테이블 스페이스 이동 작업은 실제로는 데이터 파일을 옮기는 작업으로, 정해진 프로세스에 맞춰 작업하지 않을 시 파일이 손상되므로 반드시 프로세스에 맞춰 작업한다. 컨트롤 파일에서 데이터 파일의 위치를 확인할 수 있다.

 

● 사용 명령어

SQL> ALTER TABLESPACE <tablespace명> OFFLINE;

- 지정된 테이블 스페이스를 오프라인 상태로 변경한다.

- 오프라인된 테이블 스페이스는 더 이상 접근이 불가능하다.

 

SQL> ALTER TABLESPACE <tablespace> RENAME DATAFILE
 2   <원래 data file명> TO <이동한 data file>;

- 데이터 파일 등록 정보를 수정한다.

 

SQL> ALTER TABLESPACE <tablespace> ONLINE;

- 지정된 테이블 스페이스를 온라인 상태로 변경한다.

 

 

필요하다면 데이터 파일 레벨에서도 오프라인 가능하다.

SQL> ALTER DATABASE DATAFILE '<data file>' OFFLINE [DROP];

- DROP은 데이터 파일 손상시 사용한다.

- 위험하므로 사용하지 않는다.

 

● 실습

- users 테이블 스페이스를 이동하기 위해 우선 오프라인으로 변경한다.

- 오프라인이 된 테이블 스페이스는 데이터 파일의 크기가 공백 혹은 0으로 표시된다.

 

- users 테이블 스페이스의 데이터 파일을 이동시킨다.

- 딕셔너리의 데이터 파일 위치 정보는 아직 변경되지 않았으므로 변경된 위치로 정보를 수정한다.

 

- 이동된 users 테이블 스페이스를 온라인으로 변경한다.

- 시스템이나 언두용 테이블 스페이스는 오프라인으로 변경되지 않으므로 반드시 DB 종료 후 옮긴다.

 

2-8 Close 상태에서 tablespace 이동

오프라인 변경이 되지않는 데이터 파일을 이동시키기 위해서는 다음과 같이 DB를 셧다운 한 상태에서 작업을 진행한다. 해당 작업 방식은 모든 테이블 스페이스에 적용 가능하다.

 

● MOUNT 상태에서 데이터 파일을 이동하는 과정

① DB SHUTDOWN

② DATA FILE 이동

③ DB MOUNT

④ ALTER DATABASE 명령으로 DATA FILE 등록

⑤ DB OPEN

 

테이블 스페이스 관련 명령어는 open 상태에서만 사용할 수 있다.

 

● 사용 명령어

SQL> ALTER DATABASE RENAME FILE
 2   <원래 data file명> TO <이동한 data file명>;

- 데이터 파일 등록 정보 수정

- ALTER TABLESPACE ~ RENAME DATAFILE 명령과 동일한 효과가 있다.

- 리두 로그의 경우 옮기지 않고 재생성한다.

 

● 실습

- DB 셧다운 이후 데이터 파일을 이동시킨다.

- MOUNT 상태로 DB를 스타트업한다.

- 딕셔너리의 데이터 파일 위치 정보는 아직 변경되지 않았다.

 

- 딕셔너리의 데이터 파일 위치 정보를 수정한다.

 

- 정상적으로 테이블 스페이스가 이동된 것을 확인한다.

- 데이터 파일 이외에 컨트롤 파일이나 리두 로그 파일의 위치 확인 후 불필요한 DB19 디렉토리를 삭제한다.

 

2-9 Default permanent tablespace

● 사용 명령어

SQL> SELECT * FROM DATABASE_PROPERTIES
 2   WHERE PROPERTY_NAME = 'DEFAULT_PERMANENT_TABLESPACE';

- DB 전체에 대해서 정의된 디폴트 테이블 스페이스를 조회한다.

 

● 실습

- 유저 별 디폴트 테이블 스페이스를 지정하지 않으면 DB 전체에 지정된 디폴트 스페이스가 자동으로 지정된다.

 

- te 디폴트 스페이스 생성 후 DB 전체에 지정된 디폴트 스페이스를 te로 변경한다.

- 새로 생성된 사용자를 포함하여 유저 레벨에서 디폴트 테이블 스페이스가 지정되지 않은 모든 유저의 디폴트 테이블 스페이스가 변경된다.

- 유저 생성 시 반드시 사용할 테이블 스페이스를 지정하여 생성한다.

 

2-10 Temporary tablespace 생성과 default temporary tablespace 변경

● 사용 명령어

SQL> CREATE TEMPORARY TABLESPACE <tablespace명>
  2  TEMPFILE '<temp file명>' SIZE <크기>;

- 템포러리 테이블 스페이스를 생성한다.

- 로컬리 매니지먼트가 기본이다.

- DATAFILE 절이 아닌 TEMPFILE 절을 사용한다.

 

 SQL> ALTER DATABASE DEFAULT TEMPORARY TABLESPACE <tablespace명>;

- 지정된 테이블 스페이스를 디폴트 템포러리 테이블 스페이스로 설정한다.

 

SQL> SELECT * FROM DATABASE_PROPERTIES
  2  WHERE PROPERTY_NAME LIKE '%TEMP%';

 

 

● 실습

- 시스템에 지정된 디폴트 템포러리 테이블 스페이스를 조회 한다.

- 템포러리 테이블 스페이스는 말 그대로 임시 공간이므로 오프라인 대상이 아니며 읽기 전용일 필요도 없다.

- 일반 템포러리 테이블 스페이스는 아무 제약 없이 삭제가 가능하나, 디폴트 템포러리 테이블 스페이스는 삭제가 불가능하다.

 

- tmp 템포러리 테이블 스페이스 생성 후 이를 디폴트 템포러리 테이블 스페이스로 변경한다.

- 더이상 디폴트 템포러리 테이블 스페이스가 아닌 temp 테이블 스페이스를 삭제한다.

 

2-11 Undo 관련 설정 및 상태 확인

● 사용 명령어

SQL> SELECT SEGMENT_NAME, TABLESPACE_NAME, STATUS 
 2   FROM DBA_ROLLBACK_SEGS;

- 언두 세그먼트의 상태를 조회한다.

 

SQL> SELECT N.USN, N.NAME, S.STATUS
 2   FROM V$ROLLNAME N, V$ROLLSTAT S
 3   WHERE N.USN=S.USN;

- 현재 사용 중이거나 사용 가능한 언두 세그먼트를 조회한다.

 

● 실습

- undo_retention : 언두 정보가 사라져도 정보를 유지하는 시간을 지정한다. (900 = 900초)

 

- 언두 관련 파라미터 설정 및 데이터 파일의 상태를 확인한다.

- 현재 시스템에 존재하는 언두 세그먼트의 목록을 확인 한다. 온라인 상태인 세그먼트만 사용된다.