본문 바로가기

ORACLE/Admin

(12)
Oracle deadlock ORA-00060: Deadlock detected. See Note 60.1 at My Oracle Support for Troubleshooting ORA-60 Errors. More info in file /rdsdbdata/log/diag/rdbms/../trace/.._ora_10827.trc. ORA-00060: Deadlock detected. See Note 60.1 at My Oracle Support for Troubleshooting ORA-60 Errors. More info in file /rdsdbdata/log/diag/rdbms/../trace/.._ora_10959.trc. Oracle의 교착 상태(Deadlock) 처리는 시스템의 동작 방식과 상황에 따라 달라질 수 있다...
Oracle Job interval에 case문을 사용하여 여러 시간대 설정 DBMS_JOB의 NEXT_DATE와 INTERVAL 값을 적절히 설정하면 하루에 특정 여러 시간에 작업을 수행하도록 설정할 수 있다.  예시DBMS_JOB을 이용한 하루 두 번 실행 예제 (예: 오전 2시, 오전 4시)DECLARE job_no NUMBER;BEGIN -- DBMS_JOB 작업 생성 DBMS_JOB.SUBMIT( job => job_no, what => 'BEGIN your_procedure; END;', -- 실행할 작업 next_date => TRUNC(SYSDATE + 1) + 2/24, -- 내일 오전 2시부터 시작 interval => 'CASE WHEN TO_CHAR(SY..
ORACLE DBMS_JOB 동시 수행 테스트 ORACLE 에서 어떤 JOB의 수행이 끝나지 않은 상태에서 다음 수행시간이 되었을 때 어떻게 수행이 되는지 테스트해보았다. 테스트 환경은 RDS for Oracle 19.13.0.0 버전이다.   테스트 목표같은 JOB이 동시에 실행되는지 확인실행 중인 JOB이 끝나지 않았을 때 다음 실행이 시작되는지 확인 테스트 방법수행시간이 2분 소요되는 프로시저를 1분 간격으로 수행되도록 job 등록하여수행 시작 시간과 종료 시간을 확인한다.   1. 테스트 테이블 생성작업 상태를 기록할 테이블을 생성한다.CREATE TABLE job_test_log ( log_time TIMESTAMP, job_id NUMBER, message VARCHAR2(100));  2. 테스트 프로시저..
[Oracle] INTERSECT 명령어 Oracle의 INTERSECT 명령어 INTERSECT 명령어는 집합 연산자로, 두 테이블의 교집합을 반환합니다. 즉, 두 테이블 모두에 존재하는 행을 선택합니다. 선택한 열은 두 테이블에서 동일한 데이터 유형과 크기여야 합니다.   INTERSECT 구문 예SELECT column_listFROM table1INTERSECTSELECT column_listFROM table2; INTERSECT 사용 예다음 예에서는 customers 테이블과 orders 테이블의 교집합을 찾아 두 테이블에 모두 존재하는 고객 ID와 주문 ID를 선택합니다.SELECT customer_id, order_idFROM customersINTERSECTSELECT customer_id, order_idFROM orders;..
[ORACLE] OR-expansion과 USE_CONCAT, NO_EXPAND 힌트 OR-expansion 이란? OR-expansion은 조건절에 OR 조건이나 INLISTS 조건이 있을 때 내부적으로 여러 개의 쿼리로 나누어 처리하는 기능이다. OR-expansion 예시 예를들어 아래와 같은 쿼리가 있다. deptno, salary 에 대한 인덱스가 있다고 가정한다. select * from emp where deptno = 20 or salary > 5000; - OR-expansinon 이 발생하지 않은 경우 OR-expansinon 이 발생하지 않은 경우, 하나의 조건절에서 여러 개의 인덱스가 사용될 수 없기 때문에 아래 실행계획과 같이 OR 조건이 full scan으로 처리된다. -----------------------------------------------------..
[ORALCE] 특정 사용자만 파라미터 적용하기(LOGON TRIGGER) 오라클 LOGON TRIGGER를 사용하여 특정 사용자만 파라미터 적용하기 어떤 프로그램이 사용하는 계정에 literal SQL이 과도하게 발생하는 문제가 있는데 프로그램 수정이 어려워 그 계정에 대해서만 Cursor Sharing 파라미터를 적용하려고 한다. Cursor Sharing 파라미터는 literal SQL을 자동으로 Binding 하여 성능 개선에 도움을 준다. 하지만 안정적이지 않다거나 예측 불가능한 문제 발생 가능성.. 과 같은 이유로 사용하지 않는 것을 권고하고있다. 그래서 특정 계정에만 파라미터를 적용하는 방법을 강구하게 되었다. 그 결과 LOGON TRIGGER를 사용하여 특정 계정이 LOGON 할 시 ALTER SESSION SET PARAMETER를 수행하도록 설정해보았다. 특정..
[오라클] 스키마 전체 테이블에 대한 읽기 권한 부여 AAA라는 계정에 여러 테이블들이 있다. AAA_RO 라는 계정을 생성하여 AAA의 테이블에 대한 읽기권한만 부여하고 싶다. AAA 계정에 대한 테이블 읽기 권한을 부여하는 명령어가 있을 것 같지만 없다. (보안상의 이유?) 그럼 어떻게 권한을 부여해야할까? 우선 AAA_RO에게 AAA의 특정 테이블에 대한 읽기 권한을 부여하는 명령어는 아래와 같다. GRANT SELECT ON AAA.TABLE1 TO AAA_RO; -- AAA_RO 계정에 AAA 계정 TABLE1 테이블에 대한 읽기 권한 부여 AAA 계정의 모든 테이블 리스트를 검색한다. SELECT * FROM ALL_TABLES WHERE OWNER = 'AAA' AAA_RO에게 AAA 계정의 모든 테이블에 대한 읽기 권한을 부여하는 스크립트를 ..
오라클 Hash Join 원리와 use_hash 힌트 사용법 오라클 Hash Join 원리와 use_hash 힌트 사용법 해시 조인(Hash Join)은 관계형 데이터베이스의 조인 방식 중 하나로, 대용량 데이터를 효율적으로 조인하는 데 유용하며, 메모리를 활용한 고속 연산이 특징이다. 작동 원리 1. Build Phase (작은 테이블 적재) 두 테이블 중 크기가 작은 쪽을 Inner Table로 선택하여 메모리에 해시 테이블을 생성한다. 2. Probe Phase (큰 테이블 스캔) Inner Table을 해시 함수로 해싱한 해시 테이블을 활용하여 Outer Table(큰 테이블)을 스캔한다. 3. 결과 반환 해시 테이블에서 매칭되는 해시 버킷을 찾으면, 해당 버킷에 속하는 Inner Table의 행과 Outer Table의 현재 처리 중인 행을 조인하여 결과..