# vi /oracle/app/oracle/product/10.2.0/db_1/network/admin/tnsname.ora
---------------------------------------------------------------------------
KMUHAKSADB=
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 2XX.2XX.29.51)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SID = ZEUS )
    )
  )
---------------------------------------------------------------------------

# su - oracle

/oracle>sqlplus /nolog

SQL> connect / as sysdba


-- CREATE [PUBLIC] DATABASE LINK "링크된서버의 별칭" CONNECT TO "계정ID" IDENTIFIED BY "계정암호" USING 'tnsname의 구분명칭';

-- PUBLIC 지정하여 생성하면 삭제할때도 PUBLIC 지정해야 된다.
-- PUBLIC 생략 : 연결된 서버가 생성한 사용자의 소유가 된다.(소유자만 사용가능)
-- PUBLIC 지정 : 연결된 서버의 소유자가 PUBLIC이다.(아무나 사용가능)
SQL> CREATE [PUBLIC] DATABASE LINK "DB_NAME" CONNECT TO "user_id" IDENTIFIED BY "password" USING 'OTHER_DB_NAME';


-- 연결된 서버의 object(table, view, function 되더라 나머지는 안해봤다) 조회
SQL> SELECT * FROM www_userm@DB_NAME;

SQL> SELECT UDF_USER_PW@DB_NAME('1106673', '2696612') FROM DUAL;


-- 연결된 서버 삭제
SQL> DROP [PUBLIC] DATABASE LINK DB_NAME;


-- 연결된 서버 목록 조회
SQL> SELECT * FROM ALL_DB_LINKS;





-- 동의어 생성
SQL> CREATE [PUBLIC] SYNONYM members FOR www_userm@DB_NAME;


-- 동의어 삭제
SQL> DROP [PUBLIC] SYNONYM members;


-- 동의어로 조회
SQL> SELECT * FROM members;











-- 권한부여
GRANT CREATE DATABASE LINK TO "유저명";

-- 디비링크 생성
CREATE DATABASE LINK ORCL_LINK
  CONNECT TO "user_id"
  IDENTIFIED BY "password"
  USING '(DESCRIPTION = 
            (ADDRESS_LIST = 
                (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.40.62)(PORT = 3001)) 
            )
            (CONNECT_DATA =
                (SERVICE_NAME = ORCL)
            )
          )';