본문 바로가기
공부/IT

Oracle DB : USER_SOURCE와 ALL_SOURCE 검색 방법

by 니똣 2024. 11. 16.
반응형
소스검색 이미지

 
Oracle 데이터베이스는 저장 프로시저, 함수, 패키지, 트리거와 같은 절차적 코드를 다량으로 보유하고 있습니다. 데이터베이스가 커질수록 이러한 객체 내에서 특정 코드 스니펫을 찾는 것이 점점 어려워집니다. 다행히 Oracle에서는 'USER_SOURCE'와 'ALL_SOURCE'와 같은 딕셔너리 뷰를 제공하여 코드 정의를 쉽게 검색하고 다양한 객체의 소스 코드를 검색할 수 있게 합니다. 이 뷰는 데이터베이스 코드를 자주 다루는 개발자, DBA, 분석가에게 특히 유용합니다. 이번 포스트에서는 'USER_SOURCE'와 'ALL_SOURCE' 뷰에 대해 알아보고, 이 뷰를 활용한 효율적인 코드 검색 방법 및 검색 작업을 간소화하는 모범 사례를 살펴보겠습니다.
 

1) Oracle의 USER_SOURCE와 ALL_SOURCE 이해하기

Oracle의 'USER_SOURCE'와 'ALL_SOURCE' 뷰는 저장 프로시저, 함수, 패키지, 트리거 등의 소스 코드를 한 줄씩 분해하여 제공합니다. 두 뷰의 주요 차이점은 범위입니다: 'USER_SOURCE'는 현재 사용자가 소유한 객체의 소스 코드를 포함하고, 'ALL_SOURCE'는 소유 여부에 관계없이 사용자가 접근할 수 있는 객체의 소스 코드를 포함합니다.
 
예를 들어, 특정 스키마에서 특정 함수를 찾으려는 경우 'USER_SOURCE'가 적합합니다. 반면, 여러 스키마에 접근 권한이 있고 이를 모두 검색해야 하는 경우 'ALL_SOURCE'가 유용합니다. 두 뷰 모두 'NAME', 'TYPE', 'LINE', 'TEXT'와 같은 열로 구성되어 있어 객체 유형 및 줄 번호로 세부 검색이 가능합니다.
 

2) USER_SOURCE를 사용하여 특정 코드 검색하기

자신의 스키마 내에서 특정 코드를 찾으려면 'USER_SOURCE'가 효과적인 시작점입니다. SQL 쿼리에서 WHERE 절을 사용하여 키워드, 함수명, 또는 줄 번호별로 코드를 필터링할 수 있습니다. 예를 들어, 저장 프로시저 내 SELECT 키워드를 찾고자 할 때 다음과 같은 쿼리를 실행할 수 있습니다.

SELECT name, type, line, text
  FROM user_source
 WHERE LOWER(text) LIKE '%select%';

이 쿼리는 현재 사용자가 소유한 저장 프로시저 소스 코드에서 SELECT를 포함한 모든 줄을 반환합니다. LOWER 함수를 사용하여 대소문자를 구분하지 않고 검색할 수 있어 더 넓은 결과를 얻을 수 있습니다. 이러한 방법은 스키마 내 각 객체를 수동으로 확인하지 않고도 특정 SQL 문이나 함수 호출을 빠르게 찾을 수 있어 시간 절약과 오류 감소에 도움이 됩니다.
 

3) ALL_SOURCE를 통한 스키마 간 확장 검색

여러 스키마에 걸쳐 더 광범위한 검색이 필요한 경우, 'ALL_SOURCE' 뷰가 매우 유용합니다. 'USER_SOURCE'와 비슷하게 작동하지만 사용자가 접근할 수 있는 다른 스키마의 코드도 포함합니다. 코드 종속성이 여러 스키마에 걸쳐 있는 복잡한 환경에서 특히 유용합니다. 예를 들어, 여러 팀에서 사용하는 특정 프로시저를 검색하려면 다음과 같은 쿼리를 사용할 수 있습니다.

SELECT owner, name, type, line, text
  FROM all_source
 WHERE LOWER(text) LIKE '%update%'
   AND type = 'PROCEDURE';

이 쿼리는 여러 스키마에서 UPDATE 키워드를 포함하는 프로시저 내의 줄을 검색하여 반환합니다. type = 'PROCEDURE' 필터를 추가하면 함수나 패키지와 같은 관련 없는 결과를 피할 수 있습니다. 이렇게 'ALL_SOURCE'를 활용하여 데이터베이스 내 코드 사용 현황을 완전히 파악할 수 있어 협업 환경에서 특히 유용합니다.


Oracle의 'USER_SOURCE'와 'ALL_SOURCE' 뷰는 데이터베이스 내 소스 코드를 효율적으로 검색할 수 있는 방법을 제공합니다. 단일 스키마에서 코드 관리를 하거나 여러 스키마에 걸쳐 있는 경우에도 이 뷰를 활용해 키워드, 객체 유형, 줄 번호로 효율적으로 검색할 수 있습니다. 이러한 뷰를 숙지하면 개발자와 DBA가 생산성을 높이고 오류 발생 가능성을 줄이며, 데이터베이스의 절차적 코드에 대한 중요한 인사이트를 얻을 수 있습니다. 'USER_SOURCE'와 'ALL_SOURCE'를 정기 워크플로에 통합하여 복잡한 코드베이스를 더 쉽게 관리하고 이해해 보세요.

반응형