public database link가 아니고 개별 스키마에 생성된 database link의 경우에는 다른 스키마에서 삭제가 불가능 합니다.
(그 유저가 dba 권한을 가진 유저라고 할지라도..)
실제 문서를 통해 해당 내용을 확인해보겠습니다.
drop database link에 대한 내용을 확인해보면, "데이터베이스 링크 이름에 "."이 허용되므로 다른 사용자의 스키마에서 데이터베이스 링크를 삭제할 수 없으며 스키마 이름으로 dblink를 한정할 수 없습니다" 라고 해석할 수 있습니다.
즉 DB link 이름이 aaa.aaa.aaa이런식으로도 가능하기 때문에 앞에 다른 스키마에서 스키마명.aaa.aaa.aaa 이런식으로
삭제 할 수 없다는 이야기인것 같네요. 테스트를 통해 해당내용 확인해보겠습니다.
Restriction on Dropping Database Links
You cannot drop a database link in another user's schema, and you cannot qualify dblink with the name of a schema, because periods are permitted in names of database links. Therefore, Oracle Database interprets the entire name, such as ralph.linktosales, as the name of a database link in your schema rather than as a database link named linktosales in the schema ralph.
출처 : https://docs.oracle.com/cd/B13789_01/server.101/b10759/statements_8010.htm
테스트
test1 : database link 삭제 유저(dba권한 O)
test2 : database link 생성 유저(dba권한 O)
1.test2에 생성된 database link 확인 후 링크 생성
SQL > create database link drop_link
connect to test2 identified by 'test2'
using 'racpdb';
SQL> select * from dba_db_links;
OWNER DB_LINK USERNAME HOST CREATED HID
--------------------------------------------------------------------------------
SYS SYS_HUB SEEDDATA 17/01/26 NO
TEST2 DROP_LINK TEST2 racpdb 21/10/26 NO
2.test1에서 database link 삭제 시도
삭제가 안됌
SQL> show user
USER is "TEST"
SQL> drop database link test2.drop_link;
drop database link test2.drop_link
*
ERROR at line 1:
ORA-02024: database link not found
3.프로시저 생성하여 삭제
출처 : http://dbaoracletips.blogspot.com/2011/11/how-to-dropcreate-database-link-from.html
##생성
SQL> create procedure test2.drop_db_link as
begin
execute immediate 'drop database link drop_link';
end drop_db_link;
/
Procedure created.
##수행
SQL> execute test2.drop_db_link;
PL/SQL procedure successfully completed.
##확인
SQL> select * from dba_db_links;
OWNER DB_LINK USERNAME HOST CREATED HID
--------------------------------------------------------------------------------
SYS SYS_HUB SEEDDATA 17/01/26 NO
##프로시저 삭제
SQL> drop procedure test2.drop_db_link;
Procedure dropped.
테스트 결과, database link와 같은 스키마의 프로시저를 생성 후 내용으로 삭제하는 구문을 넣어 그 프로시저를 수행하여 삭제를 하면 삭제가 됩니다. 그렇지 않다면 소유한 스키마에 직접 접속하여 삭제하는 방법이 있겠습니다.
'Oracle > 운영' 카테고리의 다른 글
테이블 파티션 Split,Merge,Coalesce (0) | 2021.11.08 |
---|---|
대용량 테이블 컬럼 순서 변경 테스트(12c new feature column visiable 기능 사용) (0) | 2021.11.03 |
Unusable Index를 Skip하고 scan하는 파라미터 skip_ususable_indexes (0) | 2021.10.26 |
다른 유저 테이블 Truncate 시키는 권한 (0) | 2021.10.25 |
Locale의 LANG 과 Putty의 캐릭터셋 설정에 따른 한글 깨짐 현상 (0) | 2021.10.15 |
댓글