변환 문제 및 패턴 참조

변환 작업공간은 모든 변환 문제를 그룹과 카테고리로 집계하여 변환 오류 및 경고를 수정할 계획을 세우는 데 도움을 줍니다. 각 카테고리는 문제를 해결하기 위해 수행해야 할 작업 유형 (검토, 리팩터링, 데이터 유형 조정)을 나타냅니다. 그룹은 하위 수준에서 특정 케이스를 구분하므로 추가 집계를 제공합니다.

전환 문제 그룹과 카테고리를 보여주는 전환 작업공간 개요 화면
그림 1. 전환 문제 그룹과 카테고리가 표시된 전환 작업공간 개요 화면
전환 문제 그룹과 카테고리를 보여주는 전환 작업공간 개요 화면

다음 표에는 스키마 변환 중에 발생할 수 있는 모든 변환 문제 그룹이 나열되어 있습니다.

문제 그룹 ID 설명

잘못된 소스 코드

잠재적 근본 원인

이 그룹의 오류는 데이터베이스 이전 서비스에서 알 수 없는 구문을 발견하거나 Oracle 소스 코드가 유효하지 않은 경우(예: 저장 프로시저에 END; 키워드가 누락됨)에 자주 발생합니다.

가능한 완화 조치

소스 Oracle 데이터베이스에서 잘못된 객체를 수정합니다. 그런 다음 Database Migration Service에서 소스 스키마 스냅샷을 새로고침하고 스키마 변환 프로세스를 다시 시도합니다. 또는 객체를 이전에서 제외할 수 있습니다.

참조된 객체 없음

잠재적 근본 원인

Database Migration Service는 소스 트리의 객체 메타데이터를 사용하여 종속 객체의 코드 변환 품질을 개선합니다. 코드에서 소스 스키마에 포함되지 않은 객체를 참조하는 경우 데이터베이스 이전 서비스가 누락된 참조 열, 속성 또는 객체의 구조나 데이터 유형을 확인할 수 없으므로 변환 문제가 발생할 수 있습니다.

이 그룹의 가능한 오류에는 사용자 정의 유형 (UDT)의 잘못된 데이터 유형이나 열, 매개변수 또는 변수의 기본 VARCHAR 데이터 유형이 포함됩니다.

가능한 완화 조치

참조된 모든 객체가 Database Migration Service 소스 트리에 추가되었는지 확인하거나 누락된 종속 항목의 소스 데이터 모델에 대한 지식을 기반으로 PostgreSQL 코드를 수동으로 조정합니다.

기본 키가 없는 테이블

잠재적 근본 원인

Database Migration Service를 사용하려면 모든 테이블에 기본 키가 있어야 합니다. 기본 키가 없는 테이블의 경우 Database Migration Service는 rowid이라는 NUMERIC 열을 대상 PostgreSQL 테이블에 추가합니다. 이 열은 소스 Oracle ROWID 유사 열의 해당 숫자 값으로 채워집니다. 마이그레이션 후 INSERT 문이 실패하지 않도록 Database Migration Service는 시퀀스를 만들고 이를 사용하여 rowid 열을 자동 증분합니다.

가능한 완화 조치

이전 후 rowid 열을 유지하거나 삭제할 수 있습니다.

지원되지 않는 Oracle 기본 제공 기능

잠재적 근본 원인

지원되지 않는 기본 Oracle 기능을 사용하고 있을 수 있습니다.

가능한 완화 조치

PostgreSQL에서 유사한 기능을 찾아 변환된 코드를 적절하게 수정합니다. 경우에 따라 PostgreSQL용 Cloud SQL 및 PostgreSQL용 AlloyDB 마이그레이션에 사용할 수 있는 Orafce 확장 프로그램에서 누락된 기능을 제공할 수 있습니다.

SQLCODE가 아직 지원되지 않음

잠재적 근본 원인

Oracle SQLCODE 함수는 변환에 지원되지 않습니다. SQLCODEINTEGER을 반환하는 반면 PostgreSQL에서 가장 유사한 함수는 TEXT 값을 반환하는 SQLSTATE 함수입니다.

가능한 완화 조치

소스 코드가 SQLCODE가 정수를 반환하는 데 의존하지 않는 경우 (예: SQLCODEVARCHAR2 열에만 로깅되거나 DBMS_OUTPUT 메시지와 함께 로깅되는 경우) PostgreSQL 코드에서 SQLSTATE를 안전하게 사용할 수 있습니다.

소스 코드가 SQLCODE가 정수를 반환하는 데 의존하는 경우(예: NUMBER 또는 INTEGER 변수와 함께 사용하거나 SQLCODE 반환 값을 매개변수 또는 열로 저장하는 경우) 변환된 코드를 리팩터링해야 합니다.

아직 지원되지 않는 Oracle SQL 함수

잠재적 근본 원인

일부 Oracle 내장 함수는 변환을 위해 Database Migration Service에서 지원되지 않습니다.

일부 함수는 PostgreSQL에 상응하는 함수가 있을 수 있고(예: ASCII) 다른 함수는 이름은 같지만 사양이 다를 수 있습니다 (예: REGEXP% 함수). 일부 함수는 아예 존재하지 않을 수도 있습니다.

가능한 완화 조치

오류를 발생시킨 Oracle 함수를 검사합니다.

  • PostgreSQL에 동일한 동작의 함수가 있는 경우 변환된 코드가 마이그레이션 후에도 동일하게 작동하므로 오류 메시지를 무시해도 됩니다.
  • 함수의 이름은 동일하지만 작동 방식이 다르거나 PostgreSQL에 존재하지 않는 경우 변환된 코드를 수정해 보세요.

Oracle 기본 제공 패키지가 완전히 지원되지 않음

잠재적 근본 원인

Database Migration Service는 특정 Oracle 내장 패키지를 지원하지만 DBMS_STATS, DBMS_UTILITY, DBMS_SQL와 같이 완전한 변환을 지원하지 않는 패키지도 많습니다.

가능한 완화 조치

지원되지 않는 패키지를 사용하는 경우 다음 작업을 해야 할 수 있습니다.

  • 코드를 변경합니다. 예를 들어 DBMS_STATS.GATHER_TABLE_STATS 대신 ANALYZE과 같은 더 간단한 명령어를 사용할 수 있습니다.

    UTL_FILEDBMS_AQ과 같은 패키지는 PostgreSQL에서 쉽게 복제할 수 없으므로 리팩터링이 필요할 수 있습니다.

  • 일부 Oracle 데이터베이스 함수 또는 기능은 Orafce와 같은 확장 프로그램으로 복제될 수 있습니다. 대상 데이터베이스에서 지원되는 확장 프로그램에 대한 자세한 내용은 지원되는 데이터베이스 확장 프로그램을 참고하세요.

변환이 아직 지원되지 않는 Oracle 데이터 유형

잠재적 근본 원인

일부 Oracle 데이터 유형은 현재 변환 또는 데이터 이동에 지원되지 않습니다.

가능한 완화 조치

대부분의 경우 PostgreSQL에는 동일한 데이터 유형이 있습니다. 변환 매핑 파일을 사용하여 변환 로직을 맞춤설정하고 지원되지 않는 Oracle 데이터 유형을 필요한 PostgreSQL 데이터 유형으로 변환할 수 있습니다.

데이터 유형 지원에 대한 자세한 내용은 변환 워크스페이스 - 개요 및 지원되는 객체를 참고하세요.

아직 지원되지 않는 소스 특성

잠재적 근본 원인

이 그룹은 변환이 지원되지 않는 Oracle 기능과 관련된 모든 일반 문제를 포착합니다. 이 그룹의 문제는 다른 구체적인 문제 그룹에 속하지 않습니다.

가능한 완화 조치

지원되지 않는 스키마 객체 유형

잠재적 근본 원인

PostgreSQL에 적절한 상응 항목이 없기 때문에 Database Migration Service는 코드 변환을 위해 특정 Oracle 스키마 객체 유형을 지원하지 않습니다. 예로는 색인 구성 테이블 (IOT), 텍스트 검색 색인 또는 사용자 정의 유형 (UDT)의 본문이 있습니다.

가능한 완화 조치

Database Migration Service는 지원되지 않는 객체를 가장 유사한 PostgreSQL 객체로 변환합니다. 예를 들어 IOT는 기본 키 제약 조건이 있는 일반 테이블이 되고 텍스트 검색 색인은 B-트리 색인으로 변환됩니다. 이러한 변환으로 인해 원래 객체 유형에 특정한 기능이 손실될 수 있습니다.

아직 지원되지 않는 PL/SQL 기능

잠재적 근본 원인

이 그룹은 변환이 지원되지 않는 PL/SQL 기능과 관련된 모든 일반 문제를 포착합니다. 이 그룹의 문제는 다른 구체적인 문제 그룹에 속하지 않습니다.

가능한 완화 조치

아직 지원되지 않는 일괄 바인딩

잠재적 근본 원인

Database Migration Service 코드 변환은 현재 BULK COLLECT, FORALL 또는 SAVE EXCEPTIONS와 같은 Oracle 대량 바인딩 기능을 지원하지 않습니다.

가능한 완화 조치

이 문제를 해결하려면 일괄 바인딩 기능을 사용하는 코드를 수정해야 합니다. PostgreSQL과 Oracle 아키텍처의 차이점과 사용 사례에 PostgreSQL에서 배열 처리가 필요한지 여부를 고려하는 것이 좋습니다.

PostgreSQL에서 Oracle 대량 바인딩 작업에 접근하는 방법에는 여러 가지 전략이 있습니다. 사용량은 구체적인 시나리오에 따라 다르므로 Gemini 기반 전환 지원을 사용하여 구체적인 요구사항을 처리하는 것이 좋습니다. 다음은 시작하는 데 도움이 되는 몇 가지 추천 예시입니다.

  • BULK COLLECT 전체 (LIMIT 없음)의 경우 ARRAY_AGG 함수를 사용해 볼 수 있습니다.
  • LIMIT이 있는 BULK COLLECT의 경우 CURSOR FOR LOOP를 사용하여 배열에서 행의 배치를 로드하고 처리할 수 있습니다. 하지만 기능 변경이 허용되는 경우 CURSOR FOR LOOP를 사용하여 한 번에 한 행을 처리하는 것이 (배열에 로드하는 대신) 더 간단한 대안일 수 있습니다.
  • FORALL 작업의 경우 배열 처리를 사용하기로 선택한 경우 UNNEST을 사용하여 집합 기반 DML을 시도할 수 있습니다.
  • SAVE EXCEPTIONS의 경우 PostgreSQL에 상응하는 절이 없으므로 행 기반 CURSOR FOR LOOP 내에 예외 처리기를 작성해야 할 수 있습니다.

아직 지원되지 않는 컬렉션

잠재적 근본 원인

Database Migration Service 코드 변환은 Oracle 컬렉션을 부분적으로 지원합니다.

가능한 완화 조치

변환된 PostgreSQL 코드를 적절하게 수정해야 합니다. 컬렉션 문제를 해결할 때는 PostgreSQL 배열이 희소 배열이 아니라는 점을 기억하세요. 요소를 드물게 할당하면 PostgreSQL 배열이 Oracle 배열과 다른 결과와 카디널리티 수를 반환할 수 있습니다.

PostgreSQL은 문자열 색인 배열을 지원하지 않으므로 데이터의 특성에 따라 JSON/JSONB 또는 hstore 확장 프로그램이 적합할 수 있습니다.

아직 지원되지 않는 파이프라인 함수

잠재적 근본 원인

Database Migration Service에서는 파이프라인 함수가 지원되지 않습니다.

가능한 완화 조치

Oracle 파이프라인 함수를 PostgreSQL 집합 반환 함수로 대체할 수 있습니다. 사용 사례와 관련된 방식으로 코드를 조정하는 것이 좋습니다. 다음은 시작하는 데 도움이 되는 몇 가지 예시입니다.

  1. 파이프라인 함수의 rowtype을 정의하는 소스 Oracle 객체 또는 레코드 유형에서 변환된 PostgreSQL 유형 (UDT)을 참조합니다. 그런 다음 특정 사례에 따라 PostgreSQL 함수의 반환 절을 RETURNS SETOF <type name> 또는 RETURNS TABLE로 수정합니다.

  2. 변환된 PIPE ROW 코드의 반환 값을 RETURN NEXT <row or record variable>으로 바꿉니다.

Oracle 함수의 RETURN 절에 사용되는 소스 파이프라인 함수의 컬렉션 유형은 PostgreSQL에서 필요하지 않습니다.

아직 지원되지 않는 동적 SQL 옵션

잠재적 근본 원인

Database Migration Service는 동적 SQL 변환을 부분적으로 지원합니다. Oracle EXECUTE IMMEDIATE, OPEN FOR, USING/INTO 키워드는 PostgreSQL에 상응하는 키워드로 올바르게 변환되지만 실제 동적 SQL, DML 또는 DDL 문자열은 변환되지 않습니다.

가능한 완화 조치

요구사항에 맞게 변환된 코드를 수정해야 합니다. Gemini 기반 전환 지원을 사용하여 동적 SQL을 처리하는 것이 좋습니다.

CONNECT BY 옵션이 아직 지원되지 않음

잠재적 근본 원인

대부분의 CONNECT BY 연산자, 함수, 의사 열은 Database Migration Service에서 지원되며 PostgreSQL 재귀 공통 테이블 표현식 (CTE)으로 변환됩니다. 하지만 주의가 필요한 몇 가지 예외가 있습니다. 예를 들어 ORDER SIBLINGS BY 절은 오름차순으로만 지원됩니다.

가능한 완화 조치

내림차순의 ORDER SIBLINGS BY 절을 간단한 방식으로 복제할 수 없으므로 오름차순으로 작동하도록 코드를 재구성해야 할 수 있습니다.

CONNECT BY 연산자와 관련된 신고된 문제를 검토하고 필요한 경우 코드를 조정합니다. 이러한 수정사항을 신속하게 처리하려면 Gemini 기반 자동 변환 기능을 살펴보는 것이 좋습니다. 자세한 내용은 Gemini 지원을 사용하여 Oracle 코드 및 스키마 변환을 참고하세요.

아직 지원되지 않는 JSON

잠재적 근본 원인

Database Migration Service에서 데이터 이동 및 코드 변환을 위해 JSON를 지원하는 방식에는 다음과 같은 제한사항이 있습니다.

  • JSONB은(는) 데이터 이동에 지원되지 않습니다.
  • 코드 변환은 Oracle의 JSON 쿼리 함수 또는 연산자 (예: JSON_TABLE, JSON_QUERY, JSON_OBJECT[AGG], JSON_ARRAYAGG, JSON_PATCH)를 지원하지 않습니다.
  • 21c 이전 버전의 Oracle에서는 VARCHAR2, CLOB 또는 BLOB 열에 JSON 데이터를 저장하고 IS JSON 조건으로 확인할 수 있습니다. Database Migration Service는 이 조건을 변환하는 것을 지원하지 않습니다.
가능한 완화 조치
  • VARCHAR2, CLOB 또는 BLOB 열에 저장된 JSON 데이터를 PostgreSQL로 이동하려면 MODIFY_TYPE 지시어를 사용하여 변환 매핑 파일을 작성해야 할 수 있습니다.

    예를 들면 다음과 같습니다.

    MODIFY_TYPE SOURCE_TABLE_NAME:BLOB_COLUMN_NAME_WITH_JSON_DATA:JSON

    변환 매핑 파일에 대한 자세한 내용은 변환 매핑 파일을 참고하세요.

  • Oracle JSON 함수와 연산자를 PostgreSQL로 변환하려면 JSONB_ARRAY_ELEMENTS, JSON_AGG와 같은 PostgreSQL 함수를 사용하면 됩니다. 자세한 내용은 PostgreSQL 문서의 JSON 함수 및 연산자를 참고하세요.

잠금 및 트랜잭션 문제

잠재적 근본 원인

Database Migration Service 코드 변환은 LOCK 또는 SAVEPOINT 문을 지원하지 않습니다. PostgreSQL은 SAVEPOINT를 지원하지 않습니다.

가능한 완화 조치
  • Oracle의 SAVEPOINT 블록을 중단하여 ROLLBACK 문을 사용하는 PostgreSQL의 트랜잭션 블록을 분리합니다.
  • DBMS_LOCK을 구현하려면 PostgreSQL pg_dbms_lock 확장 프로그램을 사용하세요. 이 확장 프로그램은 Oracle DBMS_LOCK 패키지의 기능을 에뮬레이션하여 Oracle 사용자 정의 잠금의 PostgreSQL로의 마이그레이션을 간소화합니다.

아직 지원되지 않는 XML

잠재적 근본 원인

Database Migration Service는 Oracle XMLTYPE 또는 관련 XML 함수 및 연산자를 지원하지 않습니다.

가능한 완화 조치

Database Migration Service는 XMLTYPE를 직접 지원하지 않지만 데이터 이동을 위해 BLOB, CLOB, NVARCHAR2 또는 VARCHAR2 열을 XML로 맞춤설정할 수 있습니다. PostgreSQL은 XML 기능을 지원합니다.

XML 데이터를 이전하려면 다음 단계를 따르세요.

  1. XML 데이터의 경우 MODIFY_TYPE 지시어를 사용하여 변환 매핑 파일을 만듭니다. 예를 들면 다음과 같습니다.

    MODIFY_TYPE SOURCE_TABLE_NAME:BLOB_COLUMN_NAME_WITH_XML_DATA:XML

    변환 매핑 파일에 대한 자세한 내용은 변환 매핑 파일을 참고하세요.

  2. 마이그레이션 작업을 시작합니다. 이 프로세스는 XMLTYPE 유형의 열에 있는 데이터를 제외한 모든 데이터를 Oracle에서 PostgreSQL로 마이그레이션합니다. 이러한 열은 PostgreSQL에서 NULL 값으로 채워집니다.t
  3. Oracle에서 XMLTYPE 열만 선택하여 PostgreSQL에서 외부 테이블을 만듭니다. 소스 테이블의 기본 키 열을 포함합니다.
  4. 외래 테이블의 XML 데이터를 원래 PostgreSQL 테이블로 병합합니다.

PostgreSQL이 XMLTYPE와 함께 작동하는 방식에 대한 자세한 내용은 PostgreSQL 문서의 XML 함수를 참고하세요.

PIVOT가 아직 지원되지 않음

잠재적 근본 원인

Database Migration Service는 코드 변환을 위한 PIVOTUNPIVOT 전치 연산자를 지원하지 않습니다.

가능한 완화 조치

tablefunc 확장 프로그램을 사용하거나 소스 PIVOT 표현식을 조건부 집계로 다시 작성하여 PostgreSQL에서 PIVOT 전치를 달성할 수 있습니다. 예를 들면 다음과 같습니다.

  • SUM(CASE WHEN <condition> THEN <value> ELSE 0 END)
  • COUNT(CASE WHEN <condition> THEN 1 END)

다양한 방법으로 PostgreSQL에서 UNPIVOT 전치를 만들어 열 집합에서 키-값 쌍을 만들 수 있습니다.

  • LATERAL 조인을 VALUES 집합과 결합합니다. 예를 들면 SELECT ... FROM <table> CROSS JOIN LATERAL (VALUES ('<column1-name>', <column1>), ('<column2-name>', <column2>) AS u(column_name, column_value))입니다.
  • ARRAY와 함께 UNNEST 사용 예를 들면 SELECT ..., UNNEST(ARRAY['<column1-name>', '<column2-name>']) AS column_name, UNNEST(ARRAY[column1, column2]) AS column_value FROM <table>입니다.

ALTER 문 옵션이 아직 지원되지 않음

잠재적 근본 원인

Database Migration Service는 변환을 위해 ALTER 문 (동적 SQL에서 자주 실행됨)을 사용하지 않습니다.

가능한 완화 조치

Oracle ALTER 문을 PostgreSQL의 SET 명령어로 바꿉니다. 이러한 수정사항을 신속하게 처리하려면 Gemini 기반 자동 변환 기능을 살펴보는 것이 좋습니다. 자세한 내용은 Gemini 지원을 사용하여 Oracle 코드 및 스키마 변환을 참고하세요.

아직 지원되지 않는 SQL 기능

잠재적 근본 원인

이 그룹은 변환이 지원되지 않는 SQL 기능과 관련된 모든 일반 문제를 포착합니다. 이 그룹의 문제는 다른 구체적인 문제 그룹에 속하지 않습니다. 예로는 데이터베이스 이벤트 트리거, GRANT 문, 다중 테이블 INSERT 작업, 인라인 뷰(INSERT INTO (SELECT ... FROM ...))의 DML, 측면 뷰가 있습니다.

가능한 완화 조치

지원되지 않는 문법

잠재적 근본 원인

이 그룹은 지원되지 않는 Oracle SQL 또는 PL/SQL 문법과 관련된 모든 일반 문제를 포착합니다. 이 그룹의 문제는 다른 구체적인 문제 그룹에 속하지 않습니다.

가능한 완화 조치

기능적으로 동등한 PostgreSQL 구문을 사용하도록 코드를 변경합니다. Gemini 기반 자동 변환 기능을 살펴보고 코드를 조정하는 것이 좋습니다. 자세한 내용은 Gemini 지원을 사용하여 Oracle 코드 및 스키마 변환을 참고하세요.

지원되지 않는 SQL 문법

잠재적 근본 원인

소스 코드에서 Database Migration Service에서 지원하지 않는 SQL 구문 또는 요소를 사용합니다. 예를 들어 Oracle TO_DATE 함수의 NLS_LANG 매개변수는 지원되지 않습니다.

가능한 완화 조치
지원되지 않는 PL/SQL 문법

잠재적 근본 원인

소스 코드에서 Database Migration Service에서 지원하지 않는 PL/SQL 구문 또는 요소를 사용합니다. 예를 들어 레코드 기반 INSERT 문 (예: INSERT INTO table VALUES r_variable)과 PRAGMA RESTRICT_REFERENCES는 지원되지 않습니다.

가능한 완화 조치

기능적으로 동등한 PostgreSQL 구문을 사용하도록 코드를 변경합니다. Gemini 기반 자동 변환 기능을 살펴보고 코드를 조정하는 것이 좋습니다. 자세한 내용은 Gemini 지원을 사용하여 Oracle 코드 및 스키마 변환을 참고하세요.

지원되지 않는 날짜 및 타임스탬프 문법

잠재적 근본 원인

데이터베이스 이전 서비스에서 지원되지 않는 날짜 또는 타임스탬프 구문, 작업 또는 표현식에 대한 오류 또는 경고가 표시될 수 있습니다. 이러한 문제의 예로는 데이터 유형이 일치하지 않는 비교 또는 타임스탬프에서 TZH:TZM 형식 모델 사용이 있습니다. 지원되는 객체 및 데이터 유형에 대한 자세한 내용은 변환 작업공간 정보를 참고하세요.

가능한 완화 조치

PostgreSQL에 상응하는 표현식을 사용하여 대부분의 날짜 및 타임스탬프 표현식을 다시 만들 수 있습니다. 이러한 수정사항을 신속하게 처리하려면 Gemini 기반 자동 변환 기능을 살펴보는 것이 좋습니다. 자세한 내용은 Gemini 지원을 사용하여 Oracle 코드 및 스키마 변환을 참고하세요.

Oracle의 예외 처리 문법 중 지원되지 않는 요소

잠재적 근본 원인

Database Migration Service 코드 변환은 다음 Oracle PL/SQL 예외 구문 요소를 지원하지 않습니다.

  • 리터럴 -20nnn 코드 대신 변수 오류 코드와 함께 RAISE_APPLICATION_ERROR를 사용합니다.
  • 이 구문은 PostgreSQL에서 지원되지 않으므로 오류 코드 인수를 사용하여 SQLERRM를 사용합니다.
가능한 완화 조치

변환된 코드에서 이러한 문제를 수동으로 해결해야 합니다. 이러한 수정사항을 신속하게 처리하려면 Gemini 기반 자동 변환 기능을 살펴보는 것이 좋습니다. 자세한 내용은 Gemini 지원을 사용하여 Oracle 코드 및 스키마 변환을 참고하세요.

데이터 유형 및 변환 문제

잠재적 근본 원인

Database Migration Service는 컨텍스트 (예: 유형 비교 표현식에서 발생하는 변환 문제)를 기반으로 변환 문제를 그룹화할 수 있습니다. CW_OP0500 그룹은 다른 문제 그룹에 속하지 않는 모든 일반 데이터 유형 변환 문제를 포착합니다.

가능한 완화 조치

대부분의 경우 Database Migration Service는 변환된 PostgreSQL 코드에서 ERROR_UNIMPLEMENTED 또는 ERROR_TYPE 메시지를 내보냅니다. 관련 데이터 유형에 대한 지식을 바탕으로 이 오류를 해결하세요.

날짜 형식 마스크 문제

잠재적 근본 원인

형식 모델을 기반으로 날짜 또는 타임스탬프 표현식을 문자열로 또는 문자열에서 변환할 때 경고나 문제가 발생할 수 있습니다. Oracle 소스 코드의 캐스트에 명시적 날짜 또는 타임스탬프 형식 모델이 제외된 경우 Database Migration Service는 기본 모델 (현재 DD-MON-RR)을 사용합니다.

형식 모델이 암시적 변환을 위해 내보낸 형식이 동일한 표현식의 명시적 형식 모델과 충돌하는 경우 변환된 코드에 문제가 발생할 수 있습니다. Oracle RR 형식 PostgreSQL YY 형식 간의 차이로 인해 데이터가 영향을 받을 가능성이 있는 경우에도 이 문제가 발생할 수 있습니다.

가능한 완화 조치

변환 작업공간에서 변환된 PostgreSQL 표현식을 검토하고 검증합니다.

숫자 형식 마스크 문제

잠재적 근본 원인

Database Migration Service는 모든 Oracle 형식 모델을 지원하지 않습니다. 예를 들어 'L' 또는 'X'는 지원되지 않습니다. Oracle 형식 모델을 기반으로 문자열을 숫자로 변환하는 코드에 문제가 발생하거나 경고가 표시될 수 있습니다.

가능한 완화 조치

PostgreSQL에 상응하는 항목이 없는 Oracle 형식 모델의 경우 표현식을 리팩터링하거나 모델을 포맷해야 할 수 있습니다. 이러한 수정사항을 신속하게 처리하려면 Gemini 기반 자동 변환 기능을 살펴보는 것이 좋습니다. 자세한 내용은 Gemini 지원을 사용하여 Oracle 코드 및 스키마 변환을 참고하세요.

데이터 유형 변환 문제

잠재적 근본 원인

지원되지 않거나 부정확한 데이터 유형 캐스팅으로 인해 오류가 발생할 수 있습니다. Database Migration Service는 일반적으로 ERROR_UNIMPLEMENTED를 내보냅니다. 이는 일반적으로 메타데이터가 누락되었거나 불완전하기 때문입니다. Database Migration Service에 함수 인수나 프로시저 매개변수에서 유형을 변환할 정보가 충분하지 않을 수 있습니다.

가능한 완화 조치

올바른 데이터 유형 변환을 위해 PostgreSQL 코드를 조정합니다. 이러한 수정에는 참조된 속성, 변수, 열에 대한 지식이 필요합니다.

비교 문제

잠재적 근본 원인

데이터 비교 표현식을 변환할 때 Database Migration Service에 메타데이터나 데이터 유형에 관한 정보가 충분하지 않을 수 있습니다. 예를 들어 사용자 정의 유형 (UDT)이 NULL와 비교될 때 발생할 수 있습니다.

가능한 완화 조치

변환된 PostgreSQL 표현식을 검토하고 문제를 해결합니다. 이러한 수정사항을 신속하게 처리하려면 Gemini 기반 자동 변환 기능을 살펴보는 것이 좋습니다. 자세한 내용은 Gemini 지원을 사용하여 Oracle 코드 및 스키마 변환을 참고하세요.

이 카테고리의 문제는 Oracle 소스 코드가 가장 유사한 PostgreSQL 코드로 올바르게 변환되었지만 결과 코드에 검토가 필요한 사소한 의미 또는 기능 차이가 있을 수 있는 경우를 나타냅니다. 이는 Oracle과 PostgreSQL이 데이터 유형, 형식 또는 객체를 처리하는 방식이 다르기 때문입니다.

이 카테고리는 데이터 유형 및 전환 (CW_05) 카테고리의 문제와 중복되는 것처럼 보일 수 있지만, 서로 다른 문제를 나타냅니다. CW_05에는 Database Migration Service가 Oracle 코드를 PostgreSQL에 상응하는 코드로 변환할 수 없는 알려진 문제가 포함되어 있습니다.

날짜 형식 마스크 검토

잠재적 근본 원인

대부분의 Oracle 날짜 및 타임스탬프 형식 모델에는 PostgreSQL의 적절한 상응 항목이 있으므로 변환된 코드에는 의미론적 또는 기능적 차이가 없습니다. 일부 모델은 정확히 일치하지 않으며 동작이 다릅니다. 한 가지 예는 PostgreSQL YY 형식으로 변환되는 Oracle RR 형식입니다.

가능한 완화 조치

형식 모델 변환을 사용하여 표현식을 검토하고 검증하여 변환된 코드가 예상대로 작동하는지 확인합니다.

숫자 형식 마스크 검토

잠재적 근본 원인

대부분의 소스 숫자 형식 모델은 PostgreSQL에 상응하는 모델이 있으므로 변환된 코드에는 의미론적 또는 기능적 차이가 없습니다. 하지만 일부 형식 모델은 정확히 일치하지 않거나 약간 다르게 작동할 수 있습니다.

가능한 완화 조치

형식 모델 변환을 사용하여 표현식을 검토하고 검증하여 변환된 코드가 예상대로 작동하는지 확인합니다.

예외 코드 검토

잠재적 근본 원인

-20000~-20999 범위의 오류 코드로 RAISE_APPLICATION_ERROR를 사용하면 Database Migration Service가 이를 CW0000~CW999 범위의 SQLSTATE가 있는 PostgreSQL RAISE EXCEPTION로 변환합니다. 변환은 소스 오류 코드의 마지막 3자리 숫자를 유지하고 CW을 접두사로 추가합니다.

가능한 완화 조치

이 동작을 검토하여 요구사항에 적합한지 확인하세요. 이 검토는 소스 오류 코드가 애플리케이션, 지원팀 또는 문서에 의미가 있는 경우에만 필요합니다. 오류 코드 값 자체가 의미가 없는 경우 이 경고를 무시해도 됩니다.

예외 메시지 검토

잠재적 근본 원인

SQLERRM 함수는 Oracle PL/SQL과 PostgreSQL에 모두 있지만 각 엔진에서 다른 오류 텍스트를 반환할 수 있습니다. 예를 들어 Oracle에서 0으로 나누면 ORA-01476: divisor is equal to zero 오류 텍스트가 반환되지만 PostgreSQL에서는 ERROR: division by zero이 반환됩니다.

가능한 완화 조치

애플리케이션, 지원 인프라 또는 문서가 오류 텍스트에 의존하는 경우 변환을 검토하세요. 그렇지 않으면 이 차이를 무시해도 됩니다.

Oracle 기본 제공 함수 에뮬레이션 검토

잠재적 근본 원인

Database Migration Service 코드 및 스키마 변환은 PostgreSQL에 상응하는 Oracle 함수 동작을 제공하는 것을 목표로 하지만 결과가 시나리오에 항상 만족스럽지 않을 수 있습니다. 따라서 전환 작업공간에서는 검토가 필요할 수 있는 함수 변환에 대한 권고 경고를 항상 제공합니다.

가능한 완화 조치

변환 작업공간에서 CW_OP0605 문제 그룹에 경고를 내보내는 객체를 검토하는 것이 좋습니다.

외래 키 열 데이터 유형 검토

잠재적 근본 원인

Database Migration Service에서 상위 객체와 하위 객체 간에 데이터 유형 사양이 일치하지 않는 것을 확인했습니다 (예: 상위 열이 NUMBER(4)이고 하위 열이 NUMBER(10)인 경우).

가능한 완화 조치

대부분의 경우 데이터 유형이 약간 일치하지 않아도 데이터베이스 기능에 문제가 발생하지 않습니다. 하지만 변환된 데이터 모델에 불일치가 있는지 검토하는 것이 좋습니다.

기능적 검토 권장
잠재적 근본 원인

이 그룹은 Oracle 및 PostgreSQL 코드의 잠재적인 기능 차이와 관련된 모든 일반 문제를 포착합니다. 이 그룹의 문제는 다른 구체적인 문제 그룹에 속하지 않습니다.

가능한 완화 조치

Oracle 기본 제공 함수 에뮬레이션 검토

잠재적 근본 원인

많은 Oracle 기본 제공 함수에는 PostgreSQL에 직접 상응하는 함수가 없습니다. 마이그레이션 시 이 문제를 완화하기 위해 Database Migration Service는 다양한 SQL 표현식을 사용하여 PostgreSQL에서 동등한 기능 동작을 생성하여 코드를 변환합니다.

변환된 표현식이 복잡할 수도 있습니다. Database Migration Service는 CW_OP0702 그룹에서 경고를 내보내 가능한 문제를 강조 표시하고 표현식으로 함수가 에뮬레이션되었다고 알립니다.

가능한 완화 조치

변환된 코드를 검토하여 변환된 함수가 PostgreSQL 환경에서 예상대로 작동하는지 확인합니다.

자율 트랜잭션 리팩터링 필요

잠재적 근본 원인

PostgreSQL은 자율 트랜잭션을 지원하지 않습니다.

가능한 완화 조치

dblink, pg_background 또는 PL/Proxy 확장 프로그램을 사용하여 PostgreSQL에서 자율 트랜잭션을 구현할 수 있습니다. 이러한 확장 프로그램 중 하나를 사용하여 이루어진 데이터베이스 호출은 다른 세션에서 실행되므로 자율 트랜잭션을 생성합니다.

데이터베이스 링크 리팩터링 필요

잠재적 근본 원인

Database Migration Service는 Oracle 데이터베이스 링크를 지원하지 않습니다. 링크를 사용하는 객체는 리팩터링이 필요합니다.

가능한 완화 조치

데이터베이스 링크의 타겟에 따라 dblink, postgres_fdw, oracle_fdw 또는 PL/Proxy와 같은 데이터베이스 확장 프로그램을 사용하여 PostgreSQL에서 동등한 기능을 구현할 수 있습니다.

고급 큐 리팩터링 필요

잠재적 근본 원인

Oracle Advanced Queuing 패키지 (DBMS_AQ, DBMS_AQADM)에는 PostgreSQL에 상응하는 패키지가 없으며 리팩터링이 필요합니다.

가능한 완화 조치

다음 옵션을 고려하세요.

  • 대기열 기능을 데이터베이스에서 애플리케이션 계층으로 리팩터링합니다.
  • PostgreSQL 테이블, 알림, 트리거를 사용하여 동일한 동작을 구현합니다.
  • 추가 지원이 필요한 경우 기술 솔루션팀 담당자에게 문의하세요.

데이터베이스 이메일 리팩터링 필요

잠재적 근본 원인

PostgreSQL용 Cloud SQL은 데이터베이스에서 직접 이메일을 보내는 것을 지원하지 않습니다. 이 기능을 사용 설정하는 확장 프로그램도 지원되지 않습니다. 따라서 Database Migration Service는 UTL_SMTP 패키지의 사용을 변환하지 않습니다.

가능한 완화 조치

데이터베이스 이메일 코드를 리팩터링하고 이메일 전송 책임을 애플리케이션 계층으로 이동합니다. 데이터베이스를 사용하여 이메일 전송이 필요한 조건을 캡처할 수 있습니다.

구현 예로는 이메일 세부정보를 전용 테이블에 쓰는 것이 있습니다. 이 테이블은 Cloud Run Functions 함수로 폴링하고 실제 SMTP 처리를 처리하는 이메일 대기열로도 사용할 수 있습니다.

작업 및 예약 리팩터링 필요

잠재적 근본 원인

DBMS_JOB DBMS_SCHEDULER Oracle 패키지는 Database Migration Service에 의해 변환되지 않습니다. 이러한 패키지를 참조하는 코드를 리팩터링해야 합니다.

가능한 완화 조치

종속 항목이 없는 간단한 작업의 경우 pg_cron 확장 프로그램을 사용하여 타겟 PostgreSQL 데이터베이스에서 예약 작업을 수동으로 만들 수 있습니다.

pg_cron에서 지원하지 않는 더 복잡한 일정의 경우 애플리케이션 수준 또는 서드 파티 스케줄러를 사용해야 할 수 있습니다.

파일 I/O 리팩터링 필요

잠재적 근본 원인

Database Migration Service는 Oracle UTL_FILE 패키지를 지원하지 않습니다. 이 패키지를 참조하는 코드를 리팩터링해야 합니다.

Orafce 확장 프로그램에는 UTL_FILE 에뮬레이션이 포함되어 있지만 제한된 파일 I/O 기능으로 인해 Google 관리 PostgreSQL 환경에서 작동하지 않을 수 있습니다.

가능한 완화 조치
  • UTL_FILE에 대한 종속 항목을 삭제하도록 코드를 리팩터링합니다.
  • PostgreSQL용 Cloud SQL에는 파일 I/O 기능에 특정 제한사항이 있으므로 대상 데이터베이스에서 이 동작을 직접 구현할 수 없습니다.

    VPC의 Compute Engine VM에 orafce 확장 프로그램을 사용하여 PostgreSQL을 설치하는 방법도 있습니다. 그런 다음 대상 데이터베이스에서 PL/Proxy 확장 프로그램을 사용하여 Compute Engine VM의 데이터베이스에서 실행되는 PostgreSQL 호환 UTL_FILE 버전을 호출할 수 있습니다.

동의어

잠재적 근본 원인

PostgreSQL은 동의어를 지원하지 않습니다. 코드 객체의 경우 Database Migration Service는 동의어 참조를 소스 스키마 및 객체 이름으로 자동 대체합니다. 코드 객체 외부에서 동의어를 사용하는 경우(예: 데이터베이스 애플리케이션 사용자의 읽기 전용 스키마) 수동으로 변환해야 합니다.

가능한 완화 조치

코드 객체 외부에서 동의어를 사용하는 경우 PostgreSQL SEARCH_PATH 매개변수를 사용하거나 쿼리 객체에 뷰를 사용하도록 코드를 리팩터링할 수 있습니다.

전역 임시 테이블

잠재적 근본 원인

이 문제 그룹은 Database Migration Service가 Oracle 소스 코드에서 전역 임시 테이블을 감지했음을 알리는 경고입니다. 전역 임시 테이블을 마이그레이션하려면 대상 데이터베이스에 pgtt PostgreSQL 확장 프로그램이 설치되고 생성되어 있어야 합니다.

가능한 완화 조치

대상 데이터베이스에 pgtt PostgreSQL 확장 프로그램이 설치되고 생성되었는지 확인하는 것이 좋습니다.

Gemini 제안 검토

잠재적 근본 원인:

이 문제 그룹은 Gemini로 향상된 코드 변환과 관련된 모든 일반 오류와 경고를 포착합니다.

가능한 해결 방법: 여기에 표시된 문제가 항상 실제 문제를 나타내는 것은 아니지만, Gemini로 개선된 모든 전환을 검토하여 기대치와 일치하는지 확인하는 것이 좋습니다.

AI로 보강된 코드 검토

잠재적 근본 원인: 이 DDL 코드는 Gemini의 향상된 기능으로 변환되었으며 정확성을 위해 검토가 필요할 수 있습니다.

가능한 해결 방법 AI 증강으로 변환된 코드를 주의 깊게 검토하여 최종 결과가 소스 스키마의 기능과 일치하는지 확인하는 것이 좋습니다.

인용

잠재적 근본 원인: Gemini의 추천에는 여러 출처에서 인용된 콘텐츠가 포함될 수 있습니다. 일부 인용에는 라이선스 제한이 적용될 수 있습니다. 변환된 코드에서 인용을 검토하는 것이 좋습니다.

메타데이터 변환 문제입니다.

잠재적 근본 원인:

이 그룹은 다른 구체적인 문제 그룹에 속하지 않는 모든 전환 문제를 포착합니다.

가능한 완화 조치

소스 데이터 모델에 대한 지식을 바탕으로 변환된 코드를 검토하고 필요에 따라 코드를 조정하는 것이 좋습니다.

메타데이터 변환 문제입니다.

잠재적 근본 원인:

이 그룹은 다른 더 구체적인 문제 그룹에 속하지 않는 모든 메타데이터 추적 문제를 포착합니다.

가능한 완화 조치:

이 그룹의 문제 예는 일반적으로 변환된 PostgreSQL의 데이터 유형 문제를 일으킬 수 있는 컴파일 오류 또는 경고와 관련이 있습니다. 소스 데이터 모델에 대한 지식을 바탕으로 변환된 코드를 검토하고 잘못된 참조를 조정하는 것이 좋습니다.

지원팀에 문의하세요.

잠재적 근본 원인

특수한 극단적인 경우 유효한 Oracle 소스 객체와 함께 내부 오류가 발생할 수 있습니다. 이 경우 지원팀에 문의하여 추가 지원을 받으세요.

일반 변환 문제

잠재적 근본 원인

이 그룹에는 다른 더 구체적인 문제 카테고리나 그룹에 속하지 않는 모든 문제가 포함됩니다.

가능한 완화 조치

소스 데이터 모델과 코드에 대한 지식을 바탕으로 변환된 코드를 검토하고 필요에 따라 조정하는 것이 좋습니다.