'Oracle'에 해당되는 글 16건

  1. 2011.06.19 [Oracle]Oracle DBA Scripts
  2. 2011.05.16 Trace Analyzer
  3. 2010.03.22 [Oracle] For Update의 사용
  4. 2009.11.26 성능 문제에 대한 정확한 이해는 용어에 대한 정확한 이해에서부터 온다.
  5. 2009.04.21 Oracle의 Sun인수...
  6. 2009.03.20 [Oracle]현재월의 첫 특정요일, 마지막 주 특정요일 가져오기
  7. 2009.02.24 Full Outer Join
  8. 2009.01.30 오라클 테이블 락 ( Table lock )
  9. 2009.01.30 ORA-28000 발생시 해결법 (2)
  10. 2008.11.19 Enqueue 와 Latch

[Oracle]Oracle DBA Scripts

DATA/Oracle 2011. 6. 19. 03:56
Oracle DBA Scripts

Oracle-Base.com에 소개된 Oracle DBA Scripts자료이다.
버젼별로 잘 정리가 되었으니 실무에 아주 유용한 자료가 아닐까 생각한다.

링크 : http://www.oracle-base.com/dba/Scripts.php
tags : DBA, Oracle, script
: Comments 0

Write a comment

Trace Analyzer

DATA/Tuning 2011. 5. 16. 11:27

Trace Analyzer

Oracle has provided another utility initially designed for performance tuning Oracle Applications.  Trace Analyzer is provided in the form of a PL/SQL package (TRCA$ ).  The Trace Analyzer utility is available via download on the Oracle Metalink web site. This utility supports only version 8.1.6 and above due the requirement of being able to read OS files from PL/SQL into the database.

How it Works
Trace Analyzer requires that a one-time configuration be performed.  During this configuration, many objects are installed in the database to serve as a tracing repository. Once downloaded from Metalink and installed, a SQL script can be executed passing in the name of the trace file.  Trace Analyzer will then read the trace file and provide useful statistical information. The trace file used by Trace Analyzer is the same .trc file generated by any session trace.

On installation, Trace Analyzer creates the following SQL files. These can be installed locally on a client PC or on the database server itself.

TRCACREA.sql - creates all objects needed by Trace Analyzer by calling other scripts below.
TRCADROP.sql - drops the schema objects.
TRCAPKGB.sql - creates the package body.
TRCAPKGS.sql - creates the package header (specification).
TRCAREPO.sql - creates the staging repository.
TRCADIRA.sql - creates the directory object pointing to the place where the trace files exist (only if placing traces on a directory other than user_dump_dest).
TRCAGRNT.sql - grants privileges needed to use Trace Analyzer
TRCAREVK.sql - revokes privileges granted by TRCAGRNT.
TRCAPURG.sql - purges old SQL traces from the repository.
TRCATRNC.sql - truncates the staging repository.
TRCANLZR.sql - main Trace ANalyzer script that generates the report.
TRCACRSR.sql - generates report for one cursor.
TRCAEXEC.sql - generates report for one cursor execution.

Executing Trace Analyzer
First, tracing needs enabled at the appropriate level. For example, to provide maximum trace data, a Level 12 trace can be started for the current session:
After the session executes for enough time to gain needed data, the trcanlzr SQL script can be executed.  It requires the name of the directory object.  This object points to the physical operating system directory for the user_dump_dest.  The installation of the utility will automatically create the directory object required (named UDUMP).

SQL>@d:\trcanlzr.sql UDUMP asg920xr_ora_13033.trc

Once executed, the output will be displayed on the screen and a spool file is created.
Better than tkprof?
Traditionally, tkprof has been the best tracing diagnostics tool available.  That is, until the introduction of Trace Analyzer which is everything tkprof is and more.   However, as of version 10.2, the Trace Analyzer utility is still not shipped with the Oracle DBMS like tkprof.

Given access to both utilities, Trace Analyzer has the following advantages:

1.   Trace Analyzer provides the actual values of the bind variables in SQL.  No longer are DBAs faced with wondering what the values were at runtime ? Trace Analyzer provides them. 
For the following SQL statement listed in the output:


race Analyzer would also display:

0:"2/4/2003 15:57:35" 1:1

which equates to the actual SQL statement of:


2.   Trace Analyzer provides the hottest blocks, optimizer statistics for indexes and tables and other information not available through tkprof.  The output below shows the SQL statement, the execution plan and statistics for each object in the SQL. 


call      count     cpu   elapsed      disk     query  current          rows    misses
------- ------- -------   -------- -------- --------- --------- ------------ ---------
Parse       1      0.00    0.00       0         0         0            0         0
Execute     3      0.05    0.52       0        27       224          216         0
------- -------- -------- -------- -------- --------- ---------  -----------  --------
total       4      0.05    0.52       0        27       224          216         0

Explain Plan

...owner.index_name                  num rows     blocks     sample last analyzed date
------------------------------------ ---------- ---------- ---------- -------------------

The output above indicates that the EMPLOYEE table does not have statistics. 
3.   Trace Analyzer separates user recursive and internal recursive calls, unlike tkprof.
4.   Trace Analyzer provides more detailed wait event information, which can be very useful to those DBAs that prefer wait-based tuning methodologies.  This data is also very helpful when there is a significant gap between CPU and elapsed times.

Event                                      Times     Count      Max.     Total    Blocks
waited on                                 Waited   Zero Time    Wait    Waited  Accessed
----------------------------------------- --------- --------- -------   ------- --------
PL/SQL lock timer........................     15         0      5.01     75.08
log file sync............................      1         0      0.01      0.01
library cache pin........................      1         0      0.00      0.00
SQL*Net message from client (idle).......      2         0     17.22     30.21
SQL*Net message to client (idle).........      3         0      0.00      0.00
total....................................     22         0     17.22    105.30     0

One drawback concerning Trace Analyzer is that it requires objects in the database (the tracing repository) and that means more configuration work on each database that needs the utility installed.  This is unlike tkprof, which is an executable file always there, ready to serve.
The benefits of the Trace Analyzer far outweigh the negatives since never before has so much useful information been available to the Oracle tuner in one place. Usually, tkprof needs combined with statspack reports and other utilities to provide a comprehensive picture. Trace Analyzer takes tuning to a new level.

원문 : http://www.oracleutilities.com/Packages/trca.html



: Comments 0

Write a comment

[Oracle] For Update의 사용

카테고리 없음 2010. 3. 22. 11:25

안녕하세요. 반갑습니다.
하나의 테이블에서 사용하지 않는 row들중 키(pk)값이 min값을 가져와서 update를 차례로 하는 프로그램을 작성하다가.

한가지 문제가 조금 생겼습니다. c/s 환경상 여러 pc에서 동시에 처리가 되니깐... 동일한 min값을 두 pc에서 사용하지

못하도록 해당 row에 락(lock)을 걸려고 select 문에 for update를 사용하였습니다.
근데 제가 이것을 잘 이해하지 못해서 락이 제대로 걸리지 않습니다. 아래 저의 적용예를 보시고 많은 조언 부탁드립니다.

1. 정상적으로 lock 됨.
       select serial_no /* 사용하지 않는 row중 가장 작은 row */
       from   stock_temp
       where  use_flag = 'N'
        for update ;
    ==> 이경우에는 해당 row가 commit 문이 수행되기전까지 lock이 걸려있습니다.
2. lock이 제대로 되지 않는 경우(♥)
       select serial_no
       from   stock_temp
       where  use_flag = 'N'
       and    substr(serial_no,1,6) = :as_serial_base
       and    rownum = 1
       for update ;

==> 부득이하게 substr()을 사용하여야 하는데 이경우 lock기능이 제대로
실행되지 않는 것 같습니다. 유사한 serial_no를 검색해서 가장 작은 값을 조회할려고
substr 또는 like를 사용하여야 하거든요...ㅠ.ㅠ
※for update기능/원리에 대해서 가르침을 부탁드립니다.
즐거운 하루되세요.


for update 경합은 잘 못 사용할 경우.. 큰 영향을 끼칩니다.

예를 들어  3명이 동시 작업을 진행해 나간다고 할때..
    select col1, col2
    from AT
    where col1 = '20' and rownum = 1
   for update
라는 명령어를 치는 순간 해당 로우에 락이 걸리게 됩니다.
첫번째 사람이 트랜잭션을 완료하기 전에 두번째 사람이 같은 명령어인
    select col1, col2
    from AT
    where col1 = '20' and rownum = 1
    for update

를 시도하면 앞에 사람의 락 때문에 실패하고 재시도를 합니다..(앞에사람이 트랜잭션이 완료될 때까지..)
물론 세번째 사람도 계속 실패하며.. 앞의 트랜잭션이 완료될때까지 재시도하며 기다리게 됩니다.
즉 원래 의도는 첫번째  사람이 하나를 처리하고 있을때 ..
두번째 사람은 그 하나를 제외하고 두번째걸 가져올거라고 생각을 하였겠지만...
하나씩 밖에 처리되지 않고 나머지 사람은 모두 대기 상태이며.. 계속 재시도를 하면서 트래픽만 가중됩니다.
특히나 이런 예는 컴퓨터 수리센터등의 여러명이 동시에 접수를 받을 때 많이 사용하는데요.
위와 같이 하면.. 한명씩 밖에 처리가 되지 않습니다.

이와 대한 명확한 해결책은 대용량 수업이나 책을 보면 나오는데 간단히 설명드리자면..
sequence를 사용하야 약간의 사고를 바꾸면 바로 해결할수 있습니다.
먼저.. 10명이 동시 작업을 한다면..

    create sequence squ
    start with 1
    increment by 1
    maxvalue 10
    cache 9

즉 위와 같이 1-10사이로 cycle 도는 sequence를 만들고...
sql을 다음과 같이 수정합니다.

    select squ.nextval into :A from dual ;
    select rnum, col1, col2
    from ( select rownum as rnum, col1, col2
             from AT
             where col1 = '20')
    where rnum = :A and rownum = 1

보시면 곧 아시겠지만 부연설명을 조금 달자면...처음 select할때 자신이 선택할 놈을 물고 들어가는 겁니다.

즉 4번째라면.. 4라는 squ Number를 가지고 있으므로 4번째 놈이 선택되겠죠.

10명단위로 cycle이 돌기 때문에 10명 이하의 작업시 락이나 경합 발생을 염려하지 않아도 됩니다.

만약 나중에 사람이 늘었다면.. squ sequence의 maxvalue를 수정해 주시면 됩니다.
이렇게 하면.. for update의 경합발생을 우려하지 않고 동시 작업이 가능합니다.

만약 가장 최근 값 순서대로 하고 싶다면.. 힌트등을 select 문에 넣어주어 해당 순서대로 셀렉트 하게 하면 되겠죠.

tags : for update, Oracle
: Comments 0

Write a comment

성능 문제에 대한 정확한 이해는 용어에 대한 정확한 이해에서부터 온다.

DATA/Oracle 2009. 11. 26. 16:23

인간의 생각하는 능력이 언어라는 것을 만들었지만, 거꾸로 언어가 인간의 사고 능력을 지배하게 되죠.

오라클 성능 세계에서도 마찬가지입니다. 용어에 대한 정확한 이해가 없으면 문제를 100% 이해할 수도 없을뿐더러 잘못된 지식을 믿게 됩니다. 예를 들어 볼까요?

Explain Plan과 Execution Plan의 차이를 설명할 수 있습니까?
Scan과 Lookup의 차이는 무엇입니까?
Histogram의 의미는 무엇입니까?
Lock과 Enqueue의 의미를 구분할 수 있습니까?
SQL문과 Cursor의 차이를 설명할 수 있습니까?
Event라는 용어가 언제 쓰이는지 설명할 수 있습니까?
용어을 100% 정확하게 설명할 수 있다면 그 자체로도 성능 문제에 대한 상당한 통찰력을 가지고 있다고 볼 수 있습니다.



'DATA > Oracle' 카테고리의 다른 글

열을 행으로  (0) 2011.12.01
[Oracle]Oracle DBA Scripts  (0) 2011.06.19
[Oracle]현재월의 첫 특정요일, 마지막 주 특정요일 가져오기  (0) 2009.03.20
Full Outer Join  (0) 2009.02.24
오라클 테이블 락 ( Table lock )  (0) 2009.01.30
tags : Oracle, 욱짜
: Comments 0

Write a comment

Oracle의 Sun인수...

잡담 2009. 4. 21. 11:13

사용자 삽입 이미지
"Oracle Buys Sun"
Oracle은 20일 Sun Microsystems를 74억달러에 인수했다고 밝히면서
자사의 홈페이지 메인에 위 그림과 같이 알렸다.
유력하던 IBM도 관심을 보이던 HP도 아닌...
이 소식을 21일 오전에 접했을때, 그냥 아무생각이 나지않았다.
어떻게 받아들여야 하나???
Oracle하면 떠오르는게 DBMS인데 이제는 더 이상 그러면 안될것 같다. 아니 안된다.
People Soft, Siebel Systems, BEA Systems를 인수할때는, "뭐 그럴 수 있지"했는데
이번에는 판이 틀리다. 판이... 기존의 인수업체는 Software업체였다면,
Sun은 Hardware비즈니스 비중이 높은 업체이다.
OS, 미들웨어, 서버, 저장장치, 프로그래밍언어라는 아이템을 획득함으로서
Oracle은 IBM, HP, MS에 전면전을 선포한 셈이다.

이중 나의 관심사는 Java의 앞날이었다.(당연히 DBMS이지만 이슈가 없으므로)
래리엘리슨 Oracle사장은 다행히 Java를 굉장히 높이 평가함으로써 우려를 불식시켰다.
오히려 IBM이나 HP보다 어떻게 보면 Oracle이 인수한 것도 나쁘지 않은것 같기도 하다.
왜냐하면 지금까지 Oracle의 미들웨어 제품군은 대부분 자바를 기반으로 하고 있기 때문이다.
MS에 대항할 만한 거대 공룡기업의 탄생.
앞으로 Oracle의 행보가 궁금하다. 눈 크게 뜨고 지켜봐야겠다.

덧붙임1) 또 Oracle의 주식이 많이 오르겠군...
덧붙임2) 왜 자꾸 매트릭스의 오라클이 생각나는걸까?? -.-a

관련기사 : http://www.zdnet.co.kr/ArticleView.asp?artice_id=20090421073906

'잡담' 카테고리의 다른 글

책을 써볼까?  (0) 2009.09.07
왜 이렇게 모델이 변경되었는지 설명해 주세요!  (0) 2009.07.31
USB메모리를 경품으로 받다  (0) 2008.11.23
Blade & Soul[NCSoft]  (0) 2008.08.05
SQL Server...^^;  (0) 2008.07.09
tags : Java, Oracle, SUN
: Comments 0

Write a comment

[Oracle]현재월의 첫 특정요일, 마지막 주 특정요일 가져오기

DATA/Oracle 2009. 3. 20. 16:08

우리가 가끔 날짜관련 계산을 하다보면 첫번째 월요일이라든가 마지막 주 월요일이라든가...
뭐 이런 날을 가져와야 할 경우가 있다. 그전에는 날짜 테이블이 있어 쉽게 가져올 수 가있었는데
그렇지 않은 경우는 천상 쿼리로 구현할 수 밖에 없다.
여기에서 핵심 함수는 last_day(date), next_day(date,char) 이다.
그 용법은 간단히 소개하면

: 지정한 일자가 포함된 월의 말일
select last_day(sysdate) from dual  -- 지금은 2009년3월20일이다.

: 지정한 일자 다음에 나타나는 지정 요일(두번째 인수)
select next_day((last_day(sysdate)),'금요일') from dual
select next_day((last_day(sysdate)),'금') from dual
select next_day((last_day(sysdate)),6) from dual  -- 일:1 ~ 토:7
뭐 이런식이다

위의 함수를 응용하면 2009년3월의 첫번째 월요일과 마지막주 월요일은 아래와 같이
구할 수 있다.

-- 첫주 월요일
select next_day((trunc(sysdate,'mm')-1),'월') from dual
-- 마지막주 월요일
select next_day((last_day(sysdate)-7),'월') from dual

: Comments 0

Write a comment

Full Outer Join

DATA/Oracle 2009. 2. 24. 09:37
Full Outer Join에 대해 좋은 글이 있어 링크!

Full Outer Join의 비밀

: Comments 0

Write a comment

오라클 테이블 락 ( Table lock )

DATA/Oracle 2009. 1. 30. 02:32

### Lock 확인 쿼리
SELECT do.object_name, do.owner, do.object_type,do.owner, vo.xidusn, vo.session_id,
FROM v$locked_object vo , dba_objects do
WHERE vo.object_id = do.object_id ;

####  어떤 object에 어떤 lock이 걸렸는지 확인
SELECT  T1.object_name, DECODE(locked_mode, 2, 'ROW SHARE', 3, 'ROW EXCLUSIVE',  4, 'SHARE', 5, 'SHARE ROW EXCLUSIVE', 6, 'EXCLUSIVE', 'UNKNOWN') lock_mode
FROM  dba_objects T1, v$locked_object T2
WHERE T1.object_id = T2.object_id;

#### session 확인
select * from v$session where status = 'ACTIVE'

#### cursor 확인

#### 테이블의 lock 확인
AND C.OBJECT_NAME IN ('<테이블이름>');

* LOCK 관련
--V$LOCK 을 사용한 잠금 경합 모니터링
SELECT s.username, s.sid, s.serial#, s.logon_time,
  DECODE(l.type, 'TM', 'TABLE LOCK',
         'TX', 'ROW LOCK',
  o.owner, o.object_name, o.object_type
FROM v$session s, v$lock l, dba_objects o
WHERE s.sid = l.sid
AND o.object_id = l.id1
AND s.username IS NOT NULL   

--락이 걸린 세션 자세히 알아보기
select a.sid, a.serial#,a.username,a.process,b.object_name,
decode(c.lmode,2,'RS',3,'RX',4,'S',5,'SRX',8,'X','NO') "TABLE LOCK",
decode (a.command,2,'INSERT',3,'SELECT',6,'UPDATE',7,'DELETE',12,'DROP TABLE',26,'LOCK TABLE','UNknown') "SQL",
decode(a.lockwait, NULL,'NO wait','Wait') "STATUS"
from v$session a,dba_objects b, v$lock c
where a.sid=c.sid and b.object_id=c.id1
and c.type='TM'

--락이 걸린 세션 간단히 알아보기
select a.sid, a.serial#, b.type, c.object_name, a.program, a.lockwait,
      a.logon_time, a.process, a.osuser, a.terminal
from v$session a, v$lock b, dba_objects c
where a.sid = b.sid
  and b.id1 = c.object_id
  and b.type = 'TM';

select a.sid, a.serial#, a.username, a.process, b.object_name
from v$session a , dba_objects b, v$lock c
where a.sid=c.sid and b.object_id = c.id1
and c.type = 'TM'

--락이 걸린 세션을 찾아 내어 세션을 죽이려고 해도 죽지 않는 경우
--아래 쿼리문으로 OS단의 PROCESS ID를 찾아내어 OS에서 죽인다
--kill -9 프로세스아이디
select substr(s.username,1,11) "ORACLE USER", p.pid "PROCESS ID",
s.sid "SESSION ID", s.serial#, osuser "OS USER",
p.spid "PROC SPID",s.process "SESS SPID", s.lockwait "LOCK WAIT"
from v$process p, v$session s, v$access a
where a.sid=s.sid and
p.addr=s.paddr and
s.username != 'SYS'

--위 쿼리문의 결과가 있다면 락이 걸린 세션이 있다는것이므로 아래의 쿼리문으로 세션을 죽인다


출처 : http://cocoroworld.com/blog/root/entry/오라클-락lock

'DATA > Oracle' 카테고리의 다른 글

[Oracle]현재월의 첫 특정요일, 마지막 주 특정요일 가져오기  (0) 2009.03.20
Full Outer Join  (0) 2009.02.24
ORA-28000 발생시 해결법  (2) 2009.01.30
Enqueue 와 Latch  (0) 2008.11.19
Materialized view  (0) 2008.01.16
tags : lock, Oracle, session
: Comments 0

Write a comment

ORA-28000 발생시 해결법

DATA/Oracle 2009. 1. 30. 02:18

ORA-28000에러는 일정 회수이상 로그인 실패시 계정에 lock이 걸리면서
"ORA-28000: the account is locked"
라는 메시지를 뱉어낸다.
(10g일 경우 설치 후 처음 scott계정을 사용할 때도 이런 에러가 뜬단다. 난 본적이 없어 모르겠다^^;)

1. 일단 sysdba로 접속한다.
sqlplus "/ as sysdba"

2. lock걸린 user를 찾아낸다.
SELECT username, account_status, to_char(lock_date,'yy/mm/dd hh24:mi') lock_date
FROM dba_users;

사용자 삽입 이미지

user가 MODELINGWORLD인 놈이 lock이 걸린걸 확인할 수 있다.

3. lock을 해제한다.

4. 패스워드변경(아무래도 찜찜하니 패스워드도 변경해야겠지)

- 문
그럼 도대체 몇번 로그인을 실패하면 lock이 걸리는 거냐?

- 답
SQL> SELECT p.profile, p.resource_name, p.limit
  2  FROM dba_users u, dba_profiles p
  3  WHERE p.profile = u.profile
  4  AND username='modelingworld';
위와 같은 쿼리를 날리면
결과 중에 'FAILED_LOGIN_ATTEMPTS' 컬럼이 제한 개수이다.

그럼 제한을 풀 수도 있지않을까? 당근 있다.

'DATA > Oracle' 카테고리의 다른 글

Full Outer Join  (0) 2009.02.24
오라클 테이블 락 ( Table lock )  (0) 2009.01.30
Enqueue 와 Latch  (0) 2008.11.19
Materialized view  (0) 2008.01.16
Clustring Factor에 대한 考察  (0) 2007.08.27
tags : lock, Oracle, 에러
: Comments 2

Write a comment

Enqueue 와 Latch

DATA/Oracle 2008. 11. 19. 15:48

◈ enqueue 와 latch
- DBMS의 가장 주된 기능 중에 하나는 동일 자원에 대한 동시 액세스를 관리하는 것이며, 이를 위해 오라클이 사용하는 대표적인 제어 구조가 Enqueue와 Latch 입니다.

- enqueue는 FIFO 구조를 가진 큐 입니다. 먼저 요청한 쪽이 먼저 자원을 획득하는 방식 입니다. 그러나 latch는 enqueue와 달리 자유 경쟁에 의해 latch를 획득하게 되며 먼저 요구했다고 해서 반드시 먼저 획득할 수 있는 것이 아닙니다.

◈ 래치란?
- 래치(Latch) = 빗장, 락(Lock) = 자물쇠

- 래치는 SGA 내부의 메모리 구조에만 적용된다. 래치는 데이터베이스 오브젝트에는 적용되지 않습니다. 오라클 SGA는 많은 래치를 가지고 있으며 이것은 동시 접근에 의한 잠재적인 충돌로 부터 다양한 메모리 구조를 보호하기 위해 사용 합니다.

- 래치가 보호하는 리소스 .SGA 내의 모든 메모리 영역은 Latch를 통해서 획득됨 .Buffer Cache, Shared Pool, Library Cache, Log Buffer - SGA 영역을 탐색하는 모든 행위는 래치 획득 후에만 가능

- 래치 관련 Dynamic Performance Views .V$LATCH : 래치 종류별 통계값

출처 : http://web.oracleclub.com/glossaryview.action?glossary.glossaryId=1441

'DATA > Oracle' 카테고리의 다른 글

Full Outer Join  (0) 2009.02.24
오라클 테이블 락 ( Table lock )  (0) 2009.01.30
ORA-28000 발생시 해결법  (2) 2009.01.30
Materialized view  (0) 2008.01.16
Clustring Factor에 대한 考察  (0) 2007.08.27
tags : Enqueue, Latch, Oracle
: Comments 0

Write a comment