ASH 보고서 출력하기 1. DB ID와 INSTANCE NUMBER 조회 SELECT 'DB_ID : ' || DBID AS COL1 FROM V$DATABASE UNION ALL SELECT 'INSTANCE_NUMBER : ' || INSTANCE_NUMBER FROM V$INSTANCE; /* DB_ID : 2909839947 INSTANCE_NUMBER : 1 */ 2. 10분전 부터 현재까지 ASH 보고서 출력 SELECT * FROM TABLE( DBMS_WORKLOAD_REPOSITORY.ASH_REPORT_TEXT ( 2909839947, 1, SYSDATE - 1/24/60*10, SYSDATE )) ..
[ INVALID OBJECT 체크 ] 1개 batch procedure 안에 여러개의 sub procedure 들이 포함되어있다.이때 sub procedure에 진입하여, 수정을 하고 컴파일했다면, 해당 sub procedure를 호출하는 main object (procedure etc) 들은 invalid object가 된다. 그래서 main object 또한 Compile이 필요하다.팀원들이 혹시나 수정하고 Compile 안하는 경우가 있으므로, 항상 퇴근전에 해당 SQL로 확인해보는 것이 바람직하다.왜냐하면 수행되어야 할 배치 PROCEDURE가 수행되지 않는다면, 큰 사고가 아니겠는가? [ Invalid Object 조회 SQL ] SELECT * FROM DBA_OBJECTS WHER..
테이블명이 소문자 영문명으로 지정이 되는가? 오라클 DICTIONARY 테이블에서 조회 할 경우에 테이블명은 모두 대문자로 조회합니다.테이블 생성시 소문자를 하더라도, 대문자로 데이터 처리가 되기 때문입니다. 그래서 DBA들이 내부적으로 조회, 스크립트를 만들때 UPPER( 테이블명 ) 함수를 사용할일이 없습니다.그런데 프로젝트에서 우연히 발견된 "소문자 테이블"!어림짐작해 보니 쌍따옴표를 붙여 "테이블명소문자"로 테스트 해보니 소문자로 테이블이 만들어지네요. 테스트를 위해 TEST_UPPER, LOWER, "lower" 문자열로 테이블을 생성해봅니다. [ 실 습 ] 1. 테이블 생성CREATE TABLE TEST_UPPER ( col1 varchar2(100) );CREATE TABLE LOWE..
[ 1 ] 프로파일 목적자원 관리CPU, 메모리, 세션 수, 기타 자원 사용량 제한데이터베이스 자원이 특정 사용자에게 독점되지 않도록 설정보안 정책 강화비밀번호 정책(복잡성, 길이, 만료 기간 등) 설정계정 잠금 및 비밀번호 실패 횟수 제한시스템 안정성 보장무한 세션 생성이나 자원 낭비 방지 [ 2 ] 프로파일 항목별 분류 1. 세션 및 CPU 제한RESOURCE_NAMEDESCRIPTIONSESSIONS_PER_USER사용자당 생성할 수 있는 동시 세션 수의 최대값.CPU_PER_SESSION세션당 사용할 수 있는 CPU 시간(백만 분의 1초 단위).CPU_PER_CALLSQL 호출당 사용할 수 있는 CPU 시간(백만 분의 1초 단위).CONNECT_TIME세션 연결 시간(분 단위)에 대한 최대값...
파티션테이블에 global partitioned index가 있는 상황에서 특정 partitoin을 drop 하는 방법 3가지 1. PARTITION DROP 후 INDEX REBUILD 방법 : PARTITION DROP 후 GLOBAL INDEX STATUS가 UNUSABLE상태에 빠지므로, REBUILD 처리ALTER TABLE TB_RANGE_PART DROP PARTITION P2112;ALTER INDEX IX_RANGE_PART_04 REBUILD; 2. DROP PARTITOIN 과 비동기로 글로벌인덱스를 관리(REBUILD) 방법 ( unusable -> usable로 되서 좋다! NOLOGGING 모드로 진행할수가 없는 단점 )ALTER TABLE TB_RANGE_PART D..
인덱스 생성시, 컬럼명을 "가공" 또는" 정렬 문구"를 기입하면 오라클이 내부적으로 FUNCTION-BASED INDEX를 생성한다. 그런데 그 이유 때문에, 아래 작업 하다가 애로사항이 발생한다. 1) 테이블의 인덱스와 구성컬럼을 일괄적으로 보고 싶은 경우 2) DBA 또는 튜너가 관리 인덱스테이블과 실제 DB에 생성되어 있는 인덱스의 컬럼간 동일여부 확인하고 싶은 경우 왜냐하면, 가공 컬럼은 인덱스 구성 컬럼 VIEW에서 "SYS_NC0000$" 형태로 나타나기 때문이다.이를 해결하기 위해서는 "FUNCTION" or "XML" 처리를 하면 된다.이번 글은 함수를 별도로 만들지 않고 편한 XML 형태이다. [1] 테스트 테이블 & 인덱스 생성 CREATE TABLE TB_FUNC( CO..
차세대 프로젝트 또는 운영 시스템에서 사용하지 않은 인덱스가 간혹 있을 것이다. 그래서 그 미사용되고 있는 인덱스를 체크, 관리 하기 위한 방법을 정리해본다. 1. 인덱스 설계 : 프로젝트 중 인덱스를 보통 아래 상황에서 생성 / 변경 하게 된다. 1) 튜닝 요청 : SQL 튜닝 중 2) 모니터링 : SQL 튜닝 중 3) SQL 소스 분석 : 차세대 프로젝트에서는 풀 소스를 보고 100% 있어야 하는 곳은 미리 생성해두기도 한다. 2. 인덱스 사용여부 주기적 확인 : 생성된 인덱스가 사용되고 있는지 어느 시점에는 체크 해 볼 필요가 있다. 설계 당시에는 당연히 사용되었으나, SQL 변경으로 미사용 될 가능성이 있기 때문이다. 아래는 INDEX 사용여부를 체크하는 3가지 방법이다. 1) ..
DBADM 계정(DBA용)으로 프로시져를 생성하였다. 프로시져 생성 목적은 타 스키마(HUAM_OWN)의 OBJECT를 관리하기 위함이다. 예시로써, 타 스키마의 인덱스를 재생성하려고 한다. ( DROP & CREATE )프로시져를 호출했으나 ERROR가 발생한다. DBADM은 DBA ROLE 권한을 가졌는데 왜 안되는 걸까? [1] HUAM_OWN 계정 = 스키마 1.1 테이블 & 인덱스 생성 CREATE TABLE HUAM_OWN.TB_TEST_007( COL1 VARCHAR2(100) );CREATE INDEX HUAM_OWN.IX_TB_TEST_007_01 ON HUAM_OWN.TB_TEST_007 ( COL1 ) ; CREATE PUBLIC SYNONYM TB_TEST_007 FOR..
오라클에서 권한(Privileges)은 크게 3가지로 나뉜다. 1. 시스템 권한(SYSTEM PRIVILEGES) : 데이터베이스 전체에서 특정 작업을 수행할 수 있는 권한. 2. 롤(ROLE) : 여러 (1,2,3) 권한을 그룹화하여 관리하기 쉽게 만든 권한 세트 3. 객체 권한(OBJECT PRIVILEGES) : 특정 데이터베이스 객체(테이블, 뷰, 프로시저 등)에 대해 특정 작업을 허용하는 권한 각각의 권한은 데이터베이스에서 다른 유형의 작업을 제어하며, 이 권한들을 통해 사용자는 다양한 데이터베이스 작업을 수행 할 수 있다. 아래는 위 3가지 관련 불출현황 조회 쿼리 이다. DB : ORACLE 19C 1. 오라클 SYSTEM 권한 조회 : 총 257 개 ( 개인적으로는 이 테이블..
버전별로 신규 생성된 힌트를 볼 수 있다. 힌트가 문장, 쿼리블록, 오브젝트, 조인 중 어디와 관련된것인지 파악도 가능하다. SELECT VERSION, VERSION_OUTLINE OUTLINE, NAME, INVERSE, SQL_FEATURE, CLASS, DECODE(BITAND(TARGET_LEVEL,1),1,'State') AS STATEMENT_LEVEL, DECODE(BITAND(TARGET_LEVEL,2),2,'QBlock') AS QUERY_BLOCK_LEVEL, DECODE(BITAND(TARGET_LEVEL,4),4,'Object') AS OBJECT_LEVEL, ..
인덱스 INVISIBLE 처리 방법은 매우 유용하게 사용할 수 있는 기술이다. [ 활용 ] 1. 신규 INDEX를 생성시 INVISIBLE OPTION을 주면 타 어플리케이션에 방해 주지 않고, 인덱스 생성한 담당자의 SQL이 정상적으로 튜닝이 되었는지 체크 가능. 2. INDEX DROP전 INVISIBLE로 영향도 파악이 가능. - INVISIBLE 처리 > 성능이슈 발생 > 즉시 INDEX VISIBLE > 성능 정상 복귀 - 오랜 기간 INVISIBLE 된 상태 인덱스를 힌트로 강제로 사용 중인 것이 있다면 해당 SQL 찾기는 다른 방법이 필요함. [ Parameter ]SELECT NAME, VALUE FROM V$PARAMETER WHERE NAME = 'optimizer_use..
1. 문제 발생 오후 22:00에 지인에게 연락옴 19C DB에서 AWR 수행이 13시에서 멈추었다는 소식을 들었음 DB 설치하고 DB서버 시간을 한국시간대로 변경작업 하지 않은 기억이 남select sysdate + 9 / 24 , sysdate from dual ; 위 결과 Sysdate 결과값은 영국시간 기준 날짜가 출력됨 AWR은 정상으로 수행되고 있으나 시간차이로 인한 오해가 발생되면 안되므로 한국 시간대로 변경 필요함 2. 조치 방법 2.1) Server 접속 : oracle 계정 .bash_profile에 아래 기입 - export TZ=Asia/Seoul - 저장 후 source .bash_profile 수행 ( 환경변수에 바로 적용 ) 2.2) Orac..
: DB 분석시 필수적으로 조회해야 하는 파리미터이고, V$PARAMETER 뷰로 검색되지 않는 파리미터이다. SYS 계정으로 접속하여 아래 쿼리 조회 하자.SELECT X.KSPPINM -- 히든파라미터명 , X.KSPPITY -- 파라미터 타입 , X.KSPPDESC -- 파라미터 설명 , Y.KSPPSTVL -- 설정값 , Y.KSPPSTDFL -- 디폴트값 FROM X$KSPPI X, X$KSPPCV Y WHERE X.INDX = Y.INDX AND UPPER(X.KSPPINM) LIKE '%CURSOR_SHARING%' -- 파라메터 명칭 AND REGEXP_SUBSTR(X.KSPPINM,'^[_]', 1, 1) IS NOT NULL;..
ORACLE 설치된 서버의 CPU와 MEMORY 수치 조회와 결과해석 [ 조회 SQL ]SELECT INST_ID , STAT_NAME , VALUE , CASE WHEN REGEXP_LIKE( COMMENTS,'bytes','i') THEN ROUND( VALUE / POWER(1024,3),1) END AS "용량(GB)" , COMMENTS FROM GV$OSSTAT a WHERE REGEXP_LIKE (STAT_NAME,'PHYSICAL_MEMORY_BYTES|NUM_CPUS|NUM_CPU_CORES|NUM_CPU_SOCKETS','i') [ 조회 결과 ][ 해석 ]인스턴스 1번 운영 서버 1) NUM_CPU_SOCKETS : 1 => 소..
==== 목차 ==== [ 1 ] 아카이브 모드 설정방법 [ 2 ] 아카이브 파일 저장경로 설정방법 1. FRA (Fast Recovery Area) 관리 2. log_archive_dest 관리 ( 이중화 실습 ) 3. log_archive_dest_n 관리 ( 삼중화 실습 ) ※ 위 1, 2, 3번으로 아카이브 저장경로 1곳으로 설정가능하나, 사용방법 이해를 위해 최대한 다중으로 저장해보는 실습 [ 3 ] 백업 파일은 FRA 저장, 아카이브만 별도 경로 설정방법 [ 1 ] 아카이브 모드 설정 방법 1. 아카이브 모드 확인 : database 설치시에 Archive Mode를 설정하지 않아, No Archive Mode이다. sqlplus / as sysdba SQL> arc..