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 )
- intellij
1.database탭 에서 연결된 db의 properties
data sources and Drivers > Options > Enable DBMS_OUTPUT 체크
2. console 추가
3. services 탭에서 추가한 console 우클릭 하여 Enable DMSOUTPUT 체크
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;
'Project & Issu' 카테고리의 다른 글
모델링 작업 (0) | 2025.01.22 |
---|---|
feign client 버그 - java.lang.IllegalArgumentException: name is required (0) | 2024.02.29 |
csv 파일 인코딩 문제 (0) | 2024.01.05 |
feign client에서 @RequestParameter에 "&" 를 넘겨주지 못 하는 버그 (0) | 2023.12.14 |
좋아요 기능 동시성 처리 (0) | 2023.05.04 |