티스토리 뷰

ORACLE DB/Projects

admin Q & A

sai505 2013. 3. 8. 01:35

ADMIN Q & A



1. 오라클을 설치할때 oracle 계정 말고 ora_itwill 이라는 계정으로 설치하려고 한다.

그 방법을 쓰시오.

]# useradd -g dba ora_itwill;

]$ chown -R ora_itwill.dba /$ORACLE_HOME/

계정추가후 설치파일이 들어 있는 디렉토리 권한을 ORA_ITWILL소유로 변경해준다.


2. 오라클 설치후 해야하는 후속 작업에 대해서 쓰시오.

control file, redo log 다중화하고 데이터파일과 파라미터 백업. 암호설정

아카이브 로그 활성화


-control file 다중화

spfile인지 pfile 인지 확이을 먼저한다.

sql> show parameter pfile; 

sql> show parameter spfile;

value에 값이 나오면 spfile이고 나오지 않으면 pfile이다.


spfile일경우 

먼저 현재 컨트록 파일 위치 조회

sql> select name from v$contolfile;

sql> alter system set control_files = '경로/이름.ctl' scope = spfile;

재부팅하면 적용할수있도록 spfile 옵션을 주었다.


db종료후 os 명령어로 원하는 경로에 이동해준다.

sql> !cp 현재경로 새경로

sql> startup


pfile일 경우

db 종료후, os 명령어로 원하는 경로에 pfile복사후 pfile 파라미터에 있는 컨트롤파일 경로를 수정해준후 db를 

다시 오픈 시켜준다.


-redo log 다중화

권장사항으로 그룹은 최소 3개와 경로에 각그룹 최소 멤버 2개이고, 다중화를 시켜준다.

크기 설정은 서버에 맞게 사용하지만 log switch가 한시간에 2-3회 발생하는 크기가 권장 사항이다.

일반적으로 10mb~30mb미만이다.


db가 종료된 상태에서 os명령어로 원하는경로에 복사를 해주고

마운트 단계에서

sql> startup mount

경로 지정을 해준다.

sql> alter database rename file '예전 경로' '새경로';


-파라미터 파일 백업

오라클 서버 운영하는데 필요한 각종 설정 정보를 저장하고 있고 파라미터 초기 상태의 최적의 값이 

저장되어있으므로 나중에 유용하게 쓰일수 있다.


-암호 설정

로그인후 sys 계정 암호 묻도록 설정 

$ORACLE_HOME/network/admin 디렉토리에 sqlnet.ora 파일 내용에  sqlnet.autentication_services=(none) 이라고 추가해준다. sqlnet.ora파일이 해당 디렉토리에 없을 경우에는 netca로 새로 생성해준다.


암호설정

sys계정의 패스워드 파일은 $ORACLE_HOME/dbs 디렉토리 밑에 orapwd으로 시작하는 파일에 저장되어있다.

삭제하고 orapwd 유틸리티로 새암호로 재생성해준다.

]$orapwd file=$ORACLE_HOME/dbs/orapwtestdb 라고 치고 새암호를 입력하면 된다.


-아카이브 로그 활성화

파라미터 파일에서 아카이브로그파일이 저장되는 경로를 지정해준후 마운트 단계에서 아카이브 활성화 해준다.

sql> alter database archivelog;



3.ORA-00214: control file '/home/oracle/oradata/testdb/control02.ctl' version 954

inconsistent with file '/home/oracle/oradata/testdb/control01.ctl' version 930 

오라클을 시작했더니 위와 같은 에러가 발생했다 어떻게 조치해야 하는가? 그 조치방법

및 실제 수행 명령어를 쓰시오.


에러원인 : 컨트럴파일간의 정보 버전 불일치

해결방법 : db종료후, os명령어로 최근버전(번호 높은 버전)으로 덮어써서 버전을 동일하게 만든후 db open 시킨다. 아니면 아예 사용하지 않게 설정하려면 파라미터파일에서 주석처리하면된다.




7.  현재 리두로그 그룹,멤버,크기,상태를 볼 수 있는 쿼리를 쓰세요.

sql> select a.group#, a.member, b.bytes/1024/1024 MB, b.archived, b.status

  from v$logfile a, v$log b

  where a.group#=b.group#

  order by 1,2;




8. 아래의 리두로그 관련 작업 내용에 해당하는 명령을 쓰세요.(경로는 알아서…)

- 그룹추가 : sql> alter database add logfile group 4 '/app/oracle/redo04.a.log' size 10M;

- 멤버추가 : sql> alter database add logfile member '/app/oracle/redo04.b.log' to group 4;

- 그룹삭제 : sql> alter database drop logfile group 4;

- 멤버삭제 : sql> alter database drop logfile member '/app/oracle/redo04.b.log';


9. default temporary tablespace 를 temp500 으로 변경하는 순서와 해당 쿼리를 쓰세요.

sql> create temporary tablespace temp500 

tempfile '/app/oracle/temp500.dbf' size 5M

autoextend on;


sql> alter database default temporary tablespace temp500;


10. 인덱스를 만들던 중에 아래와 같은 장애가 발생하였다.

SQL> create index idx_student_name on student(name);

create index idx_student_name on student(name)

                                 *

ERROR at line 1:

ORA-01116: error in opening database file 202

ORA-01110: data file 202: '/data/temp/temp2.dbf'

ORA-27041: unable to open file

Linux Error: 2: No such file or directory

Additional information: 3


원인과 해결방법을 쓰고 해결 쿼리를 쓰세요.


원인: 인덱스를 생성하는 원리는  테이블 전체스캔 (full scan) -> 정렬 (sort) -> 블록 기록인데, 정렬 작업이

pga내에 sort area에서 일어나고 메모리가 부족하면 임시 테이블스페이스(temporary tablespace)에서 일어나는데

지금은 임시 테이블스페이스 temp2에 문제가 있으므로, 새로 생성해주면 된다.


해경 방법 : sql> create temporary tablespace temp2

tempfile '/app/oracle/temp2.dbf' size 5M;

 sql> alter database default temporary tablespace temp2;




11. 학습지 사이트를 오픈 하려고 한다.

 테이블스페이스 이름은 TS_hak 이고 파일은 ‘/data/temp/ts_hak01.dbf’ 

이며 크기는 100M로 설정하려 한다. 

ASSM 으로 해당 테이블스페이스를 생성하는 쿼리를 쓰세요.


sql> create tablespace TS_hak datafile '/data/temp/ts_hak01.dbf' size 100M

  segment space management auto;


9i 부터는 자동으로 assm으로 설정된다.


12. 10번에서 만든 테이블 스페이스에 hakjum이라는 테이블을 만들고 

데이터를 입력하는 도중에 아래와 같은 에러가 발생했다. 

어떻게 해야 하는가? 해결 가능한 모든 방법을 쓰고 해당 작업을 하는 쿼리를 쓰세요.


<에러>

ORA-01653: unable to extend table SYS.HAKJUM by 8 in tablespace TS_HAK


수동으로 용량추가

sql> alter tablespace add datafile '/app/oracle/ts_hak2.dbf ' size 5M;

sql> alter database datafile '/app/oracle/ts_hak.dbf' resize 10M;


자동으로 용량 설정

sql> alter database datafile '/ap/oracle/ts_hak.dbf' autoextend on;




13. 현재 undo tablespace 가 undotbs1 이다. 그런데 이 데이터파일의 

크기가 너무 커서 삭제하고 신규로 undo01 이라는 언두 테이블스페이스를 

만들어서 변경하고자 한다. 방법을 순서대로 쓰고 해당 작업을 하는 쿼리를 쓰세요.


sql> show parameter undo;

sql> create undo tablespace undo01 datafile '/app/oracle/undo01.dbf ' size 10M;

sql> alter system set undo_tablespace=undo01; (spfile일경우)

pfile 일경우 db 종료후 파라미터 파일에서 언두 이름 변경해줌.

sql> drop tablespace undotbs1;


14. scott 사용자가 만든 hakjum 이라는 테이블에 있는 학번 컬럼으로 

unique index 를 생성하고자 합니다. 해당 쿼리를 쓰세요.

sql> create unique index hak_index on scott.hakjum(학번);




15. howkey 라는 사용자를 생성하시오.

   Default tablespace는 howkey01 이고 경로는 각자 알아서…

   Temp tablespace 는 temp_howkey 로 하시고

   Quota 는 무제한으로 주시고

   접속해서 테이블,인덱스,뷰, 트리거 등을 만들 수 있는 기본적인 권한을 주세요. 

sql> create tablespace howkey01
datafile '/app/oracle/howkey01.dbf' size 5M;

sql> create temporary tablespace temp_howkey
tempfile '/app/oracle/temp_howkey.dbf' size 5M
autoextend on;

sql> alter database default temporary tablespace temp_howkey;

sql> create user howkey identified by howkey
default tablespace howkey01
temporary tablespace temp_howkey
quota unlimited on users;

sql> conn  / as sysdba

sql> grant connect, resource to howkey;




16. 서버내의 전체 데이터 파일을 조회해서 현재 사용량을 확인하는 쿼리를 쓰세요.

sql> col ts_name for a10

sql>

select distinct d.file_id file#, d.tablespace_name ts_name,

d.bytes /1024/1024 MB,d.bytes /8192 total_blocks,

sum(e.blocks) used_blocks,to_char(nvl(round(sum(e.blocks)/(d.bytes/8192),4),0)*100,

'09.99')|| '%' pct_used 

from dba_extents e,dba_data_files d

where d.file_id=e.file_id(+)

group by d.file_id,d.tablespace_name,d.bytes

order by 1,2;


17. emp 테이블에서 sal 컬럼을 조회하기 위해 아래와 같이 select 를 했습니다.

 Emp 테이블에 sal 컬럼에 분명히 인덱스가 있음에도 인덱스를 사용하지 않는 일이 생겨

빨리 조치를 해 줘야 합니다. 어떻게 해결해야 할지 방법을 쓰고 해당 SQL 문을 쓰세요.

SQL> Select   *   from  emp   where sal+100 >500 ;  <- 기존인덱스 사용 안 하는 

문장


SQL을 잘못 작성해서 INDEX SURPRESSING ERROR 가 난경우다. 인덱스는 where절에 오는 조건 칼럼에 

만들어져야하고 사용할시에는 절대로 다른 형태로 가공해서 사용하면 안된다. 인덱스는 sal컬럼에 만들어져있지만

sal+100쿼리를 수행하면 인덱스를 사용할수 없다. 해결방법은 함수기반(function based index = FBI)을 사용해서

새로 인덱스를 생성해주면된다.


sql> create index name on emp(sal+100);

emp 테이블에는 sal+100이라는 컬럼이 없지만 새로 생성된다.


18. 아래의 테이블 명세서를 보고 테이블을 생성하세요.

테테이블명 : member     


컬럼명 데이터타입         제약조건       비고

no         number                 not null       sequence 만들어서 자동 증가하게 설정하세요

name varchar2(20)   not null

J_num varchar2(13)         PK               회원 주민번호

address varchar2(50)         not null

tel      varchar2(15)         not null

Sub_no   number                   FK                아래 4번의 subject 테이블의 sub_no와 FK 

설정하세요.        


sql> create table member

(no number constraint no_num not null,

name varchar2(20) constraint name_var not null,

J_num varchar2(13) constraint jnum_var primary key,

address varchar2(50) constraint add_var not null,

tel varchar2(15) constraint tel_var not null,

sub_no number references subject(sub_no));


sql> create sequence nonumber

increment by 1

start with 1

cache 2;

sql> insert into member values(nonumber.nextval);


19. 사용자가 SQL을 작성해서 실행하면 ( user process) 가 해당 쿼리를 가지고 

(  tnsnames.ora  )파일에 적혀있는 정보를 참조해서 서버에 접속합니다. 

만약 최초 접속일 경우 서버측에서는 ( listener ) 가 접속요청을 받은 후 적합성을 

검사 한 후 서버쪽에 접속요청을 하게 되고 서버에서는 ( server process)가 생성되어 

( user process )의 요청을 받아 인스턴스에서 작업을 수행해서 결과값을 돌려주게 됩니다. 


20. Update member

Set name=’신사임당’ 

Where mem_num=’1000’ ; 


위 문장이 수행되는 과정을 쓰세요.

Mem_num = ‘1000’ 인 사람의 원래이름은 유관순입니다.


- select 문장의 실행단계 (parse -> bind -> execute -> fetch)와 비슷하나 dml(insert,delete, update, merge)문장의 실행단계에는 fetch 단계가 없고 실행(execute)단계가 조금더 복잡하다. 
일단 먼저 soft parse하고 실패하면 hard parse해서 서버프로세스는 실행계획을 가지고 library cache에 등록후 
실행을(execute)를 수행한다. soft parse에서는 문법검사, 의미검사후 권한검사를 수행하고 shared pool의 library cache에서 실행계획이 있는지 없는지 확인한다. 실행 계획이 없을경우 hard parse를 수행해서 옵티마이저에게 실행계획을 세워달라고 요청한다. parse과정이 끝나면 dbc에 member테이블에 mem_num가 100번이 있느지 확인하고 없으면 
데이터파일에 가서 해당 파일을 dbc로 적재한다. 그리고 서버프로세스는 변경되는 트랜잭션(change vector)을 redo log buffer에 먼저 기록한다. commit을 치게 되면 redo log는 자동 삭제되고, 치지 않을경우 다른사용자가 데이터를 
조회할경우 변경전 데이터를 undo에서 가지고와서 보여주게 된다. 이것을 일관성 읽기(consistent read - CR)이라고 한다.

21. Oracle SGA 에 대해서 설명하세요.
인스턴스 별로 1개씩 생성되며, 여러사용자가 공유하는 메모리 공간이며 sql수행 공간이다. sga 크기는 db 성능에 큰 영향을 준다. 공유메모리 할당 과정은 인스턴스 시작되면 서버프로세서가 초기화 파라미터(pfile, spfile)설정을 참조하고 
os커널에게 공유메모리 할당 요청을 한다. 그러면 커널은 os-커널 파라미터인 sysctl.conf 파일을 참조해서 공유메모리를 생성하고 세마포어 설정을 하게된다. 요청은 서버프로세스가 하지만 sga는 os-커널이 관리하게 된다. 
9i 부터 동적 sga(dynamic sga)를 사용해서 재부팅없이 redo log buffer를 제외하고 sga내부 구성요소 크기를 변경하고 적용할수 있다. sga는 9i부터 메모리 할당 단위이름을 그래뉼(granule)이라고 한다.
sga구성요소로는 data base buffer cache, shared pool(library cache, data dictionary cache, server result cache, reserved pool), redo log buffer, large pool, java pool, streams pool, fixed sga가 있고 각구성요소마다 
사용되는 목적이 다르다.

22. Oracle Background Processes 들에 대해서 설명하세요.
oracle서버와 관련된 프로세는 종류는 user process(sql 문장을 서버프로세스로 전달 해주고 결과를 가져오는 프로세스), server process(user process가 전해준 sql 문장을 실제 수행하는 프로세스), background process(oracle 서버가 시작되면 자동으로 시작되면 운영과 유지를 담당하는 프로세스) 오라클 서버의 시작과 종료와 같고 마치 호빗과 같은 존재이다. 필수 백그라운드 프로세스에는 dbwr, lgwr, pmon, smon, ckpt, mmon&mmnl, reco가 있고 선택 백그라운드 프로세스에는 arcn, cjqo & fbda가있다.)

dbwr (database writer) 의 역활은 dbc에서 변경완료된 dirty buffer들을 데이터 파일로 저장 해주는 역활이다. 이유는 데이터파일로 저장하지 않고 dbc에 남아있게 되면 데이터에 손실이 오기 때문이다. dbwr이 실행되는 경우에는 1.checkpint, 2.더티버퍼가 임계값(오라클이 정해놓은 최대 더티버퍼의 양)이 지났을때, 3.time out이 될때, 4. rac ping이 일어날때, 5.테이블스페이스가 begin backup될때, 6.테이블스페이스가 read only로 변경될때, 7.테이블 스페이스가 오프라인 될때, 8. drop 테이블이나 truncate 테이블이 될때. dbwr의 수는 기본값이 1이지만 필요에 의해 추가가 가능하며 단일 프로세스의 시스템에서는 사용되지 못한다.

lgwr (log writer)의 역활은 서버프로세스가 체인지 벡터를 redo log buffer에 기록하고 lgwr이 redo log file에 저장한다. 실행되는 경우는 1. commit 이 발생했을때 2. 1/3이 찼을때 3. 변경량이 1M가 되었을때 4. 3초마다, 5. dbwr이 내려쓰지 전에. log-ahead method와 write-ahead은 데이터가 변경되는 경우 항상 redo log buffer 에 먼저 기록한다.많이 오해하는것 중에하나는 commit은 데이터를 redo log file에 저장하는것이지 datafile에 저장하는것은 아니다.
log ahead method 와 write-ahead를 하는 이유는 redo log buffer블록 사이즈가 dbc보다 작고, dbc에서 해당 블록의 원래 위치를 찾기보다 redo log file에 순서대로 쓰기 때문에 기록시간은 단축시켜준다.

만약 여러사용자가 동시에 commit을 하게 되면 lgwr은 group commit기법을 사용해서 redo log file에 기록하게 된다.
만약 commit후 redo log file이 없을 경우 alert log file에 해당 에러내용을 기록후 lgwr은 commit 요청을 수행하지 않고 대기하게 된다.

pmon (process monitor)의 역활은 모든 프로세스들을 감시하고, 비정상 종료된 프로세스 관련복구 작업을 수행하게 된다. 비정상 종료되 transaction table의 내용을 다시 reset하고, lock 해제, 서버프로세스의 transaction id를 시스템에서 제거한다. 인스턴스 시작때 정보를 리스너에 동록 및 관리한다.

smon (system monitor)의 역활은 1. 비정상 종료(instance crash)후 인스턴스 다시 시작때 clean up(인스턴스 복구)해주고 2. 파일에러나 테이블스페이스 오프라인때 인스턴스 복구과정에서 누락된 트랜잭션을 복구하는 역활을하고 3. 비정상 종료된 트랜잭션이 사용중이던 temporary 세그먼트를 복구하는 clean up(instance recovery) 역활을 한다.
예) create index하던중 트랜잭션이 비정상 종료되면 그세션이 사용중이던 temporary segment은 clean up(instance recovery)된다. 그 과정은 파라미터파일을 읽어서 no mount단계에서 인스턴스를 생성하고 mount단계에서 control file 내용을 확인해서 instance crash 상황을 확인한다. redo log file에서 roll forward 하고 db를 오픈시킨다.
(online redo log file만 읽고 진행되고, archived redo log file에 있으면 dba가 수동으로 media recovery 를 수행해야 한다.) 4. dictionary managed tablespace에서 free extents들을 모아주는 역활.

ckpt (checkpoint process) 의 역활은 dbwr에게 checkpoint 신호를 전달해주며 체크포인트정보를 control file과 data file header에 기록한다. 체크포인트 정보는 체크포인트 위치, scn, 해당내용의 redo log 위치값등을 포함하고 있다. 

mmon과 mmnl (managebility monitor process) 은 10g 이후부터 추가 되었다. 
mmon의 역활은 awr(automatic workload repository)와 관련된 다양한 작업을 수행하고, mmnl은 ash(active session history)정보를 disk file로 기록하는 역활을 한다.

reco (recover process)의 역활은 분산 데이터베이스 환경에서 트랜잭션처리 도중에 장애가 발생할경우 해당 트랜잭션을 자동으로 복구해주는 역활을 한다.

arcn(archiver process) 의 역활은 online redo log file을 archiving해주는 역활이다.

23. dirty buffer , free buffer ,pinned buffer 에 대해서 설명하세요.
dirty buffer : 사용자가 사용을 완료했지만, 변경내용을 저장하기 전이고 commit은 한상태이지만 저장하기전이다 .
free buffer : 사용되지 않았거나 (unused buffer) 더티 버퍼였다가 저장완료된 블록이다.
pinned buffer : 사용자가 현재 사용하고 있는 버퍼블록이고 아직 commit 전이다.

24. LRU List 와  LRUW list 에 대해서 설명하세요.
오라클을 버퍼들의 상태를 관리하기 위해 LRU(LEAST RECENTLY USED) list를 만들어서 관리하고, LRU list를 스캔의 효율성을 위해 LRU LIST와 LRUW LIST로 나누고 세부적으로 메인리스트와 보조리스트로 나누어서 관리한다.

LRU LIST 메인리스트 : FREE BUFFER 들의 리스트를 핫영역과 콜드영역으로 나눈다.
보조리스트 : UNUSER나 DIRTY BUFFER였다가 저장된 FREE LIST

LRUW LIST 메인리스트 : 변경된 버퍼들의 리스트 (DIRTY BUFFER LIST)
   보조리스트 : 현재 DBWR에 의해 기록중인 버퍼들의 리스트

리스트 스캔과정은 데이터블록을 DBC로 가져오기 전에 LRU LIST 보조리스트에서 FREE BUFFER들을 찾고 메인리스트
콜드영역에서 FREE BUFFER 를 찾는다. 40% 정도 스캔하였는데 FREE BUFFER를 못찾으면 DBWR에게 DIRTY BUFFER를 내려쓰라고 요청하게 된다. 요청에의해 내려쓰게 된 DIRTY BUFFER는 FREE BUFFER로 바뀌게 되고 LRU LIST 보조리스트에 추가된후 FREE BUFFER를 찾을수 있게되고 DBC로 복사된다.
만약 LIST에도 동시에 입출력(I/O)가 발생할수 있으므로 랫치(LATCH)기술로 사용순서를 관리한다.

25. SYSTEM Change Number 와 System Commit Number 에 대해서 설명하세요.
SYSTEM COMMIT NUMBER : 의 역활은 COMMIT될때 해당 트랜잭션에게 부여되는 고유번호 가지고 DB에 이상유무를 확인하고 장애발생시 복구용으로 사용된다. 
SYSTEM CHANGE NUMBER : 은 DATAFILE, REDO LOG FILE, CONTROL FILE간의 동기화 정보를 맞추기 위해 사용된다.
SYSTEM COMMIT NUMBER의 구성 단위는 SCN BASE(4BYTES) + SCN WRAP(2BYTES) 이고 SYSTEM CHANGE NUMBER의 구성 단위는 SCN BASE(4 BYTES) + SCN WRAP(2 BYTES) + SCN SEQUENCE (1 BYTE) 로 구성되어있다. SCN SEQUENCE은 SCN 블록을 여러개의 서버프로세스가 동시에 변결할경우 이를 구분하기 위함이다. SYSTEM COMMIT NUMBER 의 SCN기록 장소는 CONTROL FILE HEADER, DATA BLOCKS, DATA FILE HEADER, REDO RECORDS /LOG BUFFER, ROLLBACK SEGMENT (UNDO SEGMENT) & TABLESPACE HEADER이고 SYSTEM CHANGE NUMBER 의 기록 장소는 DATA BLOCK HEADER, REDO RECORDS, SEGMENT HEADER이다.

26. Select 문장이 수행되는 4 단계를 쓰시고 각 단계별로 수행하는 일을 쓰세요
셀렉트 문장이 수행되는 4단계의 순서는 PARSE(구문분석) -> BIND(값치환) -> EXECUTE(값치환) -> FETCH(추출)이다. PARSE(구문분석)을 SQL문장 실행시 서버프로세스는 유저프로세스에게 SQL문장을 전달받고 SQL PARSER을 통해서 문장에 쓰인 키워드, 컬럼명, 등을 분석해서 PARSE TREE를 생성하게 된다. 키워드 분석은 SYNTAX CHECK이라고 하고 컬럼명 & 테이블명 분석을 SEMANTIC CHECK이라고 한다. SYNTAX CHECK과 SEMANTIC CHEKC은 SHARED POOL 안에 있는 딕셔너리 캐시(ROW CAHCE)를 사용하게 된다. 이상없으면 SQL문장을 ASC2(숫자값) 변경후 HASH 함수를 통해 HASH 값으로 변환한다. 그리고 커서공유 또는 SOFT PARSE(HASH VALUES를 SHARED POOL의 라이브러리 캐시에 있는 HASH VALUE들과 비교해서 동일한 값이 있는지 확인한다. 사용자가 다르면 문장도 다르게 된다.

SOFT PARSE란 라이브러리 캐쉬 안에 있는 한번 수행되었던 SQL문장의 실행계획과 관련정보를 보관하고 있는 공유커서 
(커서랑 어떤 데이터를 저장하기 위해 만드는 임시 저장공간)을 재활용해서 실행계획을 찾게 되므로 SQL의 수행 속도를 향상시킨다. 단 커서공유는 PARENT CURSOR(SQL 문장값)와 CHILD CURSOR(사용자 정보값, OPTIMIZER MODE)이 동일해야 이루어진다. 결국 사용자가 다르면 CHILD CURSOR값이 다르므로 사용할수 없게 된다. 만약 이렇게 SOFT PARSE가 실패하게 되면 HARD PARSE를 하게 된다. HARD PARSE는 실행 계획을 세워주는 옵티마이저가 데이터 딕셔너리(DBA_TABLES, USER_TABLES)를 참고해서 어떤 테이블을 먼저 사용하고 어떤 인덱스를 사용할지 결정하게 된다.
쿼리를 수행하면 서버프로세스가 쿼리를 받응후 SHARED POOL 메모리 공간을 사용해서 SQL 실행계획을 세우는데 이때 참조하는 STATIC DATA DICITIONARY 와 10G이후 추가된 자동으로 딕셔너리 정보를 모아주고 관리 해주는 기술이 생기긴 했지만 사람이 수동으로 최신정보를 업데이트 및 관리를 해주어야 한다.

BIND(값 치환) 은 여러개의 테이터를 조회하려고 할때 실행계획이 같을 경우, 즉 같은 테이블의 같은 칼럼을 조회하는 것이 라면 조회갯수 만큼의 실행계획과 파싱 횟수 보다 1번의 파싱으로 1개의 실행계획과 값만 치환해주면 훨씬 부담이 적고 쿼리 수행속도가 빨라진다. 치환되는 값은 바인드 변수 값이라고 한다. 
테이블에 테이터들이 SKEWED(편중) 되어 있으면 인덱스가 정상적으로 작동하지 않으므로, 이럴경우 특수통계정보인HISTOGRAM 을 생성이 필요하다. 그러나 HISTOGRAM을 사용하면 BIND를 사용하지 못한다.
BIND 는 HARD PARSE성능과 관련이 있다.

EXECUTE(실행) 은 서버프로세스가 먼저 찾는 블록의 주소를HASH 함수에 넣어서 HASH VALUES를 만들고 DBC에 동일한 HASH VALUES가 있는지 블록을 찾게 된다. 없으면 하드디스크에 가서 해당블록을 DBC로 복사해온다. DBC로 해당 블록을 복사해오는 과정을 EXECUTE라고 한다. EXECUTE과정에 인덱스가 없으면 서버프로세는 블록을 찾는 시간이 지연되고 USER PROCESS 가 데이터를 받기위해 기다리는 시간도 지연된다.

FETCH(추출)은 EXECUTE된 입출력 최소 단위인 블록에서 원하는 데이터를 골라내는 과정이다. 정렬등 추가 작업이 요청되면 PGA에서 정렬을 완료해서 FETCH를 완료한다.

28. SQL> alter database drop logfile group 1;
alter database drop logfile group 1
*
ERROR at line 1:
ORA-01623: log 1 is current log for instance testdb (thread 1) - cannot drop
ORA-00312: online log 1 thread 1: '/home/oracle/oradata/testdb/redo01.log'

REDO LOG FILE 상태를 나타내는 3가지 
CURRENT : 현재 LGWR 이 내용을 기록하고 있는 상태, 삭제 불가
ACTIVE : REDO LOG FILE의 내용이 아직 DBC에서 데이터파일로 저장이 안되어서 지워지면 안되는 상태
INACTIVE : REDO LOG FILE의 내용이 데이터파일에 다 저장되어서 삭제되어도 됨.

CURRENT 상태에서 ACTIVE 상태로 강제 변경
sql> alter system switch logfile;

ACTIVE 상태에서 INACTIVE 상태로 강제 변경
sql> alter system checkpoint;
sql> alter database drop logfile group 1;
sql> !rm -rf  ~ (asm 이 아닐 경우)



29. 오라클을 설치 한 후 각 파일의 위치를 조회하니 아래의 현재상태와 같았다.
이 상태는 성능 및 운영에서 위험한 부분이 많으므로 아래의 변경 후 상태로
 변경시키고자 한다. 각 파일을 직접 변경하고 그 과정을 모두 쓰시오.
< 변경 후 상태 >

/disk1/system01.dbf
/disk2/sysaux01.dbf , undotbs01.dbf
/disk3/users01.dbf , example01.dbf , test01.dbf , control01.ctl
/disk4/redo01_a.log , redo02_a.log , redo03_a.log , control02.ctl
/disk5/redo01_b.log , redo02_b.log , redo03_b.log , control03.ctl

* 현재상태 :
spfile 일경우 control file 변경
sql>alter system set control_files= ‘disk3/control01.ctl’,
     'disk4/control02.ctl’,
     'disk5/control03.ctl' scope=spfile;
재부팅하면 적용할수있도록 spfile옵션을 사용
sql> !cp /현재경로/control01.ctl disk3/control01.ctl && 
cp /현재경로/control01.ctl disk4/control02.ctl && 
cp /현재경로/control01.ctl disk5/control03.ctl 

pfile 일경우
sql>shutdown immediate;
파라미터 파일 경로 변경.
sql> !cp /현재경로/control01.ctl disk3/control01.ctl && 
cp /현재경로/control01.ctl disk4/control02.ctl && 
cp /현재경로/control01.ctl disk5/control03.ctl 

redo log 경로변경
sql> startup mount
sql>!cp /현재경로/ /새경로/
sql>alter database rename 
     file '현재경로'
     to  '새경로';

data file 경로변경
sql>!cp /현재경로/ /새경로/
sql>alter database rename
     file '현재경로'
     to '새경로';



33. 오라클 메모리구조는 크게 (sga) 와   (pga) 로 나눌 수 있고 ( sga )는
 Shared Pool 과 ( dba ), Redo log buffer , Large pool , Java pool 등으로  
구성되어 있습니다.



34. Startup 과정 3 단계를 쓰시고 각 단계별로 어떤 일을 하는지 설명하세요
1. nomount 단계 : startup 실행시 인스턴스를 시작하기위해 오라클 서버프로세스는 가장먼저 파라미터파일을 읽게 된다. 파라미터 파일에 저장되어있는 값을 참조하여 sga와 백그라운도 프로세스를 구성하고 작업공간인 인스턴스를 ram에 생성하게 된다. 그리고 alert log file을 열어서 서버에 장애가 있는지 로깅을 시작한다. 

2. mount 단계 :  nomount 단계에서 파라미터 파일과 alert log file 참조후, 파라미터파일에 적혀있는 controlfile위치를 보고 control file을 찾는다. 컨트럴파일에서 데이터베이스의 무결성을 확인한후 open단계로 진행된다. 만약 컨트럴파일에 인스턴스 크래쉬 가 있을경우, smon이 redo log file을 참조해서 인스턴스 복구를 수행하고, archived log file에 있을경우 관리자가 직접 media recovery 를 해줘야한다.

3. open 단계 : mount후 오라클 서버가 open 되면 데이터 정보조회, 입력, 변경이 가능하다.

35. test tablespace 에 데이터 파일을 하나 추가 하려 합니다.
   추가될 파일 경로는 ‘/data/disk1/test02.dbf’ 이며 크기는 100이고 segment space
   management 를 auto 로 해서 생성하세요.

sql> alter tablespace test
add datafile '/data/disk1/test02.dbf' size 100M
extent management local
segment space management auto;

36. B*tree index 에 대해서 아는대로 설명하세요(만드는이유 , 생성원리 ,
 장점 및 단점 등)

인덱스(b-tree와 bitmap포함) 의 궁극적 목적은 많은 데이터들중에 원하는 데이터만 데이터파일에서 dbc로 빠르게 로드하기 위함이다. 원하는 데이터의 위치를 가지고 있는 세그먼트를 인덱스라고 하고 그 위치는 rowid 라고 부른다.

생성원리는 처음 인덱스생성시에는 데이터전부의 내용을 파악해야 하기때문에 먼저 테이블 전체 스캔(table full scan)을 하게 된다. 인덱스 생성중에는 데이터가 변경되지 못하게 조치되고 pga의 sort area에서 정렬을 하게되고 메모리가 부족할경우 임시 테이블스페이스(temporary tablespace)를 사용하게 된다. 그리고 난 후 순서대로 데이터들을 정렬된 상태(입력되는 순서)로 파일의 블록에 기록하게 된다. 그러면 인덱스는 오름차순이나 내림차순으로 key  칼럼과 rowid칼럼 두개로 생성된다. 

인덱스중에서도 b-tree인덱스는 실시간 트랜잭션  처리용 시스템(oltp: online transaction processing)에서 효과적으로 사용된다. oltp시스템 환경은 실시간으로 데이터가 입력되고 수정되는 환경을 말한다.

balance_tree이라고도 불리우는데 b-tree인덱스 형대를 보면 피라미드처럼 맨위 root block 을 기준으로 왼쪽과 오른쪽에 들어있는 데이터들의 발라스가 맞을때 성능이 가장 좋다. 그래서 큰분포도(cardinality)를 갖는 테이블에 적합하다. 실제 테이블 주소는 피라미드형 맨밑에 leaf block들에 들어있고 해당 데이터들은 중간에 branch block과 맨위 root block에 들어있다. 찾는순서는 root block 에서 branch block으로 그리고 leaf block 으로 가서 해당 데이터 주소(rowid)를 찾은후 데이터가 들어있는 블록을 메모리로 복사해 오는 것이다.

사용시 여러가지 문법을 바꿔서 장단점을 살릴수 있다. unique index는 테이블의 칼럼에 중복된 값이 없고 새로 들어오지 않는 환경이면 성능이 좋지만 그렇지 않으면 절대로 사용하면 안된다. non unique index는 중복되는 칼러미 들어갈경우만 성능이 좋다. function based index (fbi : 함수 기반 인덱스) 는 where 절뒤에 조건이 기존에 만들어진 인덱스 외에 다른 형식으로 쿼리를 작성해야할 때 함수처럼 연산을 해서 새로 인덱스를 만들어주고 임시적인 해결책으로 쓰인다. 
그렇지만 단점은 쿼리의 조건이 변경 된다면 인덱스를 다시 만들어줘야 한다. descending index는 내림차순 인덱스로 큰값이 먼저오는 최근날짜가 나오게하거나 높은 매출을 조회하는 환경에는 제격이지만, 단점으로는 하나의 메뉴에 오름차순과 내림차순을 한꺼번에 조회하는 경우에는 오름차순 인덱스와 같이 쓰면 dml성능에 악영향을 미치게 된다. compisite index (결합 인덱스)는 두개이상의 컬럼(where 절의 조건 칼럼이 2개이상) 일때 and 로 연결해서 많이 사용되지만 조건의 배치순서대로 검사횟수와 속도가 천지차이가 나면 너무 많은 경우의 수를 생각해서 써야 하는 단덤이 있다.

37. Bitmap index 에 대해서 아는대로 설명하세요(어떤 상황에서 만드는지 ,
 장단점, 주의사항 등)
B-tree 인덱스와 반대로 bitmap 인덱스는 적은 분포도를 가진, 데이터의 값의 종류가 적고 동일한 데이터가 많은 변경량이 적은 olap(online anlaytical processing 온라인 분석 처리용) 시스템 환경에 적합하게 사용된다. bitmap 인덱스는
map(지도정보) 를 bit로 표시한다. 1과 0으로 데이터가 존재하는곳어 1 그렇지 않곳을 0으로 표시하게 된다. 칼럼의 개수만큼 맵이 만들어진다. 이렇게 단순하게 만들어지는것이 장점이지만 단덤으로는 만약에 새로운 데이터가 입력, 업데이트나 삭제가 된다면 bitmap인덱스를 전부 수정해야한다. 그래서 data warehouse같이 데이터 변경이 안되는 값의 종류가 적은 칼럼에 생성하는것이 유리하다.

인덱스 (bitmap, b-tree포함)주의 사항은 dml에 취약하다는것이다. 기존 블록에 여유공간이 없을때 insert가 일어날 경우 인덱스는 테이블과 달리 데이터를 순서대로 정렬해서 저장하기 때문에 새로운 데이터 내용을 두개로 나눠서 반을 기존 블록에 공간을 만들어서 추가하고 나머지 반의 내용을 새블록에 추가하게 된다. 이런 현상을 index split이라고 한다. 인덱스가 여러게의 컬럼에 생성된게 많으면 많을수록 index split현상이 자주 생기게 되고 성능저하로 이어진다. delete가 일어날 경우 테이블은 데이터를 지우고 다른데이터가 들어올수 있도록 자리를 비워두지만 인덱스는 데이터를 그대로 남겨두고 사용하지 않는다는 표시만 하기 때문에 인덱스에 쓰지않는 데이터가 쌓이게 되고 쿼리 수행속도가 아주 느려지게 된다. update가 발생할 경우 테이블과 달리 update개념이 없는 인덱스는 두가지 작업을 동시에하게 되는데 delete와 insert를 하게 되므로 부하발생으로 이어진다. 한테이블에 여러가지 인덱스를 생성할경우 옵티마이저는 최근에 만들어진 인덱스가 더 좋을거라고 잘못생각하면 실행계획을 잘못 바꾸게 되고 그러면 잘되고 있던 sql문장이 새로 만들 인덱스 때문에 가끔 아주 느려지는 경우도 있다. 

38. Block , extent , segment , tablespace  에 대해서 설명하세요.
크기순으로는 작은순부터 block, extent, segment, tablespace 이다.

BLOCK 은 입출력(I/O) 데이터가 저장되는 최소단위이다. 하나이상의 os블록으로 구성 되어있고 db만들때 DB_BLOCK_SIZE로 크기가 영구적으로 결정된다. 

EXTENT는 연속적인 블록의 집합이다. 블록 5개가 하나의 EXTENT를 이루고있다. 하나의 테이터 파일에 존재하고 테이블스페이스 생성때 크기가 지정되고 이후 추가 할당 가능하다. 테이블스페이스 범위안에서 세그먼트가 사용하는 공간단위이고 세그먼트 생성, 확장, 변경시 EXTENT 할당이 되고 DROP, ALTER, TRUNCATE시 비할당 된다. 

SEGMENT 는 오브젝트중의 저장공간이 있는것이다. 하나이상의 EXTENT를 가질수 있다. 종류로는 table, table partition, cluster, index, index-organized table, index partition, undo segment, temporary segment, LOB segment, nested table, bootstrap segment 이 있다.

TABLESPACE란 메모리(DBC)에 데이터를 논리적으로 저장하는 공간, 테이블스페이스 크기가 클수록 수행속도가 빨라지지만 메모리가 비싼자원이므로 한정 될수 밖에 없다. 하나의 테이블스페이스에 여러가지의 세그먼트를 가질수 있다.

39. RAC 에서 네트워크 구성에 대해 설명하세요. 
PUBLIC IP : 외부 접속용
PRIVATE IP : 노드간의 정보 네트워크 및 각 노드와 CRS데몬 간의 통신을 위한 네트워크
VIP : 어플리케이션을 위한 실제 DB에 접속하기 위해 사용하는 네트워크

40. RAC 에서 CTF 와  TAF 에 대해서 설명하세요.
CTF : (CONNECTION TIME FAILOVER)
클라이언트가 데이터베이스로 접속을 시도할때 접속하고자 하는 서버에 장애가 발생하여 접속하지 못할경우 다른서버로 
접속할수 있도록 하는 기능

TAF : (TRANSPARENT APPLICATION FAILOVER)
클라이언트가 RAC의 한쪽 노드에 접속하여 사용하는중에 접속한 노드에 장애가 발생한 경우 가용한 다른 노드로 접속하여 작업을 계속할 수 있도록 하는기능. 

41.위 4번문장을 Usera 가 수행한 후 commit 을 하지 않았을 때
Userb 가 select  *   from  mem_num ; 이란 sql문을 수행했습니다.
Userb 가 어떤 과정을 거쳐서 어떤 데이터를 보게 되는지 설명하세요.

USERA 가 업데이트 했으나 commit을 하지 않은 상태이므로 트랜잭션이 끝나지 않은 데이터 블록이어서 lock이 설정되어 있어서 다른사용자가 사용할 수 없는 상태이다. userb가 변경전 데이터블록을 요청하면 오라클은 해당 블록을 찾다가 lock이 걸려져있는 블록헤더를 보고 scn에 이상이 있다고 판단하고 uba(undo block address)를 통해 undo segment를 찾아가서 변경전 데이터를 dbc로 복사해서 userb에게 보여준다. 

42.Shared pool 의 역할과 구성요소와 크기와 관리 알고리즘에 대해 설명하세요. 
sga의 구성요소로서 다른사용자와 어떤 대상을 공유해서 사용하기 위해 만들어진 공유해서 사용하는 공유공유공유풀이다. 공유라는 말이 중요하다. library cache, data dictionary cache, 11g 부터 server result cache 로 구성된다. 
LIBRARY CACHE 는 LRU알고리즘으로 관리되고 SOFT PARSE할때 사용되는 공간이다. 실행(PARSE된 COMPILE)된 되었던 SQL과 PL/SQL문장, PARSE코드 PARSE코드 PARSE코드 PARSE코드 (중요하다), 실행계획이 저장된다. LRU 알고리즘 (LEAST RECENTLY USED)은 양이 정해져있는 SHARED POOL 공간에 들어가야할 경우 최근에 사용한 것을 남겨두고 가장 사용이 적은 것을 버리는 알고리즘이다. 

DICTIONARY CACHE는 LRU알고리즘으로 관리되고 ROW단위로 CACHE된다. 옵티마이저가 실행계획을 세울때(HARD PARSING) 참조하는곳이고 구문분석(SEMANTIC CHECK)할때 참조되는 곳이기도하다.

SERVER RESULT CACHE는 11g 부터 추가 된 기능이다. 원래는 dbc에서 데이터를 fetch한후 pga로 가져와서 사용자에게 보여주는 구조였으나, 11g부터는 동일한 문장일 경우 동일한 문장일 경우만  dbc를 통하지 않고 결과를 shared pool의 server result cache에서 바로 가져올수있다. 사용이유는 여러사용자가 dbc내용을 동시에 접속하는 환경에서 속도저하를 막기 위해서이다. 

52.Instance Recovery 과정에 대해서 설명하세요.
smon이 알아서 해줌 
안되면 내가 아카이브로 media 복구 해야함

SMON은 REDO LOG 파일을 기초로 다음번 STARTUP할때 RECOVERY INSTANCE 
CRASH를 수행한다.

1. roll forward (Cache RECOVERY)
REDO LOG에 기록되었지만 COMMIT이 일어나지 않아서 DBC에서 데이터 파일로
내려쓰지 못한 데이터를 저장해준다.

2. OPEN
COMMIT이 안된 데이터를 REDO LOG기반으로 기록이 완료되면 DB를 OPEN 시켜준다.
DATA FILE에는 기록이 되었지만 아직 COMMIT이 일어나지 않은 상태여서 조회가 
불가능하다.

 
53.Parameter 파일 2가지를 쓰시고 각 파일 별 특징을 설명하세요.
파라미터란 어떤 값을 오라클에게 전해주기 위한 변수같은 역활을 한다. 
종류에는 묵시적 파라미터(자동으로 기본값을 가지는 파라미터)와 명시적 파라미터 (사용자가 지정해줘야하는
파라미터)가 있고 파라미터들을 모아 놓은 파일이 파라미터 파일인데, 파라미터 파일에도 정적 파라미터 파일(pfile)과
동적 파라미터 파일(spfile)이 있다. 둘다 경로는 절대경로로서 $ORACLE_HOME/dbs 안에 무조건 있어야 오라클이 시작될때 찾을수 있다. 둘다 파일이름에 SID(SITE IDENTIFIER)사이트 구분자가 들어간다. 차이점은 pfile은 텍스트 형식이어서 os편집기로 관리자가 변경가능하고 spfile은 바이너리 파일이어서 일반적인 os편집기로 변경이 불가능하고 서버프로세스가 대신 수정해준다. 만약 pfile과 spfile이 동시에 같은 디렉토리에 있으면 오라클은 spfile만 사용하게 되므로 주의 해야한다. 
또 다른 차이점은 pfile(정적 파라미터)은 db종료후에 내용변경이 가능하고 spfile(동적 파라미터)는 서버프로세스에게 변경을 요청하므로 db open상태에서도 내용수정후 바로 적용이 가능하다. spfile scope뒤에 오는 변경 옵션에는 memory(현재 인스턴스에만 적용, 재부팅후 원래 값으로 전환), spfile(재부팅한후에 변경내용 적용), both(현재 인스턴스에 즉시 적용하고, 재부팅후에도 적용) 세가지가 있다. 참고로 spfile은 성능은 좋지만 사용하기가 불편해서 보통 pfile을 많이 사용한다.

54.현재 사용중인 파라미터 파일이 inittestdb.ora 파일인데 삭제되는 
장애가 발생했습니다. 조치방법 2가지를 쓰세요.
원본 pfile을 복사해온다. 경로는 $ORACLE_BASE/admin/testdb/pfile 안에 .ora 라는 파일이 있다. 복사해올때는 sid이름을 붙여서 복사해온다. 두번째 방법은 db가 시작될때 alert log에 기록된 pfile내용을 복사해서 새로 pfile을 만드는 방법이다. 
alert log 경로는 $ORACLE_BASE/diag/rdbms/testdb/testdb/alert 안에 있다.



55. 현재 사용중인 control file 을 확인하는 방법을 쓰세요.
sql> select name from v$controlfile;
sql> show parameter control_files;
db가 꺼져있는 상태이면 pfile에 적혀있는 controlfile 경로를 확인할수있다.

56. 현재 Redo log 파일의 그룹번호, 각멤버위치, 용량 , 
로그 시퀀스번호, 아카이브유무, 상태를 조회할 수 있는 쿼리를 쓰세요.
sql> select a.group#, a.member, b.bytes/1024/1024 MB, b.archived, b.status
from v$logfile a, v$log b
where a.group#=b.group#
order by 1,2;

57. SGA와 PGA에 대해 간략하게 설명하고 차이점에 대해 설명하시오.
SGA는 인스턴스 별로 1개씩 생성이 되고 사용자가 공유하는 메모리 공간(SQL수행공간)이고
PGA는 각 사용자의 서버프로세스 별로 1개씩 독립적으로 생성되는 공간이다. 
예를 들어 SGA는 학생모두가 사용하는 운동장이고, PGA는 학생개인이 사용하는 사물한 같은 개념이다.

58. SMON의 인스턴스 복구 과정에 대해 자세히 설명하시오.
smon(system monitor)의 역활은 1. 비정상 종료(instance crash)후 인스턴스 다시시작때
clean up(인스턴스 복구)해주고 2. 파일에러나 테이블스페이스 오프라인 때 인스턴스 
복구 과정에서 누락된 transaction을 복구하는 역활을하고 3. 비정상 종료된 transaction
이 사용중이던 temporary 세그먼트를 복구하는 clean up(instance recovery)하는 역활.
예) create index하던중 해당 transaction이 비정상 종료되면 그세션이 사용중이던 
temporary segment 은 clean up(instance recovery)된다. 과정은 파라미터파일을
읽어서 no mount단계에서 인스턴스 생성하고 mount 단계에서 control file내용 확인
해서 instance crash상황을 확인한다. redo log file에서 roll forward 하고 db를 오픈
시킨다.(online redo logfile만 읽고 진행되고, archived redo log file에 있으면
dba가 수동으로 media recovery 를 수행해야한다.)



59. Static Data Dictionary View의 3가지 종류를 설명하세요.
딕셔너리에 저장된 정보들이 자동으로 변경되지 않고 인스턴스가 OPEN 일 경우에만 조회가 가능하다.
반면에 DYNAMIC DICITIONARY는 저장된 내용들을 실시간으로 CONTORL FILE이나 메모리에서 데이터를 가져와서 보여준다. V$로 시작되고 NOMOUNT상태에서도 조회가 가능하다. 

USER_XXX :
예) USER_TABLES: 해당 사용자가 생성한 테이블만 볼수있는 딕셔너리
USER_INDEXES : 해당 사용가가 생성한 인덱스만 볼수있는 딕셔너리
이 딕셔너리는 해당 사용자가 생성한 내용만 볼수 있는 딕셔너리이다.

ALL_XXX :
예) ALL_TABLES : 접근 가능한 모든 테이블 내역을 볼수있는 딕셔너리
ALL_INDEXES : 접근 가능한 모든 인덱스 내역을 볼수 있는 딕셔너리
이 딕셔너리를 해당 사용자가 생성한 것과 생성하지 않았더라도 접근이 가능한 내용을 볼 수 있는 딕셔너리.
다른 사용자가 SELECT해서 내용 조회 가능. 

DBA_XXX :
예) DBA_TABLES : 데이터베이스에 있는 모든 테이블 내역을 볼수있는 딕셔너리
DBA_INDEXES : 데이터베이스에 있는 모든 인덱스 내역을 볼수 있는 딕셔너리
이 딕셔너리는 DBA라는 권한을 가지고있는 사용자만 조회가능하다.
데이터베이스에 생성되어있는 모든 내용을 다 볼수있는 딕셔너리이다.

60. 테이블 스페이스 영역 관리 방법 중 아래 용어에 대하 설명하세요.
DICTIONARY MANAGED TABLESPACE
각 오브젝트의 EXTENTS를 데이터 딕셔너리 테이블을 사용하여 관리하는 방식
새로운 EXTENTS를 할당 받기 위해서 데이터 딕셔너리에 접근해야 하기 때문에 동시에 다수의 사용자가 이용하는 
환경에서 비효율적이다.

LOCALLY MANAGED TABLESPACE
테이블 스페이스 내의 FREE SPACE, 또는 EXTENTS를 관리하기 위해 데이터 딕셔너리 테이블을 사용하지 않고
BITMAP을 이용하여 해당 테이블스페이스 내의 모든 FREE SPACE, 사용된 EXTENT 할당 정보를 관리한다.
새로운 EXTENTS를 할당 받을때 데이터딕셔너리가 아닌 해당 테이블 스페이스에서 처리가 가능하므로 동시에 다수의 
사용자가 접속하는 환경에서 유리하다.

FREE LIST MANAGEMENT 
프리리스트 관리를 통해 세그먼트 공간을 관리하는 것이다.
세그먼트 헤더 블록에서는 프리리스트의 헤더와 테일을 관리하고, 개별 데이터 블록에는 블록이 프리리스트에 존재하는지의 여부와 다음 프리블록의 위치 정보를 가지고 있다. PCTFREE 와 PCTUSED 속성에 의해 프리블록인지 아닌지 결정된다. DBA가 수동으로 관리해야한다.

AUTOMATIC SEGMENT SPACE MANAGEMENT
9i 부터 추가된 기능이고, 프리리스트 속성을 지정할 필요가 없으며 각 블록의 상태를 bitmap값으로 관리하는 비트맵 블록들에 의해 공간관리가 자동화된다. 전적으로 오라클이 담당하기 때문에 사용자가 따로 값을 변경해줄 필요가 없고 rac와 같은 멀티 인스턴스 환경에 매우 적합하게 설계되어있다.



61. test 테이블스페이스 생성 시 /oradata 안에 test01.dbf라는 
데이터파일을 사용하고, 최초 사이즈 200m 자동확장이 가능하고,
 50M씩 1G까지 확장되는 테이블 스페이스를 생성해보시오
sql> create tablespace test datafile '/oradata/test01.dbf' size 200M
autoextend on next size 50M maxsize 1024M;


62. offline 안되는 system, users table 이동
순서: db종료 -> mount 상태 -> system users table 이동
-> control file 내용 변경 ->db open

sql> shutdown immediate;
sql> startup mount;
sql> !cp ~system.dbf , ~users.dbf
sql> alter database rename
      file '원래 경로'
      to '새경로';
sql> alter database open;



63. Pctfree, pctused 에 대해 간략히 설명하시오
pctfree란 데이터 블럭에 업데이트 되지 않고 남아있어야 하는 퍼센트 값.
- 블록에 저장된 데이터를 업데이트할때 발생할수 있는 로우마이그레이션 현상을
방지하기 위하여 할당된 블록의 일부 공간을 업테이트를 위해 비워두는 비율.


pctused란 데이터 블럭에 일정량이 지워질때까지 업데이트가 되지 않는다. 
- 빈공간이 충분히 확보 되지 않은 데이터 블록이 빈번하게 프리리스트에 오르내리는
것을 방지하기 위해 pctfree 로 지정된 수치 이하로 블록의 공간이 남더라도 바로
프리리스트에 등록시키지 않고 충분한 여유공간이 생기면 프리리스트에 등록하게 된다.
이때 여유공간이 있는 블록이 라고 판단기준이 되는 수치이다.




64. connection과 session에 대해 설명하시오.
connection : 물리적인 접속, user를 서버프로세스에 연결시켜주는것. connection 에는 여러개의 세션이 존재가능하다.

session : 논리적인 단위, 서버프로세스에서 해당 인스턴스에 접속하는것이다. 














 






















공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
TAG
more
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함