Project & Issu

마이그레이션

gu9gu 2024. 6. 18. 17:57
CREATE OR REPLACE PROCEDURE "P_TEST" IS BEGIN
    DBMS_OUTPUT.PUT_LINE('Hello from P_TEST');
END;
/

마이그레이션 시 생각 못 했던 사항을 정리

 

 - 마이그레이션 할 데이터 조회시 ID로 ORDER BY를 해준다.

    -> 어디까지 완료된건지, 문제가 어디서 터진건지 확인 가능

    -> 마이그레이션 할 데이터 조회 시점 이후에 추가된 데이터가 있는 경우 추가로 작업하기 편하다.

 

- 마이그레이션 쿼리를 PL SQL로 하는 경우 에외나 문제 포인트에 ROLLBACK 처리를 해준다.

    ->  DB 툴에서 설정해놓은 대로 ROLLBACK 되는 경우가 있는데,  툴에 의존하지 않고 ROLLBACK 할 수 있도록 예외 처리 코드를 넣어줘야 한다.

 

개발서버에서 DBEAVER로 PL SQL을 돌려봤는데, 에러가 발생했을 때 전체가 다 ROLLBACK 돼서 PL SQL 전체에 대해서 TRANSACTION이 잡힌다고 생각했다. ( DBEAVER에서 설정을 따로 건드리지 않았음)

 

설정 바꾸면 ROLLBACK 안 되는지 다시 테스트 필요

 

 

PL SQL 예외처리를 해줄 때 고민

 방법1. 예외가 발생하기 전에 INSERT한 데이터들의 경우는 유지하고 예외가 발생한 부분에 대한 LOG를 찍는다.

 방법2. 전체 다 ROLLBACK 해준다.

 

PL SQL 예외처리 

 - DBEAVER에서 OUPUT 창에서 OUTPUT 출력 잘 되는지 확인 ( CTRL+SHIFT+O  )

BEGIN
	DBMS_OUTPUT.PUT_LINE('TEST');
END;

 

 - 

 

 

 

스토어디 프로시저 생성

CREATE OR REPLACE PROCEDURE "P_TEST" IS BEGIN

DBMS_OUTPUT.PUT_LINE('Hello from P_TEST');

END;

/

 

실행방법

CALL P_TEST();

 

 

참고

SQL Error [6575] [65000]: ORA-06575: 패키지 또는 함수 P_TEST 은 부적당한 상태입니다

에러 발생하면

/ 를 프로시져에서 제거하고 다시 실행 ( DBEAVER 프로젝트에서 직접 프로시저 열어서 지우고 적용)

*/

CALL P_TEST ();

 

 

 

 

-- 프로시저 실행 중 

drop table 테이블명;

 -> [54] ORA-00054: 리소스가 사용 중이어서 NOWAIT가 지정되었거나 시간 초과가 만료된 상태로 획득합니다.

 

 

SELECT A.SID, A.SERIAL#, A.STATUS

FROM V$SESSION A, V$LOCK B, DBA_OBJECTS C

WHERE A.SID = B.SID

AND B.ID1 = C.OBJECT_ID

AND B.TYPE = 'TM'

AND C.OBJECT_NAME = '테이블명';

 

ALTER SYSTEM KILL SESSION '768, 31831' immediate;