728x90

예전 카페에서 폐지 공지가 와서 자료를 옮겨 놓습니다.

 

SELECT/*+ ordered use_hash( sw l ) */
  s.sid
 ,s.serial#
 ,s.module
 ,s.program
 ,sw.seconds_in_wait Sec
 ,TO_CHAR(l.sid) ||','||TO_CHAR(s1.Serial#)|| ':' || sw1.event ||decode(sw1.seconds_in_wait,0,NULL,'('||sw1.seconds_in_wait||'secs)')  holder
 FROM  
        v$session_wait sw
,       v$session      s
,       v$lock         l
,       v$session s1
,       v$session_wait sw1
WHERE  sw.event like 'enq%'
AND    S.sid    = sw.sid
AND    l.id1(+) = sw.p2
AND    l.id2(+) = sw.p3
AND    l.lmode(+) > 0
AND    l.sid(+) <> sw.sid
AND    s1.sid=sw1.sid
AND    l.sid=s1.sid
ORDER BYl.sid, sw.seconds_in_wait DESC;

 

 

참고자료 추가(2025.5.21)

더보기

✅ 1. Blocker vs Waiter 세션 쿼리

📌 쿼리 1: Blocker / Waiter 세션 매핑 (10g ~ 23c 사용 가능)

-- Oracle 10g, 11g, 12c, 18c, 19c, 21c, 23c 전부 사용 가능
SELECT
    s1.sid AS blocker_sid,
    s1.serial# AS blocker_serial,
    s1.username AS blocker_user,
    s2.sid AS waiter_sid,
    s2.serial# AS waiter_serial,
    s2.username AS waiter_user,
    s2.seconds_in_wait,
    s2.event
FROM
    v$lock l1,
    v$session s1,
    v$lock l2,
    v$session s2
WHERE
    l1.block = 1
    AND l1.sid = s1.sid
    AND l2.request > 0
    AND l2.sid = s2.sid
    AND l1.id1 = l2.id1
    AND l1.id2 = l2.id2;

✅ 2. DBA_BLOCKERS  DBA_WAITERS 

📌 사용 가능 버전

뷰 이름 10g 11g 12c 18c 19c 21c 23c
DBA_BLOCKERS
DBA_WAITERS
 
-- 락을 보유한 세션 
SELECT * FROM dba_blockers; 
-- 대기 중인 세션 
SELECT * FROM dba_waiters;

✅ 3. v$session + v$lock + v$process 활용 (10g ~ 최신)

-- ✅ Oracle 10g ~ 23c 모두 사용 가능
SELECT
    l.session_id,
    s.serial#,
    s.username,
    s.status,
    s.machine,
    l.lock_type,
    l.mode_held,
    l.mode_requested,
    l.blocking_others
FROM
    dba_locks l
JOIN
    v$session s ON l.session_id = s.sid
WHERE
    l.blocking_others = 'Blocking';

✅ 4. SQL 실행 중인 쿼리 추적 (12c 이상: SQL_ID 방식)

 
-- ✅ Oracle 12c 이상에서 정확한 추적 가능
SELECT
    s.sid, s.serial#, s.username, s.status,
    q.sql_text
FROM
    v$session s
JOIN
    v$sql q ON s.sql_id = q.sql_id
WHERE
    s.sid = <Waiter SID>;


🔸 10g/11g는 s.sql_hash_value로 연결 필요

-- Oracle 10g/11g용
SELECT s.sid, s.serial#, q.sql_text
FROM v$session s, v$sql q
WHERE s.sql_hash_value = q.hash_value AND s.sid = <SID>;

✅ 5. 프로세스 종료용 SPID 조회 (10g ~ 최신 동일)

-- Oracle 10g ~ 23c 공통
SELECT p.spid
FROM v$session s, v$process p
WHERE s.paddr = p.addr
  AND s.sid = <SID>;

✅ 6. 세션 종료

sql
 
-- Oracle 10g ~ 최신 버전 공통
ALTER SYSTEM KILL SESSION 'SID,SERIAL#' IMMEDIATE;

-- SPID 조회 방법 (Oracle → OS 매핑)
SELECT
    s.sid,
    s.serial#,
    p.spid AS "OS_PID",
    s.username,
    s.program
FROM
    v$session s,
    v$process p
WHERE
    s.paddr = p.addr
  AND s.sid = <SID>;
bash
 
-- OS 강제 종료 (Linux/Unix)
kill -9 <spid>

📚 출처 및 확인 문서


✍️ 요약

쿼리 목적 사용 가능 버전
v$lock, v$session 매핑 10g ~ 23c
DBA_BLOCKERS, DBA_WAITERS 10g ~ 23c
SQL 추적 (SQL_ID 방식) 12c 이상 (정확도 ↑)
SPID 확인 및 종료 10g ~ 23c
세션 Kill 10g ~ 23c
 

 

728x90
728x90

예전 카페에서 폐지 공지가 와서 자료를 옮겨 놓습니다.

 

show parameter ACKGROUND_DUMP_DEST;

 

로그 확인 주기 : 수시로 확인!!!

 


오라클 로그 확인하기

✅ 1. Oracle 로그 파일 종류 및 위치

 

로그 종류 설명 기본 위치 예시 (UNIX/Linux)
Alert Log DB의 주요 이벤트, 오류, 시작/중지 정보 기록 $ORACLE_BASE/diag/rdbms/<DB_NAME>/<SID>/trace/alert_<SID>.log
Trace Log 세션별 상세 오류 및 트레이스 정보 위와 동일 디렉터리 내의 .trc 파일들
Listener Log 클라이언트 접속 이력, 오류 기록 $ORACLE_BASE/diag/tnslsnr/<hostname>/listener/trace/listener.log
Audit Log 보안 관련 작업 기록 (로그인/권한 변경 등) $ORACLE_BASE/admin/<SID>/adump/
Archive Log 아카이브 모드일 때 Redo 로그 백업 파일 db_recovery_file_dest에 설정된 디렉터리

📌 로그 위치는 Oracle 11g부터 Automatic Diagnostic Repository (ADR) 구조로 통일됨.

📅 2. 권장 모니터링 주기

로그 종류 모니터링주기 비고
Alert Log 매일 또는 실시간 시스템 상태, 오류 감지
Listener Log 매일 또는 주간 접속 오류, 보안 로그 확인
Audit Log 주간 또는 월간 보안 감사, 로그인 기록
Trace Log 문제 발생 시 디버깅 용도, 크기 증가 시 주의
Archive Log 매일 또는 실시간 FRA 공간 모니터링, 로그 적재 실패 감지
🔍 3. 모니터링 시 확인해야 할 핵심 포인트

✅ Alert Log

  • DB 시작/종료 시점 기록
  • ORA- 에러 (예: ORA-00600, ORA-01555)
  • Tablespace 자동 확장 실패
  • Archiver error (ARCH: Error)
  • Flashback, Undo 관련 에러
  • Block corruption 경고

🛠 확인 방법 (bash)

tail -f $ORACLE_BASE/diag/rdbms/<DB_NAME>/<SID>/trace/alert_<SID>.log

✅ Listener Log

  • 비정상 접속 시도 감지
  • 접속 에러 (e.g., ORA-12514, ORA-12541)
  • 접속 거부 또는 반복 접속 감지 (보안 이슈)

🛠 확인 방법 ( bash )

tail -f $ORACLE_BASE/diag/tnslsnr/<hostname>/listener/trace/listener.log

✅ Audit Log

  • 로그인/로그아웃 기록
  • GRANT/REVOKE, DDL 변경 로그
  • 비인가 사용자 로그인 시도

🛠 확인 방법 (bash)

cat $ORACLE_BASE/admin/<SID>/adump/*.aud

✅ Archive Log

  • 적재 실패 여부 (ARCH error)
  • FRA 공간 임계 도달 (unable to archive, disk full 등)
  • 백업 대상 여부 확인

🛠 RMAN으로 확인 (sql)

RMAN> list archivelog all;

📊 4. 자동화 및 모니터링 팁

도구 설명
Oracle Enterprise Manager (OEM) 실시간 로그/성능/오류 모니터링
Shell Script + Crontab tail, grep, awk 등으로 에러 필터링 및 알림
SIEM 도구 (예: Splunk, ELK) 로그 수집 및 시각화, 보안 이벤트 감지
Nagios, Zabbix 로그 기반 알림 연동 가능
 

예: Shell 기반 Alert Log 오류 감지 스크립트 (bash)

grep "ORA-" $ORACLE_BASE/diag/rdbms/<DB_NAME>/<SID>/trace/alert_<SID>.log | tail -10
 

📚 출처 및 참고자료

728x90
728x90

예전 카페에서 폐지 공지가 와서 자료를 옮겨 놓습니다.

 

-- 아카이브 모드 확인

sql> archive log list 

-- 파일 경로 확인

sql> select * from v$logfile;

--아카이브 모드 해제

sql> shutdown immediate;

sql> startup mount;

sql> alter database noarchivelog;

sql> alter database open;

 

 

RMAN 사용해서 ARCHIVE LOG 삭제

$ORACLE_HOME/bin/man

 

RMAN> connect target /

RMAN> delete archivelog all;    ---참고 delete archivelog like '%$delete_date%.arc'; 

RMAN> crosscheck archivelog all;

RMAN> delete expired archivelog all;

 

 

----------------------------------

/u01/app/oracle/oradata/orcl/redo01.log

--아카이브 모드 자동 설정
alter system set log_archive_start = true scope = spfile;

-- 아카이브모드 백업시 파일들 저장될 장소
alter system set log_archive_desc ='/u01/app/oracle/oradata/orcl/' scope = spfile

-- 아카이브모드 파일 포맷결정
alter system set log_archive_format = 'arc%t_%s_%r.arc' scope=spfile;

alter database noarchivelog

 

더보기

아카이브 관련해서 2025년 5월 19일 정리

 

🔍 아카이브 로그 상태 확인 방법

1. 현재 아카이브 모드 확인

sql
복사편집
ARCHIVE LOG LIST;
  • 현재 데이터베이스의 아카이브 모드(ARCHIVELOG 또는 NOARCHIVELOG), 아카이브 대상 경로 등을 확인할 수 있습니다.

2. 아카이브 로그 파일 목록 조회

sql
복사편집
SELECT NAME, SEQUENCE#, APPLIED FROM V$ARCHIVED_LOG ORDER BY SEQUENCE#;
  • 아카이브된 로그 파일의 이름, 시퀀스 번호, 적용 여부 등을 확인할 수 있습니다.

3. 아카이브 로그 저장 경로 및 크기 확인

sql
복사편집
SHOW PARAMETER db_recovery_file_dest; SHOW PARAMETER db_recovery_file_dest_size;
  • Fast Recovery Area(FRA)의 경로와 크기를 확인하여 아카이브 로그의 저장 위치와 공간을 파악할 수 있습니다.맛과 코드의 여정

🛠️ 상황별 조치 방법

1. 아카이브 로그 공간 부족 (FRA 가득 참)

  • 문제 원인: FRA(db_recovery_file_dest)에 설정된 크기를 초과하여 아카이브 로그가 저장된 경우.oradb-matter.com+3맛과 코드의 여정+3Jack-of-All-Trades+3
  • 조치 방법:
    • RMAN을 사용하여 오래된 아카이브 로그 삭제위 명령은 7일 이전에 완료된 아카이브 로그를 삭제합니다.
    • bash
      복사편집
      RMAN> DELETE ARCHIVELOG ALL COMPLETED BEFORE 'SYSDATE-7';
    • FRA 크기 조정FRA의 크기를 20GB로 증가시킵니다.
    • sql
      복사편집
      ALTER SYSTEM SET db_recovery_file_dest_size = 20G;
    • 아카이브 로그를 외부 저장소로 이동 후 삭제
      • 아카이브 로그를 백업한 후, 원본을 삭제하여 공간을 확보합니다.
    • 자동 삭제 정책 설정
      • RMAN에서 보관 정책을 설정하여 일정 기간이 지난 아카이브 로그를 자동으로 삭제하도록 구성합니다.

2. 아카이브 로그 손상 또는 누락

  • 문제 원인: 아카이브 로그 파일이 손상되었거나 누락된 경우.맛과 코드의 여정
  • 조치 방법:
    • 백업에서 손상된 아카이브 로그 복원
      • RMAN을 사용하여 손상된 로그 파일을 백업에서 복원합니다.
    • 데이터 복구
      • 필요한 경우, 복원된 아카이브 로그를 사용하여 데이터베이스를 복구합니다.

3. 아카이브 로그 자동 삭제 정책 설정

  • 조치 방법:
    • RMAN에서 보관 정책 설정이 설정은 백업이 하나만 유지되도록 하며, 불필요한 아카이브 로그를 자동으로 삭제합니다.
    • bash
      복사편집
      RMAN> CONFIGURE RETENTION POLICY TO REDUNDANCY 1;
    • 보관 정책 확인현재 설정된 보관 정책을 확인합니다.
    • bash
      복사편집
      RMAN> SHOW ALL;

🆕 버전별 주요 변경 사항

Oracle 10g

  • LOG_ARCHIVE_START 파라미터는 10g부터 더 이상 사용되지 않으며, 아카이브 모드는 수동으로 설정해야 합니다.

https://support.oracle.com/knowledge/Oracle%20Database%20Products/274302_1.html?utm_source=chatgpt.com

 

ARCHIVELOG mode in Oracle 10g and 11g

 

support.oracle.com

https://sagejay.tistory.com/8?utm_source=chatgpt.com

 

Oracle 19c Archive Log 설정과 관리: 보관 기간 설정과 최적화 방법

Oracle 19c 데이터베이스를 운영하면서 Archive Log 관리는 매우 중요한 작업입니다.Archive Log는 데이터베이스의 복구를 돕는 중요한 파일로, 잘못 관리될 경우 시스템 성능에 영향을 줄 수 있습니다.

sagejay.tistory.com

 

Oracle 11g

 

Oracle 19c Archive Log 설정과 관리: 보관 기간 설정과 최적화 방법

Oracle 19c 데이터베이스를 운영하면서 Archive Log 관리는 매우 중요한 작업입니다.Archive Log는 데이터베이스의 복구를 돕는 중요한 파일로, 잘못 관리될 경우 시스템 성능에 영향을 줄 수 있습니다.

sagejay.tistory.com

 

Oracle 12c

  • 멀티테넌트 아키텍처(CDB/PDB) 도입으로, 각 PDB에 대한 아카이브 로그 관리가 필요합니다.

Oracle 19c

  • V$ARCHIVED_LOG 뷰를 통해 아카이브 로그의 상세 정보를 확인할 수 있습니다.

https://docs.oracle.com/en/database/oracle/oracle-database/19/refrn/V-ARCHIVED_LOG.html?utm_source=chatgpt.com

 

Database Reference

V$ARCHIVED_LOG displays archived log information from the control file, including archive log names.

docs.oracle.com

 

728x90
728x90

CREATE [PUBLIC] DATABASE LINK dblink_name
       CONNECT TO    user_id
       IDENTIFIED BY password
       USING         'sid'

 

select * from table_name@dblink_name

 

더보기

1. 버전 간 호환성 제한

2. 보안 강화 및 암호화 정책 변경

  • Oracle 12c부터는 패스워드 해시 알고리즘이 강화되어, 이전 버전의 인증 방식과 호환되지 않을 수 있습니다.
  • DB Link를 사용할 때, 양쪽 데이터베이스의 SQLNET.ORA 파일에서 SQLNET.ALLOWED_LOGON_VERSION_CLIENT및 SQLNET.ALLOWED_LOGON_VERSION_SERVER 파라미터를 적절히 설정해야 합니다. 네이버 블로그

3. DB Link 암호 변경 제한

  • Oracle 19c에서는 ALTER DATABASE LINK 명령을 사용하여 고정 사용자(Fixed-user) DB Link의 패스워드를 변경할 수 있습니다.
  • 그러나 연결 사용자 또는 인증 사용자를 변경하려면 DB Link를 삭제하고 새로 생성해야 합니다. Oracle Docs

⚠️ DB Link 구성 시 주의사항

  1. 버전 호환성 확인
    • DB Link를 구성하기 전에 양쪽 데이터베이스의 버전 호환성을 확인해야 합니다.
    • 특히, Oracle 19c에서 10g로의 연결은 공식 지원되지 않으므로 주의가 필요합니다.
  2. 보안 설정 점검
    • SQLNET.ORA 파일의 설정을 통해 인증 방식과 암호화 수준을 조정해야 합니다.
    • 예를 들어, SQLNET.ALLOWED_LOGON_VERSION 파라미터를 설정하여 호환성을 확보할 수 있습니다.네이버 블로그+1Oracle Docs+1
  3. DB Link 재생성 필요성
    • 연결 사용자 또는 인증 정보를 변경해야 하는 경우, 기존 DB Link를 삭제하고 새로운 정보를 사용하여 재생성해야 합니다.

✅ 요약

  • Oracle 10g 이후 버전에서도 DB Link의 기본 사용 방식은 유지되지만, 보안 강화와 버전 호환성 제한 등으로 인해 구성 시 주의가 필요합니다.
  • 특히, Oracle 19c에서는 11.2 이상 버전과의 연결만을 공식 지원하므로, 하위 버전과의 연결은 테스트 환경에서만 사용하고, 운영 환경에서는 권장되지 않습니다.
728x90

+ Recent posts