오라클 읽기 전용 테이블(ORACLE Read-Only Tables)
오라클 11g 이전 버전에서 테이블은 다른 사용자에게 SELECT 권한을 주는 경우에만 읽기전용으로 운영이 가능했고, 테이블을 생성한 소유자(OWNER)는 테이블에 Read/Write 권한이 있어 이 테이블을 읽기전용으로 운영하는 것은 불가능 했습니다. 하지만 오라클 11g에서부터 “ALTER TABLE ~ READ ONLY” 명령으로 테이블스페이스의 다른 테이블에 영향을 주지 않고 원하는 테이블을 읽기 전용으로 만들 수 있습니다.
읽기 전용으로 지정되면 TRUNCATE/INSERT/UPDATE/DELETE 작업과 ALTER TABLE ADD/MODIFY/RENAME/DROP COLUMNS 등의 작업은 불가능 하며 DROP TABLE, ALTER TABLE ADD/MODIFY/RENAME, ALTER TABLE RENAME 등의 작업은 가능 합니다.
[기본형식]
ALTER TABLE table_name READ ONLY ALTER TABLE table_name READ WRITE |
테이블을 생성하고 읽기전용으로 만들어 값을 입력해 보겠습니다. DML(INSERT/UPDATE/DELETE) 및 DDL(CREATE/DROP/TRUNCATE)들이 작동하는지를 확인해 봅니다.
실습
실습을 위해 EMP10 테이블을 생성 합니다.
다음과 같은 조건으로 EMP10 테이블을 생성하세요.
|
CREATE TABLE EMP10 (
EMPNO NUMBER GENERATED AS IDENTITY
CONSTRAINTS PK_EMP10 PRIMARY KEY ,
ENAME VARCHAR2(50)
);
<실행결과>
Table EMP10이(가) 생성되었습니다.
‘홍길동1’ 데이터를 입력하세요. |
INSERT INTO EMP10 (ENAME) VALUES ('홍길동1');
<실행결과>
1 행 이(가) 삽입되었습니다.
DML 테스트를 위해 테이블을 읽기 전용으로 변경 합니다.
EMP10 테이블을 읽기전용으로 변경 하세요. |
ALTER TABLE EMP10 READ ONLY;
<실행결과>
Table EMP10이(가) 변경되었습니다.
DML(INSERT/UPDATE/DELETE)을 테스트 해 보겠습니다.
‘홍길동2’ 데이터를 입력하세요. |
INSERT INTO EMP10 (ENAME) VALUES ('홍길동2');
<실행결과>
ORA-12081: "SCOTT"."EMP10" 테이블에 작업을 업데이트하는 것이 허용되지 않습니다
‘홍길동1’ 데이터의 이름을 ‘홍길동2;로 변경 하세요. |
UPDATE EMP10
SET ENAME = '홍길동2'
WHERE ENAME = '홍길동1';
<실행결과>
ORA-12081: "SCOTT"."EMP10" 테이블에 작업을 업데이트하는 것이 허용되지 않습니다
‘홍길동1’ 데이터를 삭제하세요. |
DELETE FROM EMP10
WHERE ENAME = '홍길동1';
<실행결과>
ORA-12081: "SCOTT"."EMP10" 테이블에 작업을 업데이트하는 것이 허용되지 않습니다
DDL 명령어중 하나인 TRUNCATE TABLE을 테스트 해 보겠습니다.
EMP10 테이블의 모든 데이터를 롤백 정보 없이 삭제 하세요. |
TRUNCATE TABLE EMP10;
<실행결과>
ORA-12081: "SCOTT"."EMP10" 테이블에 작업을 업데이트하는 것이 허용되지 않습니다.
TRUNCATE TABLE 명령은 테이블의 데이터를 롤백 정보를 보관하지 않고 순식간에 잘라 버리는 명령으로 대용량의 테이블 데이터라고 할지라도 한순간에 삭제해 버릴 수 있습니다. 물론 롤백 정보를 보관하지 않으므로 삭제 후 복구는 불가능 합니다. 하지만 테이블에 트리거, 인덱스 및 기타 종속성이 많은 경우 DELETE문으로 행을 모두 제거하는 것보다 TRUNCATE TABLE 문이 있는 행을 제거하는 것이 더 빠를 수 있습니다. TRUNCATE TABLE 구문은 DDL 구문으로 WHERE 절을 사용할 수는 없습니다.
읽고 쓰기로 테이블의 상태를 변경 후 데이터를 한건 입력해 보고 다시 읽기전용으로 변경 하여 테이블을 삭제해 보겠습니다.
EMP10 테이블을 읽고 쓸수 있는 상태로 변경한 후 ‘홍길동2’ 데이터를 입력하세요. |
ALTER TABLE EMP10 READ WRITE;
INSERT INTO EMP10 (ENAME) VALUES ('홍길동2');
<실행결과>
1 행 이(가) 삽입되었습니다.
READ WRITE 상태로 변경을 하니 데이터가 잘 입력 됩니다.
EMP10 테이블을 읽기 전용 상태로 변경 후 테이블을 삭제 하세요. |
ALTER TABLE EMP10 READ ONLY;
DROP TABLE EMP10;
<실행결과>
Table EMP10이(가) 삭제되었습니다.
#읽기전용테이블, #readonlytable, #오라클, #ORACLE, #ORACLE강좌, #ORACLE교육