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 개 ( 개인적으로는 이 테이블..
DB : ORACLE 19c 1. 유저 drop 시도 - Sys 계정으로 oracle 계정 삭제 시도 DROP USER DBADM CASCADE; 2. 에러 발생 - ORA-28014 : CANNOT DROP ADMINISTRATIVE USER OR ROLE 3. 해결 방안 - 계정 생성시 "alter session set "_oracle_script"=true;"로 세션 상태 변경 후 생성한 계정을 drop 하면 발생하는 에러 이다. 동일하게 세션 상태 변경 후에 drop user 시도하면 문제 없이 user가 삭제된다. alter session set "_oracle_script"=true;DROP USER DBADM CASCADE;
[ 목차 ] 1. 목표 2. 테스트 계획 3. 실행 결과 분석 3.1. Buffer 관점 3.2 Fetch 중 데이터 변화 추이 관점 3.2.1. 일반 함수 vs Deterministic vs ( Deterministic + 스칼라 서브쿼리 ) 분석 3.2.2 일반 함수 vs Result Cache vs ( Result Cache + 스칼라 서브쿼리 ) 분석 4. 정리 1. 목표 : 사용자 함수를 다양한 경우의 수로 Call 하고, 함수 유형 및 호출 방법에 따른 우선 순위 및 결과 분석을 하고자 함 ※ 호출 방법 경우의 수 : Result Cache는 미리 Input/Ouput값을 캐싱 한 후에 실행 함 함수 유형에 따른 운영 관리 촛점을 두면 매우 길어지므로 위 목표에 한해 이해하고자 함..
SQL 튜닝을 하다보니 점점 SQL Full Source를 봐야 마음이 편해진다. 개발자가 튜닝 요청시 바인드 변수를 "필수"와 "옵션" 조건을 구분하더라도, SQL을 전체적으로 보면 다른 문제점 또는 해결방법을 찾아내기 때문이다. 그래서 SQL 튜닝을 본격적으로 시작하기 앞서, XML 파일에서 SQL 원본을 찾아 확인한다. 그런데 문제는 Mybatis Xml 파일은 1 ~ 2개가 아니어서 여러파일에서 SQL을 찾아야한다.업무 생산성이 좋지 않으므로 Window "Type" 명령어로 여러 XML 파일을 1개 파일로 병합시키자.( 그 외 추가적인 기능도 아래에 메모해 둔다 ) [ 1 ] Type 명령어 : Linux의 cat 명령어와 매우 유사하다. 대상 파일은 "space"로 구분하여 추가하면 된다..
[ 문제 ] 튜닝 프로젝트 시작 전 개발자 분들이 SQL 튜닝 요청하기 위해 별도로 모아둔 튜닝 요청서들이 있었다. 확인 결과 SQL 바인드 변수 부분에 모두 "?" 표시 되어 있었다. 튜닝 작업시 "?" 아닌 ":1" 또는 ":a" 형태가 필요하여 다음과 같이 작업 후 튜닝 작업을 시작하였다. [ 예시 SQL ]SELECT * FROM EMP A WHERE A.EMPNO = ? AND A.ENAME = ? AND A.TELNO = ?; [ 해결 ] : 서브라임(Sublime) 편집기를 사용하여 바인드 변수 처리 하기1. ? 표기 상태 : 예시는 SQL이 짧으나 현실은 쿼리가 길고, ? 이 어디있는지 확인도 어려우며 ,바인드 변수개수도 많음 2 . CTRL + H..
[ 문제 ] 업무 엑셀 파일을 열때 마다 "[보안 경고] 매크로를 사용 할 수 없도록 설정했습니다." 문구가 보이면 콘텐츠 사용을 클릭할때마다 너무 신경쓰인다. 그래서 문서 열때 문구가 뜨지 않도록 설정하고 싶다. [ 해결 방법 ] 1. 메뉴 파일 클릭 2. 옵션 클릭 3. 보안 센터 > 보안 센터 설정 클릭 4. 모든 매크로 포함 라디오 버튼 클릭 > VBA 프로젝트 개체모델에 안전하게 액세스할수 있음 클릭 5. 파일 다시 열기 : "[보안 경고] 매크로를 사용 할 수 없도록 설정했습니다." 문구가 나타나지 않는다.
Literal SQL을 검색한다는 것은 논리상 동일한 SQL임에도 불구하고 지속적으로 Hard Parsing 을 발생키시는 SQL을 찾는것이다. 보통 Literal Sql을 찾을때는 아래 쿼리를 사용한다. select *from ( select parsing_schema_name, sql_id, sql_text, executions , sum(executions) over (partition by force_matching_signature ) executions_sum , row_number() over (partition by force_matching_signature order by sql_id desc) rnum , count(*) over (partition ..
WHERE LIKE '%'|| :1 || '%' 양 퍼센트 성능 개선을 위한 방법을 알아보자 [ 문제 ] 개발자들은 Like :1 ||'%' 쓰기도하나, 습관 또는 어플리케이션에 적용해도 업무 데이터에 문제가 없다는 이유로 LIKE '%' || :1 || '%' 두기도 한다. 그래서 다양한 방법으로 Like 양 '%' 를 테스트하여 성능 개선이 되는지 테스트 하려고 한다. 우선 최적의 솔루션인 =, 앞 '%' 제거하는 2가지의 결과는 생략한다. 불가피하게 '%' || :1 || '%' 를 쓸 수 밖에 없는 상태에서 어떻게 해야할까? 고민의 흔적이다. [ Test 테이블 ] 1 .테이블명 : TB_EMP_BIG2 / 1,000,000 건 / 61,440 Block / 480 MB 2. 인..
[ 예상 실행 계획 ] 문제에 있는 실행계획은 "예상실행계획"임. 즉, 실행계획의 수치를 모두 믿어서는 안됨. 예상 실행계획으로 볼 수 있는 이유는 "Rows" 컬럼임. 실행 후 실행계획 볼때 사용하는 display_curosr로 보면 "E-Rows","A-Rows"가 출력됨. 상품기본"이력"임시 테이블(지문상 천만건)이고, 심지어 파티션 128개 인데 5,248건으로 출력되고 있음. 논리상 맞지 않음. 물론, where 조건절에 합당한 조건절이 있다면 모르겠으나. 문제에는 표기된 것 없음. 그리고 힌트에 병렬 degree 32 모든 테이블에 준것으로 보아 전체 테이블 대상으로 조인하는 것으로 이해됨. * 결론 : "상품기본임시테이블" FTS 하는데 5,428 ROW 라는 통계 정보는 현실과 동 떨..
[ 1 ] 문제 공공 차세대 프로젝트에 DB 튜너로 투입되었습니다. OZ Report에서 질의하는 SQL이 Literal Sql로써, Hard Parsing 처리 되는 문제점을 확인 하였습니다. 즉, SQL 질의하면 매번 많은 "실행계획 생성 > Cost 평가 > 그 중 가장 낮은 실행계획 선택 > 소스 생성 " > SQL 실행 됩니다.DB CPU 사용률, SQL Parsing Time 증가 되는 현상이 발생되며, Report 사용이 많을 수록 그 현상은 뚜렷해집니다. [ 2 ] 해결 방법 - ODI 파일 > 데이터 셋(마다) 속성 > "컴파일된 질의문 사용" > True 변경[ 3 ] 검증 1. "컴파일된 질의문 사용" > FALSE > 2번 질의 > DB SQL 조회 : SQL Curs..
1. COL1과 COL2로만 조회시 600만건 출력. 선택도가 매우 높은 편2. DESCRIPTION 컬럼 조회시 10,000건 조회3. 1, 2번을 결합하면 1000건 정도 조회.[ SQL ]SELECT * FROM TB_TIBERO A WHERE A.COL1 = :1 AND A.DESCRIPTION LIKE '%' || UPPER(:2) || '%' AND A.COL2 != 'D' ; [ 고려했던 사항 ]1. DESCRIPTION 컬럼에 CTXCAT TEXT 기반 INDEX 생성 테스트 고려 - TIBERO PATCH 필요 -> 지원 불가 2. DESCRIPTION 컬럼 단일 인덱스 생성 > INDEX FAST FULL SCAN 수행+DISK I/O 방어위해 MULTI ..
버전별로 신규 생성된 힌트를 볼 수 있다. 힌트가 문장, 쿼리블록, 오브젝트, 조인 중 어디와 관련된것인지 파악도 가능하다. 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..
해외 경기 무료보는 사이트가 있다. 당연히 한국 선수 경기도 실시간 중계를 한다. 도박 배팅 관련 된 것은 무시하고, 영상만 볼 실분은 참고.https://bluelive77.com/