목록Programming/Oracle (28)
Patrick's 데이터 세상

개요 지정한 테이블 access에서 Index Scan을 유도하도록 /*+INDEX(테이블 인덱스명) */ 인덱스 힌트를 부여하였는데 어찌 된 일인지 실행계획 확인 결과 Index Scan 방식이 실행되지 않고 계속 Full Scan이 실행되면서 쿼리가 실행되지 않는 오류가 발생하였습니다. ANALYZE TABLE 테이블명 COMPUTE STATISTICS; 실행 이후 정상적으로 Index Scan이 실행되었습니다. ANALYZE란? ANALYZE는 인덱스, 테이블, 클러스터의 통계정보를 생성합니다. ANALYZE가 생성한 통계정보들은 비용 기준(Cost-based)의 옵티마이저가 가장 효율적인 실행계획을 수립하기 위해 최소비용을 계산할 때 사용됩니다. 각 오브젝트의 구조를 확인하는 것과 체인(Chain..
오라클 사용 시 여러 가지 원인에 의해 DB가 LOCK이 걸리는 현상을 종종 발견할 수 있습니다. TOAD나 ORANGE와 같은 DBMS 관리 프로그램에서는 모니터링을 바로 확인할 수 있으나 SQL Developer는 쿼리 구문을 통해 현재 DB Lock이 걸린 테이블과 sid 등 정보를 확인해야 합니다. 1. LOCK 걸린 개체 확인 SELECT A.SID , A.SERIAL# , object_name , A.SID || ', ' || A.SERIAL# AS KILL_TASK FROM V$SESSION A INNER JOIN V$LOCK B ON A.SID = B.SID INNER JOIN DBA_OBJECTS C ON B.ID1 = C.OBJECT_ID WHERE B.TYPE = 'TM'; Objec..

절차형 SQL 1. 절차형 SQL 일반적 개발 언어처럼 SQL에도 절차 지향적인 프로그램이 가능하도록 DBMS 벤더별로 PL(Procedural Language)/SQL(Oracle), SQL/PL(DB2), T-SQL(SQL Server) 등의 절차형 SQL을 제공하고 있습니다. 절차형 SQL을 이용하면 SQL문의 연속적인 실행이나 조건에 따른 분기처리를 이용하여 특정 기능을 수행하는 저장 모듈을 생성할 수 있습니다. 2. PL/SQL Oracle의 PL/SQL은 Block 구조로 되어있고 Block 내에는 DML 문장과 QUERY 문장, 그리고 절차형 언어(IF, LOOP) 등을 사용할 수 있으며, 절차적 프로그래밍을 가능하게 하는 트랜잭션 언어입니다. 이런 PL/SQL을 이용하여 다양한 저장 모듈(..
DCL * DCL 개요 유저를 생성하고 권한을 제어할 수 있는 명령어 * 유저와 권한 유저 역할 SCOTT Oracle 테스트용 샘플 유저 Default 패스워드 : TIGER SYS DBA ROLE을 부여받은 유저 SYSTEM 데이터베이스의 모든 시스템 권한을 부여받은 DBA 유저 Oracle 설치 완료 시에 패스워드 설정 * 유저 생성과 시스템 권한 부여 및 회수 권한을 생성하기 위해서는 우선 DBA 유저로 접속을 해야 합니다. 데이터베이스에 접속했다고 해서 테이블, 뷰, 인덱스 등과 같은 오브젝트(Object)를 생성할 수는 없습니다. 사용자가 실행하는 모든 DDL 문장(CREATE, ALTER, DROP, RENAME 등)은 그에 해당하는 적절한 권한이 있어야만 문장을 실행할 수 있습니다. 이러한..
그룹 내 비율 함수 * RATIO_TO_REPORT 함수 - 파티션 내 전체 SUM 값에 대한 행별 컬럼 값의 백분율을 소수점으로 구할 수 있습니다. 결과 값은 > 0 & = 0 & 0 &
그룹 내 행 순서 함수 * FIRST_VALUE 함수 - 파티션별 윈도우에서 가장 먼저 나온 값을 구합니다. MIN 함수를 활용하여 같은 결과를 얻을 수도 있습니다. SQL Server에서는 지원하지 않는 함수입니다. EX) SELECT DEPTNO , ENAME , SAL , FIRST_VALUE(ENAME) OVER (PARTITION BY DEPTNO ORDER BY SAL DESC ROWS UNBOUNDED PRECEDING) AS DEPT_RICH FROM EMP; - RANGE UNBOUNDED PRECEDING : 현재 행을 기준으로 파티션 내의 첫 번째 행까지의 범위를 지정합니다. DEPTNO ENAME SAL DEPT_RICH 10 KING 5000 KING 20 SCOTT 3000 SC..