반응형

DBA 실무 29

B-tree만 알던 내가 GIN 인덱스 보고 눈 돌아간 썰 (PostgreSQL 인덱스 완벽 정리)

B-tree만 알던 내가 GIN 인덱스 보고 눈 돌아간 썰 (PostgreSQL 인덱스 완벽 정리)테스트 환경: PostgreSQL 17, Rocky Linux 9 / Oracle 19c 비교 기준Oracle DBA에게 인덱스는 곧 B-tree입니다. 비트맵 인덱스도 있지만 OLTP에선 잘 안 쓰죠. 그래서 저도 "인덱스 = B-tree" 공식으로 15년을 살았습니다.그런데 PostgreSQL을 배우다가 이런 걸 봤습니다.-- JSONB 컬럼을 통째로 인덱싱?!CREATE INDEX idx_data ON events USING GIN (data);-- 10억 건 테이블 인덱스가 B-tree의 1/8500 크기?!CREATE INDEX idx_time ON logs USING BRIN (created_at..

Oracle 함수 그대로 쳤다가 에러 폭탄 맞은 썰 (PostgreSQL 함수 완벽 변환표)

Oracle 함수 그대로 쳤다가 에러 폭탄 맞은 썰 (PostgreSQL 함수 완벽 변환표)테스트 환경: PostgreSQL 17, Rocky Linux 9 / Oracle 19c 비교 기준PostgreSQL로 넘어온 첫 주, 저는 습관적으로 이렇게 쳤습니다.SELECT NVL(bonus, 0) FROM employees;그리고 돌아온 답: ERROR: function nvl(numeric, integer) does not exist"어? NVL이 없다고?"당황해서 DECODE를 쳤더니 또 에러. SYSDATE를 쳤더니 또 에러. FROM dual을 붙였더니 이번엔 dual 테이블이 없다네요. 그야말로 에러 폭탄이었습니다.Oracle DBA가 PostgreSQL에서 처음 마주하는 벽이 바로 이겁니다. S..

[PostgreSQL 시리즈 4편] psql 완벽 활용 + AI로 학습 가속

[PostgreSQL 시리즈 4편] psql 완벽 활용 + AI로 학습 가속- 테스트 환경: PostgreSQL 17, Rocky Linux 9 / Oracle 19cOracle DBA에게 SQL*Plus는 손에 붙은 도구입니다. DESC emp, SET LINESIZE 200, SPOOL result.log, login.sql… 눈 감고도 칩니다.그런데 psql 앞에 앉으면 막막합니다. DESC를 치면 에러가 나고, 컬럼 20개짜리 테이블을 조회하면 화면이 무너집니다. 문법은 3편까지 익혔는데 도구가 손에 안 붙는 상태입니다.이번 편은 그 간극을 메웁니다. 그리고 Phase 1의 마지막인 만큼, 앞으로 남은 학습을 AI로 가속하는 방법까지 함께 다룹니다. 핵심은 하나입니다. AI에게 묻고, psql로 ..

[PostgreSQL 시리즈 3편] DML과 트랜잭션 - Oracle UNDO vs PostgreSQL MVCC (시리즈 핵심)

[PostgreSQL 시리즈 3편] DML과 트랜잭션 - Oracle UNDO vs PostgreSQL MVCC (시리즈 핵심)테스트 환경: PostgreSQL 17, Rocky Linux 9 / Oracle 19c 이 시리즈에서 가장 중요한 한 편을 꼽으라면 이 글입니다.Oracle DBA가 PostgreSQL을 다룰 때 SQL 문법은 금방 익숙해집니다. 하지만 트랜잭션이 내부에서 어떻게 동작하는지는 근본적으로 다릅니다. 이 차이를 모르면 "왜 테이블이 안 줄어들지?", "왜 디스크가 계속 늘지?" 같은 문제에서 헤맵니다.핵심은 하나입니다. Oracle은 UNDO, PostgreSQL은 MVCC. 이 차이가 운영의 많은 것을 결정합니다.이번 편에서 다룰 내용입니다.DML 문법 비교 (INSERT/UPD..

ORA-00600 [3005]로 DB가 안 열릴 때 — 컨트롤파일 재생성 복구 기록

ORA-00600 [3005]로 DB가 안 열릴 때 — 컨트롤파일 재생성 복구 기록Oracle 10.2.0.3 (32-bit Windows) / NOARCHIVELOG 환경에서 ALTER DATABASE OPEN이 ORA-00600: internal error code, arguments: [3005], [1], [345], [3], [0], [0], [], [] 로 실패하던 DB를 컨트롤파일 재생성으로 살린 기록입니다. 중간에 판단을 한 번 잘못했고, 그 부분도 그대로 남겼습니다. 1. 상황Oracle Database 10g Enterprise Edition 10.2.0.3.0 — 32-bit WindowsNOARCHIVELOG 모드데이터파일 21개, 온라인 redo 3그룹(각 500MB)마지막 백업 ..

[PostgreSQL 시리즈 2편] 자료형과 DDL 완벽 비교 - Oracle 타입을 PostgreSQL로 옮기기

[PostgreSQL 시리즈 2편] 자료형과 DDL 완벽 비교 - Oracle 타입을 PostgreSQL로 옮기기- 테스트 환경: PostgreSQL 17, Rocky Linux 9 / Oracle 19cPostgreSQL로 넘어온 Oracle DBA가 실무에서 가장 먼저 부딪히는 것이 자료형입니다. NUMBER, VARCHAR2, DATE... 익숙한 타입들이 PostgreSQL에선 다른 이름이거나, 아예 개념이 다릅니다. 여기서 잘못 매핑하면 데이터 정합성 문제나 성능 저하로 이어집니다.이번 편에서는 1편(첫걸음)에 이어 실제 테이블을 만들며 다음을 다룹니다.Oracle vs PostgreSQL 자료형 완벽 매핑표숫자·문자·날짜 타입의 핵심 차이★ SERIAL vs IDENTITY vs 시퀀스 (자동..

PostgreSQL 시리즈 1편] Oracle DBA를 위한 PostgreSQL 첫걸음 - 아키텍처부터 첫 접속까지

[PostgreSQL 시리즈 1편] Oracle DBA를 위한 PostgreSQL 첫걸음 - 아키텍처부터 첫 접속까지- 테스트 환경: PostgreSQL 17, Rocky Linux 9 / Oracle 19cOracle을 오래 다뤄온 DBA에게 PostgreSQL은 낯설면서도 익숙한 데이터베이스입니다. SQL은 대부분 통하는데, 아키텍처와 운영 방식은 꽤 다릅니다. 이 차이를 모르고 Oracle 습관대로 접근하면 곳곳에서 헤맵니다.이 시리즈는 15년차 Oracle DBA가 PostgreSQL로 넘어가며 정리한 실전 노트입니다. 모든 개념을 Oracle과 비교하되, PostgreSQL 중심으로 설명합니다. Oracle을 아는 분이라면 훨씬 빠르게 습득하실 수 있습니다.이번 1편에서 다룰 내용입니다.왜 지금..

PostgreSQL, 설치할 때 정한 걸로 3년을 삽니다 — 설치부터 초기 설정까지

PostgreSQL, 설치할 때 정한 걸로 3년을 삽니다 — 설치부터 초기 설정까지PostgreSQL 실무 시리즈 ① 이 글의 모든 명령어와 출력은 실제로 실행한 결과입니다.검증 환경: PostgreSQL 16.2 / Ubuntu 22.04 / UTF8 PostgreSQL 설치는 쉽습니다. apt install postgresql 한 줄이면 끝나니까요.문제는 그 다음입니다. 설치 시점에 정하고 나면 두 번 다시 못 바꾸는 옵션이 몇 개 있는데, 하필 그게 기본값으로 두면 안 되는 것들입니다. 그리고 그 대가는 보통 2~3년 뒤, 데이터가 수백 GB로 불어난 다음에 청구됩니다.이 글에서는 설치부터 첫 접속까지를 다루되, "왜 이렇게 하는가" 에 집중합니다. 명령어만 필요하시면 맨 아래 체크리스트로 바로 가..

[오라클 운영] RMAN 백업과 복구 완벽 가이드 - 운영 환경 표준 패턴부터 5가지 복구 시나리오까지

[오라클 운영] RMAN 백업과 복구 완벽 가이드 - 운영 환경 표준 패턴부터 5가지 복구 시나리오까지테스트 환경: Oracle 19c / 21c, Oracle Linux 8DBA가 가장 두려워하는 순간이 있습니다. "DB가 안 올라옵니다." 운영팀에서 새벽 4시에 전화가 옵니다. 데이터 손상, 디스크 장애, 컨트롤 파일 손실. 이때 DBA의 진짜 실력은 평소 백업이 얼마나 잘 되어 있느냐로 결정됩니다.오라클은 RMAN(Recovery Manager)이라는 표준 백업 도구를 제공합니다. 그런데 한국어 자료는 대부분 "RMAN으로 백업하는 법" 까지만 다루고, "운영 환경에서 어떻게 표준화하고 어떻게 복구하는가" 는 산발적입니다.이 글에서는 다음을 종합 정리했습니다.RMAN의 본질과 다른 백업과의 차이운영..

[리눅스 운영] 디스크 용량 부족 (df 100%) 해결 - 5가지 원인과 체계적 진단법 (DBA 환경 특화)

[리눅스 운영] 디스크 용량 부족 (df 100%) 해결 - 5가지 원인과 체계적 진단법 (DBA 환경 특화)테스트 환경: Oracle Linux 8 / RHEL 8 / Ubuntu 22.04새벽 3시. "ALERT: /u01 사용량 98%" 모니터링 알람이 옵니다. 1시간 후엔 운영 DB가 멈출 수 있습니다. 어디부터 정리해야 할까요?리눅스 디스크 용량 부족은 가장 흔하면서도 가장 위험한 운영 장애입니다. 무작정 rm을 휘두르면 서비스가 죽고, 가만히 있으면 디스크가 100%가 됩니다. 더 까다로운 점은 다음 같은 상황이 자주 발생한다는 것입니다.df는 100%인데 du로 보면 공간이 안 차 있음 (어디가 차지하고 있는 건가?)큰 파일을 지웠는데 공간이 회수되지 않음공간은 있는데 "No space le..

[오라클 에러] ORA-01555 snapshot too old - 5가지 원인과 해결방법 (UNDO 일관성 읽기 모델 완벽 정리)

[오라클 에러] ORA-01555 snapshot too old - 5가지 원인과 해결방법 (UNDO 일관성 읽기 모델 완벽 정리)테스트 환경: Oracle 11g / 12c / 19c / 21c월말 결산 시즌, 새벽 4시. 4시간 동안 돌던 결산 리포트가 마지막 단계에서 ORA-01555: snapshot too old 로 실패합니다. 처음부터 다시 돌리면 또 4시간. 그동안 운영팀과 회계팀에서 전화가 빗발칩니다.ORA-01555는 DBA가 가장 자주 마주치면서도 가장 자주 오해하는 에러입니다. "UNDO 늘리면 된다" 는 단순한 답은 절반만 맞습니다. 어떨 때는 UNDO를 10배 늘려도 재발하고, 어떨 때는 SQL 한 줄만 바꿔도 해결됩니다.이번 글에서는 ORA-01555의 본질인 읽기 일관성(Rea..

[오라클 운영] Oracle 12c 멀티테넌트(CDB/PDB) 운영 가이드 - 상태 관리부터 Unplug/Plug까지

[오라클 운영] Oracle 12c 멀티테넌트(CDB/PDB) 운영 가이드 - 상태 관리부터 Unplug/Plug까지테스트 환경: Oracle 12c / 19c / 21c / 23ai12c부터 도입된 멀티테넌트 아키텍처는 19c에서 사실상 표준이 되었고, 21c부터는 비-CDB(non-CDB) 모드가 desupport되어 CDB가 유일한 옵션입니다. 이제 오라클을 다룬다면 CDB/PDB 환경을 피할 수 없어요.그런데 한국어 운영 자료의 상당수가 11g 시절 비-CDB 환경 기준이라, 처음 CDB 환경을 마주한 DBA는 다음과 같은 질문에 막힙니다.접속했더니 갑자기 객체가 안 보임 (다른 컨테이너에 있는 줄도 모르고)DB 재시작 후 ORA-12514 발생 (이전 글에서 다룬 PDB MOUNTED 상태)사용..

[오라클 에러] ORA-12154 TNS:could not resolve the connect identifier - 5가지 원인과 해결방법 (접속 에러 3종 비교)

[오라클 에러] ORA-12154 TNS:could not resolve the connect identifier - 5가지 원인과 해결방법 (접속 에러 3종 비교)테스트 환경: Oracle Client 11g / 12c / 19c / 21c, Oracle Linux 8 / Windows 11ORA-12154는 오라클 클라이언트가 가장 먼저 마주칠 수 있는 접속 에러입니다. ORA-12541(리스너 없음)이나 ORA-12514(서비스 모름)이 "서버에 도달했는데 안 됨"이라면, ORA-12154는 "서버에 도달조차 못함" 의 의미입니다.이 글로 본 블로그의 접속 에러 3종 시리즈가 완성됩니다.ORA-12154: 별칭(connect identifier) 자체를 못 풀어서 어디로 가야 할지 모름ORA-125..

[오라클 운영] ROLE 기반 권한 관리 완벽 가이드 - PL/SQL의 함정과 INVOKER rights까지

[오라클 운영] ROLE 기반 권한 관리 완벽 가이드 - PL/SQL의 함정과 INVOKER rights까지테스트 환경: Oracle 11g / 12c / 19c / 21c오라클 권한 관리에서 ROLE은 핵심 도구입니다. 사용자가 100명, 객체가 1,000개인 환경에서 직접 GRANT를 일일이 관리하면 운영이 마비됩니다. ROLE을 쓰면 권한을 그룹화해서 사용자 단위가 아닌 역할 단위로 관리할 수 있습니다.그런데 ROLE을 운영하다 보면 다음과 같은 황당한 상황을 만나게 됩니다.분명히 ROLE에 SELECT 권한을 줬는데 프로시저가 ORA-00942똑같은 SQL인데 SQL*Plus에서는 되고 PL/SQL에서는 안 됨ROLE을 부여했는데 다음 세션에서 권한이 사라짐직접 GRANT로 바꾸니 갑자기 해결됨이..

[오라클 운영] DBMS_SCHEDULER 캘린더 표현식 완벽 정리 - FREQ, BYHOUR, BYDAY 모든 활용

[오라클 운영] DBMS_SCHEDULER 캘린더 표현식 완벽 정리 - FREQ, BYHOUR, BYDAY 모든 활용테스트 환경: Oracle 11g / 12c / 19c / 21cDBMS_SCHEDULER로 작업을 등록할 때 가장 헷갈리는 부분이 repeat_interval 표현식입니다. 단순한 "매일 새벽 2시"는 쉽지만, "매월 마지막 평일 18시", "매분기 첫 번째 월요일", "공휴일 제외 평일 9시" 같은 요구사항을 받으면 막막해집니다.이 글은 이전 글 (DBMS_SCHEDULER 6시간 배치 예제)의 후속편입니다. 거기서는 한 가지 시나리오만 다뤘다면, 이번 글은 운영 환경에서 자주 만나는 모든 스케줄 표현식을 카탈로그처럼 정리했습니다. 책갈피해 두고 필요할 때마다 꺼내 쓰는 레퍼런스 글로 ..

[오라클 에러] ORA-04031 unable to allocate shared memory - 5가지 원인과 해결방법 (단편화 진단 포함)

[오라클 에러] ORA-04031 unable to allocate shared memory - 5가지 원인과 해결방법 (단편화 진단 포함)테스트 환경: Oracle 11g / 12c / 19c / 21c새벽 3시. 운영 DB 모니터링 알람이 울립니다. 알람 내용은 "ORA-04031: unable to allocate XXXX bytes of shared memory". 애플리케이션이 멈췄고, 신규 접속도 안 됩니다. DB가 사실상 frozen 상태입니다.ORA-04031은 DBA가 운영 환경에서 가장 두려워하는 에러 중 하나입니다. 단순히 "메모리 부족"이라고 생각하면 절대 풀리지 않습니다. SGA를 64GB로 늘렸는데도 며칠 후 재발하는 경우가 흔합니다.이번 글에서는 ORA-04031의 진짜 정체를..

[오라클 에러] ORA-00942 table or view does not exist - 6가지 원인과 해결방법 (권한과 PL/SQL 케이스까지)

[오라클 에러] ORA-00942 table or view does not exist - 6가지 원인과 해결방법 (권한과 PL/SQL 케이스까지)테스트 환경: Oracle 11g / 12c / 19c / 21cORA-00942는 오라클에서 가장 자주 마주치는 에러 중 하나입니다. 메시지가 단순해서 "그 객체가 없나 보다" 하고 넘기기 쉽지만, 실제로는 객체가 존재하는데도 ORA-00942가 나는 케이스가 절반 이상입니다.특히 다음 상황에서 자주 발생합니다.분명히 테이블이 있는데 SELECT가 안 됨다른 사용자는 되는데 내 계정만 안 됨어제까지 잘 되던 프로시저가 갑자기 ORA-00942쿼리는 잘 되는데 PL/SQL 안에서만 ORA-00942이 글에서는 ORA-00942의 6가지 원인을 분류하고, 권한 부..

[오라클 에러] ORA-12514 TNS:리스너가 서비스를 알지 못함 - 5가지 원인과 해결방법 (PDB 환경 포함)

[오라클 에러] ORA-12514 TNS:리스너가 서비스를 알지 못함 - 5가지 원인과 해결방법 (PDB 환경 포함)테스트 환경: Oracle 12c / 19c / 21c / 23ai, Oracle Linux 8, Windows Server 2019ORA-12514는 ORA-12541과 함께 오라클 접속 시 가장 자주 마주치는 에러입니다. 두 에러는 메시지가 비슷해서 자주 혼동되는데, 원인은 완전히 다릅니다.ORA-12541: 리스너 자체가 죽었거나 응답 안 함ORA-12514: 리스너는 살아있지만 요청한 서비스를 모름특히 12c부터 도입된 멀티테넌트(CDB/PDB) 환경에서는 ORA-12514가 폭증했습니다. 19c 이상에서 운영 중인 환경이라면 더더욱 자주 만나는 에러입니다.이번 글에서는 ORA-12..

[오라클 실무] DBMS_SCHEDULER로 프로시저를 6시간 단위 실행하기 - 동적 인자 전달 완벽 예제

[오라클 실무] DBMS_SCHEDULER로 프로시저를 6시간 단위 실행하기 - 동적 인자 전달 완벽 예제테스트 환경: Oracle 12c / 19c / 21cDBMS_SCHEDULER로 배치 작업을 등록할 때 가장 자주 막히는 부분이 "실행할 때마다 바뀌는 인자(예: 어제/오늘 날짜)를 어떻게 동적으로 전달하느냐" 입니다.SET_JOB_ARGUMENT_VALUE로 인자를 박으면 정적 값이 고정되어 매일 같은 값으로 실행되고, 그렇다고 매번 작업을 다시 만들 수도 없습니다. 정답은 PLSQL_BLOCK 타입으로 호출하면서 인자 평가를 작업 액션 안으로 넣는 것입니다.이번 글에서는 실제 운영 환경에서 자주 나오는 케이스 — "PROC_TAX_PURCHASE_A10(어제, 오늘)을 매일 04시, 10시, 1..

[오라클] DBMS_JOB과 DBMS_SCHEDULER 차이점 - 언제 뭘 써야 할까? (19c 변환 동작까지)

오라클 DBMS_JOB과 DBMS_SCHEDULER 차이점 - 언제 뭘 써야 할까? (19c 변환 동작까지)테스트 환경: Oracle 11g / 12c / 19c / 21c오라클에서 작업을 자동화할 때 가장 많이 검색되는 질문 중 하나가 "DBMS_JOB과 DBMS_SCHEDULER, 둘 다 있는데 뭐가 다른가?" 입니다.결론부터 말씀드리면, 2026년 현재 시점에서 새로 만드는 작업은 100% DBMS_SCHEDULER를 써야 합니다. DBMS_JOB은 12cR2부터 deprecated되었고, 19c부터는 사용해도 내부적으로 DBMS_SCHEDULER로 변환되어 동작합니다.그렇다면 왜 아직도 운영 환경에 DBMS_JOB이 살아있고, 두 개의 차이를 알아둬야 하는 걸까요? 이번 글에서 둘의 핵심 차이, ..

반응형