기본 콘텐츠로 건너뛰기

6월, 2025의 게시물 표시

[Oracle] 오라클 JOB 및 프로시저 조회 방법 정리 (DBMS_JOB, SCHEDULER, PROCEDURE)

오라클(Oracle) 데이터베이스에서 등록된 JOB과  프로시저(PROCEDURE) 를 확인하고 싶을 때가 있습니다. 운영 중인 배치 작업이 정상 실행되고 있는지, 누가 어떤 프로시저를 작성했는지 등은 시스템 안정성과 운영 효율성에 중요한 요소입니다. 이 포스팅에서는 Oracle DB에서  등록된 JOB(DBMS_JOB / DBMS_SCHEDULER) 과  프로시저(PROCEDURE) 를 쉽게 조회할 수 있는 SQL 문을 정리해 드립니다. ✅ 1. 오라클 JOB 조회 방법 Oracle에서는 두 가지 방식으로 JOB이 등록될 수 있습니다 DBMS_JOB 방식 (오래된 방식) DBMS_SCHEDULER 방식 (Oracle 10g 이상 권장 방식) 🔹 1-1. DBMS_JOB으로 등록된 JOB 조회 SELECT JOB, SCHEMA_USER, LAST_DATE, NEXT_DATE, INTERVAL , BROKEN, WHAT FROM DBA_JOBS; JOB: JOB 번호 SCHEMA_USER: 소유자 WHAT: 실행할 PL/SQL 코드 INTERVAL: 실행 주기 👉 참고: 현재 사용자만 조회하려면 USER_JOBS 사용 🔹 1-2. DBMS_SCHEDULER로 등록된 JOB 조회 SELECT OWNER, JOB_NAME, ENABLED, STATE, REPEAT_INTERVAL, JOB_TYPE, JOB_ACTION FROM DBA_SCHEDULER_JOBS; JOB_NAME: 스케줄러 JOB 이름 REPEAT_INTERVAL: 실행 간격 (cron 스타일) JOB_ACTION: 실행할 프로시저, SQL 등 👉 참고: USER_SCHEDULER_JOBS로 현재 사용자 JOB만 확인 가능 ✅ 2. 오라클 프로시저(PROCEDURE) 조회 방법 Oracle DB에 등록된 프로시저는 다음 SQL로 확인할 수 있습니다. 🔹 2-1. 전체 프로시저 조회 (접근 권한 있는 모든 것) SEL...

🔍 Oracle SHRINK 기법 완벽 정리: 공간 회수와 성능 최적화를 한 번에

  🧠 1. SHRINK란 무엇인가? Oracle의  SHRINK SPACE  기능은  세그먼트(테이블, 인덱스 등)에 할당된 여유 공간을 줄이는 작업 입니다. 특히 DML(INSERT/DELETE 등) 작업이 많은 OLTP 환경에서  불필요하게 커진 테이블의 공간을 줄이고 I/O 성능을 향상 시킬 수 있는 유용한 방법입니다. 🏗️ 2. 동작 원리 DELETE 작업 은 데이터를 지워도 실제 테이블 크기는 줄어들지 않습니다. SHRINK은 내부적으로 데이터를 재정렬하고  HWM(High Water Mark)  아래로 데이터를 밀어 넣은 후, 불필요한 블록을 반환합니다. 반환된 블록은  tablespace에 반환 되어 다른 객체에서 재사용 가능해집니다. ⚙️ 3. SHRINK 사용 조건 조건 설명 ASSM(Automatic Segment Space Management) 사용 SHRINK는 ASSM이 설정된 tablespace에서만 사용 가능 ROW MOVEMENT 허용 테이블에서 행이 재배치되므로, ROW MOVEMENT를 ENABLE 해야 함 테이블이 파티션이 아닐 경우 비파티션 테이블은 바로 shrink 가능 (파티션 테이블은 개별 파티션 단위 shrink 필요) 💻 4. SHRINK 사용 예제 1) 준비: ROW MOVEMENT 활성화 ALTER TABLE employees ENABLE ROW MOVEMENT ; 2) 테이블 SHRINK (압축 + 공간 반환) ALTER TABLE employees SHRINK SPACE ; 🔁 이 명령은  데이터를 재배치한 뒤 HWM을 낮추고 여유 공간을 반환 합니다. 3) 단계적 SHRINK (단계적으로 작업할 경우) ALTER TABLE employees SHRINK SPACE COMPACT ;   -- 재배치만 수행 ALTER TABLE employees SHRINK SP...

JDBC를 이용하여 오라클 데이터베이스 이중화 설정

  JDBC를 이용하여 오라클 데이터베이스 이중화를 설정하려면 여러 가지 방법이 있습니다. 그 중에서 가장 흔히 사용되는 방법은 JDBC URL에 이중화 설정을 포함하는 것입니다. 오라클에서는 이러한 설정을 위해 "JDBC Thin Driver"를 사용하며, 이중화를 위해 두 가지 주요 방법을 제공합니다: Oracle RAC(Real Application Clusters) : 여러 개의 오라클 인스턴스를 하나의 논리적 데이터베이스로 구성하는 클러스터 환경입니다. 이 환경에서는 자동으로 인스턴스 간 연결을 관리할 수 있습니다. Oracle Data Guard : 주 데이터베이스와 하나 이상의 대기 데이터베이스로 구성된 물리적 또는 논리적 복제 환경입니다. 여기서는 각 오라클 인스턴스에 대해 자동으로 페일오버(failover)를 설정하는 방법을 설명하겠습니다. JDBC URL을 이용한 이중화 설정 1. TNS 설정을 이용한 이중화 설정 String url = "jdbc:oracle:thin:@(DESCRIPTION="             + "(ADDRESS_LIST="             + "(ADDRESS=(PROTOCOL=TCP)(HOST=primary-db-host)(PORT=1521))"             + "(ADDRESS=(PROTOCOL=TCP)(HOST=secondary-db-host)(PORT=1521))"             + ")"      ...

📘 데이터 거래사 자격증이란?

정식 명칭:  데이터 거래사 (Data Broker Specialist) 주관 기관:  한국데이터산업진흥원 (K-DATA) 자격종류:  민간자격 (등록번호: 제2021-002464호) 취득 목적 데이터를 사고파는 과정에 필요한  법률, 기술, 윤리, 실무 역량 을 갖춘 전문가 양성 데이터 유통 시장의 신뢰도와 전문성  확보 📝 시험 구성 구분 과목 주요 내용 1과목 데이터 이해 데이터의 개념, 유형, 가치, 품질 등 2과목 데이터 유통 및 거래 거래 절차, 계약, 표준화, 가격산정 등 3과목 데이터 관련 법제 개인정보보호법, 데이터3법, 저작권 등 4과목 데이터 거래 실무 실제 거래 사례, 플랫폼 활용, 실습 중심 총 4과목 필기시험 , 일부는 실무형 문제 포함 합격 기준:  과목별 40점 이상, 평균 60점 이상 🗓️ 응시 정보 응시 자격:  제한 없음 (누구나 가능) 시험 일정:  연 1~2회 (보통 상반기/하반기) 응시료:  약 5~6만 원 수준 응시 방법:  오프라인 시험 (일부 CBT 병행 중) 📚 추천 학습 방법 K-DATA 제공  공식 교육 과정  수강 데이터 거래 관련 실무 경험 (데이터 마켓플레이스 사용 등) 기출문제/모의고사  연습 🎯 취득 후 진로 데이터 판매/유통 기업 데이터 마켓플레이스 운영사 공공기관 및 지자체의 데이터 담당자 스타트업의 데이터 비즈니스 기획자 🗓️ 시험 일정 현재(2025년 4월 4일) 기준으로,  데이터 거래사  자격증의 정확한 시험 일정은 공식적으로 발표되지 않았습니다. 이 자격증은  등록 교육 을 이수하고 자격을 신청하는 방식으로 운영되며, 정기적인 시험 일정이 아닌  교육 일정 에 따라 진행됩니다.​ 교육 일정 확인 방법: 한국데이터산업협회 데이터거래사 공식 홈페이지  방문 홈페이지:  http://datatrade.k...

🚨 MongoDB TTL 인덱스 오작동 사례 분석! 자동 삭제가 안 되는 이유는?

  🧨 사례 1. "TTL 인덱스를 만들었는데 데이터가 지워지지 않아요" 💬 문제 상황 db.logs.createIndex({ createdAt : 1 }, { expireAfterSeconds : 3600 }) 인덱스는 정상적으로 생성됨 시간이 지나도 문서가  삭제되지 않음 🕵️ 원인 분석 ✅ createdAt 필드가  Date 타입이 아님 MongoDB TTL은 필드가 ISODate, new Date() 형식이 아니면 작동하지 않음 ✅ 해결 방법 // 잘못된 예 { createdAt : "2025-06-29T10:00:00Z" } // 문자열 ❌ // 올바른 예 { createdAt : ISODate( "2025-06-29T10:00:00Z" ) } // Date 타입 ✅ 🔧 TTL 인덱스는  문자열/숫자 필드에서는 절대 작동하지 않음! 🧨 사례 2. "일부 문서만 TTL 삭제가 안 됨" 💬 문제 상황 1시간 TTL 인덱스를 적용했는데, 일부 문서만 남아 있음 🕵️ 원인 분석 ✅ createdAt 필드가 없는 문서 TTL은 해당 필드가 존재하지 않으면  대상에서 제외 함 ✅ 해결 방법 컬렉션 내 모든 문서에 TTL 기준 필드(createdAt)이  반드시 존재 하도록 보장 또는 createdAt이 null일 경우를 감지하여 사전 처리 🧨 사례 3. "삭제 타이밍이 너무 늦어요" 💬 문제 상황 expireAfterSeconds: 600 설정했는데 삭제가 15분~20분 후에 발생 🕵️ 원인 분석 ✅ TTL은 실시간이 아니라, MongoDB 내부  백그라운드 스케줄러 에 의해 동작 → 기본적으로  60초 간격으로 TTL 스캔 → 시스템 부하 또는 locking 상황이면  딜레이 발생 ✅ 해결 방법 TTL은  정확한 시간 보장을 하지 않음 만약 정확한 삭제 시간이 ...

ORA-14400: inserted partition key does not map to any partition

  🧠 오류 메시지 해석 ORA-14400: inserted partition key does not map to any partition 이 메시지는  파티션 테이블에 데이터를 INSERT할 때, 해당 데이터가 어떤 파티션에도 속하지 않을 경우 발생 합니다. ✅ 즉,  Oracle이 "이 데이터 어디다 넣어야 할지 모르겠어!" 라고 말하는 것과 같습니다. 🏗️ 오류 재현 예제 다음은 sale_date를 기준으로 RANGE 파티션을 나눈 테이블입니다 CREATE TABLE sales ( sale_id NUMBER , sale_date DATE ) PARTITION BY RANGE (sale_date) ( PARTITION p_2024 VALUES LESS THAN ( TO_DATE ( '2025-01-01' , 'YYYY-MM-DD' )), PARTITION p_2025 VALUES LESS THAN ( TO_DATE ( '2026-01-01' , 'YYYY-MM-DD' )) ); 이제, 아래 INSERT 문을 실행한다고 해보겠습니다 INSERT INTO sales VALUES ( 1 , TO_DATE ( '2026-12-01' , 'YYYY-MM-DD' )); 🔻 결과는? ORA-14400: inserted partition key does not map to any partition 🙅‍♂️ 왜?  2026-12-01 은 현재 정의된 파티션의 범위(2026-01-01 미만)보다 크기 때문입니다. 🛠️ 해결 방법 ✅ 1. 누락된 파티션 추가하기 필요한 파티션이 없다면 추가해 주세요 ALTER TABLE sales ADD PARTITION p_2026 VALUES LESS THAN ( TO_DATE ( '2027-01-01' , 'YYYY-MM-DD' )); 이...