Oracle 마이그레이션의 SQL 문제 최소화
이 문서는 Oracle에서 Azure Synapse Analytics로 마이그레이션하는 방법의 지침을 제공하는 7부 시리즈 중 5부입니다. 이 문서는 SQL 문제를 최소화하기 위한 모범 사례에 중점을 두고 있습니다.
개요
Oracle 환경 특징
1979년에 릴리스된 Oracle의 초기 데이터베이스 제품은 현재보다 트랜잭션 속도가 훨씬 느린 OLTP(온라인 트랜잭션 처리) 애플리케이션을 위한 상용 SQL 관계형 데이터베이스였습니다. 초기 릴리스 이후 Oracle 환경은 계속 진화하여 훨씬 더 복잡해졌으며 다양한 기능을 포함하고 있습니다. 이 기능에는 클라이언트 서버 아키텍처, 분산 데이터베이스, 병렬 처리, 데이터 분석, 고가용성, 데이터 웨어하우징, 메모리 내 데이터 기술 및 클라우드 기반 인스턴스 지원이 포함됩니다.
팁
Oracle은 2000년대 초에 "데이터 웨어하우스 어플라이언스"라는 개념을 제창했습니다.
많은 기존 Oracle 사용자는 레거시 온-프레미스 Oracle 환경을 유지하고 업그레이드하는 데 드는 비용과 복잡성으로 인해 클라우드 환경에서 제공하는 혁신을 활용하려고 합니다. 클라우드, IaaS 및 PaaS와 같은 최신 클라우드 환경을 사용하면 인프라 유지 관리 및 플랫폼 개발과 같은 작업을 클라우드 공급자에게 위임할 수 있습니다.
대용량 데이터에서 복잡한 분석 SQL 쿼리를 지원하는 수많은 데이터 웨어하우스는 Oracle 기술을 사용합니다. 이러한 데이터 웨어하우스에는 일반적으로 별 또는 눈송이 스키마와 같은 차원 데이터 모델이 있으며 개별 부서에 데이터 마트를 사용합니다.
팁
대부분의 기존 Oracle 설치는 차원 데이터 모델을 사용하는 데이터 웨어하우스입니다.
SQL과 Oracle의 차원 데이터 모델을 조합하면 SQL 및 기본 데이터 모델 개념이 전송될 수 있으므로 Azure Synapse로의 마이그레이션이 간소화됩니다. 위험, 활동 및 마이그레이션 시간이 줄어들도록 기존 데이터 모델을 있는 그대로 Azure로 이동하는 것이 좋습니다. 마이그레이션 계획에 Inmon 모델에서 데이터 자격 증명 모음으로 이동과 같은 기본 데이터 모델의 변경 사항이 포함될 수 있지만 처음에는 있는 그대로 마이그레이션을 수행하는 것이 좋습니다. 초기 마이그레이션 후에는 Azure 클라우드 환경 내에서 변경하여 성능, 탄력적 확장성, 기본 제공 기능 및 비용 이점을 활용할 수 있습니다.
SQL 언어는 표준화되어 있지만 공급업체마다 독점 확장을 구현하는 경우가 많습니다. 따라서 Azure Synapse 해결 방법이 필요한 마이그레이션 중에 SQL 차이점을 찾을 수 있습니다.
Azure 기능을 사용하여 메타데이터 기반 마이그레이션 구현
Azure 환경의 기능을 사용하여 마이그레이션 프로세스를 자동화하고 오케스트레이션할 수 있습니다. 이 방법은 이미 용량에 가깝게 실행되고 있는 기존 Oracle 환경의 성능 저하를 최소화합니다.
Azure Data Factory는 데이터 이동 및 데이터 변환을 오케스트레이션 및 자동화하는 클라우드에서 데이터 기반 워크플로를 만들 수 있는 클라우드 기반 데이터 통합 서비스입니다. Data Factory를 사용하여 서로 다른 데이터 저장소에서 데이터를 수집하는 데이터 기반 워크플로(파이프라인)를 만들고 예약할 수 있습니다. Data Factory는 Azure HDInsight Hadoop, Spark, Azure Data Lake Analytics 및 Azure Machine Learning과 같은 컴퓨팅 서비스를 사용하여 데이터를 처리하고 변환할 수 있습니다.
또한 Azure에는 Oracle과 같은 환경에서 마이그레이션을 계획하고 수행하는 데 도움이 되는 Azure Database Migration Services가 포함되어 있습니다. Oracle용 SSMA(SQL Server Migration Assistant)는 일부의 경우 함수와 절차 코드를 포함하여 Oracle 데이터베이스 마이그레이션을 자동화할 수 있습니다.
팁
Azure Data Factory 기능을 사용하여 마이그레이션 프로세스를 자동화합니다.
Data Factory와 같은 Azure 기능을 사용하여 마이그레이션 프로세스를 관리하려면 먼저 마이그레이션해야 하는 모든 데이터 테이블과 해당 위치를 나열하는 메타데이터를 만듭니다.
Oracle과 Azure Synapse의 SQL DDL 차이점
ANSI SQL 표준은 DDL(데이터 정의 언어) 명령의 기본 구문을 정의합니다. CREATE TABLE
및 CREATE VIEW
와 같은 일부 DDL 명령은 Oracle과 Azure Synapse 모두에 공통이지만 인덱싱, 테이블 배포 및 분할 옵션과 같은 구현별 기능도 제공하도록 확장되었습니다.
팁
SQL DDL 명령 CREATE TABLE
및 CREATE VIEW
는 표준 핵심 요소를 가지고 있을 뿐만 아니라 구현 관련 옵션을 정의하는 데도 사용됩니다.
다음 섹션에서는 Azure Synapse로 마이그레이션하는 동안 고려해야 하는 Oracle 관련 옵션을 설명합니다.
테이블/뷰 고려 사항
서로 다른 환경 간에 테이블을 마이그레이션할 때 일반적으로 원시 데이터와 이를 설명하는 메타데이터만 실제로 마이그레이션됩니다. 인덱스 및 로그 파일과 같은 원본 시스템의 다른 데이터베이스 요소는 일반적으로 새 환경에서 불필요하거나 다르게 구현될 수 있으므로 마이그레이션되지 않습니다. 예를 들어 Oracle CREATE TABLE
구문 내 TEMPORARY
옵션은 Azure Synapse에서 테이블 이름 접두사에 #
문자를 지정하는 것과 같습니다.
인덱스와 같은 원본 환경의 성능 최적화는 새 대상 환경에서 성능 최적화를 추가할 수 있는 위치를 나타냅니다. 예를 들어 원본 Oracle 환경 내 쿼리에서 비트 매핑 인덱스를 자주 사용하는 경우 Azure Synapse 내에 비클러스터형 인덱스를 만들어야 합니다. 직선적인 동가 인덱스 생성보다 테이블 복제와 같은 다른 원시 성능 최적화 기술이 더 적합할 수 있습니다. Oracle용 SSMA에서 테이블 배포와 인덱싱에 대한 마이그레이션 권장 사항을 제공할 수 있습니다.
팁
기존 인덱스는 마이그레이션된 웨어하우스의 인덱싱 후보를 나타냅니다.
SQL 뷰 정의에는 일반적으로 SELECT
문을 하나 이상 사용하여 뷰를 정의하는 SQL DML(데이터 조작 언어) 문이 포함되어 있습니다. CREATE VIEW
문을 마이그레이션 할 때 Oracle과 Azure Synapse 간의 DML 차이점을 고려합니다.
지원되지 않는 Oracle 데이터베이스 개체 형식
Oracle 관련 기능은 종종 Azure Synapse 기능으로 대체될 수 있습니다. 그러나 일부 Oracle 데이터베이스 개체는 Azure Synapse에서 직접 지원되지 않습니다. 지원되지 않는 Oracle 데이터베이스 개체의 다음 목록에서는 Azure Synapse에서 동일한 기능을 얻는 방법을 설명합니다.
인덱싱 옵션: Oracle의 비트 매핑 인덱스, 함수 기반 인덱스 및 도메인 인덱스와 같은 여러 인덱싱 옵션에 직접적으로 해당하는 Azure Synapse 옵션은 없습니다. Azure Synapse에서는 이러한 인덱스 유형을 지원하지 않지만 사용자 정의 인덱스 형식을 사용하거나 분할하여 디스크 I/O를 유사하게 줄일 수 있으며 디스크 I/O를 줄이면 쿼리 성능이 향상됩니다.
시스템 카탈로그 테이블과 뷰(예:
ALL_INDEXES
,DBA_INDEXES
,USER_INDEXES
및DBA_IND_COL
)를 쿼리하여 인덱싱되는 열과 해당 인덱스 형식을 확인할 수 있습니다. 또는 모니터링을 사용할 때dba_index_usage
또는v$object_usage
뷰를 쿼리할 수 있습니다.병렬 쿼리 처리, 데이터와 결과의 메모리 내 캐싱과 같은 Azure Synapse 기능을 사용하면 데이터 웨어하우스 애플리케이션에서 성능 목표를 달성하는 데 필요한 인덱스를 줄일 수 있습니다.
클러스터형 테이블: 공통 값에 따라 자주 함께 액세스하는 테이블 행이 물리적으로 함께 저장되도록 Oracle 테이블을 구성할 수 있습니다. 이 전략은 데이터를 검색할 때 디스크 I/O를 줄입니다. 또한 Oracle에는 개별 테이블의 해시 클러스터 옵션이 있으며 이 옵션은 클러스터 키에 해시 값을 적용하고 해시 값이 같은 행을 물리적으로 함께 저장합니다.
Azure Synapse에서 분할 및/또는 다른 인덱스를 사용하여 비슷한 결과를 얻을 수 있습니다.
구체화된 뷰: Oracle에서는 구체화된 뷰를 지원하며 많은 열 중 몇 개만 쿼리에서 정기적으로 사용되는 대형 테이블에 구체화된 뷰를 하나 이상 사용할 것을 권장합니다. 기본 테이블의 데이터가 업데이트될 때 시스템에서 자동으로 구체화된 뷰를 새로 고칩니다.
2019년에 Microsoft는 Azure Synapse에서 Oracle과 동일하게 작동하는 구체화된 뷰를 지원한다고 발표했습니다. 현재 구체화된 뷰는 Azure Synapse에서 미리 보기 기능입니다.
데이터베이스 내 트리거: Oracle에서는 트리거 이벤트가 발생할 때 트리거가 자동으로 실행되도록 구성할 수 있습니다. 트리거 이벤트는 다음과 같습니다.
DML 문(예:
INSERT
,UPDATE
또는DELETE
)이 실행됩니다. 고객 테이블의INSERT
문 앞에서 실행되는 트리거를 정의한 경우 새 행이 고객 테이블에 삽입되기 전에 트리거가 한 번 실행됩니다.DDL 문(예:
CREATE
또는ALTER
)이 실행됩니다. 이 트리거 이벤트는 종종 감사 목적으로 스키마 변경 내용을 기록하는 데 사용됩니다.Oracle 데이터베이스의 시작 또는 종료와 같은 시스템 이벤트
로그인 또는 로그아웃과 같은 사용자 이벤트
Azure Synapse에서는 Oracle 데이터베이스 트리거를 지원하지 않습니다. 그러나 Data Factory를 사용하여 동등한 기능을 얻을 수 있습니다. 이렇게 하려면 트리거를 사용하는 프로세스를 리팩터링해야 합니다.
동의어: Oracle에서는 여러 데이터베이스 개체 형식의 대체 이름으로 동의어 정의를 지원합니다. 이러한 형식에는 테이블, 뷰, 시퀀스, 프로시저, 저장 함수, 패키지, 구체화된 뷰, Java 클래스 스키마 개체, 사용자 정의 개체 또는 다른 동의어가 포함됩니다.
현재 Azure Synapse에서는 동의어를 정의할 수 없지만 Oracle의 동의어가 테이블이나 뷰를 참조하는 경우 Azure Synapse에서 뷰를 대체 이름과 일치하도록 정의할 수 있습니다. Oracle의 동의어에서 함수나 저장 프로시저를 참조하는 경우 Azure Synapse의 동의어를 대상을 호출하는 다른 함수나 저장 프로시저로 교체할 수 있습니다.
사용자 정의 형식: Oracle에서는 각각 고유한 정의와 기본값이 있는 일련의 개별 필드를 포함할 수 있는 사용자 정의 개체를 지원합니다. 그러면
NUMBER
또는VARCHAR
와 같은 기본 제공 데이터 형식과 동일한 방식으로 테이블 정의 내에서 이러한 개체를 참조할 수 있습니다.현재 Azure Synapse에서는 사용자 정의 형식을 지원하지 않습니다. 마이그레이션해야 하는 데이터에 사용자 정의 데이터 형식이 포함된 경우 이를 기존 테이블 정의로 "평면화"하거나 데이터 배열인 경우 별도의 테이블에서 정규화합니다.
SQL DDL 생성
기존 Oracle CREATE TABLE
및 CREATE VIEW
스크립트를 편집하여 Azure Synapse에서 동등한 정의를 얻을 수 있습니다. 이렇게 하려면 수정된 데이터 형식을 사용하여 TABLESPACE
와 같은 Oracle 관련 절을 제거하거나 수정해야 할 수 있습니다.
팁
기존 Oracle 메타데이터를 사용하여 Azure Synapse의 CREATE TABLE
및 CREATE VIEW
DDL 생성을 자동화합니다.
Oracle 환경 내에서 시스템 카탈로그 테이블은 현재 테이블/뷰 정의를 지정합니다. 사용자가 관리하는 설명서와 달리 시스템 카탈로그 정보는 항상 완전하며 현재 테이블 정의와 동기화됩니다. Oracle SQL Developer와 같은 유틸리티를 사용하여 시스템 카탈로그 정보에 액세스할 수 있습니다. Oracle SQL Developer는 다음 스크린샷과 같이 편집하여 Azure Synapse의 동등한 테이블에 적용할 수 있는 CREATE TABLE
DDL 문을 생성할 수 있습니다.
Oracle SQL Developer는 제거해야 하는 Oracle 관련 절이 포함된 다음 CREATE TABLE
문을 출력합니다. Azure Synapse에서 수정된 CREATE TABLE
문을 실행하기 전에 지원되지 않는 데이터 형식을 매핑합니다.
또는 SQL 쿼리, SSMA 또는 타사 마이그레이션 도구를 사용하여 Oracle 카탈로그 테이블 내 정보에서 CREATE TABLE
문을 자동으로 생성할 수 있습니다. 이 방법은 많은 테이블에 대한 CREATE TABLE
문을 생성하는 가장 빠르고 일관된 방법입니다.
팁
타사 도구 및 서비스는 데이터 매핑 작업을 자동화할 수 있습니다.
타사 공급업체에서 데이터 형식 매핑을 포함하여 마이그레이션을 자동화하는 도구와 서비스를 제공합니다. 이미 Oracle 환경에서 타사 ETL 도구를 사용하고 있으면 필요한 모든 데이터 변환을 구현하는 도구를 사용합니다.
Oracle과 Azure Synapse 간의 SQL DML 차이점
ANSI SQL 표준은 SELECT
, INSERT
, UPDATE
및 DELETE
와 같은 DML 명령의 기본 구문을 정의합니다. Oracle과 Azure Synapse 모두 DDL 명령을 지원하지만 경우에 따라 동일한 명령을 다르게 구현합니다.
팁
표준 SQL DML 명령 SELECT
, INSERT
및 UPDATE
는 서로 다른 데이터베이스 환경에서 추가 구문 옵션을 포함할 수 있습니다.
다음 섹션에서는 Azure Synapse로 마이그레이션하는 동안 고려해야 하는 Oracle 관련 DML 명령을 설명합니다.
SQL DML 구문 차이점
Oracle SQL과 Azure Synapse T-SQL 간의 SQL DML 구문에는 차이가 있습니다.
DUAL
테이블: Oracle에는dummy
라는 열과X
값의 레코드가 정확하게 각각 하나씩 포함된DUAL
이라는 시스템 테이블이 있습니다.DUAL
시스템 테이블은 쿼리에 구문상의 이유로 테이블 이름이 필요하지만 테이블 콘텐츠가 필요하지 않은 경우에 사용됩니다.DUAL
테이블을 사용하는 Oracle 쿼리 예제는SELECT sysdate from dual;
입니다. 동등한 Azure Synapse는SELECT GETDATE();
입니다. DML 마이그레이션을 간소화하려면 다음 DDL을 사용하여 Azure Synapse에 동등한DUAL
테이블을 만들면 됩니다.CREATE TABLE DUAL ( DUMMY VARCHAR(1) ) GO INSERT INTO DUAL (DUMMY) VALUES ('X') GO
NULL
값: Oracle의NULL
값은 빈 문자열로,0
길이의CHAR
또는VARCHAR
문자열 형식으로 표시됩니다. Azure Synapse 및 대부분의 다른 데이터베이스에서NULL
은 다른 것을 의미합니다. 데이터를 마이그레이션하거나 데이터를 처리하거나 저장하는 프로세스를 마이그레이션할 때NULL
값이 일관되게 처리되도록 주의해야 합니다.Oracle 외부 조인 구문: 최신 버전의 Oracle에서는 ANSI 외부 조인 구문을 지원하지만 이전 Oracle 시스템은 SQL 문 내에서 더하기 기호(
+
)를 사용하는 외부 조인의 독점 구문을 사용합니다. 이전 Oracle 환경을 마이그레이션하는 경우 이전 구문이 발생할 수 있습니다. 예시:SELECT d.deptno, e.job FROM dept d, emp e WHERE d.deptno = e.deptno (+) AND e.job (+) = 'CLERK' GROUP BY d.deptno, e.job;
동등한 ANSI 표준 구문은 다음과 같습니다.
SELECT d.deptno, e.job FROM dept d LEFT OUTER JOIN emp e ON d.deptno = e.deptno and e.job = 'CLERK' GROUP BY d.deptno, e.job ORDER BY d.deptno, e.job;
DATE
데이터: Oracle에서DATE
데이터 형식은 날짜와 시간을 모두 저장할 수 있습니다. Azure Synapse는 날짜와 시간을 별도의DATE
TIME
및DATETIME
데이터 형식으로 저장합니다. OracleDATE
열을 마이그레이션할 때 날짜와 시간 모두 또는 날짜만 저장하는지 여부를 확인합니다. 날짜만 저장하는 경우 열을DATE
로 매핑합니다. 그렇지 않으면DATETIME
에 매핑합니다.DATE
산술: Oracle에서는 한 날짜를 다른 날짜에서 뺄 수 있습니다(예:SELECT date '2018-12-31' - date '2018-1201' from dual;
). Azure Synapse에서DATEDIFF()
함수를 사용하여 날짜를 뺄 수 있습니다(예:SELECT DATEDIFF(day, '2018-12-01', '2018-12-31');
).Oracle은 날짜에서 정수를 뺄 수 있습니다(예:
SELECT hire_date, (hire_date-1) FROM employees;
). Azure Synapse에서DATEADD()
함수를 사용하여 날짜에서 정수를 추가하거나 뺄 수 있습니다.뷰를 통해 업데이트: Oracle에서는 뷰에 대해 삽입, 업데이트 및 삭제 작업을 실행하여 기본 테이블을 업데이트할 수 있습니다. Azure Synapse에서 뷰가 아닌 기본 테이블에 대해 해당 작업을 실행합니다. Oracle 테이블이 뷰를 통해 업데이트되는 경우 ETL 처리를 다시 설계해야 할 수 있습니다.
기본 제공 함수: 다음 표에서는 일부 기본 제공 함수의 구문과 사용법 간의 차이점을 보여 줍니다.
Oracle 함수 | 설명 | 동등한 Synapse |
---|---|---|
ADD_MONTHS | 지정된 월 수 추가 | DATEADD |
CAST | 기본 제공 데이터 형식을 다른 데이터 형식으로 변환 | CAST |
DECODE | 조건 목록 평가 | CASE 식 |
EMPTY_BLOB | 빈 BLOB 값 만들기 | 0x 상수(빈 이진 문자열) |
EMPTY_CLOB | 빈 CLOB 또는 NCLOB 값 만들기 | '' (빈 문자열) |
INITCAP | 각 단어의 첫 글자를 대문자로 표시 | 사용자 정의 함수 |
INSTR | 문자열에서 substring 위치 찾기 | CHARINDEX |
LAST_DAY | 월의 마지막 날짜 구하기 | EOMONTH |
LENGTH | 문자열 길이(문자 단위) 구하기 | LEN |
LPAD | 지정된 길이까지의 왼쪽 패드 문자열 | REPLICATE, RIGHT 및 LEFT를 사용하는 식 |
MOD | 한 숫자를 다른 숫자로 나눈 나머지 구하기 | % 연산자 |
MONTHS_BETWEEN | 두 날짜 사이의 월 수 구하기 | DATEDIFF |
NVL | NULL 을 식으로 바꾸기 |
ISNULL |
SUBSTR | 문자열에서 substring 반환 | SUBSTRING |
날짜/시간에 대한 TO_CHAR | 날짜/시간을 문자열로 변환 | CONVERT |
TO_DATE | 문자열을 날짜/시간으로 변환 | CONVERT |
번역 | 일대일 단일 문자 대체 | REPLACE 또는 사용자 정의 함수를 사용하는 식 |
TRIM | 선행 또는 후행 문자 자르기 | LTRIM 및 RTRIM |
날짜/시간에 대한 TRUNC | 날짜/시간 자르기 | CONVERT를 사용하는 식 |
UNISTR | 유니코드 코드 포인트를 문자로 변환 | NCHAR를 사용하는 식 |
함수, 저장 프로시저 및 시퀀스
Oracle과 같은 성숙한 환경에서 데이터 웨어하우스를 마이그레이션할 때 간단한 테이블과 뷰 이외의 요소를 마이그레이션해야 할 수도 있습니다. 함수, 저장 프로시저 및 시퀀스의 경우 일반적으로 기본 제공 Azure 도구를 사용하는 것이 Oracle 함수로 다시 코딩하는 것보다 더 효율적이므로 Azure 환경 내 도구에서 해당 기능을 바꿀 수 있는지 여부를 확인합니다.
준비 단계의 일부로 마이그레이션해야 하는 개체의 인벤토리를 만들고, 개체를 처리하는 방법을 정의하고, 마이그레이션 계획에 적절한 리소스를 할당합니다.
Oracle용 SSMA 및 Azure Database Migration Service와 같은 Microsoft 도구나 타사 마이그레이션 제품 및 서비스는 함수, 저장 프로시저 및 시퀀스의 마이그레이션을 자동화할 수 있습니다.
팁
타사 제품 및 서비스로 비데이터 요소의 마이그레이션을 자동화할 수 있습니다.
다음 섹션에서는 함수, 저장 프로시저 및 시퀀스의 마이그레이션을 자세히 설명합니다.
함수
대부분의 데이터베이스 제품과 마찬가지로 Oracle에서는 SQL 구현 내에서 시스템 함수와 사용자 정의 함수를 지원합니다. 레거시 데이터베이스 플랫폼을 Azure Synapse로 마이그레이션할 때 일반적으로 일반적인 시스템 함수를 변경하지 않고 마이그레이션할 수 있습니다. 일부 시스템 함수는 구문이 약간 다를 수 있지만 필요한 변경 사항을 자동화할 수 있습니다.
Azure Synapse에 동등한 함수가 없는 Oracle 시스템 함수나 임의의 사용자 정의 함수의 경우 대상 환경 언어를 사용하여 해당 함수를 다시 코딩합니다. Oracle 사용자 정의 함수는 PL/SQL, Java 또는 C로 코딩됩니다. Azure Synapse는 Transact-SQL 언어를 사용하여 사용자 정의 함수를 구현합니다.
저장 프로시저
대부분의 최신 데이터베이스 제품은 데이터베이스 내 저장 프로시저를 지원합니다. Oracle은 이를 위해 PL/SQL 언어를 제공합니다. 저장 프로시저는 일반적으로 SQL 문과 프로시저 논리를 모두 포함하며 데이터 또는 상태를 반환합니다.
Azure Synapse에서는 T-SQL을 사용하는 저장 프로시저를 지원하므로 마이그레이션된 저장 프로시저를 T-SQL로 다시 코딩해야 합니다.
시퀀스
Oracle에서 시퀀스는 CREATE SEQUENCE
를 사용하여 만든 명명된 데이터베이스 개체입니다. 시퀀스는 CURRVAL
및 NEXTVAL
메서드를 통해 고유한 숫자 값을 제공합니다. 생성된 고유 번호를 기본 키의 대리 키 값으로 사용할 수 있습니다. Azure Synapse는 CREATE SEQUENCE
를 구현하지 않지만 계열에서 다음 시퀀스 번호를 생성하는 IDENTITY
열이나 SQL 코드를 사용하여 시퀀스를 구현할 수 있습니다.
EXPLAIN을 사용하여 레거시 SQL 유효성 검사
팁
기존 시스템 쿼리 로그에서 실제 쿼리를 사용하여 잠재적인 마이그레이션 문제를 찾습니다.
테이블 이름과 열 이름이 같은 Azure Synapse의 유사 마이그레이션된 데이터 모델을 가정할 경우 Azure Synapse 호환성을 위해 레거시 Oracle SQL을 테스트하는 한 가지 방법은 다음과 같습니다.
- 레거시 시스템 쿼리 기록 로그에서 대표 SQL 문 일부를 캡처합니다.
EXPLAIN
문에서 이러한 쿼리를 접두사로 사용합니다.- Azure Synapse에서
EXPLAIN
문을 실행합니다.
호환되지 않는 SQL은 오류를 생성하고 오류 정보는 레코딩 작업의 규모를 결정하는 데 사용될 수 있습니다. 이 방법에서는 Azure 환경에 데이터를 로드할 필요가 없으며 관련 테이블과 뷰만 만들면 됩니다.
요약
기존 레거시 Oracle 설치는 일반적으로 비교적 간단하게 Azure Synapse로 마이그레이션할 수 있는 방식으로 구현됩니다. 두 환경 모두에서 대용량 데이터 볼륨에 대한 분석 쿼리에 SQL을 사용하며 일반적으로 차원 데이터 모델의 일부 형식을 사용합니다. 이러한 요인으로 인해 Oracle 설치는 Azure Synapse로 마이그레이션에 적합합니다.
요약하면 Oracle에서 Azure Synapse로 SQL 코드를 마이그레이션하는 작업을 최소화하기 위한 권장 사항은 다음과 같습니다.
데이터 자격 증명 모음과 같은 다른 데이터 모델이 계획되어 있더라도 위험, 활동 및 마이그레이션 시간을 최소화하려면 기존 데이터 모델을 있는 그대로 마이그레이션합니다.
Oracle SQL 구현과 Azure Synapse 구현 간의 차이점을 이해합니다.
기존 Oracle 구현의 메타데이터와 쿼리 로그를 사용하여 환경 변화에 대한 영향을 파악합니다. 차이점을 완화하는 방법을 계획합니다.
마이그레이션 프로세스를 자동화하여 위험, 활동 및 마이그레이션 시간을 최소화합니다. Azure Database Migration Services 및 SSMA와 같은 Microsoft 도구를 사용할 수 있습니다.
전문 타사 도구와 서비스를 사용하여 마이그레이션을 간소화하는 것이 좋습니다.
다음 단계
Microsoft 및 타사 도구에 대한 자세한 내용은 이 시리즈의 다음 문서인 Oracle 데이터 웨어하우스를 Azure Synapse Analytics로 마이그레이션하기 위한 도구를 참조하세요.