본문 바로가기

데이터 사이언스 DataScience/Data Base 데이터베이스

[Oracle] 테이블스페이스 READ ONLY, READ WRITE

1. READ ONLY 옵션의 필요성

   * 테이블스페이스 옵션을 READ ONLY으로 할 경우 DML 중 SELECT(조회)만 가능

 

   1) 데이터의 변경이 없는 경우(Ex> log 테이블 등)

       →  READ ONLY로 변경시 성능의 개선, BCV 백업시 해당 테이블스페이스 제외 가능

 

   2) 데이터가 변경되면 안되는 경우, 일관성을 유지하고 싶은 경우 

      Ex> 데이터 마이그레이션(이행) 상황, MDM 등 기준 데이터 유지하는 경우

 

 

2. 테이블스페이스를 READ ONLY 할 수 있는 조건

   1) TABLESPACE에 ACTIVE 트랜잭션이 없어야 한다.

   2) TABLESPACE에 ACTIVE ROLLBACK SEGMENT가 없어야 한다.

   3) TABLESPACE에 ONLINE BACKUP이 없어야 한다.

   4) SYSTEM TABLESPACE가 아니어야 한다. (SYS, TEMP 등)

 

 

3. 스크립트

   1) 수행 스크립트

/* READ ONLY로 변경하기 */
ALTER TABLESPACE 테이블스페이스이름 READ ONLY;

/* READ WRITE(ONLINE)으로 변경하기 */
ALTER TABLESPACE 테이블스페이스이름 READ WRITE;

 

2) 시스템 영역 제외 전체 발췌 스크립트

/* DB별 테이블스페이스 명명규칙이 다를 수 있으니 전체 확인 필수 */ 

SELECT   'ALTER TABLESPACE '||A.TABLESPACE_NAME||' READ ONLY;' READ_ONLY_SQL
         , 'ALTER TABLESPACE '||A.TABLESPACE_NAME||' READ WRITE;' READ_WRITE_SQL
FROM     DBA_TABLESPACES A
WHERE    A.TABLESPACE_NAME NOT IN ('SYSTEM', 'SYSAUX', 'USERS', 'TEMP')
         AND .TABLESPACE_NAME NOT LIKE '%UNDO%'
ORDER BY A.TABLESPACE_NAME
;

 

* 관련 SQL

1) ACTIVE SESSION KILL

/* KILL 전에 스키마 이름 등 세션 정보 반드시 확인
   SCEHMANAME NOT IN 조건에 제외할 스키마 추가
*/

SELECT 'ALTER SYSTEM KILL SESSION "'||A.SID||','||A.SERIAL#||',@'||A.INST_ID||'" IMEDIATE;' KILL_SQL
       , A.SQL_ID
       , A.STATUS
       , A.*
FROM   GV$SESSION A
WHERE  A.STATUS = 'ACTIVE'
       AND SCHEMANAME NOT IN ('SYS');

 

   2) DATA FILE 별 별도 확인

/* ENABLED 컬럼에서 READ WRITE / READ ONLINE 확인 */

SELECT * FROM GV$DATAFILE;

 

 

 

* 참고자료 : 

https://docs.oracle.com/cd/E18283_01/server.112/e17120/tspaces006.htm

 

Using Read-Only Tablespaces

Making a tablespace read-only prevents write operations on the datafiles in the tablespace. The primary purpose of read-only tablespaces is to eliminate the need to perform backup and recovery of large, static portions of a database. Read-only tablespaces

docs.oracle.com

 

반응형