테이블 read only 설정

2010. 1. 27. 16:39Oracle/Oracle Tip

반응형
[출처 : PRODBA 의 가을바람님의 글을 보고 테스트를 해보았습니다.]

1. 트리거의 이용

SQL> create or replace trigger emp_sal_read_only --트리거 이름
  2  before insert or update or delete
  3  on emp  --원하는 테이블명
  4  begin
  5  raise_application_error
  6  (-20001,'Table EMP is read only, You cannot make changes to the data.');
  7  end;
  8  /

Trigger created.

SQL> delete from emp;
delete from emp
            *
ERROR at line 1:
ORA-20001: Table EMP is read only, You cannot make changes to the data.
ORA-06512: "SCOTT.EMP_SAL_READ_ONLY", 줄 2에서
ORA-04088: 트리거 'SCOTT.EMP_SAL_READ_ONLY'의 수행시 오류


SQL> drop trigger emp_sal_read_only;

Trigger dropped.

SQL> delete from emp;

14 rows deleted.

SQL> rollback;

Rollback complete.

SQL>

2. read only tablespace 를 이용

SQL> select * from tab

TNAME      TABTYPE         CLUSTERID
---------- -------------- ----------
DEPT           TABLE
EMP            TABLE
BONUS         TABLE
SALGRADE   TABLE
AA               TABLE
SALES         TABLE
DEPT_TEST  TABLE
EMP_TEST   TABLE
NUM_TEST   TABLE

9 rows selected.

SQL> create tablespace temp_readonly
  2  datafile '/oracle/oradata/PROD/Disk5/temp_readonly.dbf' size 5M reuse
  3  autoextend on;

Tablespace created.

SQL> alter table emp_test move tablespace temp_readonly;

Table altered.

SQL> alter tablespace temp_readonly read only;

Tablespace altered.

SQL> delete from emp_test;
delete from emp_test
            *
ERROR at line 1:
ORA-00372: 파일 7는 지금 수정될 수 없습니다
ORA-01110: 7 데이터 파일: '/oracle/oradata/PROD/Disk5/temp_readonly.dbf'

SQL> drop tablespace temp_readonly including contents and datafiles cascade constraints;

Tablespace dropped.

SQL> select * from tab;

TNAME      TABTYPE         CLUSTERID
---------- -------------- ----------
DEPT           TABLE
EMP            TABLE
BONUS         TABLE
SALGRADE   TABLE
AA               TABLE
SALES         TABLE
DEPT_TEST  TABLE
NUM_TEST   TABLE

8 rows selected.  --> emp_test가 사라졌네요..잉ㅜㅜ 조심하세요!!

나의 의견 : 
1. 트리거를 이용한 방법은 새롭게 알게된 것이며, 테스트 해 본 결과 유용하게 쓰일 것 같습니다.
2. 테이블을 옮기고 테이블스페이스를 다시 수정하고 번거로운 작업있긴하지만, 
    이것 또한 테이블을 read only하는데 유용한 정보입니다.

위 내용과 무관하지만 테이블스페이스를 삭제하면 그 안에 데이터도 사라진다는 것 또한 잊지마세요!!
반응형

'Oracle > Oracle Tip' 카테고리의 다른 글

long형 replace  (0) 2011.01.24
LONG과 CLOB 에 대한 데이터 이전.  (0) 2011.01.04
tablespace 생성 스크립트  (0) 2010.04.30
1년치 날짜 생성.  (0) 2010.01.14
유용 update문  (0) 2009.12.09