레이블이 #readonlytable인 게시물을 표시합니다. 모든 게시물 표시
레이블이 #readonlytable인 게시물을 표시합니다. 모든 게시물 표시

2021년 11월 13일 토요일

오라클 읽기 전용 테이블(ORACLE Read-Only Tables)

 

오라클 읽기 전용 테이블(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 테이블을 생성하세요.


  • 사번(empno) number, generated as identity primary key(column level constraints)

  • 성명(ename) varchar2(50)


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교육

(C#교육동영상)C# ADO.NET 실습 ODP.NET/ODAC 설치 오라클 함수 호출 실습, C#학원, WPF학원, 닷넷학원, 자바학원

  (C#교육동영상)C# ADO.NET 실습  ODP.NET/ODAC 설치  오라클 함수 호출 실습, C#학원, WPF학원, 닷넷학원, 자바학원 https://www.youtube.com/watch?v=qIPU85yAlzc&list=PLxU-i...