'오라클'에 해당되는 글 2건

  1. 2014.12.19 인덱스 1
  2. 2014.11.04 컨트롤 파일 복구1
2014. 12. 19. 15:57

1. 인덱스란 ?


* 인덱스  

어떤 데이터가 어디에 있다라는 주소록의 개념

잘 활용하면 아주 빠르게 데이터를 찾을 수 있음

어떤 데이터의 주소는 어디다. 라는 식으로 

모든 데이터들의 주소록을 만들어 관리하는 기법

=> 

인덱스가 있으면 모든 블록을 다 읽지 않고, 원하는 데이터가 있는 블록 주소를 찾아내

그 블록만 메모리로 복사해 와서 작업이 빨리 끝남

어떤 데이터가 어디에 저장되어 있는지 알고 있기 때문에 데이터 조회,변경, 호출해야 할 때 아주 빠르게 작업 가능

BUT 인덱스 생성이나 관리를 잘못할 경우는 성능이 떨어지는 역효과가 발생하기도 함




* 쿼리 실행시 데이터 검색 과정

많이 사용되는 데이터는 데이터베이스 버퍼캐시에 캐싱해두고 

많이 사용하지 않는 데이터는 디스크에 저장했다가 

필요할 때 메모리로 복사해 와서 조회나 변경 작업등을 함



* Table full scan

사용자가 어떤 데이터를 찾을 때 

메모리에서 해당 데이터를 못찾을 경우 

파일에 가서 데이터를 찾아 메모리로 복사해와야 하는데 

하드디스크에 데이터가 너무 많을 경우(예 1억개)에는

해당 데이터가 어떤 블록이 들어 있는지 모른다면

모든 블록을 읽어서 확인함


2. 인덱스의 생성 원리


해당 테이블의 내용들을 모두 다 읽어 메모리로 가져옴

어떤 내용이 있는지 내용을 파악해서 목록만듬

인덱스를 만드는 동안 데이터가 변경되면 문제가 되므로

해당 데이터들이 변경되지 못하도록 조치한 후 PGA의 Sort area에서 정렬을 함

PGA 메모리가 부족하면 임시테이블스페이스(Temporary Tablespace)를 사용해서 정렬하게 됨

메모리에서 정렬과정이 끝난 데이터들은 인덱스를 저장하는 파일의 블록에 순서대로 기록함


인덱스 생성

전체 테이블 스캔 -> 정렬(sort) -> Block 기록

인덱스는 데이터가 정렬되어서 들어감 


3. 인덱스 구조와 작동원리(B-Tree  인덱스 기준)


인덱스는 key 칼럼와 rowid 칼럼으로 이루어짐

key 칼럼 : 인덱스를 생성하라고 지정한 컬럼 값

rowid 칼럼 : 데이터가 저장되어 있는 주소 




                             

실제 데이터 - Data file

인덱스 정보 - Index file 에 저장되어 있음


1 가장 먼저 메모리의 데이터베이스버퍼캐쉬에서 해당 데이터가 있는지 확인

2 인덱스 파일 찾는 순서는 트리구조의 오른쪽 상단그림 

root 9 - branch 7 - leaf 1 순으로 읽음 

3 인덱스에 있는 블록 데이터를 가지고 옴


경우에 따라 인덱스를 사용하지 않는 것이 성능에 더 좋을 수도 있음

여러건의 데이터를 조회할 경우 인덱스를 사용할 때는 한 번에 하나의 블록만 읽을 수 있음                 


single block I/O : 1번에 1개의 블록만 읽어서 메모리로 가져옴( db_block_size )

multi block I/O : 인덱스를 쓰지 않았을 경우에 한 번에 여러 블록을 가져오는 것 ( DB_FIEL_MUTLIBLOCK_COUNT ( MBRC ))






                          


'DB > sql' 카테고리의 다른 글

sql*plus autotrace 기능 활성화  (0) 2014.12.24
튜닝에 필요한 파일들  (0) 2014.12.22
인덱스 2  (0) 2014.12.19
현재 가진 계정이 소유하고 있는 테이블 목록  (0) 2014.12.17
redolog file 상태확인  (0) 2014.12.03
Posted by 성장하는yw
2014. 11. 4. 17:22

SYS>startup

ORACLE instance started.


Total System Global Area  422670336 bytes

Fixed Size                  1344616 bytes

Variable Size             293604248 bytes

Database Buffers          121634816 bytes

Redo Buffers                6086656 bytes

ORA-00205: error in identifying control file, check alert log for more info


에러 뜨는 이유 컨트롤 파일의 경로와 실제 컨트롤 파일이 서로 맞지 않을 때,

경로는 있지만, 파일이 없는 경우 위와 같은 에러가 생김

그러면 경로를 수정해주거나, 파일을 추가 혹은 삭제해서 같도록 만들어주면 startup 이 정상적으로 됨


나와 같은 경우


실제 경로

파일명 : $ORACLE_HOME/dbs/inittestdb.ora (파라미터파일, pfile) 

...생략

*.control_files='/data/temp7/control01.ctl','/data/temp7/control02.ctl','/data/temp7/control03'

...생략



실제 컨트롤 파일 조회

SYS>select name from v$controlfile;


NAME

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

/data/temp7/control01.ctl


os 실제 경로에 파일 확인


[oracle@localhost temp7]$ ls

control01.ctl  redo01_b.log  sysaux01.dbf  undotbs01.dbf

example01.dbf  redo02_a.log  system01.dbf  users01.dbf

redo01_a.log   redo02_b.log  temp01.dbf


[oracle@localhost ~]$ cp /data/temp7/control01.ctl /data/temp7/control02.ctl
[oracle@localhost ~]$ cp /data/temp7/control01.ctl /data/temp7/control03.ctl 


해결방법 :

1. 경로에서 사용하지 않는 경로를 삭제

2. 실제(사용중인) 컨트롤 파일을 경로처럼 다중화(복사)를 해줌

3. 경로에 오타가 있거나 파일 이름에 오타가 있어도 이러한 에러가 뜸!!!!!!!!!!!!



'DB > oralce' 카테고리의 다른 글

컨트롤 파일 복구 3  (0) 2014.11.04
컨트롤 파일복구 2  (0) 2014.11.04
시점복구시 주의할 사항  (0) 2014.11.04
ora-01190  (0) 2014.11.04
archive log mode 아카이브 로그 모드 장애 복구  (0) 2014.11.03
Posted by 성장하는yw