달력

92025  이전 다음

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30

sqlplus 명령어

Oracle 2009. 4. 10. 23:47

1. 파일명령어

- SAVE :   SQLPLUS상에서 실행한 SQL문을 나중에 다시 사용하기 위해 운영체제 상의 디렉토리에 저장할 때 사용

  eg) save c:\scott_dept.sql

- START :  SAVE 명령어로 저장한 SQL 스크립트 파일을 SQLPLUS에서 직접 실행할 때 사용

 eg) start c:\scott_dept.sql

- GET :  SAVE로 저장한 SQL 스크립트 파일을 SQLPLUS 화면버퍼로 가져오는 명령

 eg) get c:\scott_dept.sql

- SPOOL :  SQLPLUS에서 실행하는 모든 SQL문과 결과를 지정된 디렉토리와 파일에 저장하는 명령

 eg) SPOOL c:\spool_examp.txt

- SPOOL off :  SPOOL 명령어들 종료하는 명령어

 eg) spool off

2. 편집명령어

- i : 이미 실행된 SQL문의 다음라인에 새로운 문법을 추가할 때 사용

- L :  이미 실행된 SQL문의 내용을 조회할 때 사용

- N :  숫자 값은 이미 작성된 SQL문의 해당 라인 내용을 보여줌

- C :  해당라인의 특정 내용을 다른 내용으로 변경

- DEL n :  지정한 라인을 완전히 삭제

- CLEAR BUFFER :  이미 작성된 모든 SQL문을 버퍼 영영그으로부터 완전히 삭제

3. 실행명령어

- START : 운영체제 상의 SQL스크립트를 실행하는 명령

- @ : START와 동일한 기능

- RUN : GET으로 SQLPLUS에 로드된 SQL문을 실행

- / : RUN관 동일한 기능

4. 환경 명령어

- SET FEEDBACK ON : SQL문이 실행된 후 작업처리 메시지를 출력

- SET FEEDBACK OFF : 메시지 출력을 해제(다량의 insert 문을 포함한 .sql 파일 실행에 좋음)

- SET HEADING OFF : 결과 출력시 칼럼명을 화면에 표지하지 않는 명령어

- SET HEADING ON : 칼럼명을 화면에 출력

5. 형식명령어

- COLUMN : 칼럼의 포맷을 변경

- TITLE : 보고서의 제몰을 설정

- BTITLE : 보고서의 꼬리말을 설정

- BREAK : 컬렴 또는 행의 값이 바뀔 때 마다 새로운 보고서 포맷을 설정할때

Posted by InuxKr
|

Data Buffer Cache의 삭제

Oracle 2008. 12. 12. 13:44

쿼리를 튜닝할때 sqlplus 에서 set timing on 설정후 쿼리 수행 혹은
토드에서 수행시간을 확인할 수 있다.

SELECT             
        USE_DT, TRANSP_OPER_ORG_ID, PCARD_USER_CLASS_CD
FROM TBBZS800
WHERE USE_DT BETWEEN &fromDt AND &toDt


위 쿼리가 Full Scan 을 수행했을경우

SELECT            
       /*+ INDEX(TBBZS800 PK_TBBZS800) */
        USE_DT, TRANSP_OPER_ORG_ID, PCARD_USER_CLASS_CD
FROM TBBZS800
WHERE USE_DT BETWEEN &fromDt AND &toDt

이런 식으로 변경해서 수행시간을 테스트할 수 있을 것이다.


하지만 한번 수행한 이후에는 해당 블록들을 Data Buffer Cache에 보관하고 있기때문에 정확한 시간 측정이 힘들다

현재 작업중인 쿼리로는 초기 수행시 2분16초 짜리 쿼리가 Data Buffer Cache에 올라간 이후에는 11초정도의 평균 수행시간을 보여준다

이 경우에는 강제로 Data Buffer Cache를 비워준 이후에 측정하면 된다

오라클 10g 의 경우
   ALTER SYSTEM FLUSH BUFFER_CACHE;
9i 이하일경우는
   ALTER SESSION SET EVENTS = ‘IMMEDIATE TRACE NAME FLUSH_CACHE’;

를 수행하면 Data Buffer Cache를 Flush 시킨다

제대로 한다면 쿼리의 파싱속도 자체도 영향을 미치는 조건이므로 Shared Pool 도 Flush 시켜줘야될 필요성이 있다

이경우는
   ALTER SYSTEM FLUSH BUFFER_POOL;

를 수행하면 Shared Pool 이 초기화 되게된다
Posted by InuxKr
|

Oracle Optimizer Hint

Oracle 2008. 12. 11. 10:13

지난 4월 교육자료에 있던 내용중...

<Optimization Approaches and Goals - Optimization  접근과 목적>

/*+ ALL_ROWS */
 explicitly chooses the cost-based approach to optimize a statement
 block with a goal of best throughput (that is, minimum
 total resource consumption)
 가장 좋은 단위 처리량의 목표로 문 블록을 최적화하기 위해 cost-based
 접근 방법을 선택합니다. (즉, 전체적인 최소의 자원 소비)
/*+ CHOOSE */
 causes the optimizer to choose between the rule-based
 approach and the cost-based approach for a SQL statement
 based on the presence of statistics for the tables accessed by
 the statement
 최적자(optimizer)가 그 문에 의해 접근된 테이블을 위해 통계의 존재에
 근거를 두는 SQL 문을 위해 rule-based 접근 방법과 cot-based 접근 방법
 사이에 선택하게 합니다.
/*+ FIRST_ROWS */
 explicitly chooses the cost-based approach to optimize a statement
 block with a goal of best response time (minimum
 resource usage to return first row)
 가장 좋은 응답 시간의 목표로 문 블록을 최적화하기 위해 cost-based 접근
 방법을 선택합니다. (첫번째 행을 되돌려 주는 최소의 자원 사용)
/*+ RULE */
 explicitly chooses rule-based optimization for a statement
 block
 문 블록을 위하여, rule-based 최적화를 고르는

<Access Methods - 접근 방법>

/*+ AND_EQUAL(table index) */
 explicitly chooses an execution plan that uses an access path
 that merges the scans on several single-column indexes
 그만큼 실행 계획을 선택합니다. 그리고 여럿의 single-column 색인에
 그 scan을 합병하는 접근 경로를 사용합니다.
/*+ CLUSTER(table) */
 explicitly chooses a cluster scan to access the specified table
 선택합니다. 그리고, 클러스터는 그 명시된 테이블을 접근하기 위해 살핍니다.
/*+ FULL(table) */
 explicitly chooses a full table scan for the specified table
 그 명시된 테이블을 위하여, 전체 테이블 scan을 고르는
/*+ HASH(table) */
 explicitly chooses a hash scan to access the specified table
 선택합니다. 그리고, 해쉬는 그 명시된 테이블을 접근하기 위해 운율을 살핍니다.
/*+ HASH_AJ(table) */
 transforms a NOT IN subquery into a hash antijoin to access
 the specified table
 변환, 그 명시된 테이블을 접근하는 해쉬 antijoin으로의 NOT IN 부속 조회
/*+ HASH_SJ (table) */
 transforms a NOT IN subquery into a hash anti-join to access
 the specified table
 변환, 그 명시된 테이블을 접근하는 해쉬 anti-join으로의 NOT IN 부속 조회
/*+ INDEX(table index) */
 explicitly chooses an index scan for the specified table
 그 명시된 테이블을 위하여, 색인 scan을 고르는
/*+ INDEX_ASC(table index) */
 explicitly chooses an ascending-range index scan for the specified
 table
 그 명시된 테이블을 위하여, ascending-range 색인 scan을 고르는
/*+ INDEX_COMBINE(table index) */
 If no indexes are given as arguments for the INDEX_COMBINE
 hint, the optimizer uses whatever Boolean combination
 of bitmap indexes has the best cost estimate. If particular
 indexes are given as arguments, the optimizer tries to use
 some Boolean combination of those particular bitmap indexes.
 어떤 색인도 INDEX_COMBINE 암시를 위해 인수로서 주어지지 않는다면,
 bitmap 색인의 결합이 어떤 부울의를 가장 좋은 수행 난이도 평가를 가지고
 있든지 최적자는 이용합니다.
 특별한 색인이 인수로서 주어진다면, 최적자는 그 특별한 bitmap 색인의
 몇몇의 부울의 결합을 사용하려고 노력합니다.
/*+ INDEX_DESC(table index) */
 explicitly chooses a descending-range index scan for the specified
 table
 그 명시된 테이블을 위하여, descending-range 색인 scan을 고르는
/*+ INDEX_FFS(table index) */
 causes a fast full index scan to be performed rather than a full
 table scan
 빠른 전체 색인 scan이 전체 테이블 scan이라기보다는 수행되게 합니다.
/*+ MERGE_AJ (table) */
 transforms a NOT IN subquery into a merge anti-join to access
 the specified table
 변환, NOT IN 부속 조회, 그 명시된 테이블을 접근하기 위해 anti-join을
 합병합니다.
/*+ MERGE_SJ (table) */
 transforms a correlated EXISTS subquery into a merge semi-join
 to access the specified table
 변환, 관련된 EXISTS 부속 조회, 접근으로 semi-join을 합병합니다,
 그 명시된 테이블
/*+ ROWID(table) */
 explicitly chooses a table scan by ROWID for the specified
 table
 그 명시된 테이블을 위하여, ROWID에 의해 테이블 scan을 고르는
/*+ USE_CONCAT */
 forces combined OR conditions in the WHERE clause of a
 query to be transformed into a compound query using the
 UNION ALL set operator
 힘은 질의의 WHERE 문절에 있는 UNION ALL 집합 연산자를 사용하는 합성의
 질의로 변형되는 OR 조건을 합쳤습니다.

<Join Orders>

/*+ ORDERED */
 causes Oracle to join tables in the order in which they appear
 in the FROM clause
 오라클이 어느 것에 순서로 테이블을 결합시키게 합니다.
/*+ STAR */
 forces the large table to be joined last using a nested-loops join
 on the index
 큰 있는 테이블이 최종 사용/회전율에 nested-loops를 결합시킨 힘은
 그 색인에 결합합니다.

<Join Operations>

/*+ DRIVING_SITE (table) */
 forces query execution to be done at a different site from that
 selected by Oracle
 힘은 그것과 다른 오라클에 의해 선택된 사이트에 되는 실행을 질의합니다.
/*+ USE_HASH (table) */
 causes Oracle to join each specified table with another row
 source with a hash join
 오라클이 테이블이 다른 행 자원으로 해쉬 접합으로 명시되면서 각자와
 합치게 합니다.
/*+ USE_MERGE (table) */
 causes Oracle to join each specified table with another row
 source with a sort-merge join
 오라클이 테이블이 다른 행 자원으로 sort-merge 접합으로 명시되면서 각자와
 합치게 합니다.

/*+ USE_NL (table) */
 causes Oracle to join each specified table to another row
 source with a nested-loops join using the specified table as the
 inner table
 오라클이 그 명시된 테이블을 그 안의 테이블로 사용하는 nested-loops 접합과
 각자와 다른 행 자원에 대한 명시된 테이블을 합치게 합니다.

<Parallel Execution>

/*+ APPEND */ , /*+ NOAPPEND */
 specifies that data is simply appended (or not) to a table; existing
 free space is not used. Use these hints only following the
 INSERT keyword.
 데이타가 테이블로 단순히 덧붙여진다는  (or not)것 명시합니다; 무료인
 현존하는 영역은 사용되지 않습니다.
 단지 그 삽입 키 핵심어를 따르는 이 암시를 사용하시오.
/*+ NOPARALLEL(table) */
 disables parallel scanning of a table, even if the table was created
 with a PARALLEL clause
 그 테이블이 PARALLEL 문절로 새로 만들어졌다면 테이블의 평행의 순차 검색을
 무능하게 만듭니다.
/*+ PARALLEL(table, instances) */
 allows you to specify the desired number of concurrent slave
 processes that can be used for the operation.
 DELETE, INSERT, and UPDATE operations are considered for
 parallelization only if the session is in a PARALLEL DML
 enabled mode. (Use ALTER SESSION PARALLEL DML to
 enter this mode.)
 당신이 그 연산을 위해 사용될 수 있는 동시의 슬레이브(slave) 프로세스의
 요구된 수를 명시하는 것을 허락합니다.
 그 세션이 가능하게 된 PARALLEL DML에 모드를 있다면, DELETE, INSERT, UPDATE
 연산은 단지 parallelization에 대해 고려됩니다. (사용은 이 모드에 들어가기
 위해 평행의 세션 DML을 변경합니다.)
/*+ PARALLEL_INDEX
 allows you to parallelize fast full index scan for partitioned
 and nonpartitioned indexes that have the PARALLEL attribute
 parallelize에 당신에게 빠른 가득한 색인 scan을 허락합니다. 그런데,
 그것은 PARALLEL 속성을 가지고 있는 색인을 분할했고 nonpartitioned했습니다.
/*+ NOPARALLEL_INDEX */
 overrides a PARALLEL attribute setting on an index
 병렬이 색인을 나아가는 것을 속하게 하는 대체

<Other Hints>
/*+ CACHE */
 specifies that the blocks retrieved for the table in the hint are
 placed at the most recently used end of the LRU list in the
 buffer cache when a full table scan is performed
 그 블록이 찾아서 가져왔다는 것을 명시합니다. 그리고 그 테이블을 위해
 그 암시에 놓여집니다. 그런데, 그것은 가장 요즈음 사용된 언제 그 버퍼 캐쉬,
 가득한 테이블 scan에 있는 LRU 리스트의 끝입니다. 수행됩니다.
/*+ NOCACHE */
 specifies that the blocks retrieved for this table are placed at
 the least recently used end of the LRU list in the buffer cache
 when a full table scan is performed
 그 명시합니다. 그리고, 그 블록은 이 테이블을 위해 검색되면서 요즈음 사용된
 언제 그 버퍼 캐쉬, 가득한 테이블 scan에 있는 LRU 리스트의 가장 작은 끝에
 놓여집니다. 수행됩니다.
/*+ MERGE (table) */
 causes Oracle to evaluate complex views or subqueries before
 the surrounding query
 오라클이 그 둘러싸는 질의 전에 복잡한 뷰나 부속 조회를 평가하게 합니다.
/*+ NO_MERGE (table) */
 causes Oracle not to merge mergeable views
 오라클이 mergeable 뷰를 합병하지 않게 하지 않습니다
/*+ PUSH_JOIN_PRED (table) */
 causes the optimizer to evaluate, on a cost basis, whether or
 not to push individual join predicates into the view
 개개 접합을 미는 것이 그 뷰 안으로 단정 하든 간에 비용 방식으로 최적자가
 평가하게 합니다.
/*+ NO_PUSH_JOIN_PRED (table) */
 Prevents pushing of a join predicate into the view
 접합 술부 중에서 그 뷰로 밀면서, 막는
/*+ PUSH_SUBQ */
 causes nonmerged subqueries to be evaluated at the earliest
 possible place in the execution plan
 원인은 그 실행 계획에서의 가장 이른 가능한 장소에 평가되는 부속 조회를
 nonmerged했습니다.
/*+ STAR_TRANSFORMATION */
 makes the optimizer use the best plan in which the transformation
 has been used.
 최적자가 그 변형이 사용된 가장 좋은 계획을 사용하는 제작


 

Posted by InuxKr
|

Oracle 내부 함수

Oracle 2008. 12. 11. 10:09

1. 문자 함수



2. 날짜 처리함수(datetime function)



3.데이터 형 변환 함수(conversion function)



4. 기타함수(miscellaneous single row function)



5.그룹함수  Aggregate 함수



6. Analytic 함수



7. 객체 참조 함수
 7-1) REF 타입


8. PseudoColumn을 의미하는 것
 8-1) ROWID 컬럼
 8-2) ROWNUM 컬럼

 

[상세설명]


Posted by InuxKr
|

[Optimizer Hint] INDEX

Oracle 2008. 12. 10. 17:50

옵티마이저가 인덱스를 타지않고 풀스캔을 해서 강제로 특정 인덱스를 타게 만들어야 될 경우
HINT) INDEX([TABLE_NAME] [INDEX_NAME]) 를 사용하면 된다

SELECT            
       /*+ INDEX(TBBZS800 PK_TBBZS800) */
        A.USE_DT, B.TRANSP_OPER_ORG_ID, A.PCARD_USER_CLASS_CD
FROM TBBZS800
WHERE A.USE_DT BETWEEN &fromDt AND &toDt

위 처럼 SELECT 바로 뒤에 힌트를 사용하면 TBBZS800 테이블의 PK_TBBZS800 라는 인덱스를 통해서 쿼리가 수행된다

※ 주의점
FROM 절에서 해당 테이블의 알리아스가 있을경우 알리아스를 사용해야한다
알리아스가 다르거나 알리아스가 아닌 실테이블명을 명하시면 힌트는 무시된다

/*+ INDEX(TBBZS800 PK_TBBZS800) */
FROM TBBZS800
정상작동됨

/*+ INDEX(TBBZS800 PK_TBBZS800) */
FROM TBBZS800 A
힌트 무시됨

/*+ INDEX(B PK_TBBZS800) */
FROM TBBZS800 A
힌트 무시됨

/*+ INDEX(A PK_TBBZS800) */
FROM TBBZS800 A
힌트 무시됨

Posted by InuxKr
|

동일한 컬럼 혹은 동일한 알리아스를 가진 컬럼이 존재하는 쿼리를 인라인뷰 로 사용했을때 발생되는 에러메시지

페이징등의 공통으로 실제 실행되는 쿼리를 inline view로 사용
(ex.
     select dept, dname from dept          -- 코드상의 쿼리
     => 
     select * from (                               -- 실제수행되는 쿼리
          select dept, dname from dept)
           )
     where rownum between 1 and 30
)

될경우 코드상의 쿼리가 다음과 같을경우

select dept, dept, dname from dept
or
select dept as dept, dname as dept from dept


위 쿼리들은 단독으로 실행시 동일 알리아스의 컬럼은 인덱스를 붙여 동일 알리아스의 컬럼은 [COLUMNS_NAME]_n 의 형태로 출력되지만 인라인뷰로 사용되었을경우 해당에러메시지를 발생시킨다

Posted by InuxKr
|
오라클 DD 에 대한 설명

Oracle Club 의 모 게시물에 올라온걸 스프레시트로 정리

http://spreadsheets.google.com/ccc?key=pR8kVqmQGU6yRFC8PrL4Few

아래는 다운로드용 엑셀버전

Posted by InuxKr
|

Oracle Error Code

Oracle 2008. 9. 5. 13:46
오라클 에러 메시지 코드표

꽤 자주 필요하지만 매번 찾기가 귀찮아서 엑셀로 된것을 보았는데

엑셀이 없을수도 있으므로

구글 스프레시트에 올려놓았다

http://spreadsheets.google.com/ccc?key=pR8kVqmQGU6wKR2vLdlwpfQ&hl=ko

엑셀버전은 이걸로
Posted by InuxKr
|