Oracle 데이터 계보: PL/SQL 저장 프로시저 및 패키지 분석

Oracle 데이터 계보 데이터 계보는 Oracle 환경에서 데이터가 이동하는 방식을 열 수준에서 보여주는 지도입니다. 즉, 어떤 소스 테이블과 열이 각 대상 테이블, 뷰 또는 구체화된 뷰에 데이터를 제공하는지, 그리고 어떤 PL/SQL 패키지, 프로시저, 함수 및 트리거가 이러한 데이터 이동을 수행하는지를 나타냅니다. 대부분의 Oracle 환경에서는 변환 로직이 독립 실행형 쿼리가 아닌 PL/SQL에 있기 때문에 정확한 데이터 계보를 파악하려면 Oracle SQL뿐만 아니라 PL/SQL을 절차적 언어로 파싱할 수 있는 도구가 필요합니다. Gudu SQLFlow 이 소프트웨어는 동적 SQL을 포함하여 정확히 그러한 작업을 수행하는 전용 PL/SQL 파서를 제공합니다. 즉시 실행.

직접 작성한 코드로 테스트해 보세요. Oracle 패키지 본문을 붙여넣으세요 무료 SQLFlow 계보 시각화 도구Oracle 방언을 선택하고 해당 방언이 생성하는 열 수준 계보 및 프로시저 호출 그래프를 확인하십시오.

오라클 데이터 계보 추적이 SELECT 문 파싱보다 어려운 이유는 무엇일까요?

오라클 데이터베이스는 좋은 의미에서 오래되었습니다. 많은 운영 환경에는 20년 이상 축적된 비즈니스 로직이 저장되어 있으며, 그 대부분은 PL/SQL로 작성되었습니다. 야간 로드, 마트 새로 고침, 조정 작업, 감사 추적은 프로시저를 호출하고 함수를 호출하는 패키지 형태로 구현되며, 그 과정에서 트리거가 실행됩니다. 이러한 구현 방식을 이해하는 데이터베이스 계보 도구는 없습니다. 선택하다, 끼워 넣다, 그리고 뷰 생성 그러한 부동산의 표면적인 모습만 보고 그 이면에 숨겨진 논리를 대부분 놓치는 것이다.

기술적인 이유는 PL/SQL이 SQL이 아니기 때문입니다. PL/SQL은 자체 문법을 가진 블록 구조의 절차적 언어입니다. 이 문법에는 선언, 제어 흐름, 커서, 예외 처리기, 패키지 명세 및 본문이 포함됩니다. SQL 문은 이 구조 내에 내장되어 있으며, 입력과 출력은 변수, 매개변수 및 커서 루프를 통해 흐릅니다. PL/SQL에서 계보를 추출한다는 것은 절차적 계층을 파싱하고, 그 안에서 값을 추적하고, 내장된 SQL 문들을 서로 연결하는 것을 의미합니다. SQL 전용 문법으로는 이러한 작업을 수행할 수 없기 때문에 일반적인 계보 추출기는 프로시저 본문을 완전히 건너뛰거나 첫 번째 단계에서 실패하는 경우가 많습니다. 시작하다 차단하다.

확장 기능이 있는 SQL 파서가 아니라, PL/SQL 전용 파서입니다.

SQLFlow는 다음을 기반으로 구축되었습니다. 일반 SQL 파서는 2000년대 중반부터 개발되어 약 13,600개의 방언별 테스트 픽스처를 통해 검증된 상용 SQL 컴파일러 프런트엔드입니다. 오라클의 경우 두 가지 기능을 제공합니다. 하나는 쿼리, DDL 및 뷰를 위한 오라클 SQL 파서이고, 다른 하나는 PL/SQL을 위한 별도의 프로시저 파서입니다. PL/SQL 파서는 오라클 변환 로직이 실제로 존재하는 객체 유형을 처리합니다.

  • 패키지: 패키지에 포함된 모든 프로시저와 함수를 포괄하는 완벽한 분석과 패키지 경계를 넘나드는 호출 그래프를 제공합니다.
  • 절차 및 기능: 프로시저 매개변수와 임시 테이블을 통해 계보를 추적하므로 인수로 입력되어 테이블에 저장되는 값은 처음부터 끝까지 연결됩니다.
  • 트리거: 데이터를 복사하거나 변환하는 행 수준 로직 끼워 넣다, 업데이트, 또는 삭제 보이지 않는 부작용으로 남아있지 않고 계보도에 나타납니다.
  • 동적 SQL: 실행 시간에 조립되어 실행되는 문장 즉시 실행 건너뛰는 대신 해결 및 분석됩니다.

SQLFlow는 객체별 분석 외에도 대화형 화면을 제공합니다. 그래프 호출패키지 경계를 넘어 어떤 프로시저가 어떤 프로시저를 호출하는지. 코드베이스에서 etl_driver.run_nightly 여러 개의 패키지 프로시저로 나뉘어져 있는데, 호출 그래프를 이용하면 실제로 원하는 테이블을 작성하는 프로시저를 찾을 수 있습니다.

예시: 패키지 프로시저를 통한 계보 추적

다음은 단순화되었지만 대표적인 패턴입니다. 스테이징 환경에서 일일 매출 데이터를 불러오는 패키지 프로시저입니다.

CREATE OR REPLACE PACKAGE BODY sales_etl AS PROCEDURE load_revenue_mart(p_load_date IN DATE) IS BEGIN DELETE FROM mart.revenue_daily WHERE day_id = TO_CHAR(p_load_date, 'YYYYMMDD'); INSERT INTO mart.revenue_daily (day_id, region_name, total_amount) SELECT TO_CHAR(o.order_date, 'YYYYMMDD'), r.region_name, SUM(o.amount) FROM staging.orders o JOIN dim.region r ON r.region_id = o.region_id WHERE o.status = 'SHIPPED' AND TRUNC(o.order_date) = TRUNC(p_load_date) GROUP BY TO_CHAR(o.order_date, 'YYYYMMDD'), r.region_name; END load_revenue_mart; END sales_etl;

SQLFlow는 패키지 본문을 읽고 출력 열별로 보고서를 생성합니다. 마트.일일수익.총액 ~에 의해 공급됩니다 스테이징.주문.금액 ~을 통해 합집합; 지역 이름 ~에서 유래합니다 dim.region.region_name 가입을 통해 지역 ID; 일_id ~에서 파생됨 스테이징.주문.주문일 ~을 통해 TO_CHAR또한 다음과 같은 내용도 기록되어 있습니다. o.상태, 주문 날짜그리고 매개변수 p_load_date 결과를 통해 형성하다 어디 조항, 그리고 절차가 그 안에 있다는 것입니다. 판매_etl 호출 그래프의 패키지. 부동산에 있는 수백 개의 프로시저에 이를 곱하면 수동 문서로는 절대 최신 상태로 유지할 수 없는 종속성 맵이 만들어집니다.

동적 SQL: EXECUTE IMMEDIATE의 사각지대

Oracle 팀은 파티션 이름으로 테이블을 로드하고, 프로시저에서 DDL을 적용하고, 구성 행에 따라 대상이 달라지는 문을 작성하는 등 동적 SQL을 끊임없이 사용합니다. 대부분의 코드 계보 추출은 이러한 코드에서 실패합니다.

v_sql := 'INSERT INTO mart.revenue_archive (day_id, region_name, total_amount) SELECT day_id, region_name, total_amount FROM mart.revenue_daily WHERE day_id = :d'; EXECUTE IMMEDIATE v_sql USING v_day_id;

SQLFlow는 프로시저 내의 동적 SQL을 해석하고 조립된 문을 분석하므로, 그 흐름은 다음과 같습니다. 마트.일일수익 ~ 안으로 마트.수익_아카이브 조용히 버려지는 대신 포착됩니다. 귀하의 재산이 사용하는 경우 즉시 실행 어떤 계보 도구를 신뢰하기 전에 반드시 확인해야 할 유일한 기능은 바로 이것입니다. 직접 작성한 동적 SQL 프로시저 중 하나를 해당 도구를 통해 실행하고 대상 테이블이 그래프에 나타나는지 확인하는 것입니다.

오라클 코드의 직접 및 간접 계보

SQLFlow는 구별합니다 직계 혈통 (원본 열의 값이 대상 열에 저장됨) 간접 혈통 (열이 결과를 통해 안내합니다) 어디 술부, 가입하다 상태, 그룹화 기준(또는 출력에 나타나지 않도록 집계할 수도 있습니다.) 위 예시에서, 주문 상태 마트에 도달하지 않지만, 값을 변경하면 마트 안의 모든 숫자가 변경됩니다. 두 가지 관계 유형은 다이어그램에서 개별적으로 전환할 수 있으므로 영향 분석에서 필터 전용 종속성을 의도적으로 포함하거나 제외할 수 있습니다. 대부분의 경쟁 도구는 이러한 구분을 모델링하지 않아 영향 분석 범위가 너무 좁거나(필터 열 누락) 너무 복잡합니다(모든 것이 서로 연결됨).

Oracle 코드를 SQLFlow로 가져오기

입력 방식언제 사용해야 할까요?
SQL 또는 PL/SQL을 붙여넣으세요브라우저에서 특정 패키지, 절차 또는 스크립트에 대한 빠른 확인
파일 업로드내보낸 DDL 및 PL/SQL 소스 코드를 일괄 분석
JDBC 실시간 연결데이터베이스에서 스키마 메타데이터, 뷰 정의 및 저장된 코드를 직접 가져옵니다.
Grabit 메타데이터 추출Grabit 보조 도구를 사용하여 메타데이터를 추출하고 SQLFlow에 입력합니다.

어떤 방법을 선택하든 SQLFlow는 SQL 및 PL/SQL 텍스트와 스키마 메타데이터에 대한 정적 분석을 수행합니다. 테이블의 행은 절대 읽지 않습니다. 은행 및 기타 규제 대상 Oracle 환경의 경우, 온프레미스 에디션 Docker 또는 Kubernetes 환경에서 네트워크 내에서 실행되며, 완전한 에어갭 환경을 지원하므로 소스 코드는 인프라 외부로 유출되지 않습니다. 엔터프라이즈 규모에서는 100개 이상의 데이터베이스와 백만 개 이상의 열을 포함하는 대규모 환경을 일괄 스캔할 수 있으며, 증분 스캔 기능과 DataHub, Microsoft Purview, OpenMetadata용 내보내기 어댑터도 제공합니다.

Oracle 마이그레이션 및 혼합 환경

리니지는 오라클 환경이 직면하는 가장 중요한 시점, 즉 마이그레이션 시점에 가장 큰 가치를 지닙니다. 워크로드를 Snowflake, BigQuery 또는 Databricks로 이전하기 전에 리니지 그래프를 통해 비즈니스에서 사용하는 보고서를 실제로 제공하는 패키지가 무엇인지, 더 이상 사용되지 않는 테이블은 무엇인지, 그리고 객체를 어떤 순서로 이동해야 하는지 파악할 수 있습니다. 마이그레이션 후 새 플랫폼에서 분석을 다시 실행하면 고아 객체가 없는지 확인할 수 있습니다. SQLFlow는 방언별 문법을 사용하는 39개의 방언을 분석하므로 동일한 도구로 마이그레이션의 시작과 끝을 모두 처리할 수 있습니다.

대규모 자산 관리 시스템 중 오라클만 사용하는 경우는 드뭅니다. 동일한 절차적 구문 분석 깊이를 사용할 수 있습니다. SQL Server T-SQL 계보그리고 다음과 같은 창고 플랫폼 테라데이터 각 방언별로 특화된 구문 분석기를 가지고 있습니다. 하나의 계보 저장소에 전체 계보를 저장할 수 있습니다.

오픈소스 파서가 적합한 위치

오픈소스 프로젝트는 다음과 같습니다. sqllineage 그리고 sqlglot 개별 쿼리를 분석하는 데는 정말 탁월하며, 독립형 SELECT 및 INSERT 문에서 테이블 수준의 계보를 추출하는 데는 충분할 수 있습니다. 오라클 작업에서 부족한 부분은 절차적 계층, 즉 패키지 본문, 매개변수 흐름, 트리거 등입니다. 즉시 실행 이러한 구문들은 범용 SQL 파서가 처리하도록 설계되지 않았으며, 오라클 환경에서는 대부분의 변환 로직이 바로 이러한 구문에 집중되어 있습니다. 가장 정확한 평가는 경험적인 접근 방식을 취해야 합니다. 가장 큰 패키지 본문을 선택하여 여러 도구를 통해 실행해 보고, 각 도구가 몇 개의 대상 테이블을 찾아내는지 세어보십시오.

자주 묻는 질문

SQLFlow는 Oracle 저장 프로시저 및 패키지를 통해 추적 계보를 추적할 수 있습니까?

예. SQLFlow는 Oracle SQL 파서와는 별도로 패키지, 프로시저, 함수 및 트리거를 분석하는 전용 PL/SQL 파서를 갖추고 있습니다. 프로시저 매개변수와 임시 테이블을 통해 계보를 추적할 수 있으며, 대화형 호출 그래프를 통해 패키지 간 프로시저 호출을 확인할 수 있습니다.

SQLFlow는 EXECUTE IMMEDIATE 동적 SQL을 처리할 수 있습니까?

예. PL/SQL 프로시저 내에서 구성된 동적 SQL은 건너뛰지 않고 해석 및 분석되므로, 다음과 같이 구성된 문은 실행됩니다. 즉시 실행 소스-대상 흐름을 계보 그래프에 추가합니다.

SQLFlow는 Oracle 데이터에 대한 접근 권한이 필요한가요?

아니요. SQLFlow는 SQL 및 PL/SQL 코드에 대한 정적 분석을 수행하고 선택적으로 JDBC를 통해 스키마 메타데이터를 읽습니다. 테이블 행 데이터는 절대 읽지 않습니다. 온프레미스 버전을 사용하는 경우 SQL 텍스트조차도 네트워크 내에 유지됩니다.

Oracle 무료 버전에서 컬럼 수준 계보 기능을 사용할 수 있습니까?

예. SQLFlow 클라우드 무료 티어가 있습니다. 브라우저에 Oracle SQL 또는 PL/SQL 코드를 붙여넣으면 열 수준 계보 다이어그램을 볼 수 있습니다. 프리미엄은 월 $49.99이며, 온프레미스는 월 $500 또는 선택한 데이터베이스 유형당 1회 $4,800입니다. 자세한 내용은 다음을 참조하세요. 가격 자세한 내용은 다음을 참조하세요.

Oracle 데이터 계보를 데이터 카탈로그로 내보낼 수 있습니까?

예. 리니지 데이터는 JSON, CSV 또는 PNG 형식으로 내보내지며 REST API를 통해 쿼리할 수 있습니다. 또한 엔터프라이즈 배포 환경에는 DataHub, Microsoft Purview 및 OpenMetadata용 내보내기 어댑터가 포함되어 있으므로 SQLFlow는 현재 실행 중인 카탈로그의 PL/SQL 기반 리니지 엔진으로 사용할 수 있습니다.

PL/SQL 코드에 숨겨진 계보를 확인하세요

패키지 본문을 무료 시각화 도구에 붙여넣거나, 온프레미스에 있는 전체 Oracle 환경을 스캔하는 것에 대해 저희와 상담해 보세요.