반응형

DBA 실무 21

[오라클 운영] 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이 살아있고, 두 개의 차이를 알아둬야 하는 걸까요? 이번 글에서 둘의 핵심 차이, ..

[오라클 에러] ORA-28000 계정이 잠겼습니다 - 잠금 해제부터 재발 방지까지 (실무 DBA 정리)

[오라클 에러] ORA-28000 계정이 잠겼습니다 - 잠금 해제부터 재발 방지까지 (실무 DBA 정리)테스트 환경: Oracle 11g / 12c / 19c / 21cORA-28000은 운영 DB에서 가장 자주 발생하는 계정 관련 에러입니다. "그냥 풀어주면 끝"이라고 생각하기 쉽지만, 풀어줘도 1분 만에 다시 잠기는 케이스가 운영 환경에선 매우 흔합니다.이번 글에서는 ORA-28000의 4가지 원인을 분류하고, 잠금 해제뿐 아니라 "왜 잠겼는지" 추적하는 방법, 그리고 재발 방지를 위한 실무 가이드까지 정리했습니다. 특히 자동화 스크립트나 애플리케이션이 잘못된 비밀번호로 계속 시도해서 계정이 매일 잠기는 상황에 대한 진단법은 다른 글에서 잘 다루지 않는 부분입니다.급하신 분은 빠른 잠금 해제 섹션부터..

[오라클 에러] ORA-01017 사용자명/비밀번호 무효 - 6가지 원인과 해결방법 (12c, 19c, 21c 차이까지)

[오라클 에러] ORA-01017 사용자명/비밀번호 무효 - 6가지 원인과 해결방법 (12c, 19c, 21c 차이까지)테스트 환경: Oracle 11g / 12c / 19c / 21c DBA 업무 중 가장 자주 받는 문의가 "비밀번호 분명히 맞는데 ORA-01017이 떠요" 입니다. 단순 오타라면 한 번에 풀리겠지만, 오라클 버전별 인증 방식이 다르고 특수문자 처리 문제까지 겹치면서 의외로 시간을 잡아먹는 에러입니다.특히 12c 이상에서 비밀번호 대소문자 구분이 강제되고, 21c부터는 케이스 무시 옵션 자체가 제거되면서 예전 매뉴얼대로 처리하다 막히는 경우가 늘었습니다.이번 글에서는 ORA-01017의 6가지 원인을 분류하고, 버전별 차이점까지 정리했습니다. 에러 메시지 전문ORA-01017: inva..

[오라클 에러] ORA-12541 TNS 리스너가 없습니다 - 5가지 원인과 해결방법 (실무 DBA 정리)

[오라클 에러] ORA-12541 TNS 리스너가 없습니다 - 5가지 원인과 해결방법 (실무 DBA 정리)테스트 환경: Oracle 19c / Windows Server 2019 / Oracle Linux 8오라클 접속 시 가장 자주 마주치는 에러 중 하나가 바로 ORA-12541입니다. 어제까지 멀쩡히 접속되던 DB에 갑자기 연결이 안 되거나, 신규 클라이언트에서 접속이 안 될 때 이 에러가 뜹니다.실무에서 운영 DB를 관리하면서 이 에러를 수십 번 마주쳤는데, 원인이 의외로 다양합니다. 단순히 "리스너 재시작"만으로 해결되지 않는 경우도 많아서, 이번 글에서는 5가지 원인을 분류하고 각각의 해결 방법까지 정리했습니다.급하신 분은 아래 빠른 해결 순서부터 보세요.에러 메시지 전문ORA-12541: TN..

[MSSQL] TABLE 컬럼 추가/변경 방법

[MSSQL]  TABLE 컬럼 추가/변경 방법 1. TABLE 컬럼 추가ALTER TABLE [테이블명] ADD [컬럼명] [변수타입]예)ALTER TABLE DBO.EMP ADD YN_USE NVARCHAR(5) 2. TABLE 컬럼 변경ALTER TABLE [테이블명] ALTER COLUMN [컬럼명] [변경타입]예)ALTER TABLE DBO.EMP ALTER COLUMN YN_USE NVARCHAR(10) 3. TABLE 컬럼 삭제ALTER TABLE [테이블명] DROP COLUMN [컬럼명]예)ALTER TABLE DBO.EMP DROP COLUMN YN_USE  4. TABLE 컬럼 초기화 및 삭제- NOT NULL, DEFAULT 를 사용해서 초기화 설정입니다.- NOT NULL,  DE..

MSSQL TABLE 백업/복구 (특정테이블 CMD 백업복구)

MSSQL 특정테이블 CMD 백업/복구- 빠른시간에 대량의 큰 테이블자료 이관시 사용하면 용의합니다.(1) 특정테이블 백업BCP [원복DB명].[DBO].[테이블명] OUT 백업파일명 -c -U사용자ID -P패스워드- 백업파일명 : 백업하고자 생성될 파일명 (사용자가 임의로 정의함)(2) 특정테이블 복구BCP [새로운DB명].[DBO].[테이블명] IN 복구파일명 -c -U사용자ID -P패스워드- 복구파일명 : 기존에 특정테이블을 백업한 백업파일명 입니다.

MSSQL 테이블 복사 (Table Copy)

MSSQL 테이블 복사 (Table Copy)테이블 복사 4가지 (1) 새테이블 생성 + 데이터 복사 (2) 새테이블 생성 + 데이터 제외 (3) 기존 테이블 + 전체 데이터 복사 (4) 기존 테이블 + 특정 데이터 복사 (1) 새테이블 생성 + 데이터 복사SELECT * INTO [신규복사 TABLE명] FROM [원본 TABLE명]  (2) 새테이블 생성 + 데이터 제외SELECT * INTO [신규복사 TABLE명] FROM [원본 TABLE명] WHERE 1 = 2 (3) 기존 테이블 + 전체 데이터 복사INSERT INTO [복사할 기존 TABLE명]SELECT * FROM [원본 TABLE명]또는INSERT (col1, col2, col3, ...) INTO [복사할..

오라클(Oracle) 데이터 타입

1. 오라클(Oracle) 데이터 타입 - CHAR : 고정길이 문자 DATA를 4000BYTE 저장  - VARCHAR2 : 가변길이 문자 DATA를 4000BYTE 저장  - NUMBER : 가변길이 숫자값을 -38 ~ +38자리수를 저장, (자릿수/2)+1 ,number(1)는 (1/2)+1 = 1.5 반올림해서 2byte가 됨.  - DATE : 날짜를 저장  - TIMESTAMP : 년, 월, 일, 시, 분, 초, mili-second까지 보여준다.  - CLOB :  BINARY DATA를 4GB 저장, 문자 대형 객체(Character). Oracle Server는 CLOB과 VARCHAR2 사이에 암시적 변환을 수행.  - BLOB : 이진 대형 객체 (Binary). 이미지, 동영상, M..

DB 전체/테이블 별 용량 조회

DB 테이블별 용량 조회방법1> 전체 용량SELECT b.groupname AS [File Group],    Name,    Filename,     CONVERT (Decimal(15,2), ROUND(a.Size/128.0, 2)) [할당된 용량 (MB)],     CONVERT (Decimal(15,2) , ROUND(FILEPROPERTY(a.Name,'SpaceUsed')/128.0, 2)) AS [사용중인 용량 (MB)],     CONVERT (Decimal(15,2) , ROUND((a.Size - FILEPROPERTY(a.Name,'SpaceUsed'))/128.0, 2)) AS [사용가능한 용량 (MB)] FROM dbo.sysfiles aJOIN sysfilegroups b ON ..

반응형