블로그 이미지
꿈을 꾸는 꾸러기 YBHoon

카테고리

분류 전체보기 (81)
Oracle (71)
운영체제 (7)
ETC (0)
Study (3)
Total
Today
Yesterday

달력

« » 2025.7
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

공지사항

태그목록

최근에 올라온 글

'Oracle'에 해당되는 글 71건

  1. 2010.02.22 Admin - Server Process, Backgroun Process
  2. 2010.02.19 Admin - 오라클의 구조
  3. 2010.02.19 사용자 권한 제어
  4. 2010.02.18 View
  5. 2010.02.18 Index
  6. 2010.02.17 데이터 무결성 제약조건
  7. 2010.02.17 DDL
  8. 2010.02.12 DML
  9. 2010.02.12 Subquery - 실습문제
  10. 2010.02.11 실습파일 내용

- Dedicated Server ; 하나의 user process당 하나의 server process가 관리함
자원 사용률은 나쁘나 관리가 편함

- Shared Server (=Multi Thread Server) ; 여러개의 user process를 하나의 server process가 관리함
자원 사용률은 좋으나 관리하기가 힘듬
(하나의 user process에 문제가 발생할(무한 loop 등) 경우 server process가
문제가 생긴 프로세스의 처리에만 집중되어 다른 프로세스를 관리하지 못하게 됨)
=> 이를 해결하기 위해 문제가 생긴 server process를 roll back할 경우 다른 모든 user process도 날라감



- Mandatory background processes
DBWn, PMON, CKPT, LGWR, SMON


- DBWn (DBWR) ; data buffer cache의 내용을 data file에 저장하는 역할
checkpoint 명령이 있을 때 Data Buffer Cache의 내용을 data file로 저장함 (commit이 저장하는 것은 아님)
=> checkpoint는 DBA에 의해 발생(full checkpoint)하거나, 자동으로 발생(증분 체크포인트)함

- checkpoint가 발생하기 전까지 buffer cache의 내용을 보호하기 위한 상태 신호
- dirty ; 트랜젝션 종료 후 미 저장 (commit이 되었으나 data file에 저장되지 않음)
- pinned ; 사용중인 버퍼(블록)
- free ; 사용가능

- checkpoint queue ; checkpoint가 발생한 블록들을 우선 저장해 놓았다가 특정 시간이 되면 한꺼번에 datafile에 저장함
=> full checkpint는 사용자가 queue에 보관된 내용을 모두 data file로 저장시킴
=> control file에 data file로 저장된 sequence가 보관되어 비상시에 이를 토대로 복귀함

- timeout ; 3초에 1번씩 checkpoint queue에 보관된 내용을 control file로 옮김

- RAC ; 여러대의 시스템이 하나의 data file을 분산하여 처리함
RAC ping ; 다른 시스템에서 commit되었으나 checkpoint가 발생하지 않아 저장되지 못한 data가 있을 경우,
수정(commit)한 시스템에 RAC ping을 요청하여 checkpoint를 발생시켜 datafile에 저장하도록 함
=> RAC ping이 없을 경우, 수정된 시스템의 data와 다른 시스템의 data가 다를 수 있음


- LGWR ; redo log buffer의 내용을 redo log file에 저장하는 역할
(redo log buffer의 내용은 server process가 씀)

- redo log buffer의 내용을 HDD에 저장한 것이 redo log files임 (commit을 할 때 함께 실행됨)

- data file에 수정된 내용을 저장할 때 수정해야할 블록의 위치를 찾아서 저장해야하지만,
redo는 위치에 관계(검색X)없이 순차적으로 저장하므로 저장 시간이 빠름 (따라서 오라클은 redo를 자주 활용함)

- commit이 발생시, commit이 발생하지 않더라도 1/3, 1MB가 찻을 때, 3초마다


- PMON ; 좀비 process를 제거함 (돌발 상황으로 user 접속이 해제되어 남겨진 server process를 제거)

- 기본적으로 server process가 roll back을 함, 문제가 생겨서 아무것도 할 수 없는 서버 프로세스를 롤백함


- SMON ; PMON을 대신하여 비정상 종료(instance crash)를 해결함

- roll foward, roll back


- CKPT ; checkpoint 신호를 만듬

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

Admin - Redo Log  (0) 2010.02.24
Admin - Parameter File & Control File  (0) 2010.02.22
Admin - 오라클의 구조  (0) 2010.02.19
사용자 권한 제어  (0) 2010.02.19
오라클 시작하기 & 종료하기  (0) 2010.02.08
Posted by YBHoon
, |


- 메모리 부분 => Instance (작업 진행) / HDD => Database (자료 저장) 로 구분함

- instance의 처리속도가 빠르므로 database의 자료를 불러와 작업을 한다. (자료를 접근하기 위한 수단)

- instance는 SGA와 background process로 나뉘어진다.

- 오라클 클라이언트를 설치해야 서버를 접속할 수 있음 (toad, orange, editerplus, golden 활용가능)
tnsnames.ora ; 서버 정보(ip)를 입력해놓는 주소록

- toad, orange 등으로 sql 작성 => 클라이언트 (user process)로 서버 접근 => 서버의 리스너로 서버에 데이터 요청
=> 서버에서 PMON이 필요한 데이터를 가져옴 (server process) => listener가 서버 프로세스와 유저 프로세스를 연결함
=> 서버 프로세스가 유저 프로세스를 직접 담당함

- toad, orange 등으로 처음 접속하는 시점에만 listener를 경유함 (이미 접속된 상태에서는 바로 서버 프로세스와 연결)
접속이 끊어졌다가 다시 재접속하는 경우, 다른 접속 프로그램으로 변환하여 재접속할 경우에만 다시 listener를 경유함
(기존의 접속자는 서버 프로프로세스와 직접 대화를 하므로 listener의 영향을 받지 않음)

- user process에서 server process로 SQL를 넘기면, 오라클은 SQL을 parsing함 (compile과 비슷한 개념)
1. 문법검사 ; SQL 문장에 오류가 없는지 먼저 검사함 (dictionary를 바탕으로 조사)
2. 실행계획작성 ; SQL을 실행하기 위한 계획을 작성함 (optimizer가 dictionary를 참조하여 실행 계획을 수립)
=> 최적의 실행(최소의 시간, 최소의 비용, 최고의 효율성)을 위해 실행 계획을 수립함

- parse (구문분석) ; shared pool에서 이루어짐
soft parsing ; 기존에 실행되었던 구문을 토대로 재분석을 하며 library cache를 주로 활용 (속도 빠름)
hard parsing ; 처음 실행되었던 문장의 구문을 분석할 경우 optimizer를 활용 (s.p의 결과가 없을 경우 2차로 실행)
library cache ; 한번 실행되었던 SQL 문장들을 저장하는 공간
dictionary cache ; 문법과 실행계획을 검토하기 위한 참고자료

- DB buffer cache ; 사용중인 데이터가 보관되어 있는 메모리 공간

- execute (실행)
필요한 블록(기본크기 8k)을 찾아서 DB에서 DB buffer cache로 불러오는 과정
하나의 개별 자료만 불러들이는 것이 아니라, 필요한 자료가 있는 block 전체를 buffer로 불러들인다

- fetch (인출)
buffer에서 원하는 자료만 가져오는 기능

- select 문이 실행되는 과정 ; parsing => execute => fetch

- redo log buffer ; 데이터가 바뀌는 내용을 저장하는 일종의 작업일지로 모든 '변화'를 저장함

- update 문이 실행되는 과정 ; parsing => execute => ...
1. redo에 실행될 내용 저장
2. undo에 기존의 내용 백업 ; commit, rollback 등을 위해 보관
3. DB buffer cache의 데이터를 수정 (fetch는 안됨)

- System Global Area (Shared Global Area) ; 모든 프로세스가 공유하는 공간
Program Global Area (PGA) ; 하나의 특정 서버 프로세스만이 사용하는 공간

- latch ; 작업 순서를 할당해주는 역할

- connection ; user - server 간의 접속 / session ; server - instance 간의 접속

- large pool ; 백업, 복구, 병렬처리 과정에서 사용

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

Admin - Redo Log  (0) 2010.02.24
Admin - Parameter File & Control File  (0) 2010.02.22
Admin - Server Process, Backgroun Process  (0) 2010.02.22
사용자 권한 제어  (0) 2010.02.19
오라클 시작하기 & 종료하기  (0) 2010.02.08
Posted by YBHoon
, |

- 오라클은 계정 생성후에 적당한 권한을 반드시 부여해줘야 한다. (별도의 권한 부여 작업이 필요)
grant ; 권한 부여 / revoke ; 권한 해제 (DCL)

- roll  ; 사용자별로 개별적인 권한을 주지 않고, 권한을 그룹화하여 부여하는 방식

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

Admin - Redo Log  (0) 2010.02.24
Admin - Parameter File & Control File  (0) 2010.02.22
Admin - Server Process, Backgroun Process  (0) 2010.02.22
Admin - 오라클의 구조  (0) 2010.02.19
오라클 시작하기 & 종료하기  (0) 2010.02.08
Posted by YBHoon
, |

View

Oracle/SQL & PL/SQL / 2010. 2. 18. 12:10

- 원본 테이블에서 검색하고자 하는 컬럼만 보여주는 pseudo table로서
원본 데이터의 보안을 지키기 위해, 사용자의 편의성을 높이기 위해 사용함

- pseudo table이기 때문에 뷰를 지워도 원본 테이블은 지워지지 않고, index를 사용할 수 없다.

- MView는 대용량 자료를 사용하는데 편의를 위해 데이터를 갖고 있다.

- 연습문제 2
select a.no, a.emp_id, a.emp_name, b. dept_name
from (select rownum no, emp_id, emp_name, dept_code from temp) a, tdept b
where a.no between 3 and 6 and a.dept_code=b.dept_code

'Oracle > SQL & PL/SQL' 카테고리의 다른 글

Top-N Analysis  (1) 2010.04.06
Subquery  (0) 2010.04.06
Index  (0) 2010.02.18
데이터 무결성 제약조건  (0) 2010.02.17
DDL  (0) 2010.02.17
Posted by YBHoon
, |

Index

Oracle/SQL & PL/SQL / 2010. 2. 18. 11:45


- index = 주소록 (보조 기억장치에 데이터가 위치한 곳을 정리해 놓은 데이터의 주소록)

- 데이터를 관리하기 위한 목적으로 index를 만듦 (SQL 처리가 빨라지는 것은 부수적인 이득)

- where 조건절에 나오는 컬럼을 위주로 index를 작성한다.

- index를 생성하기 위해 먼저 시스템이 데이터 보호를 위해 lock을 하고 full scan을 한다.
이 때, 시스템에 부하가 높아지므로 데이터를 활용하지 않는 시간에 index를 작성하는게 바람직하다.

- index를 생성하는 과정 ; lock -> full scan -> sort -> block 기록 -> unlock

- 데이터 삽입시 index split으로 DML의 속도 저하
데이터의 추가시에 index도 업데이트를 해야 하며 이 과정에 index split이 발생
따라서 index가 많을 경우, 데이터 변경시에 index 업데이트로 인해 시스템에 부하가 많아짐
 
- 데이터 삭제시 테이블의 데이터는 지워지지만 index에는 데이터가 지워지지 않고
사용하지 않는 데이터로 표시되어 그대로 남아서 성능이 저하됨 => index rebuild를 해서 정리해줘야함

- index는 검색된 데이터의 블록이 많더라도 한번에 한 블록씩만 메모리로 불러들인다.
=> 총 데이터의 5% 미만일 경우에만 index의 성능이 좋다.

- index를 이용할 때, 보조 기억장치에서 한번에 읽어들이는 데이터의 양보다
데이터의 블록을 읽어들이기 위해 보조 기억장치를 액세스하는 횟수가 쿼리의 성능을 좌우한다.

- 따라서 전체 데이터 블록의 5% 이상의 횟수로 보조 기억장치의 블록을 액세스할 경우,
오라클의 optimizer는 인덱스를 사용하는 것이 비효율적이라고 판단하여 바로 보조기억장치를 검색함

- unique index는 내용이 중복되지 않으므로 사용하기 좋음 ; unique한 컬럼만 unique index로 지정할 수 있음

- 결합 index의 배합에 따라 index의 성능이 좌우됨

- descending index는 내림차순으로 정리함 ; max함수나 최근의 내용을 우선으로 검색할 때 좋음 (큰 값, 날짜별)

- index가 설정된 상태에서는 where로 검색할 때 index가 된 컬럼에 다른 함수는 지정하지 않는다.
대신 함수를 지정해야할 경우에는 함수 기반 인덱스를 지정한다.

'Oracle > SQL & PL/SQL' 카테고리의 다른 글

Subquery  (0) 2010.04.06
View  (0) 2010.02.18
데이터 무결성 제약조건  (0) 2010.02.17
DDL  (0) 2010.02.17
DML  (0) 2010.02.12
Posted by YBHoon
, |

- NOT NULL ; null 값을 받지 않음

- UNIQUE (UK) ; 중복되는 값을 허락하지 않음

- PRIMARY KEY (PK) ; not null과 unique의 결합

- FOREIGN KEY (FK) ; 부모와 자식 테이블에 index를 지정하면 검색시간을 줄일 수 있다.
on delete cascade ; 부모 테이블을 지우면 연결된 자식 테이블의 내용도 삭제됨
on delete set null ; 부모 테이블을 지우면 연결된 자식 테이블의 내용은 null이 됨

- CHECK ; 기본적으로 입력될 내용의 체크사항(제한사항)을 설정함

- constraint를 넣을 때는 컬럼 이름 뒤에 ,를 넣지 않는다. (다른 컬럼으로 인식되어 에러 발생)
마찬가지로 constraint를 복수로 넣을 때도 constraint 사이에 ,를 넣지 않는다.
constraint를 넣고 다른 컬럼으로 옮겨갈 때에 ,를 넣어서 구분한다.

'Oracle > SQL & PL/SQL' 카테고리의 다른 글

View  (0) 2010.02.18
Index  (0) 2010.02.18
DDL  (0) 2010.02.17
DML  (0) 2010.02.12
Subquery - 실습문제  (0) 2010.02.12
Posted by YBHoon
, |

DDL

Oracle/SQL & PL/SQL / 2010. 2. 17. 11:55

- 테이블 첫글자는 문자로 30자 이내로 같은 이름의 객체를 2개 이상 만들 수 없다.

- 오라클의 키워드(select, from, where...) 를 사용할 수 없다.

- 자료의 속성을 미리 예야하는 이유 : 메모리를 사전에 할당하기 위함
char ; 할당 받은 공간을 사용하지 않아도 반환하지 않음 (공간의 낭비 발생)
varchar2 ; 사용하지 않는 할당된 공간은 반환함 (업데이트시 row migration 발생)

- Create Table As ; 테이블을 복사하는 방법 - 필요한 자료만 추출해서 별도의 테이블을 만듬
CEATE table 테이블명 AS (서브쿼리 : select문)

- alter ; 컬럼 추가, 수정, 삭제가 가능

- drop ; 테이블 완전히 삭제, roll back 할 수 없다.

- 딕셔너리
DBA_ ; 모든 것을 볼 수 있음
ALL_ ; 자신이 만든 것과 액세스 권한이 있는 것만 볼 수 있음
USER_ ; 자신이 만든 것만 볼 수 있음

- select * from tab ; 사용하는 테이블을 검색함

'Oracle > SQL & PL/SQL' 카테고리의 다른 글

Index  (0) 2010.02.18
데이터 무결성 제약조건  (0) 2010.02.17
DML  (0) 2010.02.12
Subquery - 실습문제  (0) 2010.02.12
실습파일 내용  (0) 2010.02.11
Posted by YBHoon
, |

DML

Oracle/SQL & PL/SQL / 2010. 2. 12. 12:39

- insert, delete, update, merge

- where 조건문을 생략할 경우 모든 데이터에 영향을 끼칠 수 있으니 주의할 것!

- delete, truncate, drop의 차이
delete : 데이터만 지움, 공간은 그대로 남아 있음
truncate : 데이터와 공간을 지움 (DDL)
drop : 테이블을 완전히 삭제함 (DDL)

- DML을 사용 후 DDL, DCL을 사용하면 자동적으로 comitt이 되어버림 (오라클의 복구 방법이 있음)

'Oracle > SQL & PL/SQL' 카테고리의 다른 글

데이터 무결성 제약조건  (0) 2010.02.17
DDL  (0) 2010.02.17
Subquery - 실습문제  (0) 2010.02.12
실습파일 내용  (0) 2010.02.11
Subquery  (0) 2010.02.11
Posted by YBHoon
, |

- 학생테이블에서 이광훈 학생과 같은 학과 학생들의 이름과 학과 이름을 출력하세요.

SQL> select s.name, d.dname
from student s, department d
where s.deptno=d.deptno
and s.deptno=(select deptno from student where name='이광훈');

※ where d.deptno=(select deptno from student where name='이광훈')으로 조건을 입력할 경우
학과 이름이 이광훈 학생의 학과 이름으로 변경되어 "모든 학생들이 검색" 됨


- 101번 학과 학생들의 평균몸무게보다 적은 학생의 이름, 학과번호, 몸무게를 출력하세요.

SQL> select name, deptno, weight
from student
where weight < (select avg(weight) from student where deptno=101);


- 이광훈 학생의 학과의 평균몸무게보다 작은 학생들의 학생이름과 학생의 몸무게,
각 학생들의 학과이름과 지도교수 이름을 출력하세요.

SQL> select s.name, s.weight, d.dname, p.name
from student s, department d, professor p
where s.deptno=d.deptno and s.profno=p.profno(+) and
s.weight < (select avg(weight) from student
where deptno = (select deptno from student where name='이광훈'));

※ (+)가 빠질 경우, 지도교수가 없는 학생들은 검색에서 제외 됨


- temp, tdept 테이블을 사용하여 인천에 근무하는 직원의 사번과 성명을 구하세요.
SQL> select emp_id, emp_name
from temp
where dept_code in (select dept_code from tdept where area='인천');


- temp, tdept, tcom 테이블을 참고하여 부서별로 commission을 받는 인원수를 세는 쿼리를 작성하세요.

SQL> select d.dept_name, count(*)
from tdept d, temp e
where d.dept_code=e.dept_code
and emp_id in (select emp_id from tcom)
group by d.dept_name;


- temp 테이블에서 과장 중 가장 급여를 적게 받는 사람보다 많이 받는 사원들의
사번, 이름 급여를 출력하세요.

SQL> select emp_id, emp_name, salary
from tem
where salary > any (select salary from temp where lev='과장');


- temp 테이블에서 부서별로 최대 연봉을 구해서 연봉을 받는 사원의 부서코드, 사번, 이름, 급여를 출력하세요.

SQL> select dept_code, emp_id, emp_name, salary
from temp
where (dept_code,salary) in (select dept_code, max(salary) from temp group by dept_code);

'Oracle > SQL & PL/SQL' 카테고리의 다른 글

DDL  (0) 2010.02.17
DML  (0) 2010.02.12
실습파일 내용  (0) 2010.02.11
Subquery  (0) 2010.02.11
JOIN (ANSI JOIN)  (0) 2010.02.11
Posted by YBHoon
, |

-temp
emp_id,  emp_name,  birth_date,  dept_code,  emp_type,  use_yn,  tel,  holly,  salary,  lev

-tdept
dept_code,  dept_name,  paren_dept,  use_yn,  area,  boss_id

-tcom
work_year,  emp_id,  bonus_rate,  commle

-emp_level
lev,  from_sal,  to_sal,  from_age,  to_age

-student
studno,  name,  userid,  grade,  idnum,  birthdate,  tel,  height,  weight,  deptno,  profno

-professor
profno,  names,  userid,  position,  sal,  hiredate,  comm,  deptno

-department
deptno,  dname,  college,  loc

'Oracle > SQL & PL/SQL' 카테고리의 다른 글

DML  (0) 2010.02.12
Subquery - 실습문제  (0) 2010.02.12
Subquery  (0) 2010.02.11
JOIN (ANSI JOIN)  (0) 2010.02.11
JOIN (oracle JOIN) - 연습문제  (0) 2010.02.11
Posted by YBHoon
, |

최근에 달린 댓글

최근에 받은 트랙백

글 보관함