
oracle-ai-ready-data Skill로 Oracle Database의 스키마를 AI Ready Data로 평가해 보기
요약
Oracle Database의 스키마가 AI 활용에 적합한 'AI Ready Data'인지 평가하는 방법을 소개합니다. Select AI를 통해 NL2SQL, RAG, AI Agent 등 다양한 AI 기능을 구현하는 메커니즘을 다룹니다.
핵심 포인트
- Select AI를 활용한 자연어-SQL 변환(NL2SQL) 기능
- RAG 및 AI Vector Search를 통한 데이터 그라운딩 구현
- 합성 데이터 생성(SDG)을 통한 보안 데이터 활용 방안
- AI Agent 및 자동 오브젝트 선택을 통한 워크플로우 확장
이번에는 HR 스키마를 예로 들어, Oracle Database의 스키마가 AI Ready Data로서 어느 정도 정돈되어 있는지를 평가해 보겠습니다.

Oracle Database에서는 Select AI, RAG, AI Vector Search, AI Agent 등 AI 관련 기능이 늘어나고 있습니다. Oracle Autonomous AI Database와 Oracle AI Database 모두에서 Select AI는 채팅, 자연어에서 SQL로의 변환 (NL2SQL) 생성, 합성 데이터 생성, AI 에이전트, 요약, 번역 등, 26ai와 19c 모두에서 일관된 코어 익스피리언스 (Core Experience)를 제공합니다.


NL2SQL
Select AI의 핵심 기능 중 하나가 자연어에서 SQL로의 변환입니다. 이를 통해 사용자는 필요한 데이터 결과를 자연어로 기술하고, Select AI를 통해 SQL을 생성, 실행, 내레이션, 설명할 수 있습니다. -
Feedback
생성된 SQL이나 결과에 대해 피드백을 주고, NL2SQL의 정밀도 개선에 활용하는 기능입니다. -
Auto Object Selection
사용자의 프롬프트와 관련된 오브젝트를 자동으로 선택하여, LLM에 전달할 메타데이터의 범위를 적절하게 좁히기 위한 기능입니다. -
RAG
임베딩 (embedding) 생성, Vector Store로부터의 의미 검색, 취득한 정보에 의한 프롬프트 확장을 조합하여, 답변을 데이터로 그라운딩 (grounding) 하기 위한 기능입니다. -
SDG
Synthetic Data Generation의 약자로, 기밀성이 높은 운영 데이터를 사용하지 않고 스키마에 준거한 합성 데이터를 생성하기 위한 기능입니다. -
AI Agents
Select AI를 SQL 실행이나 RAG 등의 도구 이용을 포함하는 액션 지향 워크플로우로 확장하기 위한 기능입니다. -
Summarization
쿼리 결과나 텍스트를 자연어로 요약하기 위한 기능입니다. -
Translation
자연어에 의한 응답이나 콘텐츠를 다국어화하기 위한 기능입니다. -
Chat
사용자의 프롬프트를 LLM에 전달하여 통상적인 채팅 형식으로 응답하기 위한 기능입니다.
이러한 기능들을 보면, Oracle Database 측에서는 AI를 활용하기 위한 메커니즘이 상당히 늘어나고 있음을 알 수 있습니다.
한편, AI 기능이 준비되어 있다고 해서 대상 데이터를 그대로 안전하고 고정밀도로 사용할 수 있다고 단정할 수는 없습니다.
AI의 「환각 (Hallucination)」이나 오작동을 방지하거나 저감하기 위해서는, LLM이나 AI 에이전트에 전달할 데이터의 의미, 구조, 관계성, 신선도, 권한, 민감 정보의 취급이 명확해지는 것이 중요합니다.
AI Ready Data란, 단순한 「깨끗한 데이터」의 틀을 넘어, 대규모 언어 모델 (LLM)이나 AI 에이전트, 머신러닝 모델이 인간의 개입 없이 자율적으로 읽고, 추론하고, 액션을 일으킬 수 있도록 최적화된 데이터 구조 및 프로세스입니다.
Oracle Database의 스키마로 생각하면, 테이블이나 컬럼의 의미가 코멘트로 설명되어 있는 것, 기본키 (Primary Key)나 외래키 (Foreign Key)로 관계성이 명확해져 있는 것, 통계 정보나 신선도 정보를 확인할 수 있는 것, RAG나 Vector Search에 필요한 텍스트 열이나 VECTOR 열 설계가 되어 있는 것 등이 AI Ready Data의 중요한 요소가 됩니다.
따라서 이러한 AI 기능들을 사용하기 전에, 대상이 되는 스키마나 테이블이 AI 입장에서 다루기 쉬운 상태인지, 즉 AI Ready한 상태인지를 확인해 두고 싶은 상황이 있습니다.
예를 들어, 다음과 같은 관점입니다.
- 테이블이나 컬럼에 코멘트가 설정되어 있는가
- 기본키나 외래키가 정의되어 있는가
- 통계 정보가 취득되어 있는가
- RAG에 사용할 수 있는 텍스트 열이나 VECTOR 열이 있는가
- Select AI / RAG / Agent 등의 Oracle AI 기능이 DB 측에서 보이는가
그래서 이번에는 Oracle Database용으로 작성한 oracle-ai-ready-data Skill을 사용하여, Autonomous AI Lakehouse 상의 HR 스키마를 AI Ready 평가해 보겠습니다.

이번에는, oracle-ai-ready-data
Skill을 사용하여 HR 스키마에 대해 다음 3가지 종류의 평가를 실행합니다.
| 평가 | 내용 |
|---|---|
| scan profile | 스키마 전체의 AI Ready 정도를 폭넓게 확인 |
| ... |
이번에는 제1회로서, 우선 HR 스키마에 대한 평가 결과를 확인합니다.
다음 회차부터는 Select AI Profile을 생성하여 NL2SQL을 시도하거나, RAG / Vector Search도 시도해 보고자 합니다.
예정
- 제1회: Oracle Database의 HR 스키마를 AI Ready 평가해 보기
- 제2회: BAD_AI_READY 스키마를 만들어 AI Ready 평가에서 실패해 보기
- 제3회: Select AI Profile을 만들어 NL2SQL 해보기
- 제4회: Oracle AI Vector Search / RAG용 Vector Index를 만들어 보기
- 제5회: AI Agent의 SQL Tool / RAG Tool을 시도해 보기
이번 검증 환경은 다음과 같습니다.
| 항목 | 내용 |
|---|---|
| Database | OCI Autonomous AI Lakehouse |
| ... |
Autonomous AI Lakehouse와 HR 스키마 생성은 다음 내용을 참고하십시오.
Autonomous AI Lakehouse 생성
HR 스키마 생성
이번 feature readiness 실행 결과에서는 다음과 같은 AI 관련 패키지를 확인할 수 있었습니다.
| 항목 | 결과 |
|---|---|
| DBMS_CLOUD_AI | visible |
| ... |
따라서 이번 Autonomous AI Lakehouse에서는 Oracle AI 기능의 토대가 존재하는 상태입니다.
다만, AI Profile이나 Vector Index는 아직 생성하지 않았기 때문에 즉시 이용 가능한 상태는 아니며, 기능은 보이지만 설정이 필요한 상태로 평가되었습니다.
oracle-ai-ready-data는 Oracle Database의 스키마나 Oracle AI 기능의 이용 준비 상황을 확인하기 위해 작성한 Skill입니다.
GitHub 리포지토리는 여기입니다.
이 Skill은 SQLcl로 Oracle Database의 메타데이터를 수집하고, Python 스크립트로 Markdown 리포트와 개선 SQL을 생성합니다.
주요 구성은 다음과 같습니다.
| 파일 | 내용 |
|---|---|
scripts/oracle_ai_ready_collect.sql | scan / rag용 메타데이터 수집 SQL |
scripts/score_oracle_ai_ready_scan.py | scan / rag 리포트 생성 스크립트 |
scripts/oracle_ai_feature_collect.sql | Oracle AI Feature Readiness 수집 SQL |
scripts/score_oracle_ai_feature_readiness.py | Feature Readiness 리포트 생성 스크립트 |
profiles/scan.yaml | scan profile의 가중치 정의 |
profiles/rag.yaml | rag profile의 가중치 정의 |
profiles/feature-readiness.yaml | Oracle AI 기능 확인용 profile |
examples/bad_ai_ready_schema.sql | 실패 패턴 확인용 스키마 생성 SQL |
oracle-ai-ready-data에서는 크게 다음과 같은 관점에서 Oracle Database의 AI Ready 정도를 확인합니다.
| 평가 관점 | 내용 |
|---|---|
| Clean | 기본키(Primary Key), 제약 조건(Constraint), 통계 정보 등 AI 처리의 전제가 되는 구조적 신뢰성 |
| ... |
특히 이번에는 테이블 코멘트(Table Comment)와 컬럼 코멘트(Column Comment)를 중요하게 다룹니다.
oracle-ai-ready-data에서는 테이블 코멘트 또는 컬럼 코멘트에 누락이 있는 경우, 수치 점수와 관계없이 Mandatory comment gate가 fail 됩니다.
scan과 rag
scan과 rag는 둘 다 AI Ready 평가이지만, 목적이 조금 다릅니다.
| Profile | 주요 목적 |
|---|---|
| scan | 스키마 전체의 AI Ready 정도를 폭넓게 확인 |
| rag | RAG / Vector Search / Agent RAG 관점에서 확인 |
scan은 스키마 전체의 건강검진과 같습니다.
기본 키 (Primary Key), 외래 키 (Foreign Key), 코멘트 (Comment), 제약 조건 (Constraint), 통계 정보 (Statistics), 최신성 열 (Freshness column), 권한 (Privilege) 등을 폭넓게 확인합니다.
반면 rag는 RAG나 Vector Search의 정보원으로서 사용하기 용이한지를 중시합니다.
예를 들어, 검색 대상이 되는 텍스트 열이 있는지, VECTOR 열이 있는지, 근거 행을 고유하게 특정할 수 있는지, 데이터의 최신성을 설명할 수 있는지 등을 확인합니다.
이번 Skill에서는 다음과 같은 메트릭 (Metric)을 확인합니다.
| Metric | 내용 |
|---|---|
| Table comment coverage | 코멘트가 설정되어 있는 평가 대상 테이블의 비율 |
| ... | LAST_ANALYZED가 입력되어 있는 테이블의 비율 |
| Column stats coverage | LAST_ANALYZED가 입력되어 있는 컬럼 (Column)의 비율 |
| Recent stats coverage | 최근 통계 정보가 수집된 테이블의 비율 |
| Freshness coverage | UPDATED_AT 또는 LAST_UPDATE_DATE 등의 최신성 열이 있는 테이블의 비율 |
| Source metadata coverage | SOURCE_SYSTEM, BATCH_ID, CREATED_BY 등의 출처 정보가 있는 테이블의 비율 |
| Text-bearing table coverage | RAG 후보가 될 수 있는 텍스트 열을 가진 테이블의 비율 |
| Vector table coverage | VECTOR 타입 또는 임베딩 (Embedding) 후보를 가진 테이블의 비율 |
| Sensitive candidate documentation | 민감 정보 후보 열 중 코멘트가 있는 열의 비율 |
| Broad data grant absence | PUBLIC 등 광범위한 대상에 대한 데이터 액세스 권한이 검출되지 않은 비율 |
이러한 항목들을 조합하여 Clean, Contextual, Consumable, Current, Correlated, Compliant 점수를 산출합니다.
Oracle AI Feature Readiness는 스키마의 품질이 아니라, Oracle Database 측에서 AI 기능을 사용할 수 있는 상태인지를 확인하는 평가입니다.
구체적으로는 다음과 같은 사항들을 확인합니다.
| 기능 | 확인 내용 |
|---|---|
| Select AI / NL2SQL | DBMS_CLOUD_AI, CREATE_PROFILE, GENERATE 등이 보이는지 |
| Select AI RAG | CREATE_VECTOR_INDEX, AI Profile, Vector Index를 사용할 수 있는지 |
| Oracle AI Vector Search | DBMS_VECTOR, DBMS_VECTOR_CHAIN, VECTOR 열, vector index를 사용할 수 있는지 |
| AI Agent | DBMS_CLOUD_AI_AGENT가 보이는지 |
| Synthetic Data Generation | GENERATE_SYNTHETIC_DATA가 보이는지 |
| NL2SQL Feedback | FEEDBACK이 보이는지 |
| Auto Object Selection | 자동 object selection에 필요한 기능이 보이는지 |
이번에는 Autonomous AI Lakehouse에서 실행했기 때문에, DBMS_CLOUD_AI, DBMS_CLOUD_AI_AGENT, DBMS_VECTOR를 확인할 수 있었습니다.
다만, AI Profile이나 Vector Index는 아직 생성하지 않았기 때문에, 각 기능은 지원됨·설정 필요로 판정되었습니다.
이제부터 실제로 HR 스키마에 oracle-ai-ready-data를 실행해 보겠습니다.
GitHub에서 다운로드하여 Oracle SQLcl을 실행하는 클라이언트에 배치합니다.
git clone 명령어를 사용하는 경우는 다음과 같습니다.
git clone https://github.com/shirok-tech/oracle-ai-ready-data.git
cd oracle-ai-ready-data
디렉터리 구성은 다음과 같습니다.
oracle-ai-ready-data/
├── README.md
├── SKILL.md
...
oracle-ai-ready-data
그럼, 먼저 SQLcl로 메타데이터를 수집합니다.
1) oracle-ai-ready-data 실행
기본적인 실행 형식은 다음과 같습니다.
sql -s <user>/<password>@<connect_identifier> @scripts/oracle_ai_ready_collect.sql <schema_owner> <table_like_pattern> <profile>
이번 대상은 HR 스키마이므로, 다음과 같이 실행합니다.
sql -s admin/<password>@adb_high @scripts/oracle_ai_ready_collect.sql HR % scan
2) 메타데이터 .out 파일 취득
실행하면 다음과 같은 .out 파일이 생성됩니다.
oracle_ai_ready_scan_HR_scan.out
rag 프로파일의 경우는 다음과 같습니다.
sql -s admin/password@adb_high @scripts/oracle_ai_ready_collect.sql HR % rag
이 경우 다음 파일이 생성됩니다.
oracle_ai_ready_scan_HR_rag.out
scan 프로파일의 .out 파일로부터 Markdown 리포트와 개선 SQL을 생성합니다.
python3 scripts/score_oracle_ai_ready_scan.py \
oracle_ai_ready_scan_HR_scan.out \
--profile scan \
...
생성되는 파일은 다음과 같습니다.
| 파일 | 내용 |
|---|---|
hr_scan_report.md | scan 프로파일의 평가 리포트 |
hr_scan_improvement.sql | 개선 SQL |
다음으로 rag 프로파일의 리포트를 생성합니다.
python3 scripts/score_oracle_ai_ready_scan.py \
oracle_ai_ready_scan_HR_rag.out \
--profile rag \
...
생성되는 파일은 다음과 같습니다.
| 파일 | 내용 |
|---|---|
hr_rag_report.md | rag 프로파일의 평가 리포트 |
hr_rag_improvement.sql | 개선 SQL |
다음으로, Oracle AI Feature Readiness를 확인합니다.
1) oracle_ai_feature_collect.sql 실행
sql -s admin/password@adb_high @scripts/oracle_ai_feature_collect.sql HR %
2) .out 파일 취득
실행하면 다음 .out 파일이 생성됩니다.
oracle_ai_feature_readiness_HR.out
3) 리포트와 셋업 SQL 생성
이 .out 파일로부터 Markdown 리포트와 셋업 SQL 템플릿을 생성합니다.
python3 scripts/score_oracle_ai_feature_readiness.py \
oracle_ai_feature_readiness_HR.out \
--language ja \
...
생성되는 파일은 다음과 같습니다.
| 파일 | 내용 |
|---|---|
oracle_ai_feature_readiness_HR.md | |
| Oracle AI Feature Readiness 평가 리포트 | |
oracle_ai_feature_setup_HR.sql | |
| AI Profile / RAG / Agent 등의 설정 SQL 템플릿 |
이제부터 실제로 HR 스키마에 대해 실행한 결과를 살펴보겠습니다.
scan
profile 결과는 다음과 같습니다.
| 항목 | 결과 |
|---|---|
| 종합 스코어 | 0.67 / 1.00 |
| ... |
Dimension별 스코어는 다음과 같습니다.
| Dimension | Score | 주요 근거 |
|---|---|---|
| Clean | 0.50 | PK 100.0%, 제약 조건 100.0%, 통계 정보 0.0% |
| ... |
HR 스키마에서는 테이블 코멘트(Table comment)와 컬럼 코멘트(Column comment)가 100%였으며, Mandatory comment gate는 pass였습니다.
반면, 통계 정보(Statistics)가 수집되지 않았기 때문에 Clean과 Current 스코어가 낮아졌습니다.
주요 메트릭(Metric)은 다음과 같습니다.
| Metric | Value | Status |
|---|---|---|
| Table comment coverage | 100.0% | pass |
| ... |
개선 SQL로는 통계 정보 수집을 위한 DBMS_STATS.GATHER_TABLE_STATS와 신선도(Freshness) 열 후보인 UPDATED_AT 추가 템플릿이 생성되었습니다.
BEGIN
DBMS_STATS.GATHER_TABLE_STATS(
ownname => 'HR',
...
신선도 열의 경우, 실제 애플리케이션에 영향이 있을 수 있으므로 템플릿으로서 주석 처리되어 있습니다.
-- ALTER TABLE "HR"."COUNTRIES" ADD "UPDATED_AT" TIMESTAMP(6);
-- ALTER TABLE "HR"."DEPARTMENTS" ADD "UPDATED_AT" TIMESTAMP(6);
-- ALTER TABLE "HR"."JOBS" ADD "UPDATED_AT" TIMESTAMP(6);
...
rag profile 결과는 다음과 같습니다.
| 항목 | 결과 |
|---|---|
| 종합 스코어 | 0.68 / 1.00 |
| ... |
Dimension별 스코어는 다음과 같습니다.
| Dimension | Score | 주요 근거 |
|---|---|---|
| Clean | 0.50 | PK 100.0%, 제약 조건 100.0%, 통계 정보 0.0% |
| ... |
rag profile에서는 RAG나 Vector Search 관점에서 텍스트 열(Text column)과 VECTOR 열도 확인합니다.
이번 HR 스키마의 결과는 다음과 같았습니다.
| Metric | Value |
|---|---|
| Text-bearing table coverage | 0.0% |
| Vector table coverage | 0.0% |
HR 스키마는 테이블 코멘트, 컬럼 코멘트, 기본 키(Primary Key), 외래 키(Foreign Key) 등의 설명성이 높습니다.
따라서 Select AI / NL2SQL의 PoC(Proof of Concept) 대상으로 적합해 보입니다.
반면, RAG용 장문 텍스트 열이나 VECTOR 열은 없었습니다.
즉, HR 스키마 자체가 RAG용 벡터 스토어(Vector store)로 설계된 것은 아니며, RAG를 테스트하려면 문서 데이터, 청킹(Chunking), 임베딩 모델(Embedding model), 벡터 인덱스(Vector index) 등을 별도로 설계해야 할 것으로 보입니다.
다음은 Autonomous AI Lakehouse에서 Oracle AI Feature Readiness를 실행한 결과입니다.
| 항목 | 결과 |
|---|---|
| Feature readiness score | 0.60 / 1.00 |
| ... |
처음 이 결과를 보았을 때, 바로 이용 가능한 기능: 없음이라고 표시되어 AI 기능이 없는 것인가 생각했습니다.
하지만 상세 내용을 보면 그렇지 않았습니다.
패키지 / 프로시저 흔적(Package / Procedure trace)에서는 다음을 확인할 수 있었습니다.
| 항목 | 결과 |
|---|---|
| DBMS_CLOUD_AI visible | yes |
| ... |
또한, DBMS_CLOUD_AI에서는 다음과 같은 프로시저(Procedure)도 확인할 수 있었습니다.
CREATE_PROFILE
CREATE_VECTOR_INDEX
GENERATE
...
DBMS_CLOUD_AI_AGENT에서는 다음과 같은 프로시저(Procedure)도 확인할 수 있었습니다.
CREATE_AGENT
CREATE_TASK
CREATE_TEAM
...
즉, 이번 Autonomous AI Lakehouse에서는 Select AI, RAG, AI Agent, SDG 등의 토대가 되는 기능들은 확인되었습니다.
다만, AI Profile은 아직 생성하지 않았기 때문에 즉시 사용할 수 있는 상태는 아니었습니다.
AI profile 은(는) 검출되지 않았습니다.
따라서 이번 사례에 대한 올바른 해석은 다음과 같습니다.
AI 기능이 없다
→ 오답
AI 기능은 있으나, AI Profile, Credential, Vector Index가 미생성 상태
...
Autonomous AI Lakehouse에서는 다음 사항을 확인할 수 있었습니다.
| 기능 | Autonomous AI Lakehouse | 설정·확인에 참고할 Oracle Document |
|---|---|---|
| DBMS_CLOUD_AI | 검출 | DBMS_CLOUD_AI Package Manage AI Profiles Select AI and Select AI Agent Capability Matrix |
| DBMS_CLOUD_AI_AGENT | 검출 | Select AI Agent Examples of Using Select AI Agent Select AI and Select AI Agent Capability Matrix |
| DBMS_VECTOR / DBMS_VECTOR_CHAIN | 검출 | Overview of Oracle AI Vector Search DBMS_VECTOR DBMS_VECTOR_CHAIN |
| AI Profile | 미생성 | Manage AI Profiles DBMS_CLOUD_AI Package |
| Select AI / NL2SQL | 지원함·설정 필요 | Manage AI Profiles Use AI Keyword to Enter Prompts Select AI and Select AI Agent Capability Matrix |
| Select AI RAG | 지원함·설정 필요 | Manage AI Profiles DBMS_CLOUD_AI Package Use AI Keyword to Enter Prompts |
| AI Agent | 지원함·설정 필요 | Select AI Agent Examples of Using Select AI Agent Select AI and Select AI Agent Capability Matrix |
Autonomous AI Lakehouse에서는 DBMS_CLOUD_AI, DBMS_CLOUD_AI_AGENT, DBMS_VECTOR / DBMS_VECTOR_CHAIN이 확인되었습니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 Qiita AI의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기