ORA-02024: database link not found 오류는 문자 그대로 해석하였을 때, 데이터베이스 링크를 찾을 수 없다는 것이 원인입니다. 다음과 같은 가능성을 생각하여 ORA-02024 오류를 해결해 보도록 하겠습니다. 해당 오류는 보통 삭제를 시도하는 경우에 발생하기에 삭제를 전제로 진행하겠습니다.
데이터베이스 링크 오타 확인
삭제하려는 데이터베이스 링크의 명칭, 이름을 한 번 더 확인해 주세요. 단순히 오타로 인해 발생하였을 가능성이 있습니다.
데이터베이스 링크 존재 여부 확인
삭제하려는 링크의 존재 여부를 확인해 봅시다. 여러 데이터베이스를 운용하는 경우, 연결이 잘못되어 실수로 삭제를 다른 데이터베이스에서 시도하는 경우를 생각해 볼 수 있습니다.
다음은 데이터베이스 링크를 DBA 뷰에서 조회해 보는 예제 자료입니다.
SELECT * FROM DBA_DB_LINKS;
PUBLIC 데이터베이스 링크 여부 확인
public 데이터베이스 링크 여부를 확인해 주세요. public과 private은 삭제 문장부터 다릅니다. 다음은 예제이며 PUBLIC 여부를 비교하시면 직관적으로 이해하실 수 있을 겁니다. 이 정도를 확인하면 ORA-02024: database link not found 오류를 해결할 수 있을 것입니다.
--퍼블릭
DROP PUBLIC DATABASE LINK DATABASE_LINK_NAME;
--프라이빗
DROP DATABASE LINK DATABASE_LINK_NAME;
오라클 데이터베이스 링크
오라클에서 데이터베이스 링크는 데이터베이스에서 또 다른 데이터베이스를 연결하기 위해 사용하는 스키마 오브젝트입니다. 데이터베이스는 분리되어 있으나 서로 접근하여 데이터 조회, 저장, 수정, 삭제 등의 작업이 필요할 때 유용합니다.
데이터베이스 링크 생성하기
데이터베이스 링크 생성하기 예제입니다. 퍼블릭을 활용한 공개 데이터베이스 링크 예시이며, PUBLIC 이외에도 SHARED, AUTHENTICATED BY 등의 생성 구문도 이용할 수 있으니 참고해 주세요.
- CREATE PUBLIC DATABASE LINK databaseLinkName => 데이터베이스 링크 생성 선언
- CONNECT TO userName IDENTIFIED BY password => 접속 계정을 설정합니다.
- USING connectString => 접속 식별자를 기술합니다.
CREATE PUBLIC DATABASE LINK databaseLinkName
CONNECT TO userName
IDENTIFIED BY password
USING '(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = XE)
)
)';
접속식별자는 상기와 같이 명시하여도 되고, tnsnames.ora 상의 서비스네임 별칭을 다음과 같이 사용해도 됩니다.
CREATE PUBLIC DATABASE LINK databaseLinkName
CONNECT TO userName IDENTIFIED BY password USING 'connectIdentifier';
이때, tnsnames.ora 파일에는 다음과 같은 접속 식별자가 있습니다.
--tnsnames.ora
connectIdentifier =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = XE)
)
)
데이터베이스 링크 삭제하기
데이터베이스 링크 삭제는 데이터 정의 언어를 활용합니다. PUBLIC으로 생성하였기에 공개 데이터베이스 링크를 삭제합니다. PRIVATE으로 생성하였다면 생략합니다.
DROP PUBLIC DATABASE LINK databaseLinkName;
ORA-02024: 데이터 링크를 찾을 수 없습니다
PUBLIC으로 생성된 데이터베이스 링크를 PRIVATE로 삭제하려는 경우에 ORA-02024 오류가 발생합니다.
DROP DATABASE LINK databaseLinkName;
데이터베이스 링크 조회하기
데이터베이스에 있는 데이터를 조회하려면 @databaseLinkName를 사용하면 됩니다. databaseLinkName에 있는 EMP 테이블을 조회하는 예제는 다음과 같습니다.
SELECT * FROM EMP@databaseLinkName;
Insert into EMP@databaseLinkName
(EMPNO,
ENAME, JOB, MGR, HIREDATE, SAL,
COMM, DEPTNO)
Values
(7839, 'KING', 'PRESIDENT', NULL, TO_DATE('11/17/1981 00:00:00', 'MM/DD/YYYY HH24:MI:SS'),
5000, NULL, 10);
UPDATE EMP@databaseLinkName
SET COMM = NVL (COMM, 0) + 100
WHERE JOB = 'MANAGER';
DELETE EMP@databaseLinkName
WHERE EMPNO = '9999';
데이터베이스 링크는 테이블뿐만 아니라 뷰, PL/SQL 오브젝트는 물론, SELECT 명령어를 포함하여 INSERT, UPDATE, DELETE 등의 명령어도 가능합니다.
데이터베이스 링크에 동의어를 설정하여 대상 객체를 간소화할 수도 있습니다. 다만, 데이터베이스링크 여부를 직관적으로 보기에 힘든 단점이 생깁니다.
ORA-02019: 원격 데이터베이스 접속을 위한 접속 기술자를 찾을 수 없습니다.
데이터베이스 링크의 이름을 달리 조회하면 ORA-02019 오류가 발생합니다. 이때는 데이터베이스 링크 이름을 잘못 만들었거나, 현재 오타가 있는 상황입니다.
데이터베이스 링크 오브젝트 조회하기
데이터 딕셔너리에서 데이터베이스 링크 오브젝트를 조회할 수 있습니다.
SELECT * FROM DBA_DB_LINKS;