반응형
해당 테스트는 DB링크를 포함하고 있는 쿼리가 있는 프로시저에서 DB Link를 강제로 삭제하여 에러를 유발해보고 각각 어떤 에러가 발생하는지 확인해보도록 하겠습니다.
Oracle
Oracle 테스트 링크 생성
CREATE PUBLIC DATABASE LINK LINK_TEST
CONNECT TO test identified by test
USING 'XE';
테스트 프로시저 생성
CREATE OR REPLACE PROCEDURE LINK_TEST
IS
BEGIN
DECLARE
V_DATE varchar2(20);
BEGIN
SELECT to_char(SYSDATE,'YYYYMMDD') into V_DATE FROM DUAL@LINK_TEST;
DBMS_OUTPUT.PUT_LINE(V_DATE);
END;
END;
테스트
TEST@XE> exec LINK_TEST();
20210826
PL/SQL procedure successfully completed.
링크 삭제
drop public database link LINK_TEST;
프로시저 재 컴파일(스키마 세션 그대로)
CREATE OR REPLACE PROCEDURE LINK_TEST
IS
BEGIN
DECLARE
V_DATE varchar2(20);
BEGIN
SELECT to_char(SYSDATE,'YYYYMMDD') into V_DATE FROM DUAL@LINK_TEST;
DBMS_OUTPUT.PUT_LINE(V_DATE);
END;
END;
PROCEDURE created Successfully.
에러없이 생성됨
DBA_OBJECTS 확인
SQL> select owner,object_name,status from dba_objects where object_name='LINK_TEST' and owner='TEST';
OWNER OBJECT_NAME STATUS
------------------------------ -------------------------------------------------------------------------------------------------------------------------------- -------
TEST LINK_TEST VALID
1 rows selected.
프로지서 재 컴파일 (sys유저에서) (다른 세션에서 동일 스키마로 했을시에도 동일)
SYS@XE> CREATE OR REPLACE PROCEDURE TEST.LINK_TEST
IS
BEGIN
DECLARE
V_DATE varchar2(20);
BEGIN
SELECT to_char(SYSDATE,'YYYYMMDD') into V_DATE FROM DUAL@LINK_TEST;
DBMS_OUTPUT.PUT_LINE(V_DATE);
END;
END; 2 3 4 5 6 7 8 9 10 11
12 /
Warning: Procedure created with compilation errors.
에러와 함께 생성됨
프로시저 수행
TEST@XE> exec LINK_TEST();
BEGIN LINK_TEST(); END;
*
ERROR at line 1:
ORA-02019: connection description for remote database not found
ORA-06512: at "TEST.LINK_TEST", line 7
ORA-06512: at line 1
Elapsed: 00:00:00.00
티베로
CREATE PUBLIC DATABASE LINK LINK_TEST
CONNECT TO test identified by 'test'
USING 'tibero';
프로시저 생성
CREATE OR REPLACE PROCEDURE TEST.LINK_TEST
IS
BEGIN
DECLARE
V_DATE varchar2(20);
BEGIN
SELECT to_char(SYSDATE,'YYYYMMDD') into V_DATE FROM DUAL@LINK_TEST;
DBMS_OUTPUT.PUT_LINE(V_DATE);
END;
END;
수행
SQL> call LINK_TEST();
PSM called.
-------------------------[Start Time: 2021/08/27 10:01:34]-------------------------
SQL> 20210826
링크 삭제
drop public database link LINK_TEST;
프로시저 재컴파일 (해당 스키마 세션 그대로에서)
CREATE OR REPLACE PROCEDURE LINK_TEST
IS
BEGIN
DECLARE
V_DATE varchar2(20);
BEGIN
SELECT to_char(SYSDATE,'YYYYMMDD') into V_DATE FROM DUAL@LINK_TEST;
DBMS_OUTPUT.PUT_LINE(V_DATE);
END;
END;
에러없이 생성됨
DBA_OBJECTS 뷰 확인
SQL> select owner,object_name,status from dba_objects where object_name='LINK_TEST';
OWNER OBJECT_NAME STATUS
-------------------------------------------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------------------------------------------------- -------
TEST LINK_TEST VALID
1 rows selected.
프로시저 재컴파일(sys에서)(같은 스키마 다른 세션에서도 동일)
CREATE OR REPLACE PROCEDURE TEST.LINK_TEST
IS
BEGIN
DECLARE
V_DATE varchar2(20);
BEGIN
SELECT to_char(SYSDATE,'YYYYMMDD') into V_DATE FROM DUAL@LINK_TEST;
DBMS_OUTPUT.PUT_LINE(V_DATE);
END;
END;
021/08/27 10:02:47 >
PROCEDURE created with compilation error.
7/57 Specified schema object was not found.
at line 7, column 57 of null:
SELECT to_char(SYSDATE,'YYYYMMDD') into V_DATE FROM DUAL@LINK_TEST;
^
Execution Time : 00:00:00.16
생성 시에 에러 발생
수행시
SQL> exec link_test();
TBR-15146: PSM compilation error.
TBR-15148: Invalid object 'LINK_TEST'.
에러발생
같은 유형의 DB라 같은 상황에서 같은 에러가 발생합니다. DB LINK를 삭제하고 프로시저를 재생성했을 때 같은세션 에서는 에러 없이 생성되고 프로시저 수행시에 에러가 발생합니다.
다른 세션에서 같은 프로시저 재컴파일 시 그 당시에 에러가 발생하면서 Object가 INVALID로 빠집니다.
간단하지만 테스트가 필요해서 테스트를 수행했고 제가 나중에 보려고 정리했습니다
반응형
'Oracle > 운영' 카테고리의 다른 글
Locale의 LANG 과 Putty의 캐릭터셋 설정에 따른 한글 깨짐 현상 (0) | 2021.10.15 |
---|---|
DBA_DEPENDENCIES (0) | 2021.09.07 |
시퀀스(Sequence) Cache 옵션 유/무 , Order 옵션 유/무 테스트 (0) | 2021.08.05 |
Sequence(시퀀스) (0) | 2021.08.02 |
SID와 SERVICE NAME의 차이 및 확인법 (0) | 2021.07.09 |
댓글