ORACLE/OWI2013. 6. 23. 21:42
반응형

출처 :  http://blog.naver.com/bj2118/80069059099

shared pool 의 dump한결과

-Memory :공간 요청시 chunk 단위로 할당

-Freelist : Free chunk의 목록들

-LRU list : 현재 사용중이지 않는 재생성 가능한 chunk목록들

-Reserved Freelist : 최상위 Heap에만 존재, shared pool의 예약 영역에 대한 Freelist

-Freelist에서 원하는 크기의 chunk검색 -> LRU list 검색 -> 특정 크기 이상이면 Reserved list 검색

 ->모두 실패하면 ora-4031에러 발생

 

 

아래와같이 dump파일을 텍스트 문서로 하면 처음볼수있는건 시스템에 기본정보들을 볼수 있다.

 

/u01/app/oracle/admin/orcl/udump/orcl_ora_5836.trc                                                 
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production                             
With the Partitioning                                                                              
ORACLE_HOME = /u01/app/oracle/product/10.2.0/db_1                                                  
System name: Linux                                                                                 
Node name: localhost.localdomain                                                                   
Release: 2.6.9-42.0.0.0.1.EL                                                                       
Version: #1 Sun Oct 15 13:58:55 PDT 2006                                                           
Machine: i686                                                                                      
Instance name: orcl                                                                                
Redo thread mounted by this instance: 1                                                            
Oracle process number: 22                                                                          
Unix process pid: 5836

 

shared pool의 heap구조의 Top heap에 해당하는부분에 정보이다.

 

******************************************************                                             
HEAP DUMP heap name="sga heap"  desc=0x2000002c          <-----------  Top heap            

extent sz=0x32c8 alt=108 het=32767 rec=9 flg=-126 opc=0                                           
 parent=(nil) owner=(nil) nex=(nil) xsz=0xfd0                                                      
*****************************************************

HEAP DUMP heap name="sga heap(1                                                                    
 extent sz=0xfc4 alt=108 het=32767 rec=9 flg=-125 opc=0                                            
 parent=(nil) owner=(nil) nex=(nil) xsz=0x400000

 

EXTENT 상태를 확인할수 있는 자료

 

EXTENT 0 addr=0x26c00000         <------익스텐드                                                            
  Chunk 26c00038 sz=  4194248    perm      "perm           "  alo=134768   <---청크                        
EXTENT 1 addr=0x29000000                                                                           
  Chunk 29000038 sz=       24  R-freeable  "reserved stoppe"                                       
  Chunk 29000050 sz=   212888  R-free      "               "                                       
  Chunk 29033fe8 sz=       24  R-freeable  "reserved stoppe"                                       
  Chunk 29034000 sz=  3979072    perm      "perm           "  alo=3979072                          
  Chunk 293ff740 sz=     2240    free      "               "                                       
EXTENT 2 addr=0x29400000                                                                           
  Chunk 29400038 sz=       24  R-freeable  "reserved stoppe"                                        
  Chunk 29400050 sz=   212888  R-free      "               "                                       
  Chunk 29433fe8 sz=       24  R-freeable  "reserved stoppe"                                       
  Chunk 29434000 sz=  3214744    perm      "perm           "  alo=3214744                          
  Chunk 29744d98 sz=   765044    perm      "perm           "  alo=765044                           
  Chunk 297ffa0c sz=     1524    free      "               "                                       
EXTENT 3 addr=0x29800000                                                                           
  Chunk 29800038 sz=       24  R-freeable  "reserved stoppe"                                       
  Chunk 29800050 sz=   212888  R-free      "               "                                       
  Chunk 29833fe8 sz=       24  R-freeable  "reserved stoppe"                                       
  Chunk 29834000 sz=  3645256    perm      "perm           "  alo=3645256                          
  Chunk 29badf48 sz=   333196    perm      "perm           "  alo=333196                           
  Chunk 29bff4d4 sz=     2860    free      "               "              

 

freelist에 목록이 주소값으로 나와있으면 29bff4d4 이주소로 검색하면

FREE LISTS:Chunk 293ff740 sz=     2240    free 목록을 확인할수 있다.

 

FREE LISTS:                                                                                        
 Bucket 0 size=16           <----  버킷                                                                        
 Bucket 1 size=20                                                                                  
 Bucket 2 size=24                                                                                  
 Bucket 3 size=28                                                                                  
 Bucket 4 size=32                                                                                  
 Bucket 5 size=36                                                                                  
 Bucket 6 size=40                                                                                  
 Bucket 7 size=44                                                                                  
 Bucket 8 size=48                                                                                  
 Bucket 9 size=52                                                                                  
 Bucket 10 size=56                                                                                 
 Bucket 11 size=60                                                                                 
 Bucket 12 size=64                                                                                 
 Bucket 13 size=68                                                                                 
  Chunk 2a7fffbc sz=       68    free      "     <---- 프리 청크                        

..... 생략

Free lists는 프리chunk의 목록들이면 여기에 나오는 chunk 주소값은 heap구조상으로 익스텐드에

위치를 나타내준다.

 

UNPINNED RECREATABLE CHUNKS (lru first):                                                      
SEPARATOR                                                                                          
Unpinned space     =        0  rcr=0 trn=0                                                         
PERMANENT CHUNKS:                                                                                  
  Chunk 26c00038 sz=  4194248    perm      "perm           "  alo=134768                           
  Chunk 29badf48 sz=   333196    perm      "perm           "  alo=333196                           
  Chunk 29744d98 sz=   765044    perm      "perm           "  alo=765044                           
  Chunk 29034000 sz=  3979072    perm      "perm           "  alo=3979072                          
  Chunk 29434000 sz=  3214744    perm      "perm           "  alo=3214744                          
  Chunk 29834000 sz=  3645256    perm      "perm           "  alo=3645256                          
  Chunk 2b7ece44 sz=    76816    perm      "perm           "  alo=76816                            
  Chunk 2abff884 sz=     1040    perm      "perm           "  alo=1040                             
  Chunk 2afe0a1c sz=   128016    perm      "perm           "  alo=128016                           
  Chunk 2abe3c74 sz=   113680    perm      "perm           "  alo=113680                           
  Chunk 29fffa7c sz=     1040    perm      "perm           "  alo=1040                             
  Chunk 2a3fd14c sz=    11280    perm      "perm           "  alo=11280                            
  Chunk 29c34000 sz=  3979900    perm      "perm           "  alo=3979900                           
Permanent space    = 40015520 

 

lru list 정보를 확인할수 있으며 여기에 있는 목록들은 현재사용하지않은 재생성 가능한 chunk의 목록들이다.

 

RESERVED FREE LISTS:   <-----  예약 프리리스트                                     
 Reserved bucket 0 size=16                                                                         
 Reserved bucket 1 size=4400                                                                       
 Reserved bucket 2 size=8204                                                                       
 Reserved bucket 3 size=8460                                                                       
 Reserved bucket 4 size=8464                                                                       
 Reserved bucket 5 size=8468                                                                       
 Reserved bucket 6 size=8472                                                                       
 Reserved bucket 7 size=9296                                                                       
 Reserved bucket 8 size=9300                                                                       
 Reserved bucket 9 size=12320                                                                      
 Reserved bucket 10 size=12324                                                                     
 Reserved bucket 11 size=16396                                                                     
 Reserved bucket 12 size=32780                                                                     
 Reserved bucket 13 size=65548 

 

이상 대략적으로 재가 직접 Dump를 떠서 나름 공부해보면서 정리해본 자료입니다.

어차피 owi에 나와있는내용 한번 정리한 샘이라 책읽어 보시면 좀더 자세히 아실듯해요 ^_^

 

 

반응형
Posted by [PineTree]
ORACLE/TroubleShooting2013. 6. 23. 21:33
반응형

1. 덤프

  

  덤프 : 일회성으로 그 순간의 상태정보를 가집니다. 

  트레이스 : 10046, 10053 등의 이벤트를 걸게 되면 순간의 상태(immediate) 또는 

  세션이 close될때까지의 정보(trace name context forever) 를 trace로 

  남깁니다.

  참고로 udump 에 없다고 해서 고민하지 말구요. bdump를 찾아보세요. 

  background process를 이용해서 dump를 뜨는 경우에는 bdump에 나오겠죠.

 

2. 문제발생시 덤프 뜨는 방법 

  문제발생 세션에 대한 10046 event, truss output, errorstack dump 

  OS engineer의 system state dump 

  system state dump 2~3회 

  hang analyze dump 2~3회 

  system state dump 1~2회 

  hang analyze dump 1~2회

 

3. 에러스택 뜨기(꼭 수행할 때마다 exit나와서 다시 서버에 접속해서 뜰 것) 

  oradebug setospid XX 

  oradebug unlimit 

  oradebug dump errorstack 3 

  oradebug tracefile_name

 

  또는

  alter system set max_dump_file_size=unlimited;

  alter session set tracefile_identifier='error1';

  alter session set events 'immediate trace name errorstack level 3'; 

 

4. hanganalyze, systemstate dump 뜨기(꼭 수행할 때마다 exit나와서 다시 서버에 접속해서 뜰 것) 

  - systemstate dump는 database의 전반적인 hang이나 slow performance상황에 요구된다.

    또한 데이터베이스 문제가 발생해서 재기동할 때에 , 추후 분석을 위해서 재기동 전에

    적절한 systemstate dump를 확보한다.

    보통 system state dump는 3~5분 간격으로 3번 수행을 권장하는데, 이 때 매번

    새로운 접속을 해야 각각이 각각 다른 파일명으로 생성된다.

    같은 세션에서 3번 수행하면, 한 파일에 이어서 생성된다.

  - hanganalyze dump는 마찬가지로 hang이나 slow performance 상황에 사용된다.

    그러나 hanganalyze dump는 리소스(latch/eueueue등등)을 점유하는 blocker를

    보여주므로 , 이 blocker를 정리함으로 문제 해결에 접근할 수 있다.

    

  oradebug setmypid 

  oradebug unlimit 

  oradebug hanganalyze 4 

  

  oradebug setmypid

  oradebug unlimit

  oradebug dump systemstate 10 

  

  또는

  alter system set max_dump_file_size=unlimited;

  alter session set tracefile_identifier='sys1';

  alter session set events 'immediate trace name systemstate level 10';

  

  alter system set max_dump_file_size=unlimited;

  alter session set tracefile_identifier='hang1';

  alter session set events 'immediate trace name hanganalyze level 4';

  

5. oradebug로 event 걸기(10046 event는 sql 트레이스 정보, 10053은 optimizer에 대한 트레이스 정보) 

  oradebug setospid XX 

  oradebug unlimit 

  oradebug event 10046 trace name context forever, level 12; 

  oradebug event 10053 trace name context forever, level 1; 

  oradebug tracefile_name 

  oradebug event 10046 trace name context off; 

  oradebug event 10053 trace name context off;

 

6. 문제가 있는 세션의 process state dump 뜨기 

  oradebug setospid <process ID> 

  oradebug unlimit 

  oradebug dump processstate 10

 

7. 특정 event가 발생할 경우에heap dump 뜨기 ( 4031 에러의 경우 )

  init 파라미터에 event name 하나에 trace name을 여러개를 사용  할 경우 ; 를 붙임

  init 파라미터에 여러개 event를 붙일 경우 : 을 사용함

     

  event = "4031 trace name heapdump level 1;name errorstack level 3"

  또는 sqlplus에서 

  alter session set events '4031 trace name heapdump level 1

                      ;name errorstack level 3';     

  

8. 연속적으로 event를 붙어 넣기

   init 파라미터 

     event="10015 trace name context forever"

     event="10046 trace name context forever, level 4"

   또는

     event="10015 trace name context forever:

            10046 trace name context forever, level 4"

   

   sqlplus 에서   

    alter session set events '10015 trace name context forever:

               10046 trace name context forever, level 4';

           

9. alter session 명령으로 자신 세션에  event걸기(session 이 logout할때까지 수행됨) 

   alter session set timed_statistics=true; 

   alter session set max_dump_file_size=unlimited; 

   alter session set tracefile_identifier='10046evnt1'; 

   alter session set events '10046 trace name context forever , level 12'; 

   alter session set events '10053 trace name context forever , level 1'; 

   alter session set events '10046 trace name context off'; 

   alter session set events '10053 trace name context off';

 

10. 전체 시스템에 event 걸기

   alter system set timed_statistics=true; 

   alter system set max_dump_file_size=unlimited; 

   alter system set tracefile_identifier='10046evnt1'; 

   alter system set events '10046 trace name context forever , level 12'; 

   alter system set events '10053 trace name context forever , level 1'; 

   alter system set events '10046 trace name context off'; 

   alter system set events '10053 trace name context off';

 

11. alter session 명령으로 ORA-4031 에러에 대한 event 걸기(immediate로 즉각 떨어지도록) 

   alter session set max_dump_file_size=unlimited; 

   alter session set tracefile_identifier='4031evnt1'; 

   alter session set events '04031 trace name errorstack level 3'; 

   alter session set events '04031 trace name systemstate level 10';

 

12. sqlplus 로 접속이 불가능할 경우 백그라운드 프로세스의 systemstate 덤프 뜨기 

 위험한 명령임, 서비스 중엔 사용금지, 문제 발생으로 DB를 내리기전에 수행

   OS debuger를 사용하면 특정 process에게 특정 function을 호출하도록 할 수 

   있습니다. 이러한 점을 이용하면 ORACLE에서 systemstate dump를 요청할 때 

   사용하는 ksudss function을 호출할 수 있으며, 절차는 아래와 같습니다. 

   cf> dbx -> 유닉스에서 사용

       gdb -> 리눅스에서 사용

   

   1) 먼저 attach할 ORACLE process에 대한 OS PID를 알아 둡니다. 

       (여기서는 PMON process를 예를 들었습니다.) 

   $ ps -ef | grep $ORACLE_SID | grep pmon 

      aprdbms 1432 1 0 23:14:50 ? 0:00 ora_pmon_APR920U6 

   2) Pmon process에 debuger를 사용하여 attach합니다. 

      $gdb $ORACLE_HOME/bin/oracle 1432 

   3) Ksudss function을 호출합니다. 

      gdb) call ksudss (10) 

   4) Pmon은 ksudss를 호출하여 systemstate dump를 받게 됩니다. 

      attach한 process가 ksudss function call 요청을 받아 들이기 위해서는 

      system call을 수행 중에 있지 않아야 합니다. 

  

13. Tracing Oracle Process 를 통해서 서버 프로세스 트레이스 확인

  - os에서 어떻게 처리하고 있는지를 확인할 경우 사용

  - DB를 내릴 것이 아니라면 background 프로세스에 실행하지 말것

  - db가 내려갈 수 있으므로 프로세스에 대한 OS trace를 남기고자 할 경우에

    세션을 죽이기 전에 수행하기

  - where에 나온 부분에서 읽는 방법은 거꾸로 올라가며 읽어야 함

    

  $dbx -a (프로세스id) 또는 gdb $ORACLE_HOME/bin/oracle 11270

   (dbx) where

   (dbx) detach

  

  - 예>

       PROD:/opt/oracle/product/9.2.0/network/admin$script dbx.log

       Script started, file is dbx.log

       PROD:/opt/oracle/product/9.2.0/network/admin$gdb $ORACLE_HOME/bin/oracle 11270

       GNU gdb Red Hat Linux (5.3.90-0.20030710.40rh)

       Copyright 2003 Free Software Foundation, Inc.

       (gdb) where

       #0  0xb71836e1 in fsync () from /lib/i686/libpthread.so.0

       #1  0x09826f33 in skgfcfi ()

       #2  0x082bf561 in ksfdcls ()

       #3  0x08b669ea in kcflckf ()

       #4  0x08b66bc3 in kcflbi ()

       #5  0x00000003 in ?? ()

       #6  0x0ae0bb44 in ?? ()

       #7  0x00000010 in ?? ()

       #8  0x565fa0cc in ?? ()

       #9  0x00080002 in ?? ()

       (gdb) detach

       ctrl+c

       $ script off

       

14. truss 남기기(db를 내리기 전에 OS에서 수행, 평상시 사용 금지) note 110888.1

 (1) hp-ux 의 경우 

   $ tusc -afpo <output file> <pid> <executable>

 (2) AIX 5L 

   $ truss -aefo <output file> <executable>

 (3) LINUX

   $ strace -fo <output file> <executable>

 (4) solaris

   $ truss -aefo <output file> <executable>

    예) truss -o truss.txt -p (process pid)

      truss -p (process id)

  

 (5) sqlplus통해서 db기동시 에러가 날 경우(예를들어 ORA-27302 failure occured at skgxpvaddr9

      truss를 이용해서 sqlplus 에 접속후를 truss 남기기

      linux의 경우 strace -o truss.log sqlplus '/as sysdba' 이 명령으로 들어가기

    - 

     $truss -o truss.log -fae sqlplus '/as sysdba'

     sql> startup

     ORA-27302 failure occured at skgxpvaddr9

     ...

     $cat truss.log

15. 네트워크에 대한 클라이언트 trace 남기기

 - 클라이언트에서 sqlnet.ora 파일에서

   trace_level_client=16

   trace_directory_client=c:\temp (윈도우)

   log_directory_client=/tmp  (유닉스)

   

16. dump, error , stack의 종류 및 최대 레벨

   10046 event sql trace 남기기, level 12

   10053 event 프로세스가 수행한 쿼리의 optimizer에 대한 정보, level 1

   hanganalyze 시스템 hang이 걸렸을 경우 dump, level 4

   errorstack 시스템 특정 에러 발생에 대해서 간단한 에러 정보 dump, level 3

   systemstate dump 전체 시스템 상태에 대한 dump, level 10

   heapdump 메모리 에러 발생시 heap영역에 대한 dump, level 3

  

17. event 종류

   10046 sql trace 남기기, level 12는 bind변수 및 plan, tuning statistics 까지 출력

   10053 optimizer에 대한 정보까지 출력, level 1 이 최대

   10015 rollback segment를 분석 및 사용중지 하도록 하는 event

   10233 index opereation 에서 corrupted index block을 skip하기

   10061 disable SMON from cleaning temp segment(smon프로세스가 extent정리를 안하도록 설정)

   10510 turn off SMON check to offline pending offline rollback segment

   10511 turn off SMON check to cleanup undo dictionary

 

18. 10390 parallel execution 

10390, 00000, "Trace parallel query slave execution"

// *Cause:

// *Action:  set this event only under the supervision of Oracle development.

//           trace level is a bitfield

//

//  LEVEL        ACTION

//---------------------------------------------------------------------------

//  0x0001       slave-side execution messages

//  0x0002       coordinator-side execution messages

//  0x0004       slave context state changes

//  0x0008       slave rowid range bind variables and xty

//

//  0x0010       slave fetched rows as enqueued to TQ

//  0x0020       coordinator wait reply handling

//  0x0040       coordinator wait message buffering

//  0x0080       slave dump timing

//

//  0x0100       coordinator dump timing

//  0x0200       slave dump allocation file numbers

//  0x0400       terse format for debug dumps

//  0x0800       Trace CRI random sampling

//

//  0x1000       Trace signals

//  0x2000       Trace PX granule operations

//  0x4000       Force compilation by slave 0

/

 


1. 10046 trace

2. v$ps_sesstat

3. systemstate dump

4. wait.sql

에 추가해서, 다음 정보도 있으면 분석에 큰 도움이 될 것입니다.

5. parallel query parent process (QC process) 및 그 child process (slave process)들에 대해 truss o

utput을 좀 받아주세요. slave process에 대해서는 적어도 3~4 개 정도는 truss를 받아주세요.

방법:

----

% truss -aef -o truss.out.<<qc_pid>> -p <<qc_pid>>

% truss -aed -o truss.out.<<slave_p id>> -p <<slave_pid>>

6. event 10390를 설정하여 둡니다.

방법:

-----

init parameter 화일에,

event = "10390 trace name context forever, level 1166"

 

 

* tuning point - parallel_execution_message_size

parallel_execution_message_size - QC 와 PQ slaves 들간의 message buffer에 대한 크기를 조정하는 

parameter로 이 값이 크면 parallel execution에 대한 속도가 증가될 수 있

으나 memory 사용량은 증가하게 됩니다. 또한 경험적으로 이 값은 2K에서 4K나 8K 로 증가 시켰을 때 속도 개선이 10% 내외로 되었

으며 그 이상은 크게 변화가 없었습니다. 이 값을 변경하게 되면 large pool의 사용량이 증가 될 수 있으므로 peek time에 v$s

gastat를 monitoring하여 large pool의 free space가 부족하지 않은지 확인하여 보시기 바랍니다.

Ref. oralce 8i tuning manual 

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

PARALLEL_EXECUTION_MESSAGE_SIZE

The recommended value for PARALLEL_EXECUTION_MESSAGE_SIZE is 4KB. If PARALLEL_AUTOMATIC_TUNING is TRUE, the default is 4KB. If PARALLEL_AUTOMATIC_T

UNING is FALSE, the default is slightly greater than 2KB.

The PARALLEL_EXECUTION_MESSAGE_SIZE parameter specifies the upper limit for the size of parallel exe

cution messages. The default value is operating system specific and this value s

hould be adequate for most applications. Larger values for PARALLEL_EXECUTION_ME

SSAGE_SIZE require larger values for LARGE_POOL_SIZE or SHARED_POOL_SIZE, depend

ing on whether you've enabled parallel automatic tuning.

While you may experience significantly improved response time by increasing the value for PARALLEL_EX

ECUTION_ MESSAGE_SIZE, memory use also drastically increases. For example, if yo

u double the value for PARALLEL_EXECUTION_ MESSAGE_SIZE, parallel execution requ

ires a message source pool that is twice as large.

Therefore, if you set PARALLEL_AUTOMATIC_TUNING to FALSE, then you must adjust the SHARED_POOL_SIZE to acco

mmodate parallel execution messages. If you have set PARALLEL_AUTOMATIC_TUNING t

o TRUE, but have set LARGE_POOL_SIZE manually, then you must adjust the LARGE_PO

OL_SIZE to accommodate parallel execution messages.

 



반응형
Posted by [PineTree]
ORACLE/RAC2013. 6. 14. 21:09
반응형

TAF (Transparent Application Failover)란 무엇인가?

RAC에서 사용하는 application failover의 개념으로 클라리언트 측의 feature이다.
두 노드가 있다고 가정하고, 한쪽 노드에 장애가 발생했을 경우,
나머지 살아있는 노드로 failover되는 기능이다.


TAF가 왜 필요한가?

TAF의 개념을 이해한다면 의심의 여지가 없다.
고가용성 시스템을 구축하기 위해 RAC를 사용한다면
장애 발생시에 failover를 안쓴다면 왜 RAC를 구축하겠는가?


TAF를 적용하기 위해서는 어떤 작업들이 필요한가?

1. 일단 클라이언트 측에 오라클 클라이언트 프로그램이 설치되어 있어야 한다.

2. 서버 쪽에 RAC가 구축되어 있어야 한다.

3. 오라클 클라이언트가 설치되어있는 곳의 $ORACLE_HOME/network/admin의 tnsnames.ora파일에
   아래와 같은 설정이 필요하다.

ORCLTEST =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = vip-linux1)(PORT = 1521))
    (ADDRESS = (PROTOCOL = TCP)(HOST = vip-linux2)(PORT = 1521))
    (LOAD_BALANCE = yes)
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = orcltest.idevelopment.info)
      (FAILOVER_MODE =
        (TYPE = SELECT)
        (METHOD = BASIC)
        (RETRIES = 180)
        (DELAY = 5)

      )
    )
  )

TAF가 지원하는 매개변수들에 대한 설명

TYPE: 
이것은 NONE, SESSION, 또는 SELECT 중 하나가 사용됩니다. 사용 해제을 위해서는 TYPE=SESSION 로 설정하고, 세션과 오픈 커서의 페일오버를 위해서는 TYPE=SELECT 로 설정하십시오. 그리고 TAF 를 해제하기 위해서는 TYPE=NONE 으로 설정하시면 됩니다.

METHOD: 
이것은 BASIC 또는 PRECONNECT 중 하나가 사용됩니다. BASIC 방식을 사용하면, 기존 접속이 실패할 때까지, TAF 는 접속의 재설정을 시도하지 않을 것입니다. PRECONNECT 방식을 사용하면, TAF 는 백업 접속을 위해 필요한 메모리 구조를 사전-설정하지만, 기존 접속이 실패할 때까지 백업 접속은 활성화되지 않을 것입니다.

BACKUP: 
이 하위-매개변수는 백업 접속의 설정을 위해 사용되는 네트 서비스 이름을 지정합니다. BACKUP 지정은 PRECONNECT 방식을 사용할 때 필요한데, BASIC 방식에서 강력하게 추천되고 있습니다; 그렇지 않다면, 클라이언트가 재접속을 할 때까지 추가적으로 지연을 시키면서 방금 실패한 인스턴스에 최초로 재접속을 시도할 것입니다. 그러나, 사용자는 LOAD_BALANCING=ON 인 상태에서는 BACKUP 을 지정할 수가 없습니다.

DELAY: 
TAF 가 장애 후에 BACKUP 에 연결하려는 시도 사이에서 기다리는 몇 초간의 지연 시간입니다.

RETRIES: 
포기하기 전, TAF 가 장애 후에 BACKUP 에 연결하기 위해 시도하는 횟수입니다. RETRIES 와 DELAY 는 TAF 가 백업 접속을 포기하기 전에 콜드 페일오버가 완료될 수 있는 시간을 갖게 해줍니다


4. 그리고 /etc/hosts 파일에 3.에서 정의한 hostname이 정의되어 있어야 한다.

os] cat /etc/hosts

10.10.100.101 vip-linux1
10.10.100.102 vip-linux2


실제로 TAF 테스트를 해보자

Window 머신 (또는 다른 플랫폼의 “non-RAC” 클라이언트 머신)에서 orcltest 서비스를 사용하여 SYSTEM 사용자로 클러스터 데이터베이스에 로그인합니다:

C:\> sqlplus system/manager@orcltest

COLUMN instance_name    FORMAT a13
COLUMN host_name        FORMAT a9
COLUMN failover_method  FORMAT a15
COLUMN failed_over      FORMAT a11

SELECT
    instance_name
  , host_name
  , NULL AS failover_type
  , NULL AS failover_method
  , NULL AS failed_over
FROM v$instance
UNION
SELECT
    NULL
  , NULL
  , failover_type
  , failover_method
  , failed_over
FROM v$session
WHERE username = 'SYSTEM';


INSTANCE_NAME HOST_NAME FAILOVER_TYPE FAILOVER_METHOD FAILED_OVER
------------- --------- ------------- --------------- -----------
orcl1         linux1
                        SELECT        BASIC           NO

위에서 설정한 SQL*Plus 세션에서 로그아웃 하지 않습니다!

위 쿼리를 수행한 다음, abort 옵션을 사용하여 linux1 노드의 orcl1 인스턴스를 셧다운 합니다. 이 작업을 수행하기 위해 아래와 같이 srvctl 커맨드라인 유틸리티를 사용합니다:

# su - oracle
$ srvctl status database -d orcl
Instance orcl1 is running on node linux1
Instance orcl2 is running on node linux2

$ srvctl stop instance -d orcl -i orcl1 -o abort

$ srvctl status database -d orcl
Instance orcl1 is not running on node linux1
Instance orcl2 is running on node linux2

다시 앞의 SQL 세션으로 돌아가, 버퍼에 저장된 SQL 구문을 재실행합니다: 
COLUMN instance_name    FORMAT a13
COLUMN host_name        FORMAT a9
COLUMN failover_method  FORMAT a15
COLUMN failed_over      FORMAT a11

SELECT
    instance_name
  , host_name
  , NULL AS failover_type
  , NULL AS failover_method
  , NULL AS failed_over
FROM v$instance
UNION
SELECT
    NULL
  , NULL
  , failover_type
  , failover_method
  , failed_over
FROM v$session
WHERE username = 'SYSTEM';

INSTANCE_NAME HOST_NAME FAILOVER_TYPE FAILOVER_METHOD FAILED_OVER
------------- --------- ------------- --------------- -----------
orcl2         linux2
                        SELECT        BASIC           YES

SQL> exit

위 실행 결과에서, 세션이 linux2 노드의 orcl2 인스턴스로 페일오버 되었음을 확인할 수 있습니다. 


참조 : http://www.oracle.com/technology/global/kr/pub/articles/hunter_rac10gr2_3.html
         http://www.oracle.com/technology/global/kr/deploy/availability/htdocs/taf.html
         http://publib.boulder.ibm.com/infocenter/pim/v6r0m0/index.jsp?topic=/com.ibm.wpc.ins.doc/wpc_tsk_setting_up_oracle_to_use_taf_support.html

반응형
Posted by [PineTree]
ORACLE/ADMIN2013. 6. 3. 17:09
반응형

SHRINK SPACE는 오라클10g부터 지원하는 기능으로,

세그먼트의 데이터 조각모음(ONLINE Reorg. 효과) 기능.

 

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

1. SHRINK 작업을 수행하기 위한 주요 환경 및 주의할 점
-----------------------------------------------------

   1) 오라클 10g 이상(Init.ora parameter 'Compatible' must be >=10.0)
   2) 세그먼트 관리방식이 반드시 ASSM(Auto Segment Space Managed) Tablespace이어야 함
   3) 약 20여건씩 INSERT/DELETE하고 COMMIT하는 방식으로 SHRINK함
   4) 개별 ROW 또는 데이터 BLOCK에 대한 LOCK(ENQUEUE)이 사용
   5) FBI(Function-Based Index)를 SHRINK하는 경우
      오류 발생하므로 FBI를 DROP한 다음 작업하고
      SHRINK작업이 완료된 후 다시 생성
   6) DML TRIGGER를 발생시키지 않음(ROWID based TRIGGER는 작업 전에 DISABLED 필요)
   7) DML 작업은 세그먼트 SHRINK 중 수행 가능하나, parallel DML을 수행될 수 없음 
   8) 세그먼트를 SHRINK 시키는 특정 단계(HWM을 조정하는 단계)에서 세그먼트에

      exclusive 모드로 짧은 시간동안 LOCK(TM)이 걸림

 

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

2. SHRINK 작업 방법 (순서 1]~6])
-----------------------------------------------------

   1] SHRINK 대상 테이블 분석 및 조회
      (NUM_ROWS에 비해 사용하는 BLOCKS가 과다하면 SHRINK필요)
      SQL> connect / as sysdba

      SQL> EXECUTE DBMS_UTILITY.ANALYZE_SCHEMA('소유자', 'COMPUTE');

      SQL> SELECT OWNER,     TABLE_NAME,   NUM_ROWS,
                  BLOCKS,    EMPTY_BLOCKS, AVG_SPACE,
                  CHAIN_CNT, AVG_ROW_LEN
             FROM DBA_TABLES
            WHERE OWNER = '소유자'
              AND EMPTY_BLOCKS / (BLOCKS + EMPTY_BLOCKS) < 0.1
              AND (BLOCKS + EMPTY_BLOCKS) > 0
            ORDER BY BLOCKS DESC;

 

      [참고] DBMS_SPACE.VERIFY_SHRINK_CANDIDATE

 

   2] 대상 테이블 및 관련 인덱스 NOLOGGING 설정

      SQL> connect 소유자/암호
      SQL> ALTER TABLE 테이블명 NOLOGGING;
      SQL> ALTER INDEX 인덱스명 NOLOGGING;

 

   3] 대상 테이블의 ROW MOVEMENT 기능 활성화
      (데이터의 조각모음으로 ROWID가 변경되므로 ENABLE ROW MOVEMENT)
      SQL> ALTER TABLE 테이블명 ENABLE ROW MOVEMENT;

 

   4] 필요한 작업을 선택적으로 작업
      4-1) 테이블만 SHRINK하고 HWM(High Water Mark)는 SHRINK하지 않음
           SQL> ALTER TABLE 테이블명 SHRINK SPACE COMPACT;

 

      4-2) 테이블과 HWM(High Water Mark)를 SHRINK
           (HWM SHRINK 시 TM 락 발생)
           SQL> ALTER TABLE 테이블명 SHRINK SPACE;

 

      4-3) 테이블과 테이블의 HWM을 SHRINK
           SQL> ALTER TABLE 테이블명 SHRINK SPACE COMPACT;
           SQL> ALTER TABLE 테이블명 SHRINK SPACE;

 

      4-4) 인덱스와 인덱스의 HWM을 SHRINK
           (ROWID가 변경되지 않으므로 ENABLE ROW MOVEMENT 불필요)
           SQL> ALTER INDEX 인덱스명 SHRINK SPACE COMPACT;
           SQL> ALTER INDEX 인덱스명 SHRINK SPACE;

 

      4-5) 테이블 및 관련된 인덱스를 모두 SHRINK
           SQL> ALTER TABLE 테이블명 SHRINK SPACE CASCADE COMPACT;
           SQL> ALTER TABLE 테이블명 SHRINK SPACE CASCADE;

 

   5] Row movement 비활성화
      SQL> ALTER TABLE 테이블명 DISABLE ROW MOVEMENT;

 

   6] 대상 테이블 및 관련 인덱스 LOGGING 설정
      SQL> ALTER TABLE 테이블명 LOGGING;
      SQL> ALTER INDEX 인덱스명 LOGGING;

 

   ※ M-View 형태의 테이블을 SHRINK
      on-commit materialized view와 연관된 세그먼트는 SHRINK 시킬 수 없음
      rowid에 기반을 둔 materialized view에 대해서는 refresh 또는 rebuild를 수행 필요
      SQL> ALTER TABLE M-View명 SHRINK SPACE COMPACT;
      SQL> ALTER TABLE M-View명 SHRINK SPACE;


 

1) Chaining이 있는 테이블 select

 

select owner, table_name, num_rows, blocks, empty_blocks, chain_cnt,
to_char(100*(chain_cnt/num_rows),'999')||'%' as chain_pct from dba_tables
where owner not in ('SYS','SYSTEM','TRACESVR','DBSNMP','SCOTT')
  and num_rows !=0 and chain_cnt !=0;

 

 

반응형

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

[ORACLE]Listener.log 관리  (0) 2013.08.06
psu 패치  (0) 2013.07.25
(10gR2)Full UNDO tablespace_언두 메커니즘  (0) 2013.05.19
10g SYSAUX tablespace 크기 줄이기  (0) 2013.03.04
Sizing Redo Log Files  (0) 2012.10.12
Posted by [PineTree]
ORACLE/RAC2013. 5. 30. 23:04
반응형


root 유저로 실행


crs_stat -p ora.LISTENER_SCAN1.lsnr |grep -i start
crs_stat -p ora.scan1.vip  |grep -i start

[root@rac1 ~]# crsctl modify resource "ora.rac1.vip" -attr "AUTO_START=always"
[root@rac1 ~]#
[root@rac1 ~]# crsctl modify resource "ora.rac2.vip" -attr "AUTO_START=always"
[root@rac1 ~]# crsctl modify resource "ora.LISTENER_SCAN1.lsnr" -attr "AUTO_START=always"
[root@rac1 ~]# crsctl modify resource "ora.racdb.db" -attr "AUTO_START=always"
[root@rac1 ~]# crsctl modify resource "ora.scan1.vip" -attr "AUTO_START=always"
[root@rac1 ~]#
[root@rac1 ~]# crsctl modify resource "ora.net1.network" -attr "AUTO_START=always"
[root@rac1 ~]#
[root@rac1 ~]# crsctl modify resource "ora.LISTENER.lsnr" -attr "AUTO_START=always"
[root@rac1 ~]# crsctl modify resource "ora.oc4j" -attr "AUTO_START=always"
[root@rac1 ~]# crs_stat -p|grep restore

반응형
Posted by [PineTree]
ORACLE/RAC2013. 5. 30. 11:27
반응형


출처 : http://leejehong.tistory.com/170


[root@RAC1 ~]# srvctl config database -d devdb -v
Database unique name: devdb
Database name: devdb
Oracle home: /u01/app/11.2.0/db
Oracle user: oracle

10g CRS AUTO_START 값 변경.txt


11G Oracle RAC Startup Policy 변경.txt


11gR2 Disable Enable Automatic startup Oracle HAS.txt


Changing Resource Attributes in 11gR2 Grid Infrastructure.txt


crs_stat_resource상태확인(AUTO_START).txt


Spfile: /dev/raw/raw6
Domain: 
Start options: open
Stop options: immediate
Database role: PRIMARY
Management policy: AUTOMATIC
Server pools: devdb
Database instances: devdb1,devdb2
Disk Groups: 
Mount point paths: 
Services: 
Type: RAC
Database is administrator managed
[root@RAC1 ~]#


oracle@RAC1:/>crs_stat -t
Name           Type           Target    State     Host        
------------------------------------------------------------
ora....ER.lsnr ora....er.type ONLINE    ONLINE    rac1        
ora....N1.lsnr ora....er.type ONLINE    ONLINE    rac2        
ora.cvu        ora.cvu.type   ONLINE    ONLINE    rac1        
ora.devdb.db   ora....se.type OFFLINE   OFFLINE               
ora.gsd        ora.gsd.type   ONLINE    ONLINE    rac1        
ora....network ora....rk.type ONLINE    ONLINE    rac1        
ora.oc4j       ora.oc4j.type  ONLINE    ONLINE    rac1        
ora.ons        ora.ons.type   ONLINE    ONLINE    rac1        
ora....C1.lsnr application    ONLINE    ONLINE    rac1        
ora.rac1.gsd   application    ONLINE    ONLINE    rac1        
ora.rac1.ons   application    ONLINE    ONLINE    rac1        
ora.rac1.vip   ora....t1.type ONLINE    ONLINE    rac1        
ora....C2.lsnr application    ONLINE    ONLINE    rac2        
ora.rac2.gsd   application    ONLINE    ONLINE    rac2        
ora.rac2.ons   application    ONLINE    ONLINE    rac2        
ora.rac2.vip   ora....t1.type ONLINE    ONLINE    rac2        
ora....ry.acfs ora....fs.type OFFLINE   OFFLINE               
ora.scan1.vip  ora....ip.type ONLINE    ONLINE    rac2        
oracle@RAC1:/>
oracle@RAC1:/>

reboot시 Database가 자동으로 시작되지 않음.


oracle@RAC1:/>crs_stat -p ora.devdb.db |grep -i start
AUTO_START=restore
GEN_START_OPTIONS@SERVERNAME(rac1)=open
GEN_START_OPTIONS@SERVERNAME(rac2)=open
RESTART_ATTEMPTS=2
START_TIMEOUT=600
oracle@RAC1:/>

AUTO_START=restore 로 되어있어서 startup 되지 않음.

# 참고
* AUTO_START=1(always) -> 그 전의 상태와 상관없이 하드웨어 설정상태만 정상이면 crs 재구동시 리소스가 online 되어짐. * * AUTO_START=2(never) -> 모든 리소스를 수동으로 시작 
* AUTO_START=0(restore) -> 모든 리소스는 내리기 전 상태로 복귀.

[root@RAC1 profile]# crs_stat -p ora.devdb.db |grep -i start
AUTO_START=restore
GEN_START_OPTIONS@SERVERNAME(rac1)=open
GEN_START_OPTIONS@SERVERNAME(rac2)=open
RESTART_ATTEMPTS=2
START_TIMEOUT=600

[root@RAC1 profile]# 
[root@RAC1 profile]# crsctl modify resource "ora.devdb.db" -attr "AUTO_START=always"
[root@RAC1 profile]# crs_stat -p ora.devdb.db |grep -i start
AUTO_START=always
GEN_START_OPTIONS@SERVERNAME(rac1)=open
GEN_START_OPTIONS@SERVERNAME(rac2)=open
RESTART_ATTEMPTS=2
START_TIMEOUT=600
[root@RAC1 profile]#

Changing Resource Attributes in 11gR2 Grid Infrastructure 
In 11gR2 grid infrastructure installations certain resources may have auto start set to never and restore. 
This was observed both on environments where clusterware was upgraded to 11.2 as well as newly installed environments. 
Depending on the situation these may not be desirable. Auto start attribute setting could be changed as follows.

1. Check the current auto start values

# crsctl stat res -p
NAME=ora.FLASH.dg
TYPE=ora.diskgroup.type
ACL=owner:oracle:rwx,pgrp:oinstall:rwx,other::r--
ACTION_FAILURE_TEMPLATE=
ACTION_SCRIPT=
AGENT_FILENAME=%CRS_HOME%/bin/oraagent%CRS_EXE_SUFFIX%
ALIAS_NAME=
AUTO_START=never     

NAME=ora.DATA.dg
TYPE=ora.diskgroup.type
ACL=owner:oracle:rwx,pgrp:oinstall:rwx,other::r--
ACTION_FAILURE_TEMPLATE=
ACTION_SCRIPT=
AGENT_FILENAME=%CRS_HOME%/bin/oraagent%CRS_EXE_SUFFIX%
ALIAS_NAME=
AUTO_START=never    

NAME=ora.clusdb.db
TYPE=ora.database.type
ACL=owner:oracle:rwx,pgrp:oinstall:rwx,other::r--
ACTION_FAILURE_TEMPLATE=
ACTION_SCRIPT=
ACTIVE_PLACEMENT=1
AGENT_FILENAME=%CRS_HOME%/bin/oraagent%CRS_EXE_SUFFIX%
AUTO_START=restore

2. Since ASM diskgroup that database depend on will never auto start database will also be unavailable.

3. Change the resource start attribute with

# crsctl modify resource "ora.FLASH.dg" -attr "AUTO_START=always"
# crsctl modify resource "ora.DATA.dg" -attr "AUTO_START=always"
# crsctl modify resource ora.clusdb.db -attr "AUTO_START=always"
Auto start must be upper case if not command will fail 
crsctl modify resource ora.clusdb.db -attr "auto_start=always"
CRS-0160: The attribute 'auto_start' is not supported in this resource type.
CRS-4000: Command Modify failed, or completed with errors.


4. Verify the status change with 
# crsctl stat res -p
NAME=ora.clusdb.db
TYPE=ora.database.type
ACL=owner:oracle:rwx,pgrp:oinstall:rwx,other::r--
ACTION_FAILURE_TEMPLATE=
ACTION_SCRIPT=
ACTIVE_PLACEMENT=1
AGENT_FILENAME=%CRS_HOME%/bin/oraagent%CRS_EXE_SUFFIX%
AUTO_START=always

반응형
Posted by [PineTree]
ORACLE/TroubleShooting2013. 5. 30. 09:47
반응형

Problems

- 11gR2 GI PSU 설치 작업 시 $GI_HOME의 가용 디스크 공간이 22GB 이하인 상황 (AIX환경)

- PSU 적용 사전 단계에서 Fail 발생 (Prerequisite check “CheckSystemSpace” failed.

   The details are: Required amount of space(22288172004) is not available.)

Cause

- $GI_HOME의 가용 디스크 공간이 부족하여 발생함

- 실제로 PSU Patch시 필요한 공간보다 과도하게 가용 디스크 요구

Solution

- $GI_HOME Filesystem에 가용한 디스크 공간을 확보

- .patch_storage 디렉토리용 Filesystem을 $GI_HOME용 Filesystem과 분리하고 Symbolic Link 생성하여 가용 디스크 확보

- PSU 적용시 DiskSpace 점검 단계 생략하는 방법

   $ opatch apply OPatch.SKIP_VERIFY_SPACE=true         #auto 옵션에서는 적용 안됨

- .patch_storage 정리하는 방법

   $ opatch util cleanup

References

- 관련문서

   · opatch CheckSystemSpace Fails With Error Code 73 While Applying GI PSU [ID 1088455.1]

   · How To Avoid Disk Full Issues Because OPatch Backups Take Big Amount Of Disk Space. [ID 550522.1]

- 관련버그

   · Bug 9780505: 11.2_GIPSU2_AIX: REQUIRED SYSTEM SPACE (22G) IS TOO LARGE FOR GI PSU 2 PATCH

반응형

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

SHARED POOL에 대한 점검 사항들  (0) 2014.03.23
Oracle Dump Trace뜨기  (0) 2013.06.23
2pc pending 처리 사용예 (Two Phase-Commit)  (0) 2012.12.06
Block corruption  (0) 2012.08.08
ora-01578  (0) 2012.08.08
Posted by [PineTree]
ORACLE/ADMIN2013. 5. 19. 22:10
반응형

(10gR2)Full UNDO tablespace                                                                       

                                                                                                                           게시일: 2008. 2. 25 오후 9:54



============================

PURPOSE


10gR2 에서 UNDO tablespace 을 NO AUTOEXTEND로 생성한 경우 ,
transaction 이 실행중인 database 에서는 UNDO tablespace 가
FULL인 현상을 보게 됩니다.
이는 10gR2 에서 max retention 을 보장하는 undo retention 의
메카니즘이 소개되어 autoextend off 인 경우의 UNDO tablespace
에서 나타나는 현상입니다.
dba_undo_extents 에서 많은 UNEXPIRED undo segment 가 보이는 것이
확인되고 UNDO tablespace 가 100% full 인것처럼 나타나는 현상을 볼 수
있으며 그럼에도 불구하고 ORA-1555 나 ORA-30036 에러는 발생하지 않습니다.

Explanation


다음과 같이 많은 UNEXPIRED undo segment 가 조회됩니다.

SQL> select count(status) from dba_undo_extents where status = 'UNEXPIRED';

COUNT(STATUS)

463

SQL> select count(status) from dba_undo_extents where status = 'EXPIRED';

COUNT(STATUS)

20

SQL> select count(status) from dba_undo_extents where status = 'ACTIVE';

COUNT(STATUS)

21

dba_free_space 을 조회 결과 UNDO tablespace 의 free space 가 존재합니다.

SUM(BYTES)/(1024*1024) TABLESPACE_NAME


---------------------
3 UNDOTBS1
58.4375 SYSAUX
3 USERS3
4.3125 SYSTEM
103.9375 USERS04

Transaction 이 실행되면 UNDO tablespace 에 free space 가 조회되지 않는
FULL 인것처럼 보입니다.

SUM(BYTES)/(1024*1024) TABLESPACE_NAME
----------------
58.25 SYSAUX
98 USERS3
4.3125 SYSTEM
87.9375 USERS04


~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
다음은 AUM 에서의 Undo Block 할당 알고리즘은 다음과 같습니다.

1. current extent 에 free block 이 있으면 다음 free block 이
할당됩니다.
2. 그러나, free block 이 없으면, next extent 가 expired 되었다면 next extent 을
warp 한후 그 next extent 의 처음 block 을 return 합니다.
3. 만약 next extent 가 expired 되지 않았다면 UNDO tablespace 로부터 먼저
space 을 찾습니다. 이때 free extent 가 존재한다면 이를 transaction table 에
할당하고 해당 next extent 의 첫번째 block 을 return 합니다.
4. 만약 UNDO tablespace 에 free extent 가 없다면 offline 된 transaction table
에서 steal 합니다.
offline 된 transaction table 에서 extent 을 deallocate 한후 이를
current transaction table 에 add한후 그 add 한 extent 의 첫번째 free block 을
return 합니다.
5. offline 된 transaction table 에서 찾을수 없으면 , online 되어 있는
transaction table 에서 steal 합니다. offline 된 transaction table 에서 extent 을
deallocate 한후 이를 current transaction table 에 add한후 , 그 add 한 extent 의
첫번째 free block 을 return 합니다.
6. 1번~5번 까지 하여도 free block 을 얻지 못하면 이제 UNDO tablespace 의 file 을
extend 합니다.
file 이 extend 된다면 이후 current transaction table 에 extent 을 add 한후 ,
그 extent 의 첫번째 free block 을 return 합니다.
7. 6번 에서 UNDO tablespace 의 file 을 extend 하지 못했다면 , 자기의 transaction table
에서 unexpired 된 extent 을 재사용합니다. 그런데 이때 모든 extent 가 busy 하다면
즉 모두 uncommitted 된 정보라면 8번으로 갑니다. 아니라면 wrap 하여 unexpired 된
extent 을 사용합니다.
8. offline 된 transaction table 에서 unexpired 된 extent 을 steal 합니다. 이것이
실패한다면 online 된 transaction table 에서 unexpired 된 extent 을 steal 합니다.
9. 8 번까지 수행하고도 free block 을 얻지 못하면 이때서야 오라클에서는
"ORA-30036 unable to extend segment by %s in undo tablespace '%s' " 에러를
뿌리며 실패합니다.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

fixed size UNDO tablespace 라 함은 autoextend 가 off 라 datafile 을 자동으로
더 이상 확장할 수 없음을 말합니다.
autoextend 가 off 인 경우 10.2 부터는 max retention 이 36 시간 입니다.
undo_retention 을 900 초(15 분) 으로 설정을 한다고 해도 10gR2 에서는
max retention 이 36 시간이라 이에 해당하는 undo extent 을 UNEXPIRED 으로 만듭니다.
그러나 이것이 가용한 undo extent 가 없다는 것이 아니고 , transaction 이 실행되게 되면
UNEXPIRED undo segment 을 재사용하게 됩니다.

References


< Note 413732.1 - Full UNDO Tablespace In 10gR2 >

반응형

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

psu 패치  (0) 2013.07.25
shrink 대상 선정 및 shrink작업  (1) 2013.06.03
10g SYSAUX tablespace 크기 줄이기  (0) 2013.03.04
Sizing Redo Log Files  (0) 2012.10.12
Dynamic Intimate Shared Memory  (0) 2012.08.23
Posted by [PineTree]
ORACLE/11G2013. 5. 19. 21:10

ADR

반응형

제품 : Database

작성날짜 : 2008-01-07

PURPOSE
================================
기존 제품에서와 달리, 11g 는 alert log 를 text file 뿐만 아니라 XML-formatted file 로도 기록합니다. 또한 그 위치가 기존의 BDUMP가 아니므로, 어떤 문제가 발생하거나 INSTANCE의 상태를 확인하려 할 때 혼란스러울 수 있습니다.

-- 차례 --
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1. ADR 의 개념과 11g에서 ALERTLOG의 위치
1-1. ADR BASE
1-2. ADR HOME
1-3. ALERTLOG의 새로운 위치
1-4. 기타 '기존 경로'와 '새로운 경로' 안내

2. PROBLEM과 INCIDENT
2-1. What is a Problem?
2-2. What is an Incident?

3. ADRCI
3-1. ALERTLOG 살펴보기
3-2. Server Trace File 찾기
3-3. Listener Trace File 찾기
3-4. 옛날 방법을 통해 Trace File에 접근하기
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~


EXPLANATION
================================
1. ADR 의 개념과 11g에서 ALERTLOG의 위치

1-1. ADR BASE

11g에서는 BDUMP와 UDUMP와 같은 구분이 없어지며, ADR(Automatic Diagnostic Repository)이라는 concept으로 관리됩니다. ADR은 기존에 BDUMP와 UDUMP로 나뉘어 관리되던 Diagnostic 정보를 한 곳에 모아 관리하고 손쉽게 Oracle Support에 그 Data를 전달할 수 있도록 도와줍니다.

먼저 ADR_BASE의 위치는 INSTANCE에서 DIAGNOSTIC_DEST 파라미터로 확인할 수 있습니다.

(1) $ORACLE_BASE가 설정되어 있다면, DIAGNOSTIC_DEST 의 위치는 $ORACLE_BASE 입니다.
(2) $ORACLE_BASE가 설정되어 있지 않다면, DIAGNOSTIC_DEST 의 위치는 $ORACLE_HOME/log 입니다.

현재 설정위치는, 다음과 같이 INSTANCE 상에서 DIAGNOSTIC_DEST 를 확인할 수 있습니다. 아래의 경우 $ORACLE_BASE 가 ADR_BASE 인 것을 볼 수 있습니다. ($ORACLE_HOME이 설정되지 않음)

SQL> show parameter diagno

NAME TYPE VALUE


-----------


diagnostic_dest string /opt/oracle/product

다음 query를 통해, 관련 정보를 자세히 확인할 수 있습니다.

SQL> select * from v$diag_info


1-2. ADR HOME

설치된 ORACLE PRODUCT별 INSTANCE의 ADR 위치를, ADR HOME이라고 합니다. 다음과 형태로, 그 위치가 결정됩니다.

ADR_BASE/diag/product_type/product_id/instance_id

예들 들어, ADR_BASE가 /opt/oracle/product 라면 ADR_HOME은 다음과 같습니다.

/opt/oracle/product/diag/rdbms/ora11/ORA11


1-3. ALERTLOG의 새로운 위치

(1) XML 형태의 ALERT
XML 형태의 ALERTLOG는 다음 위치에서 찾을 수 있으며, 이를 열기 위해서는 ADRCI라는 별도의 Utility가 필요합니다.

ADR_HOME/diag/product_type/product_id/instance_id/alert

다음과 같은 방법을 통해서도 그 위치를 확인할 수 있습니다.

SQL> select value from v$diag_info where name ='Diag Alert';

VALUE


/opt/oracle/product/diag/rdbms/ora11/ORA11/alert

(2) TEXT 형태의 ALERT
일반 ALERTLOG는 다음 위치에서 찾을 수 있습니다.

ADR_HOME/diag/product_type/product_id/instance_id/trace

다음과 같은 방법을 통해서도 그 위치를 확인할 수 있습니다.

SQL> select value from v$diag_info where name ='Diag Trace';

VALUE


/opt/oracle/product/diag/rdbms/ora11/ORA11/trace


1-4. 기타 '기존 경로'와 '새로운 경로' 안내

(1) Foreground Process Trace Files
USER_DUMP_DEST
-> ADR HOME/trace

(2) Background Process Trace Files
BACKGROUND_DUMP_DEST
-> ADR HOME/trace

(3) Database Alert log File
BACKGROUND_DUMP_DEST
-> ADR HOME/alert/log.xml OR ADR HOME/trace/alert_<SID>.log

(4) SQL*Net Listener Log File
LOG_DIRECTORY_LISTENER -

ADR HOME/alert/log.xml


(5) Core Dump Files
CORE_DUMP_DEST
-> ADR HOME/cdump

(6) Incident Dump Files (아래에서 n은 정수)
USER_DUMP_DEST AND BACKGROUND_DUMP_DEST
-> ADR HOME/incident/incdir_n


2. PROBLEM과 INCIDENT

11g를 관리하기 위해서는 PROBLEM과 INCIDENT라는 개념을 인지해야 합니다.

2-1. What is a Problem?

먼저 PROBLEM이란 DATABASE상의 critical error 를 일컫습니다. 예를 들어, ORA-600 / ORA-7445 / ORA-4031 / ORA-1578 과 같은 MESSAGE를 예로 들 수 있습니다. 이러한 PROBLEM들은 ADR내에 그 정보가 기록됩니다.


2-2. What is an Incident?

INCIDENT라 함은, 'PROBLEM의 1회 발생' 을 말합니다.

다시 말해 'ORA-1578 메세지가 여러번 기록되는 경우라면, ORA-1578이라는 '하나의 PROBLEM'에 대해 '여러 INCIDENT'가 ADR내에 생성됨을 의미합니다.


3. ADRCI

- 새롭게 등장한 ADR 관련 정보를 다루기 위해서는, ADR Commandline Interface (ADRCI)를 사용합니다.

다음과 같이 adrci 를 기동시킵니다.

oracle@prdsup5:~> adrci

ADRCI: Release 11.1.0.6.0 - Beta on Mon Dec 31 18:48:38 2007

Copyright (c) 1982, 2007, Oracle. All rights reserved.

ADR base = "/opt/oracle/product"
adrci>

- ADRCI에서 SHOW 명령어를 실행할 경우, default Editor가 실행됩니다. 만약 이 부분에 문제가 있다면 다음과 같이, Editor를 지정할 수 있습니다.

adrci> set editor vi

3-1. ALERTLOG 살펴보기

- 기본적으로 'SHOW ALERT' command를 사용합니다만, 다음과 같이 TAIL 옵션을 사용하여 최신 정보만 살펴볼 수도 있습니다.

adrci> SHOW ALERT -TAIL
adrci> SHOW ALERT -TAIL 50 // 마지막 50라인만 살펴보기

- 특정 terminal에서 alertlog의 "live monitoring"이 가능합니다.

adrci> SPOOL /home/steve/MYALERT.LOG
adrci> SHOW ALERT -TERM
adrci> SPOOL OFF

- ORA-600에 관련된 메세지만 살펴볼 수도 있습니다.

adrci> SHOW ALERT -P "MESSAGE_TEXT LIKE '%ORA-600%'"

3-2. Server Trace File 찾기
- 기본적으로 'SHOW TRACEFILE' command를 사용합니다.

adrci> show tracefile
adrci> show trace <trace file.trc>

- 특정 KEYWORD를 사용하여 찾을 수 있습니다.

adrci> SHOW TRACEFILE %mmon%

- 특정 PROCESS ID를 사용하여 찾을 수 있습니다.

adrci> SHOW TRACEFILE -I 1681

3-3. Listener Trace File 찾기

- 기본적으로 'SHOW TRACEFILE' command를 사용합니다.

adrci> show tracefile
adrci> show trace <trace file.trc>

3-4. 옛날 방법을 통해 Trace File에 접근하기

(1) Server Trace File 찾기
cd $HOME/oradiag_oracle/diag/lsnrctl/$HOSTNAME/$HOSTNAME/trace

(2) Listener Trace File 찾기
cd $HOME/oradiag_oracle/diag/lsnrctl/$HOSTNAME/$HOSTNAME/trace

REFERENCES
================================
ADRCI: ADR Command Interpreter
http://download.oracle.com/docs/cd/B28359_01/server.111/b28319/adrci.htm#insertedID0

Note 454927.1
Using and Disabling the Automatic Diagnostic Repository (ADR) with Oracle Net for 11g

Note 453125.1
11g Diagnosability: Frequently Asked Questions

Note 415733.1
ADRCI Reference guide

반응형
Posted by [PineTree]
ALTIBASE2013. 3. 13. 15:26
반응형



4.3.9 버전에서 테이블 스페이스 사용량 조회 확인 쿼리입니다.
 
set linesize 1000;
set colsize 20;
 
SELECT
    UF.NAME SPACENAME,
    ROUND(DF.MAXSIZE, 3)||' MB' MAXSIZE ,
    ROUND(DF.CURRSIZE, 3)||' MB' CURRSIZE ,
    NVL(to_char(ROUND(UF.ALLOCATED_PAGE_COUNT*8/1024,3)),'N/A')||' MB' USEDSIZE
FROM
    (SELECT
        SUM(MAXSIZE)*8/1024 MAXSIZE ,
        SUM(CURRSIZE)*8/1024 CURRSIZE ,
        SPACEID
    FROM
        V$DATAFILES
    GROUP BY SPACEID) DF , V$TABLESPACES UF
where DF.SPACEID = UF.ID
UNION ALL
SELECT
    'SYS_TBS_MEMORY' SPACENAME,
    ROUND(MEM_MAX_DB_SIZE/1024/1024,3)||' MB' MAXSIZE,
    ROUND(MEM_ALLOC_PAGE_COUNT*32/1024,3)||' MB' CURRSIZE,
    TO_CHAR(ROUND(MEM_ALLOC_PAGE_COUNT*32/1024,3))||' MB' USEDSIZE
FROM
    V$DATABASE
ORDER BY 1;



반응형
Posted by [PineTree]