티스토리 뷰
어디 프로젝트에 들어가냐에 따라 다르겠지만 계정들을 딱 용도에 맞게 분리시켜 생성하여 각 종 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