DB Manual
Oracle DDL 스크립트 — 운영 환경 수동 테이블 생성용
운영 Oracle DB는 자동 마이그레이션을 지원하지 않습니다.
아래 DDL을 번호 순서대로 실행하세요. FK 의존성 때문에 순서가 중요합니다.
테이블 목록 (총 36개)
| # | 그룹 | 테이블 | 용도 |
|---|---|---|---|
| 1 | 공통 | users | 사용자 계정 + 역할 |
| 2 | 공통 | llm_usage_log | LLM API 호출 로그 |
| 3 | 이상탐지 | detection_rules | 감지 규칙 정의 |
| 4 | 이상탐지 | rule_audit_log | 규칙 변경 이력 |
| 5 | 이상탐지 | correlations | 이상 상관 그룹 |
| 6 | 이상탐지 | anomalies | 감지된 이상 |
| 7 | 이상탐지 | detection_cycles | 감지 사이클 로그 |
| 8 | 이상탐지 | rca_analyses | Auto RCA 결과 |
| 9 | 딥 RCA | deep_rca_sessions | RCA 분석 세션 |
| 10 | 딥 RCA | deep_rca_messages | 대화 메시지 |
| 11 | 딥 RCA | deep_rca_flow_nodes | 플로차트 노드 |
| 12 | 딥 RCA | deep_rca_flow_edges | 플로차트 엣지 |
| 13 | 딥 RCA | deep_rca_scenarios | 시나리오 라이브러리 |
| 14 | 딥 RCA | deep_rca_scenario_revisions | 시나리오 리비전 |
| 15 | 딥 RCA | fab_tools | FAB 도구 레지스트리 |
| 16 | 딥 RCA | knowledge_gaps | Knowledge Gap 추적 |
| 17 | 딥 RCA | tool_dev_requests | 도구 개발 요청 |
| 18 | Tool Studio | ds_connections | DB 접속 관리 |
| 19 | Tool Studio | ds_tools | 도구 정의 |
| 20 | Tool Studio | tool_audit_log | 도구 변경 이력 |
| 21 | Tool Studio | tool_versions | 도구 버전 관리 |
| 22 | Tool Studio | ds_query_log | 쿼리 실행 로그 |
| 23 | 워크플로우 | workflows | 워크플로우 정의 |
| 24 | 워크플로우 | workflow_runs | 실행 이력 |
| 25 | 워크플로우 | workflow_audit_log | 워크플로우 변경 이력 |
| 26 | RAG | kb_documents | Knowledge Base 문서 |
| 27 | 공통 | system_settings | 시스템 설정 (하이퍼파라미터) |
| 28 | AI Chat | tool_requests | 도구 추가 요청 |
| 29 | AI Chat | tool_request_history | 도구 요청 상태 변경 이력 |
| 30 | AI Chat | ai_chat_sessions | AI 채팅 세션 |
| 31 | AI Chat | ai_chat_messages | 채팅 메시지 |
| 32 | 공통 | activity_log | 사용자 활동 감사 로그 |
| 33 | AI Chat | question_flows | 후속질문 흐름 관리 |
| 34 | Playbook | countermeasures | 대안/조치 플레이북 |
| 35 | AI Chat | user_prompts | 사용자 개인 프롬프트 |
| 36 | AI Chat | user_prompt_versions | 개인 프롬프트 버전 이력 |
실행 순서 가이드
FK 의존성 때문에 반드시 아래 순서를 지켜야 합니다.
- users — 다른 테이블이 참조하지 않는 독립 테이블
- llm_usage_log — 독립
- detection_rules — anomalies, rca_analyses가 참조
- rule_audit_log — rule_id 참조 (FK 없지만 논리적 의존)
- correlations — anomalies.correlation_id FK
- anomalies — detection_rules + correlations 참조
- detection_cycles — 독립
- rca_analyses — anomalies 참조
- deep_rca_sessions — deep_rca_messages 등이 참조
- deep_rca_messages — sessions 참조
- deep_rca_flow_nodes — sessions 참조
- deep_rca_flow_edges — sessions 참조
- deep_rca_scenarios — sessions 참조
- deep_rca_scenario_revisions — scenarios 참조
- fab_tools — 독립
- knowledge_gaps — 독립
- tool_dev_requests — 독립
- ds_connections — ds_tools가 참조
- ds_tools — ds_connections 참조
- tool_audit_log — 독립 (tool_id 논리적 의존)
- tool_versions — 독립 (tool_id 논리적 의존)
- ds_query_log — 독립
- workflows — workflow_runs가 참조
- workflow_runs — workflows 참조
- workflow_audit_log — 독립 (workflow_id 논리적 의존)
- kb_documents — 독립
- system_settings — 독립
- tool_requests — 독립
- tool_request_history — 독립 (request_id 논리적 의존)
- ai_chat_sessions — ai_chat_messages가 참조
- ai_chat_messages — sessions 참조
- activity_log — 독립
- question_flows — 독립
- countermeasures — 독립
- user_prompts — user_prompt_versions가 참조
- user_prompt_versions — user_prompts 참조
ALTER TABLE (FK 추가)은 참조 테이블 생성 후 실행하세요.
공통 테이블
1. users
users — 사용자 계정
CREATE TABLE users (
user_id NUMBER GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
username VARCHAR2(50) NOT NULL UNIQUE,
password VARCHAR2(200) NOT NULL,
display_name VARCHAR2(100),
role VARCHAR2(20) DEFAULT 'viewer',
page_permissions CLOB, -- JSON: 커스텀 권한 오버라이드
enabled NUMBER(1) DEFAULT 1,
created_at TIMESTAMP DEFAULT SYSTIMESTAMP
);
2. llm_usage_log
llm_usage_log — LLM 사용량 로그
CREATE TABLE llm_usage_log (
id NUMBER GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
called_at TIMESTAMP DEFAULT SYSTIMESTAMP,
module VARCHAR2(50),
model VARCHAR2(100),
prompt_tokens NUMBER DEFAULT 0,
completion_tokens NUMBER DEFAULT 0,
total_tokens NUMBER DEFAULT 0,
duration_ms NUMBER DEFAULT 0,
success NUMBER(1) DEFAULT 1
);
이상탐지 테이블
3. detection_rules
detection_rules — 감지 규칙
CREATE TABLE detection_rules (
rule_id NUMBER GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
rule_name VARCHAR2(200) NOT NULL,
category VARCHAR2(50) NOT NULL, -- logistics / wip / equipment
subcategory VARCHAR2(100),
query_template CLOB, -- SQL with :bind_var (source_type=sql)
check_type VARCHAR2(30) DEFAULT 'threshold' NOT NULL,
-- threshold / delta / absence / llm
source_type VARCHAR2(10) DEFAULT 'sql', -- sql / tool
tool_name VARCHAR2(100), -- 도구명 (source_type=tool)
tool_args CLOB, -- 도구 파라미터 JSON
tool_column VARCHAR2(100), -- 결과에서 추출할 컬럼명
tool_chain CLOB, -- 멀티 도구 체인 JSON (v1.7.0)
threshold_op VARCHAR2(10) DEFAULT '>',
warning_value NUMBER,
critical_value NUMBER,
eval_interval NUMBER DEFAULT 300, -- seconds (규칙별 감지 간격)
last_evaluated_at TIMESTAMP, -- 마지막 평가 시각
llm_enabled NUMBER(1) DEFAULT 0,
llm_prompt CLOB,
enabled NUMBER(1) DEFAULT 1,
auto_resolve NUMBER(1) DEFAULT 0, -- 자동 해소 활성화 (v1.7.0)
resolve_count NUMBER DEFAULT 3, -- 연속 정상 N회 시 해소 (v1.7.0)
created_at TIMESTAMP DEFAULT SYSTIMESTAMP,
updated_at TIMESTAMP DEFAULT SYSTIMESTAMP,
created_by VARCHAR2(50),
updated_by VARCHAR2(50)
);
4. rule_audit_log
rule_audit_log — 규칙 변경 이력
CREATE TABLE rule_audit_log (
log_id NUMBER GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
rule_id NUMBER NOT NULL,
action VARCHAR2(20) NOT NULL,
changed_by VARCHAR2(100),
changed_at TIMESTAMP DEFAULT SYSTIMESTAMP,
changes CLOB
);
5. correlations
correlations — 이상 상관 그룹
CREATE TABLE correlations (
correlation_id NUMBER GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
title VARCHAR2(500),
anomaly_count NUMBER DEFAULT 0,
correlation_type VARCHAR2(30), -- temporal / causal / spatial
root_cause_guess CLOB,
created_at TIMESTAMP DEFAULT SYSTIMESTAMP,
updated_at TIMESTAMP DEFAULT SYSTIMESTAMP
);
6. anomalies
anomalies — 감지된 이상
CREATE TABLE anomalies (
anomaly_id NUMBER GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
rule_id NUMBER REFERENCES detection_rules(rule_id),
correlation_id NUMBER,
category VARCHAR2(50) NOT NULL,
severity VARCHAR2(20) NOT NULL, -- warning / critical
title VARCHAR2(500) NOT NULL,
description CLOB,
measured_value NUMBER,
threshold_value NUMBER,
affected_entity VARCHAR2(200), -- equipment_id, zone, line
llm_analysis CLOB,
llm_suggestion CLOB,
occurrence_count NUMBER DEFAULT 1, -- 동일 이상 반복 발생 횟수
last_seen_at TIMESTAMP, -- 마지막 발생 시각
status VARCHAR2(30) DEFAULT 'detected',
-- detected / acknowledged / investigating / resolved / false_positive
detected_at TIMESTAMP DEFAULT SYSTIMESTAMP,
acknowledged_at TIMESTAMP,
resolved_at TIMESTAMP,
resolved_by VARCHAR2(100),
notes CLOB,
normal_streak NUMBER DEFAULT 0 -- 자동 해소용 정상 연속 카운트 (v1.7.0)
);
-- FK: anomalies.correlation_id → correlations
ALTER TABLE anomalies
ADD CONSTRAINT fk_anomaly_correlation
FOREIGN KEY (correlation_id) REFERENCES correlations(correlation_id);
7. detection_cycles
detection_cycles — 감지 사이클 로그
CREATE TABLE detection_cycles (
cycle_id NUMBER GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
started_at TIMESTAMP NOT NULL,
completed_at TIMESTAMP,
rules_evaluated NUMBER DEFAULT 0,
anomalies_found NUMBER DEFAULT 0,
duration_ms NUMBER
);
8. rca_analyses
rca_analyses — Auto RCA 결과
CREATE TABLE rca_analyses (
rca_id NUMBER GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
anomaly_id NUMBER NOT NULL REFERENCES anomalies(anomaly_id),
status VARCHAR2(30) DEFAULT 'pending',
root_cause CLOB,
cause_category VARCHAR2(100),
contributing_factors CLOB,
evidence CLOB,
recommendations CLOB,
confidence NUMBER,
analyzed_at TIMESTAMP,
analysis_duration_ms NUMBER,
created_at TIMESTAMP DEFAULT SYSTIMESTAMP
);
딥 RCA 테이블
9. deep_rca_sessions
deep_rca_sessions
CREATE TABLE deep_rca_sessions (
id VARCHAR2(36) PRIMARY KEY,
title VARCHAR2(200) NOT NULL,
process_type VARCHAR2(50),
alarm_type VARCHAR2(100),
author VARCHAR2(100),
anomaly_id NUMBER,
status VARCHAR2(20) DEFAULT 'active',
created_at TIMESTAMP DEFAULT SYSTIMESTAMP,
updated_at TIMESTAMP DEFAULT SYSTIMESTAMP
);
10. deep_rca_messages
deep_rca_messages
CREATE TABLE deep_rca_messages (
id NUMBER GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
session_id VARCHAR2(36) REFERENCES deep_rca_sessions(id),
role VARCHAR2(20) NOT NULL,
content CLOB NOT NULL,
extracted_data CLOB,
created_at TIMESTAMP DEFAULT SYSTIMESTAMP
);
11. deep_rca_flow_nodes
deep_rca_flow_nodes
CREATE TABLE deep_rca_flow_nodes (
id VARCHAR2(50) NOT NULL,
session_id VARCHAR2(36) REFERENCES deep_rca_sessions(id),
type VARCHAR2(20) NOT NULL,
label VARCHAR2(500) NOT NULL,
parameter VARCHAR2(200),
threshold VARCHAR2(200),
metadata CLOB,
PRIMARY KEY (id, session_id)
);
12. deep_rca_flow_edges
deep_rca_flow_edges
CREATE TABLE deep_rca_flow_edges (
id NUMBER GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
session_id VARCHAR2(36) REFERENCES deep_rca_sessions(id),
from_node VARCHAR2(50) NOT NULL,
to_node VARCHAR2(50) NOT NULL,
label VARCHAR2(200),
condition VARCHAR2(200)
);
13. deep_rca_scenarios
deep_rca_scenarios
CREATE TABLE deep_rca_scenarios (
id VARCHAR2(36) PRIMARY KEY,
session_id VARCHAR2(36) REFERENCES deep_rca_sessions(id),
title VARCHAR2(200) NOT NULL,
process_type VARCHAR2(50),
description CLOB,
mermaid_code CLOB,
node_count NUMBER,
author VARCHAR2(100) DEFAULT '',
version NUMBER DEFAULT 1,
parent_id VARCHAR2(36),
status VARCHAR2(20) DEFAULT 'published',
tags CLOB DEFAULT '[]',
created_at TIMESTAMP DEFAULT SYSTIMESTAMP,
updated_at TIMESTAMP DEFAULT SYSTIMESTAMP
);
14. deep_rca_scenario_revisions
deep_rca_scenario_revisions
CREATE TABLE deep_rca_scenario_revisions (
id NUMBER GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
scenario_id VARCHAR2(36) NOT NULL REFERENCES deep_rca_scenarios(id),
version NUMBER NOT NULL,
author VARCHAR2(100) NOT NULL,
changelog CLOB NOT NULL,
mermaid_code CLOB,
node_count NUMBER,
snapshot CLOB,
created_at TIMESTAMP DEFAULT SYSTIMESTAMP
);
15. fab_tools
fab_tools — FAB 도구 레지스트리
CREATE TABLE fab_tools (
id NUMBER GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
name VARCHAR2(100) NOT NULL UNIQUE,
category VARCHAR2(50) NOT NULL,
description CLOB,
data_fields CLOB,
usage_example CLOB,
created_at TIMESTAMP DEFAULT SYSTIMESTAMP
);
16. knowledge_gaps
knowledge_gaps
CREATE TABLE knowledge_gaps (
id NUMBER GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
context CLOB NOT NULL,
question CLOB NOT NULL,
process_type VARCHAR2(50),
severity VARCHAR2(20) DEFAULT 'important',
status VARCHAR2(20) DEFAULT 'open',
resolved_by VARCHAR2(100),
resolved_scenario_id VARCHAR2(36),
created_at TIMESTAMP DEFAULT SYSTIMESTAMP,
resolved_at TIMESTAMP
);
17. tool_dev_requests
tool_dev_requests -- 도구 개발 요청
CREATE TABLE tool_dev_requests (
id NUMBER GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
title VARCHAR2(200) NOT NULL,
description CLOB,
requested_by VARCHAR2(100),
session_id VARCHAR2(36),
context CLOB,
suggested_params CLOB,
priority VARCHAR2(20) DEFAULT 'medium',
status VARCHAR2(20) DEFAULT 'open',
resolved_tool_id NUMBER,
created_at TIMESTAMP DEFAULT SYSTIMESTAMP,
resolved_at TIMESTAMP,
resolved_by VARCHAR2(100)
);
Tool Studio 테이블
18. ds_connections
ds_connections — DB 접속 관리
CREATE TABLE ds_connections (
id NUMBER GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
name VARCHAR2(100) NOT NULL UNIQUE,
type VARCHAR2(20) NOT NULL, -- sqlite / oracle
sqlite_path VARCHAR2(500),
host VARCHAR2(200),
port NUMBER,
service_name VARCHAR2(200),
username VARCHAR2(100),
password VARCHAR2(200),
addresses CLOB, -- JSON: Oracle 다중 주소 (TNS ADDRESS_LIST)
created_at TIMESTAMP DEFAULT SYSTIMESTAMP
);
19. ds_tools
ds_tools — 도구 정의
CREATE TABLE ds_tools (
id NUMBER GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
name VARCHAR2(100) NOT NULL UNIQUE,
description CLOB,
connection_id NUMBER REFERENCES ds_connections(id),
sql_query CLOB NOT NULL,
parameters CLOB, -- JSON array
columns CLOB, -- JSON array
rate_limit NUMBER DEFAULT 60,
cache_ttl NUMBER DEFAULT 0,
enabled NUMBER(1) DEFAULT 1,
tag VARCHAR2(100),
version NUMBER DEFAULT 1,
updated_by VARCHAR2(100),
updated_at TIMESTAMP DEFAULT SYSTIMESTAMP,
created_at TIMESTAMP DEFAULT SYSTIMESTAMP
);
22. ds_query_log
ds_query_log — 쿼리 실행 로그
CREATE TABLE ds_query_log (
id NUMBER GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
tool_name VARCHAR2(100) NOT NULL,
params CLOB,
row_count NUMBER,
duration_ms NUMBER,
cached NUMBER(1) DEFAULT 0,
error CLOB,
caller VARCHAR2(50) DEFAULT '',
created_at TIMESTAMP DEFAULT SYSTIMESTAMP
);
워크플로우 테이블
23. workflows
workflows
CREATE TABLE workflows (
id NUMBER GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
name VARCHAR2(200) NOT NULL,
description CLOB,
graph_data CLOB, -- JSON (nodes + edges)
created_by VARCHAR2(100),
updated_by VARCHAR2(100),
created_at TIMESTAMP DEFAULT SYSTIMESTAMP,
updated_at TIMESTAMP DEFAULT SYSTIMESTAMP
);
24. workflow_runs
workflow_runs — 실행 이력
CREATE TABLE workflow_runs (
id NUMBER GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
workflow_id NUMBER NOT NULL REFERENCES workflows(id),
status VARCHAR2(30) DEFAULT 'running',
result CLOB,
started_at TIMESTAMP DEFAULT SYSTIMESTAMP,
completed_at TIMESTAMP,
duration_ms NUMBER
);
26. kb_documents
kb_documents — Knowledge Base 문서
CREATE TABLE kb_documents (
id NUMBER GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
title VARCHAR2(200) NOT NULL,
content CLOB,
category VARCHAR2(100),
tags VARCHAR2(500),
author VARCHAR2(100),
chunk_count NUMBER DEFAULT 0,
topic VARCHAR2(200) DEFAULT '',
summary CLOB DEFAULT '',
keywords VARCHAR2(500) DEFAULT '',
structuring_trace CLOB DEFAULT '',
structuring_mode VARCHAR2(20) DEFAULT 'preserve',
created_at TIMESTAMP DEFAULT SYSTIMESTAMP,
updated_at TIMESTAMP DEFAULT SYSTIMESTAMP
);
AI Chat 테이블
30. ai_chat_sessions
ai_chat_sessions
CREATE TABLE ai_chat_sessions (
id VARCHAR2(36) PRIMARY KEY,
title VARCHAR2(200) NOT NULL,
author VARCHAR2(100),
status VARCHAR2(20) DEFAULT 'active',
created_at TIMESTAMP DEFAULT SYSTIMESTAMP,
updated_at TIMESTAMP DEFAULT SYSTIMESTAMP
);
31. ai_chat_messages
ai_chat_messages
CREATE TABLE ai_chat_messages (
id NUMBER GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
session_id VARCHAR2(36) REFERENCES ai_chat_sessions(id),
role VARCHAR2(20) NOT NULL,
content CLOB NOT NULL,
tool_calls CLOB,
created_at TIMESTAMP DEFAULT SYSTIMESTAMP
);
AI Chat 확장 + 시스템 테이블
33. question_flows
question_flows — 후속질문 흐름
CREATE TABLE question_flows (
id NUMBER GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
name VARCHAR2(200) NOT NULL,
description VARCHAR2(500),
category VARCHAR2(50),
steps CLOB NOT NULL, -- JSON: [{"question":"...", "keywords":["..."]}]
enabled NUMBER(1) DEFAULT 1,
created_by VARCHAR2(100),
created_at TIMESTAMP DEFAULT SYSTIMESTAMP,
updated_at TIMESTAMP DEFAULT SYSTIMESTAMP
);
CREATE INDEX idx_question_flows_enabled ON question_flows(enabled);
28. tool_requests
tool_requests — 도구 추가 요청
CREATE TABLE tool_requests (
id NUMBER GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
title VARCHAR2(200) NOT NULL,
description CLOB,
data_source VARCHAR2(200),
requested_by VARCHAR2(100),
session_id VARCHAR2(36),
status VARCHAR2(20) DEFAULT 'pending',
admin_note CLOB,
priority NUMBER DEFAULT 2,
created_at TIMESTAMP DEFAULT SYSTIMESTAMP,
updated_at TIMESTAMP DEFAULT SYSTIMESTAMP
);
CREATE INDEX idx_tool_requests_status ON tool_requests(status);
29. tool_request_history
tool_request_history -- 요청 상태 변경 이력
CREATE TABLE tool_request_history (
id NUMBER GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
request_id NUMBER NOT NULL,
old_status VARCHAR2(20),
new_status VARCHAR2(20) NOT NULL,
comment CLOB,
changed_by VARCHAR2(100),
created_at TIMESTAMP DEFAULT SYSTIMESTAMP
);
CREATE INDEX idx_tr_history_req ON tool_request_history(request_id);
27. system_settings
system_settings — 시스템 하이퍼파라미터
CREATE TABLE system_settings (
key VARCHAR2(100) PRIMARY KEY,
value VARCHAR2(500) NOT NULL,
category VARCHAR2(50) NOT NULL,
label VARCHAR2(200) DEFAULT '',
data_type VARCHAR2(20) DEFAULT 'int',
min_val NUMBER,
max_val NUMBER,
updated_at TIMESTAMP DEFAULT SYSTIMESTAMP,
updated_by VARCHAR2(100) DEFAULT ''
);
32. activity_log
activity_log — 사용자 활동 로그
CREATE TABLE activity_log (
id NUMBER GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
user_id NUMBER,
username VARCHAR2(50),
action VARCHAR2(50) NOT NULL, -- login/logout/create/update/delete/execute
target_type VARCHAR2(50), -- user/anomaly/rule/tool/workflow/knowledge/rca/setting/permission
target_id VARCHAR2(100),
target_name VARCHAR2(200),
details CLOB, -- JSON
ip_address VARCHAR2(50),
page VARCHAR2(50),
created_at TIMESTAMP DEFAULT SYSTIMESTAMP
);
CREATE INDEX idx_activity_log_user ON activity_log(user_id);
CREATE INDEX idx_activity_log_action ON activity_log(action);
CREATE INDEX idx_activity_log_time ON activity_log(created_at);
Playbook 테이블
34. countermeasures
countermeasures -- 대안/조치 플레이북
CREATE TABLE countermeasures (
id NUMBER GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
title VARCHAR2(200) NOT NULL,
category VARCHAR2(50) NOT NULL,
subcategory VARCHAR2(100),
rule_ids CLOB,
severity VARCHAR2(20),
description CLOB NOT NULL,
action_type VARCHAR2(30) DEFAULT 'manual',
action_config CLOB,
priority VARCHAR2(20) DEFAULT 'medium',
estimated_time VARCHAR2(50),
verification CLOB,
enabled NUMBER(1) DEFAULT 1,
created_at TIMESTAMP DEFAULT SYSTIMESTAMP,
updated_at TIMESTAMP DEFAULT SYSTIMESTAMP,
created_by VARCHAR2(50),
updated_by VARCHAR2(50)
);
CREATE INDEX idx_cm_category ON countermeasures(category);
사용자 프롬프트 테이블
35. user_prompts
user_prompts -- 사용자 개인 프롬프트
CREATE TABLE user_prompts (
id NUMBER GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
user_id NUMBER NOT NULL,
username VARCHAR2(100) NOT NULL,
title VARCHAR2(100) NOT NULL DEFAULT '내 프롬프트',
content CLOB DEFAULT '',
enabled NUMBER(1) DEFAULT 1,
version NUMBER DEFAULT 1,
created_at TIMESTAMP DEFAULT SYSTIMESTAMP,
updated_at TIMESTAMP DEFAULT SYSTIMESTAMP,
CONSTRAINT uq_user_prompts_user UNIQUE (user_id)
);
CREATE INDEX idx_user_prompts_user ON user_prompts(user_id);
36. user_prompt_versions
user_prompt_versions -- 프롬프트 버전 이력
CREATE TABLE user_prompt_versions (
id NUMBER GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
prompt_id NUMBER NOT NULL REFERENCES user_prompts(id),
version NUMBER NOT NULL,
title VARCHAR2(100) NOT NULL,
content CLOB NOT NULL,
change_note VARCHAR2(500) DEFAULT '',
created_by VARCHAR2(100) NOT NULL,
created_at TIMESTAMP DEFAULT SYSTIMESTAMP
);
CREATE INDEX idx_user_prompt_versions_prompt ON user_prompt_versions(prompt_id);
인덱스
테이블 생성 후 아래 인덱스를 실행하세요.
CREATE INDEX 모음
-- LLM 사용량
CREATE INDEX idx_llm_usage_time ON llm_usage_log(called_at);
CREATE INDEX idx_llm_usage_module ON llm_usage_log(module);
-- 규칙 변경 이력
CREATE INDEX idx_audit_rule ON rule_audit_log(rule_id);
CREATE INDEX idx_audit_time ON rule_audit_log(changed_at);
-- 이상
CREATE INDEX idx_anomalies_status ON anomalies(status);
CREATE INDEX idx_anomalies_detected ON anomalies(detected_at);
CREATE INDEX idx_anomalies_rule ON anomalies(rule_id);
CREATE INDEX idx_anomalies_correlation ON anomalies(correlation_id);
-- 워크플로우 실행
CREATE INDEX idx_wf_runs_wf ON workflow_runs(workflow_id);
CREATE INDEX idx_wf_runs_time ON workflow_runs(started_at);
-- Knowledge Base
CREATE INDEX idx_kb_docs_category ON kb_documents(category);
-- Tool Studio 감사
CREATE INDEX idx_tool_audit_tool ON tool_audit_log(tool_id);
CREATE INDEX idx_tool_audit_time ON tool_audit_log(changed_at);
CREATE INDEX idx_tool_ver_tool ON tool_versions(tool_id);
-- 워크플로우 감사
CREATE INDEX idx_wf_audit_wf ON workflow_audit_log(workflow_id);
CREATE INDEX idx_wf_audit_time ON workflow_audit_log(changed_at);
-- AI Chat
CREATE INDEX idx_ai_chat_sessions_status ON ai_chat_sessions(status);
CREATE INDEX idx_ai_chat_messages_session ON ai_chat_messages(session_id);
-- 도구 요청
CREATE INDEX idx_tool_requests_status ON tool_requests(status);
CREATE INDEX idx_tr_history_req ON tool_request_history(request_id);
-- 질문 흐름
CREATE INDEX idx_question_flows_enabled ON question_flows(enabled);
-- Playbook / 사용자 프롬프트
CREATE INDEX idx_cm_category ON countermeasures(category);
CREATE INDEX idx_user_prompts_user ON user_prompts(user_id);
CREATE INDEX idx_user_prompt_versions_prompt ON user_prompt_versions(prompt_id);
기본 데이터
최초 설치 후 필수 INSERT문입니다.
admin 계정
admin 계정 생성
-- 비밀번호는 bcrypt 해시로 교체하세요
INSERT INTO users (username, password, display_name, role, enabled)
VALUES ('admin', '$2b$12$...', '관리자', 'admin', 1);
FAB 도구 레지스트리
fab_tools 초기 데이터
INSERT INTO fab_tools (name, category, description) VALUES ('get_conveyor_load', 'logistics', '존별 컨베이어 부하율(%) 조회');
INSERT INTO fab_tools (name, category, description) VALUES ('get_transfer_throughput', 'logistics', '라인별 반송 처리량');
INSERT INTO fab_tools (name, category, description) VALUES ('get_bottleneck_zones', 'logistics', '대기시간 초과 병목존 감지');
INSERT INTO fab_tools (name, category, description) VALUES ('get_agv_utilization', 'logistics', 'AGV/OHT 상태별 대수/비율');
INSERT INTO fab_tools (name, category, description) VALUES ('get_flow_balance', 'wip', '공정별 유입/유출 밸런스');
INSERT INTO fab_tools (name, category, description) VALUES ('get_wip_levels', 'wip', '공정별 WIP vs 목표 비율');
INSERT INTO fab_tools (name, category, description) VALUES ('get_queue_length', 'wip', '스텝별 대기 LOT 수/대기시간');
INSERT INTO fab_tools (name, category, description) VALUES ('get_aging_lots', 'wip', '기준시간 초과 장기체류 LOT');
INSERT INTO fab_tools (name, category, description) VALUES ('get_wip_trend', 'wip', '시간별 WIP 변화 트렌드');
INSERT INTO fab_tools (name, category, description) VALUES ('get_equipment_status', 'equipment', '설비 현재 상태(RUN/IDLE/DOWN/PM)');
INSERT INTO fab_tools (name, category, description) VALUES ('get_equipment_utilization', 'equipment', '설비 가동률(%)');
INSERT INTO fab_tools (name, category, description) VALUES ('get_unscheduled_downs', 'equipment', '비계획정지 이력');
INSERT INTO fab_tools (name, category, description) VALUES ('get_pm_schedule', 'equipment', '예방보전 일정');
INSERT INTO fab_tools (name, category, description) VALUES ('get_equipment_alarms', 'equipment', '설비 알람 이력');
COMMIT;