출처 : Real Maria DB [위키북스]
'Oracle > Architecture' 카테고리의 다른 글
[Oracle] ORACLE 11g grid 리소스 설명 [출처] ORACLE 11g grid 리소스 설명 (0) | 2015.10.30 |
---|---|
[Oracle] TAF 와 CTF 개념 (0) | 2015.10.13 |
출처 : Real Maria DB [위키북스]
[Oracle] ORACLE 11g grid 리소스 설명 [출처] ORACLE 11g grid 리소스 설명 (0) | 2015.10.30 |
---|---|
[Oracle] TAF 와 CTF 개념 (0) | 2015.10.13 |
오랜만에 DB Guide net 에 접속했다.
그 중 Index 사용 여부에 대한 가이드 글을 읽고 느낀점에 대해서 정리해 보았다.
먼저 읽은 글의 본문은 아래와 같다.
이병국의 개발자를 위한 DB 이야기: 튜닝(31회)
개발자를 위한 DB 튜닝 실전(1편)
고작 1편보고 왜 작성하느냐...가 아니라 그동안 잠시 잊고 있었던 부분을 다시 짚는 부분과 함께,
예시 쿼리들을 직접 손으로 작성하면서 이렇게 변경해도 되는 구나 ....하기 위해서 작성하는 부분이다.
* 인덱스를 사용하는 것은 언제나 옳다???
- 답은 No 이다. 누구나 알겠지만 Full scan이 성능상 더 효과적인 경우가 있기 때문이다.
아래의 쿼리에 대해서 보자
SELECT SUM(CASE WHEN 활동구분 = ‘방문’ THEN 1 ELSE 0 END) AS 방문횟수
SUM(CASE WHEN 활동구분 = ‘우편’ THEN 1 ELSE 0 END) AS 우편횟수
SUM(CASE WHEN 활동구분 = ‘전화’ THEN 1 ELSE 0 END) AS 전화횟수
SUM(CASE WHEN 활동구분 = ‘SMS’ THEN 1 ELSE 0 END) AS SMS건수
FROM 영업활동 -- 3000만 건 이상의 대용량 테이블(10년 활동 보관)
WHERE 활동일자 BETWEEN ? AND ? -- 조회 구간 최대 1년(인덱스 있음)
AND 활동구분 IN (‘방문’, ’우편’, ’전화’, ‘SMS’)
- 테이블 전체 건수의 1/10에 해당하는 300만 건을 추출
위의 쿼리를 인덱스를 사용하면 엄청난 시간이 소요될 수 있다. 하지만 /*+ FULL(영업활동) */ 힌트를 사용하여 Full Scan을 하면 더 적게 소요될 수 있다.
이 말은 즉 데이터를 scan 시 Block 단위로 읽게(I/O) 된다. Index 를 이용하게 되면 Random access 를 하게 된다. 하지만 full scan을 하게 되면 Seqential read 하게 된다. 물론 다 그런거는 아니겠지만 대부분 Random access 하게 되면 Single block I/O 가 되며, Seqential read 하게 되면 Multi block I/O를 하게 되어 훨씬 I/O양을 줄일 수 있는 효과를 가져올 수 있다.
물론 이 내용들은 머릿속에서 엇박자로 알고 있는 부분들이라 다시 정리하게 되는 것 같다. (이해는 가지만 또 설명하게 되면 어버버 되는 상황??ㅠ)
자세한 내용은 아래에서 읽으면서 정리하는 것을 추천한다.
- I/O 효율화 원리
http://wiki.gurubee.net/pages/viewpage.action?pageId=29065463
해당 내용을 이해한다면 왜 Index를 사용안하고 Full table scan 이 더 효율적인지 이해할 수 있을 것이다.
두번째 내용은 Group by 사용과 성능 이슈 (이 부분은 기존 dbguide.net 내용을 펌~~~)
업무를 진행하다 보면 group by를 많이 사용하게 된다...내 의지와 상관없이...통계 때문일 것이다.
SELECT A.부서코드
, B.부서명
, SUM(A.판매수량) AS 판매수량
, SUM(A.판매금액) AS 판매금액
FROM 판매실적 A -- 1천만 건 이상의 대용량 테이블(10년치 판매 실적)
, 부서 B -- 수백 건 미만의 부서코드
WHERE A.부서코드 = B.부서코드
AND A.판매일자 BETWEEN ? AND ? -- 조회 구간 최대 1주일(인덱스 있음)
GROUP BY A.부서코드, B.부서명
ORDER BY A.부서코드, B.부서명
여기서는 데이터 구간이 총 데이터의 1/100 , 10만건 이하이기에 인덱스를 활용해야 한다고 한다.
또한, 부서명은 order by 절에 영향을 주지 않으며, 부서 테이블은 오로지 부서명을 조회하는 용도로만 사용한다.
부서 테이블은 부서명 조회 용도이며 부서테이블과 관련한 조건절이 없다.
SELECT A.부서코드
, (SELECT 부서명 FROM 부서 WHERE 부서코드 = A.부서코드) AS 부서명
, SUM(A.판매수량) AS 판매수량
, SUM(A.판매금액) AS 판매금액
FROM 판매실적 A -- 1천만 건 이상의 대용량 테이블(10년치 판매 실적)
WHERE A.판매일자 BETWEEN ? AND ? -- 조회 구간 최대 1주일(인덱스 있음)
GROUP BY A.부서코드
ORDER BY A.부서코드
위와 같이 변경하면 부서 테이블에 대한 접근 빈도수를 최대한 줄일 수 있음.
Group by 절의 수행 이전에 부서 테이블을 접근하였으나
개선된 쿼리는 group by 절의 수행 이후에 부서 테이블을 접근하므로 접근 빈도수가 대폭 줄어든 효과
Order by 절의 선행컬럼에 부서명이 있거나, 조건절에 부서 테이블의 컬럼이 있다면 Outer Join 방식으로 변경 불가능
SELECT A.부서코드
, B.부서명
, SUM(A.판매수량) AS 판매수량
, SUM(A.판매금액) AS 판매금액
FROM 판매실적 A -- 1천만 건 이상의 대용량 테이블(10년치 판매 실적)
, 부서 B -- 수백 건 미만의 부서코드
WHERE A.부서코드 = B.부서코드
AND A.판매일자 BETWEEN ? AND ? -- 조회 구간 최대 1주일(인덱스 있음)
AND B.사용여부 = ‘Y’ -- 현재 시점에 사용하는 부서코드
GROUP BY B.부서명, A.부서코드
ORDER BY B.부서명, A.부서코드
아래와 같이 인라인 뷰 방식의 쿼리로 개선 가능
SELECT A.부서코드
, B.부서명
, A.판매수량
, A.판매금액
FROM
(
SELECT 부서코드
, SUM(판매수량) AS 판매수량
, SUM(판매금액) AS 판매금액
FROM 판매실적 -- 1000만 건 이상의 대용량 테이블(10년치 판매 실적)
WHERE 판매일자 BETWEEN ? AND ? -- 조회 구간 최대 1주일(인덱스 있음)
GROUP BY 부서코드
) A, 부서 B -- 수백 건 미만의 부서코드
WHERE A.부서코드 = B.부서코드
AND B.사용여부 = ‘Y’ -- 현재 시점에 사용하는 부서코드
ORDER BY B.부서명, A.부서코드
부서 테이블에 대한 접근 빈도수를 최대한 줄일 수 있었으며, Group by 절의 수행 이후에 부서 테이블을 접근하는 부분이라 접근 빈도수도 줄어드는 효과
하지만, 최종 집계된 부서의 개수가 부서코드 테이블의 전체 개수의 1/100 이상이라면 아래의 쿼리처럼 힌트절 조정을 통하여 성능 개선을 추가적으로 가능
첫번째 쿼리와 같이 Full 로 변경함으로써 성능 효과 개선 가능
SELECT /*+ FULL(B) */
A.부서코드
, B.부서명
, A.판매수량
, A.판매금액
FROM
(
SELECT 부서코드
, SUM(판매수량) AS 판매수량
, SUM(판매금액) AS 판매금액
FROM 판매실적 -- 1000만 건 이상의 대용량 테이블(10년치 판매 실적)
WHERE 판매일자 BETWEEN ? AND ? -- 조회 구간 최대 1주일(인덱스 있음)
GROUP BY 부서코드
) A, 부서 B -- 수백 건 미만의 부서코드
WHERE A.부서코드 = B.부서코드
AND B.사용여부 = ‘Y’ -- 현재 시점에 사용하는 부서코드
ORDER BY B.부서명, A.부서코드
만약 조건절의 판매일자 조회 구간이 한 달 이상이라면 이번에도 인덱스를 사용치 않는 방법으로 아래와 같이 힌트를 이용해 변경 가능
SELECT /*+ FULL(A) FULL(B) */
A.부서코드
, B.부서명
, A.판매수량
, A.판매금액
FROM
(
SELECT 부서코드
, SUM(판매수량) AS 판매수량
, SUM(판매금액) AS 판매금액
FROM 판매실적 -- 1000만 건 이상의 대용량 테이블(10년치 판매 실적)
WHERE 판매일자 BETWEEN ? AND ? -- 조회 구간 최대 1주일(인덱스 있음)
GROUP BY 부서코드
) A, 부서 B -- 수백 건 미만의 부서코드
WHERE A.부서코드 = B.부서코드
AND B.사용여부 = ‘Y’ -- 현재 시점에 사용하는 부서코드
ORDER BY B.부서명, A.부서코드
조회 구간이 한달 이상이라면 대규모의 집계 처리를 의미하므로 두 테이블 모두 인덱스를 타는 것보다는 타지 않는 것이 더 선능에 좋을 것.
Group by 절의 어떠한 형식이나 어떠한 조건에 따라서 성능 개선의 방법은 다양하게 다를 수 있다.
2번째 내용들은 이해를 하기보다는 정리 수준이라 쿼리 개발 때 참고해서 설계하는 것이 좋을 듯 싶다.
[Oracle] Process / Session 모니터링 (0) | 2016.01.17 |
---|---|
[펌][ORACLE] ORA-에러 (0) | 2015.12.22 |
[Oracle] Index monitoring (0) | 2015.12.14 |
[Oracle] Partition Local Index 테스트 (0) | 2015.12.02 |
[ORACLE] ASM 에 Datafile 추가 (1) | 2015.11.25 |
지난 목요일에 아래와 같은 메시지가 뜨면서 접속이 되지 않았다.
[지난 포워딩 미리 확인]
ORA-12516: TNS:listener could not find available handler with matching protocol stack
http://hyunki1019.tistory.com/39
하지만 초당 몇 십MB ~ 몇 백MB 까지 끝임없이 리스너 로그에 14-JAN-2016 13:45:03 * nsevwait_error * 0와 같은 로그가 생기는 것에 대해서 확인이 되지 않아 결국 SR 를 오픈 하였다.
SR에서는 또 똑같은 답변만 왔다...
Process 를 증가 시키라는 내용...
Intermittent TNS-12516 or TNS-12519 or TNS-12520 errors when connecting via Oracle Net (Listener) ( Doc ID 240710.1 )
---------------------------------------------------------------------------------------------------------------------------------------------------
CAUSE
By way of instance registration, PMON is responsible for updating the listener
with information about a particular instance such as load and dispatcher
information. Maximum load for dedicated connections is determined by the
PROCESSES parameter. The frequency at which PMON provides SERVICE_UPDATE
information varies according to the workload of the instance. The maximum
interval between these service updates is 10 minutes.
The listener counts the number of connections it has established to the instance
but does not immediately get information about connections that have terminated.
Only when PMON updates the listener via SERVICE_UPDATE is the listener
informed of current load. Since this can take as long as 10 minutes, there can be
a difference between the current instance load according to the listener
and the actual instance load.
When the listener believes the current number of connections has reached maximum
load, it may set the state of the service handler for an instance to "blocked"
and begin refusing incoming client connections with either of the following
errors:
TNS-12516 TNS:listener could not find instance with matching protocol stack
TNS-12519 TNS:no appropriate service handler found
Additionally, an ORA-12520 error may appear in the listener log.
The output of the LSNRCTL services command will likely show that the service handler is "blocked".
e.g. '"DEDICATED" established:1 refused:0 state:blocked'
SOLUTION
Increase the pfile or spfile setting for PROCESSES.
그래서 다시 확인을 resource_limit 에는 process 수가 limit 까지 차지 않았다고 확인을 줬다..
SR의 마지막 답변이다.
일반적으로 PROCESSES 설정에 하나의 User Process 에서 파생되는 Parallel 작업이나,
Recursive SQL을 수행하기 위한 session fork 는 감안되어 있지 않습니다.
따라서, 숫자상으로 정확히 맞아 떨어 지지는 않습니다.
http://docs.oracle.com/cd/B19306_01/server.102/b14237/initparams169.htm#REFRN10175
PROCESSES
http://docs.oracle.com/cd/B19306_01/server.102/b14237/dynviews_2050.htm#REFRN30206
V$RESOURCE_LIMIT
관련 문서 및 노트를 확인해 보았을때, 현재로써는 PROCESSES를 증가를 검토 하여 주시기 바랍니다.
흠...이대로 종결을 낼 수 밖에 없을 듯 보인다.
일단 내가 조치할 수 있는 방도는 job 에서도 Local DB를 바라보는 Link 들이 있는데 이 것들을 수정 하라고 권고 하는 것 뿐이다.
또한 확인해야 할 사항은 이렇게 Link 를 이용하게 되면 process 수가 증가 여부가 궁금하다.
어떻게 하면 확인이 가능할 지 테스트도 찾아봐야 겠다.
[종결]
[Oracle] v$sesion, v$process, v$sql 컬럼 확인 (0) | 2016.01.18 |
---|---|
[Oracle] ORA-12516: TNS:listener could not find available handler with matching protocol stack (1) | 2016.01.14 |
[Oracle] MS Sql to Oracle Using SQL Developer (3) | 2016.01.12 |
[Oracle] Block 관련 정리 - PCTFREE & PCTUSED (0) | 2016.01.08 |
[ORACLE] udump 내 asynch I/O (1) | 2016.01.06 |
쿼리를 조회하다 보면
자주 사용하는 테이블 및 컬럼이 있다.
이 부분은 자주 사용하다 보니 자연스럽게 해당 컬럼들이 어떠한 값을 가지는지 확인이 가능하다
하지만 그 외의 컬럼에 대해서는 잘 알지 못하는 경우가 있다.
아래는 그루비에서 퍼온 참고할만한 내용이다.
Column | Value | Description |
---|---|---|
SADDR | 070000050F9798E0 | 오라클 메모리의 세션 주소 |
SID | 9542 | 세션 식별자 ( 세션 관련 뷰는 SID컬럼과 조인이 가능 ) |
SERIAL# | 5865 | 세션 시리얼 번호 |
AUDSID | 86855884 | 감사 세션 아이디( AUD$의 SESSIONID 컬럼과 조인 가능) |
PADDR | 07000004FD0771A8 | 이 세션을 소유한 프로세스의 메모리 주소( V$PROCESS의 ADDR 컬럼과 조인 가능) |
USER# | 361 | 오라클 사용자 식별자( DBA_USERS의 USER_ID 컬럼과 조인 가능) |
USERNAME | RAXSOFT | 오라클 사용자 이름 |
COMMAND | 3 | 현재 수행되고 있는 명령문의 타입이 기록된다( AUDIT_ACTIONS의 ACTION 컬럼과 조인 가능) |
OWNERID | 2147483644 | Migratable session을 소유한 사용자의 식별자를 포함. 병렬 실행의 경우, 상위 2바이트는 Query Coordinator의 인스턴스의 ID, 하위 2바이트는 세션 번호를 포함. 그러나, 이 값이 2147483644의 값을 가진다면 의미 없다. |
TADDR | 07000004B519BE58 | 트랜잭션 상태 객체의 주소( V$TRANSACTION의 ADDR컬럼과 조인 가능) |
LOCKWAIT | Lock의 주소( V$LOCK의 ADDR컬럼과 조인 가능) | |
STATUS | ACTIVE | 세션의 상태 |
SERVER | DEDICATED | 서버의 타입 |
SCHEMA# | 361 | 스키마 사용자 아이디 |
SCHEMANAME | RAXSOFT | 스키마 사용자 이름 |
OSUSER | hopefully | OS 클라이언트 사용자 이름 |
PROCESS | 1436:648 | OS 클라이언트 프로세스 ID |
MACHINE | HQ10-NE2256 | OS Machine 이름 |
TERMINAL | HQ10-NE2256 | OS 터미널 이름 |
PROGRAM | SQL*PLUS | OS 프로그램 이름 |
TYPE | USER | 세션 타입 |
SQL_ADDRESS | 0700000502F77800 | 현재 수행되고 있는 SQL문의 구별을 위한 주소 ( V$SQLAREA의 ADDRESS컬럼과 조인 가능) |
SQL_HASH_VALUE | 156003993 | 현재 수행되고 있는 SQL문 구별을 위한 Hash 값( V$SQLAREA의 HASH_VALUE컬럼과 조인 가능) |
SQL_ID | gdwxvqw4nsvnt | |
SQL_CHILD_NUMBER | 0 | |
PREV_SQL_ADDR | 070000043907DF38 | 가장 최근에 수행되었던 SQL문의 구별을 위한 주소( V$SQLAREA의 ADDRESS컬럼과 조인 가능) |
PREV_HASH_VALUE | 3851972948 | 가장 최근에 수행되었던 SQL문 구별을 위한 Hash 값( V$SQLAREA의 HASH_VALUE컬럼과 조인 가능) |
PREV_SQL_ID | cg9wzx3kthwan | |
PREV_CHILD_NUMBER | 0 | |
PLSQL_ENTRY_OBJECT_ID | ||
PLSQL_ENTRY_SUBPROGRAM_ID | ||
PLSQL_OBJECT_ID | ||
PLSQL_SUBPROGRAM_ID | ||
MODULE | SQL*PLUS | 현재 실행되고 있는 모듈의 이름 |
MODULE_HASH | 2468076772 | 모듈의 Hash 값 |
ACTION | 3.1.5 (Build:5) | 현재 실행되고 있는 Action의 이름 |
ACTION_HASH | 775161987 | Action의 Hash 값 |
CLIENT_INFO | 클라이언트의 정보 값 | |
FIXED_TABLE_SEQUENCE | 429762060 | 데이터베이스에 콜을 하고, 다이나믹 퍼포먼스 테이블(Dynamic Perfomance Table)을 조회할 때마다 값이 증가된다. |
ROW_WAIT_OBJ# | 341579 | 락으로 인해 기다리고 있는 로우가 속한 오브젝트 번호를 보여준다.( DBA_OBJECTS뷰의 OBJECT_ID 컬럼과 조인 가능) |
ROW_WAIT_FILE# | 329 | 락으로 인해 기다리고 있는 로우가 속한 파일의 번호를 보여준다.( DBA_DATA_FILES의 FILE_ID, V$DATAFILE의 FILE# 컬럼들과 조인 가능) |
ROW_WAIT_BLOCK# | 335700 | 락으로 인해 기다리고 있는 로우가 속한 블락 번호를 보여준다. |
ROW_WAIT_ROW# | 0 | 락으로 인해 기다리고 있는 블락내의 로우 번호를 보여준다. |
LOGON_TIME | 2008-03-06 오후 2:39:34 | 세션이 로그온한 시간을 나타낸다. |
LAST_CALL_ET | 409 | 세션의 가장 최근의 DB Call이후 지난 시간을 보여준다. |
PDML_ENABLED | NO | 이 컬럼은 PDML_STATUS로 바뀌었음. |
FAILOVER_TYPE | NONE | |
FAILOVER_METHOD | NONE | |
FAILED_OVER | NO | |
RESOURCE_CONSUMER_GROUP | 세션의 현재 Resource Consumer Group을 보여준다.( DBA_RSRC_CONSUMER_GROUPS뷰의 CONSUMER_GROUP컬럼과 조인 가능 ) | |
PDML_STATUS | DISABLED | 세션의 현재 Parallel DML의 상태를 보여준다. |
PDDL_STATUS | ENABLED | 세션의 현재 Parallel DDL의 상태를 보여준다. |
PQ_STATUS | ENABLED | 세션의 현재 Parallel Query의 상태를 보여준다. |
CURRENT_QUEUE_DURATION | 0 | |
CLIENT_IDENTIFIER | Global Application Context에서 이용한다. | |
BLOCKING_SESSION_STATUS | UNKNOWN | |
BLOCKING_INSTANCE | ||
BLOCKING_SESSION | ||
SEQ# | 19373 | |
EVENT# | 116 | |
EVENT | db file sequential read | |
P1TEXT | file# | |
P1 | 329 | |
P1RAW | 149 | |
P2TEXT | block# | |
P2 | 335700 | |
P2RAW | 0000000000051F54 | |
P3TEXT | blocks | |
P3 | 1 | |
P3RAW | 1 | |
WAIT_CLASS_ID | 1740759767 | |
WAIT_CLASS# | 8 | |
WAIT_CLASS | User I/O | |
WAIT_TIME | 0 | |
SECONDS_IN_WAIT | 0 | |
STATE | WAITING | |
SERVICE_NAME | SYS$USERS | |
SQL_TRACE | DISABLED | |
SQL_TRACE_WAITS | FALSE | |
SQL_TRACE_BINDS | FALSE |
Column | Value | Description |
---|---|---|
ADDR | 07000001D6C79EB8 | 프로세스의 메모리 주소 |
PID | 2 | 프로세스 ID |
SPID | 3064180 | OS 프로세스 ID |
USERNAME | RAXSOFT | OS 유저 이름 |
SERIAL# | 1 | 세션 시리얼 번호 |
TERMINAL | UNKNOWN | OS 터미널 이름 |
PROGRAM | oracle@ (PMON) | OS 프로그램 이름 |
TRACEID | Trace ID | |
BACKGROUND | 1 | Background일 때 1 |
LATCHWAIT | Latch Wait 일때 메모리 주소 | |
LATCHSPIN | Latch Spinning 일때 메모리 주소 | |
PGA_USED_MEM | 329394 | |
PGA_ALLOC_MEM | 580290 | |
PGA_FREEABLE_MEM | 0 | |
PGA_MAX_MEM | 580290 |
CNT | 10g V$SQL | 11g V$SQL | DATA TYPE | DESCRIPTION | |
---|---|---|---|---|---|
1 | SQL_TEXT | SQL_TEXT | VARCHAR2(1000) | First thousand characters of the SQL text for the current cursor | |
2 | SQL_FULLTEXT | SQL_FULLTEXT | CLOB | Full text for the SQL statement exposed as a?CLOB?column. The full text of a SQL statement can be retrieved using this column instead of joining with the?V$SQL_TEXT?dynamic performance view. | |
3 | SQL_ID | SQL_ID | VARCHAR2(13) | SQL identifier of the parent cursor in the library cache | |
4 | SHARABLE_MEM | SHARABLE_MEM | NUMBER | Amount of shared memory used by the child cursor (in bytes) | |
5 | PERSISTENT_MEM | PERSISTENT_MEM | NUMBER | Fixed amount of memory used for the lifetime of the child cursor (in bytes) | |
6 | RUNTIME_MEM | RUNTIME_MEM | NUMBER | Fixed amount of memory required during the execution of the child cursor | |
7 | SORTS | SORTS | NUMBER | Number of sorts that were done for the child cursor | |
8 | LOADED_VERSIONS | LOADED_VERSIONS | NUMBER | Indicates whether the context heap is loaded (1) or not (0) | |
9 | OPEN_VERSIONS | OPEN_VERSIONS | NUMBER | Indicates whether the child cursor is locked (1) or not (0) | |
10 | USERS_OPENING | USERS_OPENING | NUMBER | Number of users executing the statement | |
11 | FETCHES | FETCHES | NUMBER | Number of fetches associated with the SQL statement | |
12 | EXECUTIONS | EXECUTIONS | NUMBER | Number of executions that took place on this object since it was brought into the library cache | |
13 | PX_SERVERS_EXECUTIONS | PX_SERVERS_EXECUTIONS | NUMBER | Total number of executions performed by Parallel eXecution Servers. The value is 0 when the statement has never been executed in parallel. | |
14 | END_OF_FETCH_COUNT | END_OF_FETCH_COUNT | NUMBER | Number of times this cursor was fully executed since the cursor was brought into the library cache. The value of this statistic is not incremented when the cursor is partially executed, either because it failed during the execution or because only the first few rows produced by this cursor are fetched before the cursor is closed or re-executed. By definition, the value of the?END_OF_FETCH_COUNT?column should be less or equal to the value of the?EXECUTIONS?column. | |
15 | USERS_EXECUTING | USERS_EXECUTING | NUMBER | Number of users executing the statement | |
16 | LOADS | LOADS | NUMBER | Number of times the object was either loaded or reloaded | |
17 | FIRST_LOAD_TIME | FIRST_LOAD_TIME | VARCHAR2(76) | Timestamp of the parent creation time | |
18 | INVALIDATIONS | INVALIDATIONS | NUMBER | Number of times this child cursor has been invalidated | |
19 | PARSE_CALLS | PARSE_CALLS | NUMBER | Number of parse calls for this child cursor | |
20 | DISK_READS | DISK_READS | NUMBER | Number of disk reads for this child cursor | |
21 | DIRECT_WRITES | DIRECT_WRITES | NUMBER | Number of direct writes for this child cursor | |
22 | BUFFER_GETS | BUFFER_GETS | NUMBER | Number of buffer gets for this child cursor | |
23 | APPLICATION_WAIT_TIME | APPLICATION_WAIT_TIME | NUMBER | Application wait time (in microseconds) | |
24 | CONCURRENCY_WAIT_TIME | CONCURRENCY_WAIT_TIME | NUMBER | Concurrency wait time (in microseconds) | |
25 | CLUSTER_WAIT_TIME | CLUSTER_WAIT_TIME | NUMBER | Cluster wait time (in microseconds) | |
26 | USER_IO_WAIT_TIME | USER_IO_WAIT_TIME | NUMBER | User I/O Wait Time (in microseconds) | |
27 | PLSQL_EXEC_TIME | PLSQL_EXEC_TIME | NUMBER | PL/SQL execution time (in microseconds) | |
28 | JAVA_EXEC_TIME | JAVA_EXEC_TIME | NUMBER | Java execution time (in microseconds) | |
29 | ROWS_PROCESSED | ROWS_PROCESSED | NUMBER | Total number of rows the parsed SQL statement returns | |
30 | COMMAND_TYPE | COMMAND_TYPE | NUMBER | Oracle command type definition | |
31 | OPTIMIZER_MODE | OPTIMIZER_MODE | VARCHAR2(10) | Mode under which the SQL statement is executed | |
32 | OPTIMIZER_COST | OPTIMIZER_COST | NUMBER | Cost of this query given by the optimizer | |
33 | OPTIMIZER_ENV | OPTIMIZER_ENV | RAW(2000) | Optimizer environment | |
34 | OPTIMIZER_ENV_HASH_VALUE | OPTIMIZER_ENV_HASH_VALUE | NUMBER | Hash value for the optimizer environment | |
35 | PARSING_USER_ID | PARSING_USER_ID | NUMBER | User ID of the user who originally built this child cursor | |
36 | PARSING_SCHEMA_ID | PARSING_SCHEMA_ID | NUMBER | Schema ID that was used to originally build this child cursor | |
37 | PARSING_SCHEMA_NAME | PARSING_SCHEMA_NAME | VARCHAR2(30) | Schema name that was used to originally build this child cursor | |
38 | KEPT_VERSIONS | KEPT_VERSIONS | NUMBER | Indicates whether this child cursor has been marked to be kept pinned in the cache using the?DBMS_SHARED_POOL?package | |
39 | ADDRESS | ADDRESS | RAW(8) | Address of the handle to the parent for this cursor | |
40 | TYPE_CHK_HEAP | TYPE_CHK_HEAP | RAW(8) | Descriptor of the type check heap for this child cursor | |
41 | HASH_VALUE | HASH_VALUE | NUMBER | Hash value of the parent statement in the library cache | |
42 | OLD_HASH_VALUE | OLD_HASH_VALUE | NUMBER | Old SQL hash value | |
43 | PLAN_HASH_VALUE | PLAN_HASH_VALUE | NUMBER | Numerical representation of the SQL plan for this cursor. Comparing one?PLAN_HASH_VALUE?to another easily identifies whether or not two plans are the same (rather than comparing the two plans line by line). | |
44 | CHILD_NUMBER | CHILD_NUMBER | NUMBER | Number of this child cursor | |
45 | SERVICE | SERVICE | VARCHAR2(64) | Service name | |
46 | SERVICE_HASH | SERVICE_HASH | NUMBER | Hash value for the name listed in?SERVICE | |
47 | MODULE | MODULE | VARCHAR2(64) | Contains the name of the module that was executing at the time that the SQL statement was first parsed, which is set by calling?DBMS_APPLICATION_INFO.SET_MODULE | |
48 | MODULE_HASH | MODULE_HASH | NUMBER | Hash value of the module listed in the?MODULE?column | |
49 | ACTION | ACTION | VARCHAR2(64) | Contains the name of the action that was executing at the time that the SQL statement was first parsed, which is set by calling?DBMS_APPLICATION_INFO.SET_ACTION | |
50 | ACTION_HASH | ACTION_HASH | NUMBER | Hash value of the action listed in the?ACTION?column | |
51 | SERIALIZABLE_ABORTS | SERIALIZABLE_ABORTS | NUMBER | Number of times the transaction fails to serialize, producing?ORA-08177?errors, per cursor | |
52 | OUTLINE_CATEGORY | OUTLINE_CATEGORY | VARCHAR2(64) | If an outline was applied during construction of the cursor, then this column displays the category of that outline. Otherwise the column is left blank. | |
53 | CPU_TIME | CPU_TIME | NUMBER | CPU time (in microseconds) used by this cursor for parsing, executing, and fetching | |
54 | ELAPSED_TIME | ELAPSED_TIME | NUMBER | Elapsed time (in microseconds) used by this cursor for parsing, executing, and fetching | |
55 | OUTLINE_SID | OUTLINE_SID | NUMBER | Outline session identifier | |
56 | CHILD_ADDRESS | CHILD_ADDRESS | RAW(8) | Address of the child cursor | |
57 | SQLTYPE | SQLTYPE | NUMBER | Denotes the version of the SQL language used for this statement | |
58 | REMOTE | REMOTE | VARCHAR2(1) | Indicates whether the cursor is remote mapped (Y) or not (N) | |
59 | OBJECT_STATUS | OBJECT_STATUS | VARCHAR2(19) | Status of the cursor: VALID - Valid, authorized without errors VALID_AUTH_ERROR - Valid, authorized with authorization errors VALID_COMPILE_ERROR - Valid, authorized with compilation errors VALID_UNAUTH - Valid, unauthorized INVALID_UNAUTH - Invalid, unauthorized INVALID - Invalid, unauthorized but keep the timestamp | |
60 | LITERAL_HASH_VALUE | LITERAL_HASH_VALUE | NUMBER | Hash value of the literals which are replaced with system-generated bind variables and are to be matched, whenCURSOR_SHARING?is used. This is not the hash value for the SQL statement. If?CURSOR_SHARING?is not used, then the value is 0. | |
61 | LAST_LOAD_TIME | LAST_LOAD_TIME | VARCHAR2(76) | Time at which the query plan (heap 6) was loaded into the library cache | |
62 | IS_OBSOLETE | IS_OBSOLETE | VARCHAR2(1) | Indicates whether the cursor has become obsolete (Y) or not (N). This can happen if the number of child cursors is too large. | |
63 | IS_BIND_SENSITIVE | VARCHAR2(1) | |||
64 | IS_BIND_AWARE | VARCHAR2(1) | |||
65 | IS_SHAREABLE | VARCHAR2(1) | |||
66 | CHILD_LATCH | CHILD_LATCH | NUMBER | Child latch number that is protecting the cursor | |
67 | SQL_PROFILE | SQL_PROFILE | VARCHAR2(64) | SQL profile | |
68 | SQL_PATCH | VARCHAR2(30) | |||
69 | SQL_PLAN_BASELINE | VARCHAR2(30) | |||
70 | PROGRAM_ID | PROGRAM_ID | NUMBER | Program identifier | |
71 | PROGRAM_LINE# | PROGRAM_LINE# | NUMBER | Program line number | |
72 | EXACT_MATCHING_SIGNATURE | EXACT_MATCHING_SIGNATURE | NUMBER | Signature calculated on the normalized SQL text. The normalization includes the removal of white space and the uppercasing of all non-literal strings. | |
73 | FORCE_MATCHING_SIGNATURE | FORCE_MATCHING_SIGNATURE | NUMBER | The signature used when the?CURSOR_SHARING?parameter is set to?FORCE | |
74 | LAST_ACTIVE_TIME | LAST_ACTIVE_TIME | DATE | TIme at which the query plan was last active | |
75 | BIND_DATA | BIND_DATA | RAW(2000) | Bind data | |
76 | TYPECHECK_MEM | NUMBER | |||
77 | IO_CELL_OFFLOAD_ELIGIBLE_BYTES | NUMBER | |||
78 | IO_INTERCONNECT_BYTES | NUMBER | |||
79 | PHYSICAL_READ_REQUESTS | NUMBER | |||
80 | PHYSICAL_READ_BYTES | NUMBER | |||
81 | PHYSICAL_WRITE_REQUESTS | NUMBER | |||
82 | PHYSICAL_WRITE_BYTES | NUMBER | |||
83 | OPTIMIZED_PHY_READ_REQUESTS | NUMBER | |||
84 | LOCKED_TOTAL | NUMBER | |||
85 | PINNED_TOTAL | NUMBER | |||
86 | IO_CELL_UNCOMPRESSED_BYTES | NUMBER | |||
87 | IO_CELL_OFFLOAD_RETURNED_BYTES | NUMBER |
[출처]
http://wiki.gurubee.net/display/CORE/Dynamic+View?
추가로 유휴 상태인 세션 확인 쿼리다.
유휴 상태 세션 찾기
select sid, serial#, username, trumc(last_call_et/3600,2)||'hr'last_call_et
from v$session
where last_call_et>7200 and username is not null
- last_call_et 는 "초" 단위이므로 7200 이면 2시간이된다.
유휴 상태 세션 죽이기
alter system kill '<sid>,<seril#>'
[출처]
[Oracle] ORA-12516: TNS:listener could not find available handler with matching protocol stack (2) (0) | 2016.01.19 |
---|---|
[Oracle] ORA-12516: TNS:listener could not find available handler with matching protocol stack (1) | 2016.01.14 |
[Oracle] MS Sql to Oracle Using SQL Developer (3) | 2016.01.12 |
[Oracle] Block 관련 정리 - PCTFREE & PCTUSED (0) | 2016.01.08 |
[ORACLE] udump 내 asynch I/O (1) | 2016.01.06 |
몇일 전 프로세스 이슈인 줄 알고 찾아보면서,
하루에 한번씩 프로세스 현황을 각 DB 마다 수집 하여
통계가 필요할 것 같아 스크립트를 작성해 보았다.
대충은 아니지만 후다닥 만든 부분 이라 앞으로 테스트로 수집하면서
필요하거나 부족한 부분을 보충하면서 완성해야 될 것 같다.
대략 흐름은 아래와 같다.
1. 모니터링을 관장할 DB에서 각 수집을 해야할 DB들의 Link를 생성
2. DB Link를 통해 매일 오전 7시에 각 DB 의 session과 Process 를 수집
(Scheduler 를 이용)
3. 수집 대상은 session / process / instance / host 등이 된다.
(RAC 장비들이 다수이기 때문에 gv$를 이용하여 진행)
스크립트는 아래와 같다
--DB Link생성
CREATE PUBLIC DATABASE LINK DBA_LINK
CONNECT TO SYSTEM
IDENTIFIED BY 비밀번호
USING '(DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = DBIP)(PORT = 포트)))(CONNECT_DATA = (SERVICE_NAME = DB서비스명)))';
--정보를 저장할 Table 생성
create table chk_session
(
l_date date default sysdate not null,
l_instance nvarchar2(20),
l_hostname nvarchar2(20),
ss_max number default 0,
ss_current number default 0,
ss_limit number default 0,
ss_active number default 0,
ss_inactive number default 0,
ps_max number default 0,
ps_current number default 0,
ps_limit number default 0
);
--procedure 생성
create or replace procedure SYS.proc_chk_session
is
begin
insert into chk_session
select
sysdate as rs_date,
b.instance_name AS RS_INSTANCE,
b.host_name AS RS_HOSTNAME,
MAX(case when resource_name='sessions' then MAX_UTILIZATION end) as SESSION_MAX,
MAX(case when resource_name='sessions' then CURRENT_UTILIZATION end) as SESSION_CURRENT,
MAX(case when resource_name='sessions' then LIMIT_VALUE end) as SESSION_LIMIT,
MAX((SELECT COUNT(*) FROM GV$SESSION@DBA_LINK C WHERE C.STATUS='ACTIVE' and b.inst_id=c.inst_id)) AS SESSION_CURRENT_ACTIVE,
MAX((SELECT COUNT(*) FROM GV$SESSION@DBA_LINK C WHERE C.STATUS='INACTIVE' and b.inst_id=c.inst_id)) AS SESSION_CURRENT_INACTIVE,
MAX(case when resource_name='processes' then MAX_UTILIZATION end) as PROCESS_MAX,
MAX(case when resource_name='processes' then CURRENT_UTILIZATION end) as PROCESS_CURRENT,
MAX(case when resource_name='processes' then LIMIT_VALUE end) as PROCESS_LIMIT
from gv$resource_limit@DBA_LINK a, gv$instance@DBA_LINK b
where a.resource_name in ('processes', 'sessions')
and a.inst_id = b.inst_id
GROUP BY sysdate, b.instance_name, b.host_name;
end;
/
--scheduler 생성
begin
SYS.dbms_scheduler.create_job
(job_name => 'check_session_db'
,start_date => TO_TIMESTAMP_TZ('2016/01/16 07:00:00','yyyy/mm/dd hh24:mi:ss')
,job_class => 'DEFAULT_JOB_CLASS'
,JOB_TYPE => 'PLSQL_BLOCK'
,repeat_interval => 'FREQ=DAILY; INTERVAL=1'
,job_action => 'BEGIN PROC_CHK_SESSION; END;'
);
end;
/
--scheduler 활성화 및 테스트 실행
exec sys.dbms_scheduler.enable('check_session_db');
exec sys.dbms_scheduler.run_job('check_session_db');
정말 허접해 보이기는 하지만 나는 이것도 내 경험이라 생각해 본다.
수정 보완점은 아래와 같다.
1. system 계정으로 진행했기 때문에 보안상 문제가 될 소지가 있다. 그래서 이 부분을 각 권한을 따로 부여하여 진행
2. 성능 부분을 체크 안했기 때문에 플랜을 확인하여 최소한의 리소스를 사용
이렇게 하나하나 쿼리를 작성하는 것도 좋을 듯 하다.
[튜닝가이드] 인덱스 사용 여부 관련 생각 + [펌] (0) | 2016.10.06 |
---|---|
[펌][ORACLE] ORA-에러 (0) | 2015.12.22 |
[Oracle] Index monitoring (0) | 2015.12.14 |
[Oracle] Partition Local Index 테스트 (0) | 2015.12.02 |
[ORACLE] ASM 에 Datafile 추가 (1) | 2015.11.25 |
아침부터 장애를 해결하다 보면 시간은 빨리가지만,
그만큼 빨리 지치는 것 같다.
아침에 WAS에서 DB로 접속이 간간이 안된다고 하는데, Toad에서는 접속이 잘 된다는 소리에,
크게 개의치 않고 천천히 Alert 로그를 봤다.
헉!!!!!
ORA-12516: TNS:listener could not find available handler with matching protocol stack
검색해 보니 너무나도 잘 나온 블로그가 나와 있어서...그대로 가져와 쓰고 싶지만..조금만 가져왔다-ㅎ
[출처]http://justckh.blogspot.kr/2013/09/oracle-ora-12516-tns.html
음???process 값이 수정..
확인해봤다.
참고로 여기는 2 node RAC라서 gv$resource_limit 으로 검색했다.
응??
MAX 값은 아니다...
그래서 해당 job 들에 대해서 확인을 해봤다.
어떠한 공통점이 있는지...
확인해 보니, DB_LINK가 모두 사용하고 있었다.
(개발자님...왜 같은 DB에 있는 유저에 대해서도 DB_LINK를 사용해서 보시나요...그냥 권한만 받아서 select 하시지.....-_-+++)
DB_LINK로 접속 테스트해 보았다.
앞에서 적었듯이 2node rac 이기에, 각자 instance에 접속을 테스트 해 보았다.
1번 Instance 는 전혀 문제 없이 접속..
2번 Instance는 접속이 안된다!!!!!!!!리스너 status 는 정상이며 아래와 같이 에러가 발생한다
TNS-12520: TNS:listener could not find available handler for requested type of server
TNS-12520: TNS:listener could not find available handler for requested type of server
Cause: None of the known and available service handlers for requested type of server (dedicated or shared) are appropriate for the client connection.
Action: Run "lsnrctl services" to ensure that the instance(s) have registered with the listener and that the appropriate handlers are accepting connections.
흠...
LSNRCTL SERVICES 를 확인해 보니, state 가 Block 인 것을 확인.
리스너 로그는 어느 순간 4g........왜???
매달 정리해 주는데, 언제 4g Full이 되어 있을까.
리스너 로그는 아래와 같은 에러가 계속 있는 것을 확인 하였다.
...
14-JAN-2016 13:45:03 * nsevwait_error * 0
14-JAN-2016 13:45:03 * nsevwait_error * 0
....
lsnrctl log_status off 로 한 후
리스너 로그를 정리 및 리스너 재시작하였다.
이후에는 에러 발생이 되지 않았아.
해결은 했지만, 무슨 이유로 위와 같은 로그가 끊임없이 쌓였는지 확인이 되지 않는다.
DB Link와 관련된 문제 인 듯 한데...
원인이 발견되면 업데이트 해야겠다.
오늘도 Clear!!!!
[Oracle] ORA-12516: TNS:listener could not find available handler with matching protocol stack (2) (0) | 2016.01.19 |
---|---|
[Oracle] v$sesion, v$process, v$sql 컬럼 확인 (0) | 2016.01.18 |
[Oracle] MS Sql to Oracle Using SQL Developer (3) | 2016.01.12 |
[Oracle] Block 관련 정리 - PCTFREE & PCTUSED (0) | 2016.01.08 |
[ORACLE] udump 내 asynch I/O (1) | 2016.01.06 |
MS Server 에서 Oracle 로 마이그레이션 테스트가 필요하여
직접 진행해 봤다.
Oracle 10g의 경우 현재 최신 버전의 SQL Developer로는 테스트가 되지 않았다.
이유는 저장소를 생성하며 에러가 발생하는 부분인데, 스크립트상 11g 에서만 호환이 되는 부분이라 예상이 되어,
10g는 Sql developer 를 하위 버전으로 진행(3.XX Version) 하였으며 정상적으로 되는 부분을 테스트 하였다.
이 부분을 문서로 만들었으며, 또한 블로그에도 공개하는 바이다.
많은 테스트를 통해서 추가적으로 업데이트를 할 예정이다.(문서상으로 진행하며, 블로그는 최종적으로 올릴까 한다)
많이 참고하시기 바라며, 혹시라도 문의 사항이나 추가 사항이 있으면 댓글 부탁 드립니다.
(이미지는 PDF 파일로 다운받아 보시면 됩니다.)
MS SQL to Oracle using SQL Developer_초안.pdf
MS SQL to Oracle using SQL Developer
By. Louis Kim.
1. 목적
- MS SQL 의 데이터를 Oracle 로 Migration
- 10g 및 11g 테스트 진행 / MS SQL Server 2008 R2
2. 테스트 장비 및 Tool Version
- 10.2.0.5 / sqldeveloper64-3.0.04.34-no-jre
- 11.2.0.4 / sqldeveloper-4.1.3
3. SQL Developer 환경셋팅 (모든 SQL developer 버전 동일)
- SQL Developer 에서 MS SQL 로 접속하기 위해서 JDBC 드라이버 추가 필요
- jtds-1.3.1-dist.zip (http://sourceforge.net/projects/jtds/) 파일을 다운 받아서 압축풀기
- sql developer -> 도구 -> 환경설정 -> 데이터베이스-> 타사 JDBC 드라이버 -> 항목 추가 (압축 푼 Jar 파일 등록)
4. Oracle 접속 및 MS SQL 접속
※ Oracle 권한은 가급적 DBA 권한을 부여하여 진행 (Migration 작업 시 오류 발생하며, 제대로 작업이 진행되지 않음)
- 2개의 DB에 모두 동시에 접속이 가능
- MS SQL Server 접속
- Oracle 접속
- 접속 확인
5. 저장소 생성(Repository)
- Migration 하기 전에 저장소를 반드시 생성
- 저장소는 메타 데이터를 수집 및 변화를 해주는 작업을 해주는 곳
The Migrations Repository is a database schema that stores the meta_data collected and transformed in the migration process.
- 저장소 생성(저장소는 Oracle 에서 생성)
저장소를 생성할 신규 유저(DBA권한을 보유한 유저)로 진행
CREATE USER MIG_USER IDENTIFIED BY MIG_USER DEFAULT TABLESPACE USERS;
GRANT CONNECT, RESOURCE, DBA TO MIG_USER;
생성한 유저(MIG_USER) 로 접속한 후 저장소 생성
도구[탭] -> 이전 -> 저장소 관리 -> 저장소 생성
저장소 생성 시 해당 접속 정보(11g_MIG_USER)로 생성
6. Migration 진행
6-1. MS Server To Oracle 11g
A. Migration 하려는 MS sql 데이터 베이스를 우클릭 하여 [Oracle 이전]을 선택
B. [이전 마법사] 대로 진행
저장소의 경우 앞에서 진행하면서 생성한 저장소를 선택
이름 및 폴더 디렉토리를 지정(Log가 저장)
로그 폴더에 Migration script가 생성 및 저장
온라인으로 진행 시 현재 MSSQL DB의 내용을 가져오게 되며, 오프라인으로 진행 시 Dump파일을 이용하여 MSSQL DB의 내용을 가져오게 된다. (MSSQL 의 dump는 *.ocp 파일을 선택)
데이터 Type을 정할 때 기준으로 삼는 데이터베이스 선택
Data type을 확인 후 변경이 필요할 경우 변경
참고) 블로그1
DATETIME -> TIMESTAMP(6) 에서 DATETIME -> DATE 로
BIGINT -> NUMBER(10,0) 에서 BIGINT -> NUMBER(19,0)
변환할 Object들을 선택
온라인으로 하는 경우 Oracle에 스크립트가 생성
오프라인으로 설정할 경우 생성 스크립트가 설정한 디렉토리에 저장
온라인으로 진행하는 경우 Oracle에 데이터가 자동으로 저장
오프라인으로 하는 경우 저장소에서 만든 경로에 스크립트가 생성
마지막으로 확인 및 진행
완료
확인(User 생성 여부)
Table 및 객체 생성 확인
- Migration 이 완료 되면 우측과 같이 저장소에 해당 내역이 저장되어 있는 것을 확인 가능
- Oracle 에서는 Mig 라는 유저가 생성되어 생성된 유저로 MS SQL 의 정보들이 migration 이 된 것을 확인
6-2. MS Server To Oracle 10g
10g와 동일한 방법으로 진행 하되, 다음과 같은 버전으로 진행(하위버전) sqldeveloper64-3.0.04.34-no-jre
7. 비고
A. 설정 시 문제 사항
요청한 작업을 수행하는 중 오류 발생:
I/O Error: SSO Failed: Native SSPI library not loaded. Check the java.library.path system property.
위의 jtds-1.3.1-dist.zip 을 푼 파일에서 \jtds-1.3.1-dist\x64\SSO 내의 ntlmauth.dll 를 C:\Windows\System32 내에 붙여 넣은 후 종료 후 다시 실행하여 진행
SQL Developer 실행 시 "Unable to create an instance of the Java Virtual Machine error" 오류 발생 : "SQL Developer 설치 폴더"\ide\bin 폴더 내의 ide.conf 파일을 편집기로 열어서 다음과 같이 수정
AddVMOption -Xmx256M
SQL Developer 실행 후 브라우저 창이 안 보이는 경우 : 윈도우 탐색기 옵션에서 "보호된 운영 체제 파일 숨기기"을 해제해야 하고 "숨김 파일 및 폴더 표시"을 설정
"C:\Users\사용자 계정명\AppData\Roaming" 폴더 내의 "SQL Developer" 폴더 삭제 후 다시 SQL Developer 실행
B. 추가 시 작성
[Oracle] v$sesion, v$process, v$sql 컬럼 확인 (0) | 2016.01.18 |
---|---|
[Oracle] ORA-12516: TNS:listener could not find available handler with matching protocol stack (1) | 2016.01.14 |
[Oracle] Block 관련 정리 - PCTFREE & PCTUSED (0) | 2016.01.08 |
[ORACLE] udump 내 asynch I/O (1) | 2016.01.06 |
[Oracle] Datafile 옮기기 (0) | 2015.11.26 |
DB 관련 튜닝을 공부하다 보면 쿼리 튜닝이 아닌 성능적으로 튜닝이 필요한 경우가 있다.
그럴때 마다 나오는 것이 PCTFREE / PCTUSED 다.
하지만 Block 관련된 core 부분을 대충 공부하고 넘어가면, 나처럼 정리된 것을 다시 한번 읽어 보는 경우가 생긴다.
그래서 정리한 나의 Text 문서들을 한번에 복사해서 정리해 봤다.
Block
- Block 단위로 작업 (Defualt 8K)
- DB_BLOCK_SIZE 파라미터는 Create Database 하면서 지정이 되며, Database를 재생성하기 전까지는 변경이 불가능(Standard block size)
- 혹시라도 DB_BLOCK_SIZE 외의 size로 지정하기 위해서는 Buffer Cache 에도 해당 Block size 만큼 공간을 미리 할당해 두어야 함(아니면 에러가 발생)
ex) SQL> create tablespace test_4k datafile 'D:\ora_data\orcl\test_4k.dbf' size 5m blocksize 4k;
ERROR at line 1:
ORA-29339: tablespace block size 4096 does not match configured block sizes
SQL> alter system set db_4k_cache_size=10m; -> DB Cache에 미리 공간을 할당
Data block 구조
-- Block 정보에 대한 size 와 type 확인(Default)
select component, type, description, type_size
from v$type_size
where component in ('KCB', 'KTB');
- Block Header
1. Transaction layer
A. Transaction layer-fixed
- Block Type
- 마지막으로 수행된 Block cleanout 시간
- ITL Entries 정보
- Free list link 정보
- Free space lock 정보
B. Transaction layer-variable
- 24byte를 가짐
- Block 에 있는 Row 를 변경하기를 원하는 실제 ITL 관련 정보 저장
- ITL (Interested Transaction) 특정 Block 에 데이터를 변경해야 할 경우 해당 Block에 사용자 명단에 자신의 정보(TxID)를 적고 변경
(사용하는 대기자 명단)
- 가변성 으로써 기본으로 Table에 대한 1개 / Index에 대한 2개의 ITL 정보
- 테이블이나 인덱스를 생성할 때 INITRANS 파라미터의 값을 변경하면 그 기본값을 변경할 수 있음
2. Cache layer
- Data Block Address(DBA)
- Block Type (ex- Table, Index, Undo..)
- Block Format(v6, v7, v8...)
- System Change Number(SCN: 복구 작업 등에 사용됨)
PCTFREE 와 PCTUSED
PCTFREE (Block의 Defualt 10%)
- Block에 입력되어 있는 데이터들이 Update될 경우를 대비해 예약을 해 두는 공간(오직 Update)
- update 했을 때 행의 크기 증가에 대비해 여유 공간을 만듦
PCTUSED (Block의 Defualt 40%)
- Block에서 row가 삭제되는 경우 Dirty List에 등록된(Free Block 에서 Dirty Block이 된) Block이,
Free Block 되는 상태까지 남은 용량이 얼마나 되는 지 결정하는 값
- Dirty Block이(block 들이 모여서) Free Block 의 상태까지 될 수 있는 값
- PCTUSED 에 설정된 퍼센트 값만큼 남아서 Free space가 확보 되면 이 Block을 Free Block 으로 설정되어 Insert가 가능
※ PCTREE를 많이 주면 Update 가 많이 발생할 경우 좋지만 update가 자주 발생 안되면 비효율적인 공간이 됨
-----------------------------------------------------------------------------------------------
기본 pctfree 10 -> 5로 변경 (update 문이 적을 경우 괜찮을 듯..)
--기존 Table들에 대한 정보
select
table_name, owner, pct_free, pct_used, num_rows
from
dba_tables
where
avg_row_len > 1
and
avg_row_len < .5*&blksz
and
table_name not in
(select table_name from dba_tab_columns b
where
data_type in ('RAW','LONG RAW','BLOB','CLOB','NCLOB')
)
and owner not like '%SYS%'
order by
owner,
table_name
;
rem pctused.sql
set heading off;
set pages 9999;
set feedback off;
--보통 8k 기본(8192)
column db_block_size new_value blksz noprint
select value db_block_size from v$parameter where name='db_block_size';
define spare_rows = 2;
select
' alter table '||owner||'.'||table_name||
' pctused '||least(round(100-((&spare_rows*avg_row_len)/(&blksz/10))),95)||
' '||
' pctfree '||greatest(round((&spare_rows*avg_row_len)/(&blksz/10)),5)||
';'
from
dba_tables
where
avg_row_len > 1
and
avg_row_len < .5*&blksz
and
table_name not in
(select table_name from dba_tab_columns b
where
data_type in ('RAW','LONG RAW','BLOB','CLOB','NCLOB')
)
and owner not like '%SYS%' --SYS 관련 계정 제외
order by
owner,
table_name
;
Row
1. Row Header(Overhead)
- Row에 동시에 Transaction 을 일으키는 것을 막기 위한 Lock 정보 기록
- Row piece에 들어있는 Column Data의 개수 기록
2. Column Data
- 실제로 Data가 저장되는 곳
Row Chaining
- Block의 Column Data 부분에 모두 기록할 수 없을 경우, Row를 다른 Block 에 연결해서 저장
- Row chaining 이 많이 일어나는 경우 Block 의 크기를 크게 해 주면 되지만 wait 현상이 많이 발생(Write complete waits, Buffer Busy Waits 등) 성능 저하 가능성
Row migration
- 특정 Block에 위치하던 Row 가 update 등의 이유로 해당 Block 의 공간이 부족해서 다른 공간으로 이사를 가는 것을 의미
- 해당 Block 에 빈 공간이 부족해서 일어나는 현상이므로 PCTFREE 값을 많이 주거나 테이블 재생성(Reorg) 작업을 통해 줄일 수 있음
- pctfree 가 큰 경우 update 가 많치 않을 경우 공간 비효율성 발생
※ I/O가 더 많이 일어나는 장점
참고 문서
- "오라클 관리 실무" 책을 공부하면서 정리한 내용
사진 출처
[Oracle] ORA-12516: TNS:listener could not find available handler with matching protocol stack (1) | 2016.01.14 |
---|---|
[Oracle] MS Sql to Oracle Using SQL Developer (3) | 2016.01.12 |
[ORACLE] udump 내 asynch I/O (1) | 2016.01.06 |
[Oracle] Datafile 옮기기 (0) | 2015.11.26 |
[Oracle] IMPDP 시 ORA-29913 (0) | 2015.11.20 |
오전에 OS 담당자로부터 dump 관련하여 문제가 있어 보인다고..(단순히 이렇게 던짐...ㅎㄷㄷ)
하여 해당 DB dump 쪽을 모두 확인해 보았다.
당연히!!!alert log에는 어떠한 오류도 없었다!!!
(이럴 때는 자부심이..!!!!ORA- 떨어져 있으면 -_-!!!!!ㅎㅎ)
각설하고, 혹여나 udump 쪽을 확인했다. 예전에 누군가가 trace를 걸어놔서 그거 잡느라 고생했기에...
파일들이 엄청 많아서 확인했더니, 아래와 같은 것들이 있었다.
예전에도 bug로써 패치를 진행하면 해결이 된다고 찾아 봤기에 한번 더 확인해 보았다.
Bug 9772888 - Needless "WARNING:Could not lower the asynch I/O limit to .. for SQL direct I/O It is set to -1" messages (문서 ID 9772888.8)
역시나, 즐겨찾기가 되어 있어서 한눈에 찾아 볼 수 있었다.
일단 내용을 찾아보면 아래와 같다
Description
Trace files may be seen with warning of the form:
WARNING:Could not lower the asynch I/O limit to 160 for SQL direct I/O.
It is set to -1
This bug is specifically for the case of messages showing "It is set
to -1" in the message.
Workaround
Ignore the message - it is spurious and of no value.
The fix only hides the message so that it does not produce "noise"
ASYNCH I/O를 더 낮출 수 없다는 메시지인데, Asynch I/O는 아래와 같다.(발췌)
Asynchronous I/O는 processes들이 write를 한 후에 기다리지 않고 바로 다음 작업을 수행할 수 있도록 해주는 Input/Output mechanism입니다.
Asynchronous I/O는 불필요하게 낭비되는 idle time을 최소화해서 system 성능을 향상시켜 줍니다.
DBWR는 각각의 I/O에 방해받지 않습니다.
patch는 10.2.0.5.2 에서 되니 그 상위 버전으로 패치하면 될 듯 싶다.
현재는 psu가 전혀 안되어 있다.
이번 주 일요일에 작업 완료 후 다시 확인해서 리플로 결과를 공유 하겠습니다.
아래는 HP-UX 관련한 문서 번호이다. 필요 시 찾아보면 좋을 듯 싶다.
HP-UX: Asynchronous i/o (Doc ID 139272.1)
[Oracle] MS Sql to Oracle Using SQL Developer (3) | 2016.01.12 |
---|---|
[Oracle] Block 관련 정리 - PCTFREE & PCTUSED (0) | 2016.01.08 |
[Oracle] Datafile 옮기기 (0) | 2015.11.26 |
[Oracle] IMPDP 시 ORA-29913 (0) | 2015.11.20 |
[Oracle] Windows Opatch 시 74 Error (0) | 2015.11.18 |
▶ 발생원인
▶ 확인/처리
모든 에러메세지는 SM홈피 '참고 -> Oracle_Error'를 에러코드 제목/원인/해결방법 참고
# CTRL-F 를 통해서 ORA-XXX 을 해서 찾을 것
- 담당자 : DBA
(1) ORA-00604: error occurred at recursive SQL level 2
- 원인 : worksheet를 사용할 경우 발생할 수 있음. server process가 대용량 데이터를
처리할시 child cursor과 경합을 벌일 경우 , 다른 프로세스가 같은 child
cursor를 요구할 경우 발생할 수 있음. SQL 수행 중 에러가 발생한 것으로 큰 문제는
없음
- 조치방법 : SQL 문장 실행중 발생한 것이며 서비스 문제 없음
(주간) 발생시 즉시 담당자에게 연락 (야간) 5회 이상 발생시 담당자에게 연락
(2) ORA-01013: user requested cancel of current operation (현 조작의 취소가 요구되었
습니다)
- 원인 : DB에서 작업중이던 사용자가 수행하던 SQL문을 ctrl+C 등으로 강제 종료시켰을
경우 발생할 수 있음
- 조치방법 : 유저가 조작을 취소했을 경우 발생하므로 서비스 문제없음
(주간) 발생시 즉시 담당자에게 연락 (야간) 20회이상 발생시 담당자에게 연락
@@
(3) ORA-1146 signalled during: ALTER TABLESPACE "##" BEGIN BACKUP
- 원인 : Online DB Backup이 시작되었을 경우 발생할 수 있으며, DB의 Tablespace가 이미
Backup mode로 되어 있을 경우 Begin backup을 재시도하려할 때 발생할 수 있음.
9i new feature인 temporary tablespace일 경우 백업의 대상이 아니지만 백업을
시도하려고 했을 경우 발생할 수 있음
- 조치방법 : online DB backup이 일어났을 경우 발생하며 서비스 문제 없음
(주간) 발생시 즉시 담당자에게 연락 (야간) 5회 이상 발생시 담당자에게 연락
(4) ORA-1595 signalled during: alter rollback segment RBS01 shrink to ###
- 원인 : Rollback segment를 shrink 하려고 시도하였으나, 사용중이거나 하는 이유로 인해
shrink에 실패했을 경우 발생되는 에러코드
- 조치방법 : rollback segment를 조작하는 명령어 실행중 명령이 실행할 수 없을 경우 발생하는
에러코드, 데이터 손실 및 서비스 문제없음,
(주간)(야간) 연락 불필요
(5) ORA-02050: transaction 34.66.192307 rolled back, some remote DBs may be in-doubt
- 원인 : 현재 crm_db1서버에서만 이와 같은 에러가 발생하고 있으며, 근본적인 원인을 파악하는 중
2pc와 관련된 application 에러로 판단됨
- 조치방법 : 에러코드에 대한 분석/조치중이며, 서비스에 영향 없으며 연락 불필요
@@
(6) ORA-3217 signalled during: alter tablespace TEMP2 coalesce
- 원인 : DB에서 Tablespace에 대해 coalesce를 수행하는 script가 cron에 의해 자동
실행되고 있으나,대상 tablespace가 현재 다른 session에 의해 사용중이거나 Temporary
tablespace 형식의 TEMP는 coalesce될 수 없으므로 이와 같은 에러메세지가 발생될 수 있음.
- 조치방법 : temporary tablespace에 대한 조작명령어가 실행되지 못했을 경우 발생하는 에러코드,
(주간)(야간) 연락 불필요
@@
(7) ORA-07445: exception encountered: core dump [kcbzps()+688] [SIGSEGV]
[Address not mapped to object] [0] [] []
- 원인 : OS로부터 fatal signal을 받았을 때, 오라클 서버 프로세스가 일으키는 에러코드
- 조치방법 : 여러 조건에서 발생할 수 있음, 발생후 즉각적으로 dba에 알릴 필요는
없으나 서비스 체크는 필요함, crmdb, crmmk db에서 발생하고 있음,
infomail DB에서도 자주 발생하고 있으나 infomail DB의 문제일 경우
바로 서비스 체크를 할 것(db instance가 terminate될 수 있음)
(주간) 발생시 즉시 담당자에게 연락 (야간) 5회 이상 발생시 담당자에게 연락
(8) ORACLE lock이 발견되었습니다. 확인 후 조치 바랍니다.
- 원인 : SQL 수행 중 다른 세션이 사용하고 있는 자원을 Update/delete 등을 하려고
시도하는 경우 발생될 수 있음. 한번에 수백건이 나오기도 하지만,
횟수는 중요하지 않으며 얼마나 오래동안 지속되는지에 따라서 판단해야 함.
- 조치방법 : lock으로 인해서 다른 작업이 멈추어 있는 경우이며 일반적으로
lock이 생기고 나서 곧 풀리지만, 오래지속될 경우 deadlock 이 되어 모든
DML이 rollback 될 수도 있음. 한번에 수백건의 lock이 발생되더라도
10분 이상 지속해서 발생하지 않으면 연락불필요. 10분 이상 지속시에는
deadlock으로 될 수 있으므로 바로 DBA에게 연락 요망
(주간) 발생시 즉시 담당자에게 연락 (야간) 10분 이상 계속 발생시 담당자에게 연락
@@
(9) ORA-00600: internal error code, arguments: [17182]
- 원인 : Oracle heap memory가 corruption되었을 경우 발생함
- 조치방법 : 현재 crm_db1에서 자주 발생하고 있음, memory corruption 으로 인해서
그 내부 문제점 원인을 찾기 어려움, 한국 오라클 기술지원 필요
crmdb, crmmk 에서 자주 발생하고 있음,
(주간) 발생시 즉시 담당자에게 연락 (야간) 5회 이상 발생시 담당자에게 연락
@@
(10) ORA-00600: internal error code, arguments: [729], [10992], [space leak],
- 원인 : User Global Area 에서 공간부족으로 발생하며,(memory housekeeping problem)
데이터 손실 및 서비스 문제는 없음.
- 조치방법 : 데이터 손실 및 서비스 문제는 없음
(주간) 발생시 즉시 담당자에게 연락 (야간) 5회 이상 발생시 담당자에게 연락
(11) ORA-00600: 내부 오류 코드, 인수 : [4400], [48], [], [], [], [], [], []
- 원인 : 현재 crm_db1,2에서 발생하고 있으며, 사용자 트랜잭션이 logoff될 경우에 발생할 수 있음
ORA-02050 분산 환경에러로 인해서 발생하는 에러코드로 보고도어 있음, 데이터 손실
및 서비스 영향없음
- 조치방법 : 서비스 영향없음
(주간) 발생시 즉시 담당자에게 연락 (야간) 5회 이상 발생시 담당자에게 연락
(12) ORA-03113: end-of-file on communication channel(통신 채널에 EOF 가 있습니다)
- 원인 : 현재 crm_db1,2에서 발생하고 있으며, 접속했던 사용자가 불분명하게 DB에 접속이 끊길경우
발생할 수 있음. Java Function Call 문제로 발생할 수 있음. 데이터 손실 및 서비스 영향 없음
- 조치방법 : 서비스 영향없음
(주간) 발생시 즉시 담당자에게 연락 (야간) 5회 이상 발생시 담당자에게 연락
(13) ORA-1237 signalled during: alter database datafile 'xxx
- 원인 : DBA의 명령어 실행으로 발생하며, 데이터파일을 resize 하는중 발생할 수 있음
- 조치방법 : DBA의 명령어 실행으로 발생하며, 명령어 실행시 에러로 DBA에게 메세지가 명령어창에
확인 되므로 연락 불필요.
(14) ORA-000060: Deadlock detected. More info in file XXX
- 원인 : lock이 오래 지속될 경우, DML문에 의해서 deadlock이 발생할 경우 발생함.
오라클은 deadlock이 발생하면 모든 트랜잭션을 rollback 시킴
- 조치방법 : 오라클은 deadlock이 발생하면 모든 트랜잭션을 rollback 시키므로
배치작업에 문제가 생길 수 있음. 배치작업이 재대로 작동하는지 확인요망
(주간) 발생시 즉시 담당자에게 연락 (야간) 5회 이상 발생시 담당자에게 연락.
(15) ORA-00028: your session has been killed
- 원인 : DBA에 의해서 oracle 명령에 의해서 유저가 kill 되었을 경우 나타나는 메세지.
또는 crmdb1에서 발생하는 ORA-02050 transaction XXX rolled back 에 의해서
발생할 수 있음.
(주간) 발생시 즉시 담당자에게 연락 (야간) 20회 이상 발생시 담당자에게 연락
(16) ORA-00600: internal error code, arguments: [1157]
- 원인 : oracle 메모리 에러(보고된 사항 없음)
- 조치방법 : 데이터 손실 및 서비스 이상은 없음.
(주간) 발생시 즉시 담당자에게 연락 (야간) 5회 이상 발생시 담당자에게 연락
(17) ORA-00600: internal error code, arguments: [12235]
- 원인 : oracle의 defunt process 가 생겼을 경우 발생하는 메세지
heavily loaded system 에서 server process의 기동이 느릴 경우 발생할 수 있음
버그로 보고되어 있음 Bug# 3616023
- 조치방법 : defunt process가 발생했을 경우 나타날 수 있음,
데이터 손실 및 서비스 이상은 없음
(주간) 발생시 즉시 담당자에게 연락 (야간) 5회 이상 발생시 담당자에게 연락
(18) ORA-00600: internal error code, arguments: [12333]
- 원인 : Oracle Version과는 관계없음. Oracle Server와 Client상의 network 이상으로
recognize하지 않은 패킷을 클라이언트에서 받았을 겨우 발생할 수 있음,
유저 세션이 비정상적으로 종료되었을 경우 발생할 수 있음
- 조치방법 : application client와 Oracle Server process간에 패킷오류가 있거나
비정상적으로 세션이 끊어졌을 경우 발생할 수 있으며, 데이터 손실 및 서비스에는 이상없음
(주간) 발생시 즉시 담당자에게 연락 (야간) 5회 이상 발생시 담당자에게 연락
(19) ORA-00600: internal error code, arguments: [2141]
- 원인 : 데이터파일을 이동/추가시키려 하나 permission이 없을 경우 발생할 수 있음.
이미 mount/open된 instance에 또다시 같은 instance를 띄울 경우 발생할 수 있음
- 조치방법 : DBA의 명령실행에 의해서 발생할 수 있음, 데이터 손실 및 서비스 이상없음
(주간) 발생시 즉시 담당자에게 연락 (야간) 5회 이상 발생시 담당자에게 연락
(20) ORA-00600: internal error code, arguments: [4411]
- 원인 : 오랫동안 수행되는 배치작업에서 savepoint 문제로 일어날 수 있음
oracle version 8.1.7.2, 9.0.1.2 에서 발생할 수 있음. 버그로 보고되어 있음
8.1.7.3 ,9.0.1.3 ,9.2.0.1 version에서 패치되어있음
- 조치방법 : batch작업이 재대로 돌아가고 있는지 확인 필요
(주간) 발생시 즉시 담당자에게 연락 (야간) 5회 이상 발생시 담당자에게 연락
(21) ORA-00600: 내부 오류 코드, 인수 : [12403]
- 원인 : bitmap index를 사용할 경우 또는 row를 fetch 도중 발생할 수 있음.
oracle version 7.3 이상 8.1.6 이하에서 bitmap index를 사용할 경우 버그로 보고되어 있음
8.1.7 version에서 패치되었음
- 조치방법 : 8.1.6 이하 version의 oracle 에서 bitmap index를 사용했을 경우 발생하므로
개발팀에게 연락요망, 데이터 손실 및 서비스 이상없음
(주간) 발생시 즉시 담당자에게 연락 (야간) 5회 이상 발생시 담당자에게 연락
(22) ORA-00600: 내부 오류 코드, 인수 : [15711], [4], [0x63AA35610],
- 원인 : parallel로 create 명령실행시 발생할 수 있음, 7.3.3 version에서 패치되었음
- 조치방법 : oracle version 확인 , noparallel로 명령 실행
(23) ORA-00600: 내부 오류 코드, 인수 : [18209], [3809926384], [3897286416],
- 원인 : distributed transactions 환경과 관련 있으며, 8.1.7.0 , 9.0 version
에서 버그로 보고되어 있음 bug 1131214.
- 조치방법 : 8.1.7.4 또는 9.2로 patch 할 것, 서비스 이상없음,
(주간) 발생시 즉시 담당자에게 연락 (야간) 5회 이상 발생시 담당자에게 연락
(24) ORA-00600: 내부 오류 코드, 인수 : [4412], [3889941488], [0],
- 원인 : package 생성 명령시 DB link를 사용할 경우 발생할 수 있음, 9.2.0.4 이하
version에서 버그로 보고되어 있음
- 조치방법 : 9.2.0.5로 패치, 서비스 이상없음,
(주간) 발생시 즉시 담당자에게 연락 (야간) 5회 이상 발생시 담당자에게 연락
(25) ORA-00600: 내부 오류 코드, 인수 : [4886], [], [], [], [], [], [], []
- 원인 : procedure 생성 명령시 DB link를 사용할 경우 컴파일 하는동안
remote server를 잃어버려 db link가 비정상적인 상태가 되어 발생할 수 있음
, 9.2.0.4 이하 version에서 버그로 보고되어 있음
- 조치방법 : 서비스 이상없음
(주간) 발생시 즉시 담당자에게 연락 (야간) 5회 이상 발생시 담당자에게 연락
(26) ORA-01013: 현 조작의 취소가 요구되었습니다
- 원인 : 사용자가 CTRL-C 또는 다른 방법으로 연산을 중지했을 경우 발생할 수 있음
- 조치방법 : 사용자에 의한 연산중지로 인해 발행하며 데이터 손실 및 서비스 영향 없음
(주간) 발생시 즉시 담당자에게 연락 (야간) 5회 이상 발생시 담당자에게 연락
(27) ORA-01017: invalid username/password; logon denied
- 원인 : 사용자가 password를 틀려서 login하지 못할 경우 발생
- 조치방법 : 정확한 username password 작성
(주간) 발생시 즉시 담당자에게 연락 (야간) 5회 이상 발생시 담당자에게 연락
(28) ORA-01110: data file XXX
- 원인 : 다른 메세지와 함께 나오는 에러코드
- 조치방법 : 함께 생긴 다른 에러코드를 볼것
(주간) 발생시 즉시 담당자에게 연락 (야간) 5회 이상 발생시 담당자에게 연락
(29) ORA-01114: 208 파일에 블록을 기록하는데 IO 오류입니다
- 원인 : db blck corruption 이 일어났을 경우 발생할 수 있음
- 조치방법 : critical 한 상태일 수 있음. DBA 즉시 Call
(30) ORA-01204: file number is 132 rather than 126 - wrong file
- 원인 : 파일 헤더의 파일 번호가 정확하지 않을 경우 발생, 정확한 데이터파일을
restore해야 함, 복구 수행이 필요
- 조치방법 : critical한 상태일 수 있음. DBA 즉시 call 복구 수행
(31) ORA-01259: unable to delete datafile XXX
- 원인 : 'DROP TABLESPACE INCLUDING CONTENTS AND DATAFILES'
tablespace drop중 파일을 삭제할 수 없을 경우 발생하는 에러코드.
또는 file을 옮기는 중에 발생할 수 있음
- 조치방법 : O/S 에서 file delete 가 보호되어 있을 경우 또는 삭제가 불가능
한 경우 이므로 DBA가 수동으로 삭제하여야 함
(주간) 발생시 즉시 담당자에게 연락 (야간) 5회 이상 발생시 담당자에게 연락
(32) ORA-04031: unable to allocate 4128 bytes of shared memory
- 원인 : shared pool 에 연속적인 메모리 공간을 필요료 하는 package,
function , procedure를 할당할 수 없을 경우 발생
- 조치방법 : dbms_shared_pool.keep 을 쓰거나 shared pool 를 flush,
서비스에 critical 한 상황일 수 있음. DBA 즉시 call
(33) ORA-01595: error freeing extent (2) of rollback segment (5))
- 원인 : Oracle9i의 새로운 기능인 Undo tablespace의 경우에 해당함.
undo tablespace는 rollback segment를 자동으로 관리하며, 시스템 startup초기에
8개의 rollback segment가 있지만 부족할 경우 자동으로 늘어남.
만약 배치작업으로 늘어났다가 필요가 없을 경우 smon이 rollback segment를 자동으로
shrink하고 없애지만 자동으로 shrink할 경우라도 rollback segment를 사용중인
경우 등으로 shrink가 안될 경우 ORA-01595 메세지를 일으킴.
안전하게 무시해도 되는 사항임. oracle version 10에서는 fix되었음.
- 조치방법 : 조치방법 없음, 연락할 필요 없음
(34) ORA-1122 signalled during: alter tablespace XXX offline...
- 원인 : 아래 3개의 에러코드와 함게 발생할 수 있음. dbv를 실행중 발생가능 있음,
tablespace를 offline 하는중 발생할 수 있음
.ORA-1110 database file %s failed verification check
.ORA-1122 data file %s: '%s'
.ORA-1207 file is more recent than control file - old control file
control file 정보와 datafile의 정보가 일치하지 않을 경우 발생
- 조치방법 : 즉시 DBA Call
(35) ORA-1142 signalled during: ALTER TABLESPACE "RBS" END BACKUP...
- 원인 : online backup을 시도하려고 하였으나 backup을 수행할 file을 찾을 수 없을
경우 발생할 수 있음. end backup 을 하려고 했으나 backup mode가 아니라서
end backup을 할 수 없을 경우 발생할 수 있음
-조치방법 : backup mode로 되어 있는 tablespace가 있는지, 백업이 재대로 되었는지
체크 요망
(주간) 발생시 즉시 담당자에게 연락 (야간) 5회 이상 발생시 담당자에게 연락,
(36) ORA-1516 signalled during: alter database datafile '/db03/orarnd/oradata/rnd3...
- 원인 : DBA가 명령어 실행중 발생 가능.
데이터파일 추가 resize 또는 경로이동, offline, 이름변경시 발생할 수 있음
- 조치방법 : 올바른 명령어 실행 , crm_db2의 경우 crm_db1의 sync작업을 하며
crm_db2의 datafile resize를 할 경우 발생할 수 있음
(주간) 발생시 즉시 담당자에게 연락 (야간) 5회 이상 발생시 담당자에게 연락
(37) 감시 대상 프로세스의 DOWN
감시대상 프로세스(/XXXX/tnslsnr LISTENER -inherit)가 DOWN되었습니다.
감시대상 프로세스(ora_arc0_XXX)가 DOWN되었습니다. 프로세스를 확인하여 주시기 바랍니다
감시대상 프로세스(ora_ckpt_XXX)가 DOWN되었습니다. 프로세스를 확인하여 주시기 바랍니다
감시대상 프로세스(ora_dbwr_XXX)가 DOWN되었습니다. 프로세스를 확인하여 주시기 바랍니다
감시대상 프로세스(ora_lgwr_XXX)가 DOWN되었습니다. 프로세스를 확인하여 주시기 바랍니다
감시대상 프로세스(ora_pmon_XXX)가 DOWN되었습니다. 프로세스를 확인하여 주시기 바랍니다
감시대상 프로세스(ora_reco_XXX)가 DOWN되었습니다. 프로세스를 확인하여 주시기 바랍니다
감시대상 프로세스(ora_smon_XXX)가 DOWN되었습니다. 프로세스를 확인하여 주시기 바랍니다
감시대상 프로세스(ora_snp0_XXX)가 DOWN되었습니다. 프로세스를 확인하여 주시기 바랍니다
오라클[XXX] 체크중 장애가 발생하였습니다:ORA-01034: ORACLE not available
오라클[XXX] 체크중 장애가 발생하였습니다:ORA-12541: TNS:no listener
- 원인 : 작업중에 DB는 shutdown 했으면 발생할 수 있음,
작업중이 아니면 DB서비스가 down된 것이므로 critical한 인시던트임.
아래와 같은 메세지가 나오면
- 조치방법 : 즉시 DBA를 call할 것 (주/야간)
(37) ORA-1537 signalled during: alter tablespace XXX
- 원인 : DBA의 명령어 실행중 이미 있는 파일에 데이터파일을 추가하려고 할 경우 발생할 수 있음
- 조치방법 : 다른 파일 명으로 데이터파일을 추가
(주간) 발생시 즉시 담당자에게 연락 (야간) 5회 이상 발생시 담당자에게 연락
(38) ORA-12203: TNS:unable to connect to destination
- 원인 : Oracle network 전송 문제로 인해서 접속이 불가능 할 경우, 또는 네트워크 설정이
잘못되었을 경우 발생할 수 있음
- 조치방법 : network 설정 올바른 설정
(주간) 발생시 즉시 담당자에게 연락 (야간) 5회 이상 발생시 담당자에게 연락
(39) ORA-1644 signalled during: alter tablespace TS_DPACM015 read only...
- 원인 : 이미 read only tablespace를 또 다시 read only로 할 경우 발생하는 에러코드
- 조치방법 : 서비스 이상없음
(주간) 발생시 즉시 담당자에게 연락 (야간) 5회 이상 발생시 담당자에게 연락
(40) 파일시스템(/oracle )의 가용공간이 위험수준에 도달하였습니다(사용율:100%, 가용:5045KBytes)
- 원인 : DB file system 이 full 이 되었을 경우
- 조치방법 : DBA 즉시 call
(41) ORA-1650: unable to extend rollback segment XXX by 19200 in tablespace RBS
- 원인 : rollback segment에 큰 용량의 initial , next extent size 를 가지는 segment를
생성 또는 데이터를 insert하려 할 경우 발생할 수 있음
- 조치방법 : rollback segment를 일반 permanent tablespace에 만드는 경우에는
rollback segment를 shrink 시키고 coalesce를 시킨다.
undo tablespace를 사용하는 경우에는 이러한 메세지가 발생할 경우,
undo tablespace의 size를 늘려주어야 한다.
(주간) 발생시 즉시 담당자에게 연락 (야간) 발생시 즉시 담당자에게 연락
(42) ORA-1652: unable to extend temp segment by 512 in tablespace
- 원인 : drop table, create index, create table 추가시, 삭제 및 생성 할tablespace에
일시적으로 temporary segment를 만들려 하지만 size가 작을 경우 발생하는 메세지
- 조치방법 : segment를 생성및 삭제하려는 tablespace에 대해서 size를 늘려줄 것
(주간) 발생시 즉시 담당자에게 연락 (야간) 발생시 즉시 담당자에게 연락
(43) ORA-1653: unable to extend table USPODS.TB_PPCM019_BK by 64 in
- 원인 : segment의 initial, next 또는 uniform size 값보다 큰 데이터가 들어갈 경우
발생할 수 있음
- 조치방법 : 해당 tablespace size를 늘려줌
(주간) 발생시 즉시 담당자에게 연락 (야간) 발생시 즉시 담당자에게 연락
(44) ORA-01662 tablespace 'TEMP' is non-empty and cannot be made temporary
ORA-01662 signalled during: alter tablespace temp temporary...
- 원인 : temporary tablespace에 남아 있는 sort작업이 있지만 , 이 temporary tablespace를
변경하거나 drop 하려 할 경우 발생할 수 있음
- 조치방법: 새로운 temporary tablespace를 만들어주고, default tempoaray tablespace를
새로운 temporary tablespace에 지정. v$tempseg_usage 를 조회해서 기존 temporary
tablespace 에서 sort 작업이 없어진 것을 확인하고 drop 할 것
(주간) 발생시 즉시 담당자에게 연락 (야간) 발생시 즉시 담당자에게 연락
(45) ORA-1688: unable to extend table XXX
- 원인 : tablespace에 데이터를 넣으려 하나 extent 가 부족할 경우 발생
- 조치방법 : 새로운 데이터파일 추가 또는 데이터파일 resize를 하여 문제 해결
(주간) 발생시 즉시 담당자에게 연락 (야간) 발생시 즉시 담당자에게 연락
(46) EXTENT error
ORACLE[XXX] Segment next extent 발생시 에러를 발생할 수 있는 Segment가 발견되었습니다
Oracle xxx DB Ext.Fail:XXXX - call DBA
- 원인 : 데이터를 입력하려고 할 경우, extent를 할당 받은 상태에서 데이터를 입력해야 하며
부족할 경우 새로운 extent를 할당받아야 데이터를 추가할 수 있음. 데이터파일의 공간 부족으로
인해서 extent를 할당 받을 수 없을 경우 발생할 수 있음
- 조치방법 : 데이터파일의 크기를 중가시킬 것
(주간) 발생시 즉시 담당자에게 연락 (야간) 발생시 즉시 담당자에게 연락
(47) ORA-01555 caused by SQL statement below (SCN: 0x04e5.a634f3be):
ORA-01555 snapshot too old
- 원인 : rollback segment에 기록된 사항을 다른 writer가 사용하거나 변경했을 경우
이를 다시 조회하려 할 경우 비일관성으로 인해 발생하는 에러메세지.
배치작업의 일부가 rollback될 소지가 있음.
- 조치방법 : Oracle9i 에서 undo_management=auto로 되어있을 경우 undo_retention값을
즐려주어야 함. 또는 rollback segment tablespace의 크기를 증가 시킴
(주간) 발생시 즉시 담당자에게 연락 (야간) 발생시 즉시 담당자에게 연락
(46) ORA-27063: skgfospo: 읽기/쓰기 바이트의 수가 틀립니다
- 원인 : OS 의 file size가 제한되어 있을 경우 데이터파일을 resize할 경우 발생할 수
있음. crm_db2의 경우 발생가능
일반적으로 limit된 값이 지정되어 있을 경우 발생할 수 있음.
OS 의 NFS를 사용할 경우 mount가 재대로 안되어 있을 경우 발생 가능.
- 조치방법 : DBA 명령시 resize 명령 및 OS file 제한을 참고.
autoextend가 있는 file에 대해서 에러를 일으킬 수 있으니 autoextend off
할 것
(주간) 발생시 즉시 담당자에게 연락 (야간) 발생시 즉시 담당자에게 연락
(47) ORA-30021 signalled during: alter tablespace undotbs coalesce...
- 원인 : oracle9i 새로운 기능인 undo tablespace 를 사용할 경우 coalesce를 하게 되면
에러 발생
- 조치방법 : undo tablespace 를 사용시 coalesce하지 말것
(주간) 발생시 즉시 담당자에게 연락 (야간) 5회 이상 발생시 담당자에게 연락
(48) ORA-3297 signalled during: alter database datafile
- 원인 : 데이터파일을 resize하서 줄이려 하지만 줄이지 못할 경우 발생
- 조치방법 : DBA의 명령어 실행중 발생할 수 있음
(주간) 발생시 즉시 담당자에게 연락 (야간) 5회 이상 발생시 담당자에게 연락
(49) ORA-959 signalled during:
- 원인 : tablespace를 변경하거나 참고하는 작업을 할 경우, 실제 테이블 스페이스가 없을 경우
발생할 수 있음
- 조치방법 : dba_tablespaces를 확인후 정확한 tablespace 를 지정할 것
(주간) 발생시 즉시 담당자에게 연락 (야간) 5회 이상 발생시 담당자에게 연락
(50) ORA-02068: following severe error from XXX
- 원인 : DB LINK를 통해 다른 서버에 접속시 접속 불능일 경우 확인
- 조치방법 : db link 와 username, password 확인 후 처리 , network설정 확인
(주간) 발생시 즉시 담당자에게 연락 (야간) 발생시 즉시 담당자에게 연락
(51) ORA-1632: max # extents 121 reached in index XXX
- 원인 : 인덱스 생성시 설정했던 storage 절의 maxextents값에 현재의 extents값이
도달했을 경우 생길 수 있는 에러코드
- 조치방법 : maxextents 값을 늘려줄 것.
(주간) 발생시 즉시 담당자에게 연락 (야간) 발생시 즉시 담당자에게 연락
(52) 오라클[XXX] SEGMENT(XXX)에 enqueue가 발생하였습니다.
- 원인 : oracle enqueue는 oracle lock과 동일한 의미임. 공유되어 있는 row, table 등에
대해서 DML문을 실행하여 exclusive mode가 되어 있는 segment를 다른 세션에서
DML 문을 하려 할 경우 발생할 수 있음.
- 조치방법 : enqueue도 일종의 lock 이므로 지속적으로 일어날 경우 deadlock으로
될 수 있음, 한번에 수백건의 enqueue이 발생되더라도 10분 이상 지속해서 발생하지
않으면 연락불필요. 10분 이상 지속시에는 deadlock으로 될 수 있으므로
바로 DBA에게 연락 요망
(주간) 발생시 즉시 담당자에게 연락 (야간) 10분 이상 계속 발생시 담당자에게 연락
(53) Oracle[XXX] objects that will have trouble throwing extents.
- 원인 : extent fail이 난 것임
- 조치방법 : 바로 DBA를 call 할 것, oracle background_dump_dest 위치에서
alert log의 extent fail에 찾아보고 처리할 것.
(주간) 발생시 즉시 담당자에게 연락 (야간) 발생시 즉시 담당자에게 연락
(54) ORA-00600: internal error code, arguments: [547]
- 원인 : alter system flush shared_pool 명령을 했을 경우 발생할 수 있음
정확한 원인에 대한 보고는 없음
- 조치방법 :
(주간) 발생시 즉시 담당자에게 연락 (야간) 5회이상 발생시 즉시 담당자에게 연락
(55) OWNER SEGMENT_NAME SEGMENT_TYPE TABLESPACE_NAME NEXT_EXTENT
- 원인 : extent fail이 난 것임
- 조치사항 : extent check script를 수행하거나, oracle background_dump_dest에서
alert log를 확인해서 extent fail난 segment를 찾아서 조치할 것
(주간) 발생시 즉시 담당자에게 연락 (야간) 발생시 즉시 담당자에게 연락
(56) 이외의 에러코드
- 무조건 DBA call
[출처] oracle error |작성자 작은새
[튜닝가이드] 인덱스 사용 여부 관련 생각 + [펌] (0) | 2016.10.06 |
---|---|
[Oracle] Process / Session 모니터링 (0) | 2016.01.17 |
[Oracle] Index monitoring (0) | 2015.12.14 |
[Oracle] Partition Local Index 테스트 (0) | 2015.12.02 |
[ORACLE] ASM 에 Datafile 추가 (1) | 2015.11.25 |