Windsoft / Querydog / Oracle → MariaDB PL/SQL 검증
Oracle → MariaDB PL/SQL 변환: 검증 결과와 남은 범위
한 Oracle 시험 스키마에서 수집한 PL/SQL·TYPE·잡 40개를 별도 MariaDB 검증 DB에 변환해 컴파일했습니다. 40/40 DDL 컴파일 성공은 전체 마이그레이션 성공률 100%를 의미하지 않습니다. 루틴의 실제 호출 결과와 테이블 데이터 이관은 별도로 확인해야 합니다.
시험 대상과 방법
- Oracle 23ai 23.7 시험 스키마의 수집 객체 40개: 업무 객체 19개, 앞선 시험 객체 10개, 새 시험 루틴 10개, 지원 TYPE 1개입니다. 새 루틴은 계층 쿼리, 정규식, 임시 CLOB, 예외 매핑, 레코드, FORALL, DBMS_SQL, JSON_TABLE, XMLTABLE, PIPELINED 함수를 다룹니다.
- MariaDB 12.3.2의 격리 검증 DB에 대상 테이블 구조 119개만 복제한 뒤 Querydog의 AI 없는 자동 변환 결과를 컴파일했습니다. 검증 DB는 시험 후 삭제했습니다.
- 신규 루틴 10개는 Oracle 기준 시험 입력과 대상 호출 결과를 비교했습니다. 기존 업무 날짜 함수 4개는 43종 날짜 입력과 4개 형식 조합 등 259건의 결과를 Oracle과 비교했습니다.
- 실제 업무 MariaDB에 이 40개 객체를 일괄 설치하거나 테이블 데이터를 이 시험으로 전송하지 않았습니다. Querydog 1.0.45의 릴리스 설치 파일도 이 시험에서 빌드·실행하지 않았습니다.
앞선 시험 10개의 적용 이력
첫 5개 업무형 시험 루틴은 초기 자동 변환에서 0/5 컴파일이었고, 사례별 수동 변환을 거쳐 별도 검증 DB에서 5/5 컴파일했습니다. 다음 5개는 트리거·MERGE·JSON·LISTAGG·동적 SQL을 시험했으며, Oracle 논리 객체 5개를 MariaDB 물리 객체 6개로 변환해 실행했습니다.
이 10개 시험 객체는 이후 실제 시험 대상 DB에 재적용해 DDL 11/11 성공을 확인했습니다. 한 집계 루틴의 Oracle·MariaDB 결과 차이는 대상의 기초 업무 데이터 불일치를 확인해 동기화한 뒤 지정 입력에서 일치했습니다. 이 이력에는 수동 변환과 대상 데이터 보정이 포함돼 있으므로 Querydog 자동 변환 성능 또는 전체 업무 이관률로 계산하지 않습니다.
최근에 추가한 10개 시험 루틴은 이 실제 시험 대상 DB에 일괄 적용한 것이 아니라 격리 검증 DB에서 컴파일·호출했습니다.
버전별 DDL 컴파일 결과
| 시점 | 동일 40개 객체의 격리 DDL | 해석 |
|---|---|---|
| 1.0.41 최초 측정 | 32/40 (80%) | 신규 10개 루틴은 3/10 컴파일, 실제 시험 입력 결과 일치는 1/10이었습니다. |
| 1.0.42 제한적 변환 추가 | 37/40 (92.5%) | 신규 루틴은 8/10 컴파일, 7/10 지정 입력 결과가 일치했습니다. PIPELINED는 호출 방식을 바꾼 뒤 비교했습니다. |
| 1.0.43~1.0.45 재검증 | 40/40 (100% DDL) | 신규 루틴 10/10의 지정 입력 결과와 TYPE 대체 절차를 확인했습니다. 1.0.45에서 날짜 함수 259/259 입력 결과가 일치했습니다. |
분모는 시험 기간 동안 같은 40개 수집 객체입니다. 수치는 DDL 컴파일률이며, 40개 업무 기능의 결과 동등성이나 모든 Oracle PL/SQL 문법의 지원률이 아닙니다.
실행 확인과 변환 조건
| 항목 | 시험에서 확인한 내용 | 남은 조건 |
|---|---|---|
| 신규 PL/SQL 10종 | 지정 입력에서 10/10 대상 실행 결과가 Oracle 기준값과 일치했습니다. | 지원 형태를 좁혀 변환합니다. 동적 DBMS_SQL, 복잡한 XMLTABLE/XPath 등은 이 결과에 포함되지 않습니다. |
| 기존 날짜 함수 4개 | 빈 문자열, 공백, 윤일, 0인 월·일, 여러 구분자 등 43종 입력과 날짜 형식을 비교해 259/259 결과가 일치했습니다. | 다른 날짜 형식·지역 설정·입력은 추가 확인이 필요합니다. |
| Oracle TYPE 4개 | 객체형 2개와 컬렉션형 2개를 JSON 생성 함수·조회 프로시저로 바꾸고 48필드·27필드 왕복을 확인했습니다. | 원본 TYPE과 호출 계약이 다릅니다. 외부 호출부를 수정해야 하며 모든 실제 데이터는 검증하지 않았습니다. |
| FORALL | 연속 인덱스의 단일 INSERT를 행별 루프로 바꾸어 3행 결과를 확인했습니다. 격리 DB에서 1,000행 약 0.013초, 5,000행 약 0.058초를 관측했습니다. | Oracle 원본과 같은 조건의 성능 비교가 아니며 벌크 DML 성능은 보존하지 않습니다. |
실제 업무 이관 전에 남는 검증
- TYPE·PIPELINED 함수가 JSON 함수·
CALL프로시저로 바뀐 곳의 외부 SQL·프로그램 호출부를 찾아 수정하고 실행해야 합니다. - 기존 업무 객체 전체의 결과, 암호문 호환성, 자율 트랜잭션 로그, 원본에서 INVALID인 만료 절차의 업무 규칙을 확인해야 합니다.
- 테이블 데이터 이관은 별도 작업입니다. 행 수·값·LOB·외래키 참조와 오류·재시도 결과를 실제 대상에서 검증해야 합니다.
- 대량 FORALL 성능과 지원 범위 밖 PL/SQL 구문은 운영 규모의 시험이 필요합니다.
따라서 이 기록으로 전체 업무 마이그레이션 전환율 90% 또는 100%를 단정하지 않습니다. 시험 결과의 공개용 요약 데이터(JSON)를 내려받을 수 있습니다.