본문 바로가기
Oracle/운영

다른 스키마(유저) Database link 삭제하기

by 취미툰 2021. 10. 27.
반응형

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

 

DROP DATABASE LINK

DROP DATABASE LINK Purpose Use the DROP DATABASE LINK statement to remove a database link from the database. Prerequisites A private database link must be in your own schema. To drop a PUBLIC database link, you must have the DROP PUBLIC DATABASE LINK syste

docs.oracle.com

 

테스트

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

 

How to drop/create Database Link from another schema?

SQL> CREATE or replace PROCEDURE scott.create_db_link AS BEGIN EXECUTE IMMEDIATE 'create database link LINK1 connect to scott ident...

dbaoracletips.blogspot.com


##생성
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와 같은 스키마의 프로시저를 생성 후 내용으로 삭제하는 구문을 넣어 그 프로시저를 수행하여 삭제를 하면 삭제가 됩니다. 그렇지 않다면 소유한 스키마에 직접 접속하여 삭제하는 방법이 있겠습니다.

 

반응형

댓글