티스토리 뷰

 어디 프로젝트에 들어가냐에 따라 다르겠지만 계정들을 딱 용도에 맞게 분리시켜 생성하여 각 종 Synonym 및 권한을 주는 형식의 프로젝트가 있기 마련입니다. 그러다보니 일반적인 Delete가 아니라 아예 Table을 리셋 시키려 Truncate하고 싶은데 다른 계정에서 실행해보면 권한이 충분하지 않다면서 실행이 되지 않습니다. 다른 계정의 Table을 Truncate하기 위해서는 두 가지 방식이 있습니다.

 

1.  권한 주기

1
GRANT DROP ANY TABLE TO A
cs

 이렇게 ANY 권한을 주게 되면 A 계정에서 어떤 Table이든 간에 Truncate 시키는 게 가능합니다. 다만 이렇게 무지막지한 권한을 줬다가는 모든 Table들을 Truncate할 수 있으므로 위험할 수 있습니다. 따라서 아래와 같은 방식으로 하는 게 현명하겠습니다.

2. 계정에 프로시저 생성 후 실행

 Truncate할 테이블이 있는 B라는 계정에 프로시저를 생성하여 대상이 되는 Table을 Truncate하는 방식입니다. 이러면 해당 프로시저의 Execute 권한만 A라는 계정에 주면 되기 때문에 위험성도 덜 한 방식입니다. 다만 프로시저 상에서는 바로 Truncate를 실행할 수 없으므로 아래와 같이 실행해야 합니다.

 

1
2
3
4
5
CREATE OR REPLACE PROCEDURE TRUNCATE_TABLE(tableName IN VARCHAR2)
AS
BEGIN
    EXECUTE IMMEDIATE 'TRUNCATE TABLE ' || tableName;
END;
cs

 아래와 같이 실행하면 원하는 Table을 Truncate 할 수 있습니다. 근데 변수를 받으면 모든 Table 다 Truncate할 수 있는 것이니 Any와 별 차이가 없네요. 아무튼 상황에 맞게 쓰시길 바라겠습니다.

'IT > DB' 카테고리의 다른 글

Oracle 11g, 12c 설치 시 나타나는 다양한 오류 들  (0) 2020.05.22
Oracle - ROWNUM 활용법  (0) 2017.07.30
Oracle - Paging 처리  (0) 2017.03.05
Oracle - Index 및 쿼리 성능 평가  (0) 2017.03.05
Oracle - DECODE문  (0) 2017.03.05
댓글
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday