반응형

http://www.ex-em.com/web/research/research_pub.php

출처: http://exem.tistory.com/891 [엑셈 이야기]

출처: http://exem.tistory.com/891 [엑셈 이야기]



SQL튜닝의 시작 사용_SQL.zip


반응형
반응형


ORA-27086: unable to lock file - already in use

In Alert log :

Thu Feb 14 09:34:57 EST 2013
Errors in file /u01/app/oracle/admin/rdmetdev/udump/rdmetdev_ora_6321.trc:
ORA-27050: function called with invalid FIB/IOV structure
Additional information: 2
ORA-27086: unable to lock file - already in use
Linux-x86_64 Error: 37: No locks available
Additional information: 10

usually this problem occurred because NFS is Hanged,and can check OS logs to find "statd: server localhost not responding, timed out".

1- Check rpc.stat is working and you can restart again , and you have to Restart NFS Services also 

Stop : 

# service nfslock stop
# service nfs stop
# service portmap stop
# umount /proc/fs/nfsd
 Start :
# service portmap start
# service nfs start
# service nfslock start
# mount -t nfsd nfsd /proc/fs/nfsd

Please follow the order, also note that when you restart the NFS service the server could hang at most for 1 minute.

Finally you should Reboot your server.


Thank you
Osama Mustafa


출처 : http://osamamustafa.blogspot.kr/2013/02/ora-27086-unable-to-lock-file-already.html

반응형
반응형

分类: Linux


修改时间 21-NOV-2011     类型 BULLETIN     状态 PUBLISHED 

Applies to:

Oracle Server - Enterprise Edition - Version: 8.1.5.0 to 11.1.0.6 - Release: 8.1.5 to 11.1
Information in this document applies to any platform.

Purpose

The purpose of this bulletin is to assist support analysts in understanding and 
resolving the stranded dba_2pc_entries.

Scope and Application

The intended audience are support analysts having good experience on distributed
databases.

How To Resolve Stranded DBA_2PC_PENDING Entries


Contents

1. Problem Description
2. Solutions
2.1 Dba_2pc entries without a corresponding transaction
2.2 Distributed transaction without corresponding dba_2pc entries
2.3 How to PURGE the DISTRIBUTED transaction in PREPARED state, when COMMIT
or ROLLBACK FORCE hangs ?, where we have entries for both Distributed
transaction and dba_2pc entries.

1. Problem Description:
=======================

As a result of a failed commit of a distributed transaction, some entries can
be left in dba_2pc views, i.e. dba_2pc_pending and dba_2pc_neighbors. The RECO
process checks these views to recover the failed txn. However, in some cases
RECO cannot perform. the recovery. One cause is that all sites involved in the
transaction not being accessible at the same time. Another cause is dba_2pc
views being inconsistent with the transaction table, which is the topic of
this article. This cause can further be classified as follows:

1. dba_2pc views have entries for a non-existent distributed transaction

2. There is a distributed transaction for which there are no entries in
dba_2pc views

3. How to PURGE the DISTRIBUTED transaction in PREPARED state, when COMMIT
or ROLLBACK FORCE hangs ?, where we have entries for both Distributed
transaction and dba_2pc entries.

Solutions to each subclass is provided in the rest of the article.


2. Solutions:


2.1 Dba_2pc entries without a corresponding transaction


In this case dba_2pc views show distributed transactions but there are no txns
in reality. If the state of the transaction is committed, rollback forced or
commit forced then this is normal and it can be cleaned up using

dbms_transaction.purge_lost_db_entry

However, if the state of the transaction is PREPARED and there is no entry in
the transaction table for it then this entry can be cleaned up manually as
follows:



set transaction use rollback segment SYSTEM;
delete from sys.pending_trans$ where local_tran_id = ;
delete from sys.pending_sessions$ where local_tran_id = ;
delete from sys.pending_sub_sessions$ where local_tran_id = ;
commit;

Example:
--------
The following query reports a dist. txn. in prepared state
select local_tran_id, state from dba_2pc_pending;
LOCAL_TRAN_ID STATE
---------------------- ----------------
1.92.66874 prepared

Given that a transaction id is composed of triple,
'1.92.66874' is located in rollback segment# 1. To find out the list of
active transactions in that rollback segment, use:

SELECT KTUXEUSN, KTUXESLT, KTUXESQN, /* Transaction ID */
KTUXESTA Status,
KTUXECFL Flags
FROM x$ktuxe
WHERE ktuxesta!='INACTIVE'
AND ktuxeusn= 1; <== this is the rollback segment#

no rows selected

It is not possible to rollback force or commit force this transaction.



rollback force '1.92.66874';

ORA-02058: no prepared transaction found with ID 1.92.66874

Hence, we have to manually cleanup that transaction:



set transaction use rollback segment SYSTEM;

delete from sys.pending_trans$
where local_tran_id = '1.92.66874';

delete from sys.pending_sessions$ where local_tran_id = '1.92.66874';

delete from sys.pending_sub_sessions$ where local_tran_id = '1.92.66874';

commit;


2.2 Distributed transaction without corresponding dba_2pc entries

In this case dba_2pc views are empty but users are receiving distributed txn
related errors, e.g. ORA-2054, ORA-1591. Normally such a case should not appear
and if it is reproducible a bug should be filed. Here is the list of several
alternative solutions that can be used in this case:

a. Perform. incomplete recovery
b. Truncate the objects referenced by that transaction and import them
c. Use _corrupted_rollback_segments parameter to drop that rollback segment
d. Insert dummy entries into dba_2pc views and either commit or rollback
force the distributed transaction

The first three solutions are discussed in Backup and Recovery manuals and in
the notes referred above. In the 4th solution a dummy entry is inserted into
the dictionary so that the transaction can be manually committed or rolled back.
Note that RECO will not be able to process this txn and distributed txn recovery
should be disabled before using this method. Furthermore, please take a BACKUP
of your database before using this method.

The stranded entries is the cause of ORA-01591 so we need to
clear the stranded entries by purging them using

execute DBMS_TRANSACTION.PURGE_LOST_DB_ENTRY('transanction_id');



The following example describes how to diagnose and resolve this case. Suppose
that users are receiving



ORA-1591: lock held by in-doubt distributed transaction 1.92.66874

and the following query returns no rows:



select local_tran_id, state from dba_2pc_pending
where local_tran_id='1.92.66874';

no rows selected

Furthermore querying the rollback segment shows that 1.92.66874 remains in
prepared state



SELECT KTUXEUSN, KTUXESLT, KTUXESQN, /* Transaction ID */
KTUXESTA Status,
KTUXECFL Flags
FROM x$ktuxe
WHERE ktuxesta!='INACTIVE'
AND ktuxeusn= 1; /* <== Replace this value with your txn undo seg#
Which is displayed in the first part of
the transaction ID */

KTUXEUSN KTUXESLT KTUXESQN STATUS FLAGS
---------- ---------- ---------- ---------------- ------------------------
1 92 66874 PREPARED SCO|COL|REV|DEAD


Trying to manually commit or rollback this transaction



commit force '1.92.66874';

ORA-02058: no prepared transaction found with ID 1.92.66874

raises ORA-02058 since dba_2pc views are empty. In order to use commit force or
rollback force a dummy record should be inserted into pending_trans$ as follows:



alter system disable distributed recovery;

insert into pending_trans$ (
LOCAL_TRAN_ID,
GLOBAL_TRAN_FMT,
GLOBAL_ORACLE_ID,
STATE,
STATUS,
SESSION_VECTOR,
RECO_VECTOR,
TYPE#,
FAIL_TIME,
RECO_TIME)
values( '1.92.66874', /* <== Replace this with your local tran id */
306206, /* */
'XXXXXXX.12345.1.2.3', /* These values can be used without any */
'prepared','P', /* modification. Most of the values are */
hextoraw( '00000001' ), /* constant. */
hextoraw( '00000000' ), /* */
0, sysdate, sysdate );

insert into pending_sessions$
values( '1.92.66874',/* <==Replace only this with your local tran id */
1, hextoraw('05004F003A1500000104'),
'C', 0, 30258592, '',
146
);

commit;

commit force '1.92.66874';


If commit force raises an error then note the errormessage and execute the
following:


delete from pending_trans$ where local_tran_id='1.92.66874';
delete from pending_sessions$ where local_tran_id='1.92.66874';
commit;
alter system enable distributed recovery;

Otherwise run purge the dummy entry from the dictionary, using

alter system enable distributed recovery;
connect / as sysdba
COMMIT;
Use following query to retrieve the value for such _smu_debug_mod parameter:

col Parameter for a20
col "Session Value" for a20
col "Instance Value" for a20

SELECT a.ksppinm "Parameter",b.ksppstvl "Session Value",c.ksppstvl "Instance Value"
FROM x$ksppi a, x$ksppcv b, x$ksppsv c
WHERE a.indx = b.indx AND a.indx = c.indx AND a.ksppinm = '_smu_debug_mode'
/


-- set it temporarily to 4:


alter system set "_smu_debug_mode" = 4; /* if automatic undo management
is being used */
-- in 9.2x alter session can be used instead.

commit; /* this is to prevent the ORA-01453 in purge_lost_db_entry call */

exec dbms_transaction.purge_lost_db_entry( '1.92.66874' );

SQL> commit;

SQL> alter system set "_smu_debug_mode" = ;

SQL> commit;



2.3 How to PURGE the DISTRIBUTED transaction in PREPARED state, when COMMIT
or ROLLBACK FORCE hangs ?, where we have entries for both Distributed
transaction and dba_2pc entries.



ORA-01591: lock held by in-doubt distributed transaction 44.88.85589

The row exist from dba_2pc_pending & Rollback segment



SQL> SELECT LOCAL_TRAN_ID,STATE FROM DBA_2PC_PENDING;

LOCAL_TRAN_ID STATE
----------------- -----------
44.88.85589 prepared


SQL> SELECT KTUXEUSN, KTUXESLT, KTUXESQN, /* Transaction ID */
KTUXESTA Status,
KTUXECFL Flags
FROM x$ktuxe
WHERE ktuxesta!='INACTIVE'
AND ktuxeusn= 44; /* <== Replace this value with your txn undo seg#
Which is displayed in the first part of
the transaction ID */

KTUXEUSN KTUXESLT KTUXESQN STATUS FLAGS
---------- ---------- ---------- ---------------- ------------------------
44 88 85589 PREPARED SCO|COL|REV|DEAD


SQL> Commit force 44.88.85589;
SQL> rollback force 44.88.85589;


Executing COMMIT or ROLLBACK FORCE hangs

The wait event is ""free global transaction table entry"


Purging the transaction should fail with below error:



EXECUTE DBMS_TRANSACTION.PURGE_LOST_DB_ENTRY('44.88.85589');
BEGIN DBMS_TRANSACTION.PURGE_LOST_DB_ENTRY('44.88.85589'); END;

*
ERROR at line 1:
ORA-06510: PL/SQL: unhandled user-defined exception
ORA-06512: at "SYS.DBMS_TRANSACTION", line 94
ORA-06512: at line 1



Solution:
--------

You have to implement both the solution :

2.1 Dba_2pc entries without a corresponding transaction
2.2 Distributed transaction without corresponding dba_2pc entries

1.

delete from sys.pending_trans$ where local_tran_id = '44.88.85589';
delete from sys.pending_sessions$ where local_tran_id = '44.88.85589';
delete from sys.pending_sub_sessions$ where local_tran_id ='44.88.85589';
commit;


2. Now insert the dummy record as explained in section:

2.2 Distributed transaction without corresponding dba_2pc entries
commit;

3. Commit force '44.88.85589'

4. Purge the transaction:

exec dbms_transaction.purge_lost_db_entry('44.88.85589');


Note:126069.1 Manually Resolving In-Doubt Transactions: Different Scenario's

Still have questions ?

To discuss this information further with Oracle experts and industry peers, we encourage you to review, join or start a discussion via My Oracle Support Streams and Distributed Database Community


References

NOTE:100664.1 - Master Note for Troubleshooting Oracle Managed Distributed Transactions
NOTE:126069.1 - Manually Resolving In-Doubt Transactions: Different Scenarios


출처 : http://blog.itpub.net/38267/viewspace-713103/


반응형
반응형


1. cpu 및 실행 시간의 plan을 아래와 같이 수행 후


explain plan for

          select * from dual;


2. 해당 plan 내역 조회


select * from table(dbms_xplan.display);


time(수행시간)이 나오지 않고


plan_table is old version 


에러가 뜨면 나타 나지 않을 때는


조치 방법

1. 기존 테이블 삭제

    $> DROP TABLE PLAN_TABLE;


2. sqlplus 서버에 접속해서


    $> @?$ORACLE_HOME/rdbms/admin/utlxpls.sql 실행


완료


2에서 오류 발생시 조치 방법


# > sqlplus '/as sysdba' 접속


$> SELECT DBMS_METADATA.GET_DDL('TABLE','PLAN_TABLE$','SYS') FROM DUAL;


위의 query 나온 결과에서


SYS 와 $ 표시를 삭제하고


해당 계정에서 실행하면 새로운 PLAN 테이블이 생성되고


time도 정상적으로 나온다. 



* EXPLAIN PLAN 시 이름 주고 조회하기


EXPLAIN PLAN SET STATEMENT_ID='TSH' FOR

SELECT *

FROM   emp e, dept d

WHERE  e.deptno = d.deptno

AND    e.ename  = 'SMITH';


SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY(NULL, 'TSH', 'ALL', NULL));


1 번째 인자 : PLAN TABLE 명으로 NULL 명시해도 됨(기본 사용)

2 번째 인자 : EXPLAIN PLAN SET STATEMENT_ID 에서 사용한 이름 (여러명이 동시 사용시에는 이름이 나와야 정확함) -> NULL은 마지막 값 조회

3. 번째 인자 : DBMS_XPLAN.DISPLAY 에서 상세하게 볼 때 사용하는 옵션으로 TYPICAL, ALL, BASIC 등이 있음



참고 : http://web-dev.tistory.com/662


참고 사이트 : http://stackoverflow.com/questions/25613444/how-to-create-explain-plan-table-on-amazon-rds-database

반응형
반응형
실행 배치
shellCall.bat

start sqlplus /nolog @./tobe.sql 접속계정@tns내DB명/비밀번호

tobe.sql 파일구성
CONN &1
SET MARKUP HTML ON SPOOL ON
SET TERM OFF
SET TIMING ON
SPOOL C:₩RESULT_TOBE.XLS
SET LINESIZE 10000
SET PAGRSIZE 1

/* 특정 컬럼 사이즈 증가 */
COLUMN OBJECT_ID 999999999999999999

/* START SQL */
SELECT * FROM TAB;

SELECT * FROM DICTIONARY;

SELECT * FROM ALL_OBJECTS;

SPOOL OFF
SET MARKUP HTML OFF SPOOL OFF
EXIT;
반응형
반응형


hp ux 장비에서 ndd 설정하기



- 값 조회

ndd -get /dev/sockets socket_udp_rcvbuf_default

ndd -get /dev/tcp tcp_smallest_anon_port

ndd -get /dev/udp udp_smallest_anon_port

ndd -get /dev/tcp tcp_conn_request_max

ndd -get /dev/tcp tcp_syn_rcvd_max


- 값 설정

ndd -set /dev/sockets socket_udp_rcvbuf_default 1310720

ndd -set /dev/tcp tcp_smallest_anon_port        9000

ndd -set /dev/udp udp_smallest_anon_port        9000

ndd -set /dev/tcp tcp_conn_request_max          10240

ndd -set /dev/tcp tcp_syn_rcvd_max              1024



- 리부팅 후에도 적용하도록 환경 파일 설정(100 ~ 104 번은 중복되지 않도록)

/etc/rc.config.d/nddconf 


TRANSPORT_NAME[100]=sockets

NDD_NAME[100]=socket_udp_rcvbuf_default

NDD_VALUE[100]=1310720


TRANSPORT_NAME[101]=tcp

NDD_NAME[101]=tcp_smallest_anon_port

NDD_VALUE[101]=9000


TRANSPORT_NAME[102]=udp

NDD_NAME[102]=udp_smallest_anon_port

NDD_VALUE[102]=9000


TRANSPORT_NAME[103]=tcp

NDD_NAME[103]=tcp_conn_request_max

NDD_VALUE[103]=10240


TRANSPORT_NAME[104]=tcp

NDD_NAME[104]=tcp_syn_rcvd_max

NDD_VALUE[104]=1024

반응형
반응형


오라클에서 


EXP -> IMP 하는 방식에는


exp 테이블 스키마 추출

exp id/passwd file=./temp.dmp log=./log.log compress=n rows=n


 imp id/passwd indexfile=create.sql full=y 옵션을 주어


입력하지는 않고 create.sql을 만들어


스크립트 형태로 수동으로 돌릴 수 있다.


다만,


그냥 import 했을 때는


커져버린 초기값을 만나게 되는데...


이것을 수정하는 방법은


initial, next 값 수정!


- 테이블 스페이스 생성시 local로 생성해야만 함 ~

확인 쿼리

SELECT initial_extent, next_extent, pct_increase,

            extent_management, allocation_type

     FROM DBA_TABLESPACES

     WHERE tablespace_name=upper('테이블스페이스명');


- initial 값 수정


1. 분석하기 (emp1 테이블 분석)


analyze table emp1 compute statistics;


2. 분석을 기준으로 사용하지 않는 불럭 초기화

alter table emp1 deallocate unused keep 0;


3. 블럭 사이즈  확인 하는 법

select table_name, initial_extent from user_tables;


** 다른 방법


1. alter and move the table to another tablespace. e.g. (다른 테이블 스페이스로 옮기기)

ALTER TABLE MY_TABLE MOVE TABLESPACE ANOTHER_TABLESPLACE STORAGE (INITIAL 2M NEXT 2M PCTINCREASE 0);

2. alter and move the table back to the original tablesace with the desired initial extent size, e.g. (원 테이블 스페이스에 옮기기)

ALTER TABLE MY_TABLE MOVE TABLESPACE ORIGINAL_TABLESPACE STORAGE (INITIAL 256M NEXT 2M PCTINCREASE 0);



- next 값 수정

위와 동일하며


alter table emp1 storage(next 10M);


으로 가능함 

반응형

'Database > ORACLE' 카테고리의 다른 글

도스 모드 sql 실행 bat 배치 만들기  (0) 2016.03.25
ndd 설정하기  (0) 2013.09.23
오라클 미디어 팩 신청하기  (0) 2013.01.31
one port multi listener 설정 하기  (0) 2012.12.24
DBMS_XPLAN 정보 조회  (0) 2012.09.07
반응형


후암..


잘 다니던 회사를 퇴직하고


오라클이 필요할때... -_-....


어렵다.. 구하기 어렵다..


다행히도 otn 정보는 아직 유효하여


참고 사항을 올린다. ~


1. 오라클 사이트 (https://support.oracle.com ) 방문하여 로그인한다.

   : 예전회사는 OTN 계약을 별도로 했었다... -_-...


 - 로그인 후 우측 상단에 Contact US 를 눌러 아래 화면을 띄운다.

    ※ 참고로 한글 언어셋으로 설정시 안된다는 소문(?)을 들어 영문으로 설정하고 시작하였다.

    Problem Summary : DVD

    => 문제점을 요약하면 : DVD  (ㅋㅋㅋ -_-..)

    Support Identifier : 현재 유효한 8자리 ID값이 출력됨. (우측 상단에 Next를 눌러 넘어감 : 총 3단계!)






 - 2단계 각 화면들이다.

    Problem Type : Software & OS Media Requests

    문제 유형 : 소프트웨어와 OS 미디어 요청


    1) IS this a physical software media shipment request?

       이것은 물리적 소프트웨어 미디어 수송 요청인가?

       -> 난 물리적으로 받고 싶다 -_- Yes ~

    

    2) Which Product line does the media request involve?

        Oracle Database

        미디어 포함 요청에 어떤 제품 라인을 할것인가?

        난 오라클 10g 이므로 Oracle Database

 

    3) Are you requesting a required password for a path download?

        NO

        다운로드 경로를 위한 패스워드가 필요한 요청인가?

        다운로드 한 것에 대한 암호를 설정하는 것 같은데.. 필요 없으므로.. NO.... (잘 모르겠음 -_- ㅋ)




   4) Are you requesting a patch on CD/DVD?

      NO

      당신은 CD/DVD의 패치가 필요한가?

      아니요 


      난 설치본이 필요함 -_-... 패치는 otn에서 걍 받을꺼임...


   5) 4번항목의 패치 필요한 내역을 기재하는 것인데.. 없으므로 난 스킵 (*가 아닌것은 필수 아님)

   6) List the product name and version requested for physical media shipment?( EX: E-business Suite 12.1.1...)

       Oracle Database 10G / Oracle Client 10G

       물리적 미디어 배송을 위한 제품 이름과 버전 목록을 요청하라.

       오라클 데이터베이스 서버 10g와 오라클 클라이언트 10G

   7) What is the OS/platform for the requested media?(EX : Windows 32bit. ....)

       IBM Aix Power 32,64 bit / hp up risc 32/64 bit

       요청한 미디어의 OS(운영체제)와 Platform(플렛폼)은 무엇인가?

      IBM Aix Power 시리즈의 32,64 bit와

      HP ux risc 32/64 비트




 8) Are any language required for this shipment?

     YES

     이번 배송을 위한 어떠한 언어라도 괜찮은가?

  11) Ship to Contact Name :

      배송을 위한 이름 : 

       


12. 배송을 위한 전화번호

     82(국제번호)-10(010이라도 0을 뺌)-xxxx-xxxx


13. 배송을 위한 이메일 주소

     aaa@naaa.aaa


14. 회사명 :



15. 주소1 :

     실제 주소를 알면 -> 다음, 네이버등을 통해 주소 영문 변환으로 검색 뒤 ...

                                  한글 주소를 영문으로 변환하여 붙여넣기 한다.






위와 같이 입력뒤 우측 상단에 Next를 누른다.


아래는 최종 단계인 Contact 확정 단계로


Primary Contact : 이름

Phone Numbers : 전화번호

Email-Address : 이메일 주소

Coontact Method : WEB (웹상에 아래 조회항목을 통해 확인 가능할듯...)

(영어가 약해서 전화오면 챙피해서 죽어버릴지도 모름 -_-....)




위와 같은 최종 확인 뒤 우측 상단에 Submit를 눌러 확정함.





위와 같이 정상 Submit 하고 난뒤 상태를 조회하거나 WEb를 통한 메시지를 확인하고자 할 때는



상단에 Service Requests 메뉴를 클릭뒤


중간부분에 Contact Us Service Reqests 항목에 조회된다.

후암... 간략하게 정리해 봤다...


반응형
반응형

하나의 포트로 여러 리스너 설정하기...


listener.ora


일부 서버들에서 되고 안되고 문제는 SID_LIST_LISTENER 설정에서 SID_DESC 설정 정보가 없을 때 발생함... (랜덤 -_-ㅋ)


 # listener.ora Network Configuration File: /oracle/product/10g/network/admin/listener.ora

# Generated by Oracle configuration tools.


SID_LIST_LISTENER =

  (SID_LIST =

    (SID_DESC =

      (SID_NAME = PLSExtProc)

      (ORACLE_HOME = /oracle/product/10g)

      (PROGRAM = extproc)

    )

    (SID_DESC =

      (SID_NAME = SEVSEDEV)

      (ORACLE_HOME = /oracle/product/10g)

    )

    (SID_DESC =

      (SID_NAME = SEVPTDEV)

      (ORACLE_HOME = /oracle/product/10g)

    )

  )


LISTENER =

  (DESCRIPTION_LIST =

    (DESCRIPTION =

      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.86)(PORT = 1521))

      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0))

    )

  )


SID_LIST_LISTENER_SEVPTDEV =

  (SID_LIST =

    (SID_DESC =

      (SID_NAME = SEVPTDEV)

      (ORACLE_HOME = /oracle/product/10g)

    )

  )


LISTENER_SEVPTDEV =

  (DESCRIPTION_LIST =

    (DESCRIPTION =

      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.86)(PORT = 1521))

    )

  )


SID_LIST_LISTENER_SEVSEDEV =

  (SID_LIST =

    (SID_DESC =

      (SID_NAME = SEVSEDEV)

      (ORACLE_HOME = /oracle/product/10g)

    )

  )


LISTENER_SEVSEDEV =

  (DESCRIPTION_LIST =

    (DESCRIPTION =

      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.86)(PORT = 1521))

    )

  )


 sqlnet.ora


# sqlnet.ora Network Configuration File: /oracle/product/10g/network/admin/sqlnet.ora

# Generated by Oracle configuration tools.

SQLNET.INBOUND_CONNECT_TIMEOUT=0 





반응형
반응형


출처 : http://blog.naver.com/onlywin7788?Redirect=Log&logNo=140155221360

출처 : http://cafe.naver.com/ocmkorea/book2025209/9365


/*


--> 방식 1. (이 sql문은 이 방식임)

        1. 테이블 전체 목록 조회

           SQL> select * from tab;


        2. 수행한 쿼리의 Plan을 조회

           SQL> @xplan.sql


        3. 정확한 통계를 위해 힌트 실행

           SQL> select /*+ gather_plan_statistics */ * from tabs;


        * 오타 나지 않도록 주의함.


--> 방식 2

        1. 실행시 Plan  수집

           SQL> EXPLAIN FOR

                 SELECT * FROM TAB;


        2. 실제 정보 조회

           SQL> select * from tab(dbms_xplan.display());


                or


           SQL> select *

                from table(dbms_xplan.display_cursor(null, null, 'ALLSTATS LAST +alias +outline +predicate'))

/




--> 인자 정보


        dbms_xplan.display_cursor(인자1, 인자2, 인자3);


        인자1 : plan table 명을 입력하며, 따로 지정하지 않았을 때는 기본으로 'PLAN_TABLE'이다.


        인자2 : Execution Plan시 Set STATEMENT_ID를 지정한 경우 이를 불러올 수 있다.

                값이 Null일 경우 마지막에 실행된 문장을 불러온다.


        인자3 : 출력 포맷 형태 지정한다.



--> 세번째 인자의 포맷 정보


        1) 기본 Format Controller : 반드시 적용되어야 하는 기본적인 Controller임.

                                    적용하지 않더라도 자동으로 기본값으로 적용된다.


        -----------------------------------------------------------------------------------------------------------------------------------------------------------------------


                basic    : 가장 기본적인 포맷으로서 Id, Operation, Object Name을 출력한다.

                typical  : basic 옵션에서 한발 더 나아가서 Optimizer가 예상할 수 있는 모든 것을 보여준다.

                           출력되는 정보로는 예상 Rows, 예상 Bytes, 예상 Temporary Space 사용량, Cost 예상 시간 Predicate Imformat(Operation 별로 Access 및 Filter 정보)이다.

                serial   : typical과 같으나 Parallel 쿼리 사용시 관련정보가 나오지 않는다.

                all      : Plan 정보는 typical과 같으나 Plan이외의 정보 중에서 Outline Data 정보를 제외하고 전부 출력한다.

                advanced : all과 같지만 Peeked Binds, Outline Data, Note 등을 더 보여준다.


        -----------------------------------------------------------------------------------------------------------------------------------------------------------------------


        2) 세부 Format Controller : 기본 포맷정보에 의해서 표시되거나 생략되는 세부적인 포맷을 Control한다.

                                    이 Control은 +표시로 추가되거나 - 표시로 생략이 가능하다.


        -----------------------------------------------------------------------------------------------------------------------------------------------------------------------


                alias    : 가장 기본적인 포맷으로서 Id, Operation, Object Name을 출력한다.

                bytes    : basic 옵션에서 한발 더 나아가서 Optimizer가 예상할 수 있는 모든 것을 보여준다.

                           출력되는 정보로는 예상 Rows, 예상 Bytes, 예상 Temporary Space 사용량, Cost 예상 시간 Predicate Information (Operation 별로 Access 및 Filter 정보)이다.

                cost     : typical과 같으나 Parallel쿼리 사용시 관련 정보가 나오지 않는다.

                note     : Plan 정보는 typical과 같으나 Plan이외의 정보 중에서 Outline Data 정보를 제외하고 전부 출력한다.

                outline  : all과 같지만 Peeked Binds, Outline Data, Note 등을 더 보여준다.

                parallel : Parallel 쿼리인 경우 TQ, IN-OUT, PQ Distribute 등의 정보를 Control한다.

                partition : Partition Access가 포함된 경우

                peeked_binds : Bind 변수의 값을 control 한다. 단, _optim_peek_user_binds 파라미터의 값이 true로 되어 있는 경우에만 해당되며 파라미터는 세션 단위로 수정이

                               가능하다. (Explain Plan은 출력되지 않음)

                predicate : Predicate Information을 Control한다. Operation 별로 Access 및 Filter 정보를 나타낸다.

                            일반적인 튜닝시 가장 눈 여겨봐야 할 정보이다.

                projection : Projection Information을 Control한다. Operation 별로 Select 되는 컬럼 정보를 나타낸다.

                remote   : DB Link를 사용할 때 Remote 쿼리의 수행 정보를 Control한다.

                rows     : Plan상의 E-Rows 수를 Control한다.


        -----------------------------------------------------------------------------------------------------------------------------------------------------------------------


        3) 실행통계 Format Controller : 이 Control을 적용하면 실행시의 PGA 통계를 출력한다.


        이 정보들은 DBMS_XPLAN.DISPLAY 함수에는 적용되지 않는다.

        왜냐하면 Explain Plan은 실제 수행되는 것이 아니므로 실행통계정보가 없기 때문이다.


        또한 DBMS_XPLAN.DISPLAY_CURSOR 이나 DBMS_XPLAN.DISPLAY_AWR등의 함수 수행시에도 GATHER_STATISTICS 힌트를 주거나 아니면 STATISTICS_LEVEL 파라미터를 ALL로 설정해야 출력이 가능하다.


        -----------------------------------------------------------------------------------------------------------------------------------------------------------------------


                allstats : I/O 통계정보(Buffers, Reads, Writes)와 PGA 통계 정보(OMem, 1Mem, Used-Mem, Used-Tmp, Max-Tmp 등)를 동시에 Control 한다.

                iostats  : I/O 통계정보(Buffers, Reads, Writes)를 Control 한다.

                last     : 실행 통계 출력시 이 Control을 명시하면 가장 마지막에 수행된 실행 통계를 출력한다.

                           이 Control을 명시하지 않으면 실행 통계츼 누적치를 출력하므로 주의가 필요합니다.

                memstats : PGA 통계정보(OMem, 1Mem, Used-Mem, Used-Tmp, Max-Tmp등)를 동시에 Control한다.

                runstats_last : iostats과 last Control 과 동일하다.

                                이 Control은 Oracle 10g Release 1에서만 사용할 수 있다.

                runstats_tot : iostats Control과 동일하다.

                               이 Control은 oracle 10g Release 1 에서만 사용할 수 있다.


                * runstats_last와 runstats_tot를 제외한 4가지의 Control은 Oracle 10g Release 2 이상에서만 사용할 수 있다.


        -----------------------------------------------------------------------------------------------------------------------------------------------------------------------


        4) format 사용 예제


        Format중 가장 많은 정보를 출력 할 수 있는 포맷은 'advanced allstats last'이며 출력 가능한 모든 내용이 출력되게 되므로 상황이나, 자신에 맞는 포맷을 사용해야 적절함.


        4-1) 쿼리 변형이 없는 단순 쿼리 튜닝의 경우(최대한 단순한 포맷형태 사용)


             SQL> select * from table(DBMS_XPLAN.DISPLAY_CURSOR(NULL,NULL,'allstats last-rows + predicate');


             => 포맷을 'allstats last-rows + predicate'로 주었으므로 예측 Row 수(E-row)가 생략되고 실행통계와 Predicate Information 만 출력된다.


        4-2) 쿼리 변형이 발생하거나 복잡한 쿼리 튜닝시 쿼리 블러과 힌트 정보를 추가로 출력


             SQL> select * from table(DBMS_XPLAN.DISPLAY_CURSOR(NULL, NULL, 'allstats last-rows + alias + outline + predicate');


             => 'allstats last-rows + alias + outline + predicate' 포맷을 사용하면 Query Block Name / Object Alias 정보와 Outline Data 정보가 추가로 출력된다.


                + alias는 쿼리블럭 정보를 추가하는 것이며, + Outline는 오라클이 내부적으로 사용하는 힌트정보 출력의 의미이다.


                쿼리 변형이 발생한 경우나 뷰(혹은 인라인뷰) 등을 튜닝할 경우 적합한 옵션이다.


        -----------------------------------------------------------------------------------------------------------------------------------------------------------------------



        10046 + tkprof 와 동일한 정보를 조회는

        select /*+ gather_plan_statistics */ * from tab;


        select *

        from table(dbms_xplan.display_cursor(null, null, 'advanced ALLSTATS LAST +alias +outline +predicate'))


        -----------------------------------------------------------------------------------------------------------------------------------------------------------------------



AWR 정보를 이용

SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY_AWR(SQL_ID입력,NULL,NULL, 'ADVANCED ALLSTATS LAST'));


사용 권한 뷰


DISPLAY_CURSOR 함수 : V$SQL_PLAN, V$SESSION, V$SQL_PLAN_STATISTICS_ALL 뷰에 대한 SELECT 권한 필요

DISPLAY_AWR    함수 : DBA_HIST_SQL_PLAN, DBA_HIST_SQLTEXT, V$DATABASE 뷰에 대한 SELECT 권한 필요

DISPLAY_SQLSET 함수 : ALL_SQLSET_STATEMENTS, ALL_SQLSET_PLANS 뷰에 대한 SELECT 권한 필요


*/

select *

  from table(dbms_xplan.display_cursor(null, null, 'ALLSTATS LAST +alias +outline +predicate'))

/




반응형

+ Recent posts