이펙티브 오라클 (2008년)
블랙박스 증후군을 피하라 0 0 553

by 구루비스터디 [2009.04.30]


3.1 데이터베이스 독립 대 데이터베이스 종속

  • 장단점 토의


3.2 블랙박스 증후군의 위험

  • 실행할 수 없음: 기대성능이 최대 성능에 훨씬 미치지 못한다.
  • 올바른 해답을 얻을 수 없음
  • 소프트웨어를 신속하게 인도할 수 없음
  • 투자효과를 극대화할 수 없음


3.2.1 실행할 수 없음

예제1
  • 종업원 계층을 보여주는 애플리케이션 작성중 (CONNECT BY문 사용)

 select rpad('*',2*level,'*') || ename ename
  from emp
  start with mgr is null
  connect by prior empno = mgr
  /



예제2
  • 종업원의 이름, 부서, 월급을 포함하는 종업원 정보를 보여주는 애플리케이션 작성

  select deptno, ename, sal,
         sum(sal) over (partition by deptno order by sal, ename) cum_sal,
	 round(100*ratio_to_report(sal) over(partition by deptno),1) pct_dept,
	 round(100*ratio_to_report(sal) over(), 1) pct_overall
    from emp
   order by deptno, sal
   /



  • 그러나 이러한 기능들은 여러 데이터베이스에는 없는 기능이기 때문에 데이터베이스에 의존적이다.
  • 따라서 이러한 기능을 구현하려면 자체조인이나 뷰 등을 사용해서 해야 한다.


3.2.2 올바른 해답을 얻을 수 없음

  • 일관성 및 동시성 제어

 create table dept
 ( deptno int primary key,
   sum_of_salary number
 );

 create table emp
 ( empno   int primary key,
   deptno  references dept,
   salary  number
 );

insert into dept (deptno) values (1);

insert into dept (deptno) values (2);

insert into emp (empno, deptno, salary) values (100, 1, 55);

insert into emp (empno, deptno, salary) values (101, 1, 50);

update dept 
   set sum_of_salary = ( select sum(salary) 
                           from emp
			  where emp.deptno = dept.deptno )
 where dept.deptno = 1;

commit;




select * from emp;

select * from dept;



  • LOCK 발생 상황

세션1> insert into emp (empno, deptno, salary) values (102, 2, 60);
세션2> update emp 
          set deptno = 2
        where empno = 100;
세션2> update dept
          set sum_of_salary = ( select sum(salary) 
	                          from emp
                                 where emp.deptno = dept.deptno)
        where dept.deptno in(1, 2);
세션1> update dept
          set sum_of_salary = ( select sum(salary) 
	                          from emp
                                 where emp.deptno = dept.deptno)
        where dept.deptno =2;
=> LOCK 발생
세션2> commit;
=> LOCK 해제
세션1> commit;
=> 모든 트랜잭션 완료



  • 관계형데이터베이스 마다 서로 다른 동시성 및 일관성 모델을 가지고 있다.
  • 만일 개발팀 구성원이 오라클에서의 동시성 및 일관성 메커니즘의 구현방식을 이해하지 못하거나 SQL Server 혹은 DB2의 메커니즘과 동일하다고 생각하고 있다면 결과는 손상된 데이터, 부정확한 해석, 부정확한 해답이 나타난다.


3.2.3 소프트웨어를 신속하게 인도할 수 없음

  • 데이터베이스 기능들을 최대한 활용할 경우 짧은 시간내에 데이터베이스 애플리케이션을 작성할 수 있다.
  • 분석함수를 사용함으로써 개발시간을 단축할 수 있다.
"구루비 데이터베이스 스터디모임" 에서 2008년에 "이펙티브 오라클" 도서를 스터디하면서 정리한 내용 입니다.

- 강좌 URL : http://www.gurubee.net/lecture/3515

- 구루비 강좌는 개인의 학습용으로만 사용 할 수 있으며, 다른 웹 페이지에 게재할 경우에는 출처를 꼭 밝혀 주시면 고맙겠습니다.~^^

- 구루비 강좌는 서비스 제공을 위한 목적이나, 학원 홍보, 수익을 얻기 위한 용도로 사용 할 수 없습니다.

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입