관리 메뉴

IT 쟁이

7월1일 - Admin Workshop1 본문

Oracle10g/Admin Workshop1

7월1일 - Admin Workshop1

클라인STR 2008. 7. 2. 00:28

Index -  검색속도의 향상, 조건으로 자주 사용되는 컬럼에 사용된다.
 -  생성시간이 길다. 자동으로 생성된다. (PK, UK 기능을 강화)
 -  인덱스는 RowID를 가지고있다.(오라클은 자동으로 Rowid(의사결정컬럼)가 부여된다.)
 -  인덱스를 사용할 경우 직접 경로를 찾아서 액세스 하므로 검색속도가 빨라진다.

associated - 인덱스는 독립적 저장공간이며 테이블과는 종속적인 관계이다.



인덱스에 Type에는 2가지가 있다. B-tree ?index, bitmap index


   B트리   Bitmap
---------------------------
분포도   High    Row (중복 Data가 많으므로 유리하다.분포도가 높다.)
---------------------------
OR   불리    유리
---------------------------
Update   유리    불리
---------------------------
환경   OLTP    OSS(D/W)
---------------------------


DML 사용시 테이블과 인덱스의 비교

 Table   index
------------------------------
insert  Random저장 위치를 찾아서 저장
------------------------------
delete  삭제  delete Marking(비효율적 데이터)을 함
------------------------------
update 삭제->추가 delete Marking


인덱스의 Options

인덱스의 값은 unique하다. 중복을 배제한다.
인덱스의 값은 정렬 되어있다.. default ASC, 인덱스 생성시 nosort 옵션을 사용할수 있다.
값이 지속적으로 커지는 경우 역방향으로 쓴다.
하나이상의 컬럼을 대상으로하는 조합(composite)인덱스를 생성할 수 있다.
Function 인덱스 특정값을 리턴한다.
인덱스는 중복된 키값을 제거 한다.


CREATE [BITMAP] INDEX name_ix ON employess (last_name [ASC], first_name[ASC]);
조합인덱스의 형식
조합인덱스는 Not unique 인덱스 이다.
조합인덱스를 사용할경우 실행시간을 줄일수 있다.(중복된 값을 제거하므로)

뷰View (가상테이블)

View를 생성하는 서브쿼리의 실행순서
View access -> Server Process-> Dictionary Cache -> user_views.text -> view를 생성한

subquery > 실행


CREATE [OR REPLACE] VIEW V AS SELECT LOCATION_ID, COUNTRY_NAME FROM locations l, countries

c WHERE l.country_id=c.country_id AND c.country_id in ('AU', 'BR');


시퀸스(Sequences)

유일한 값(Unique number)을 생성해주는 오라클 객체이다.
시퀸스를 생성하게 되면 기본키와 같이 순차적으로 증가하는 컬럼을 자동적으로 생성하게 된다.
기본키를 생성하기 위해 쓰는것이 일반적이다. 메모리에 cache 되었을때 sequence값의 액세스 효

율이 증가한다. 시퀸스는 테이블과는 독립적으로 저장되고 생성된다.
따라서 하나의 시퀸스를 여러 테이블에 쓸 수 있다.

CREATE SEQUENCE seq_test(시퀸스명)
start with 시퀸스의 시작값
increment by 증가값
maxvalue 증가가능한 최대수 | nomaxvlue
minvalue 시퀸스의 최소값   | nominvalue

CYCLE | NO CYCLE
CACHE | NOCACHE

시퀸스를 작성하면 자동으로 정수값이 생성되며 빠른 액세스 가능하다.
시퀸스는 독립적인 공유 개체이다.

seq_test.NEXTVAL
seq_test.CURVAL

Temporary Table - 값을임시로 저장하는 테이블

세션이나 트랜잭션이 끝났을때 자동적으로 사라진다.
각각의 세션에 독립적인 저장공간이다.

Data Dictionary - 객체에 대한 정보의 집합, 정보조회용뷰

SELECT * FROM dictionary; 전체 사전 조회

SELECT table_name, tablespace_name from user_tables;
select sequence_name, min_value, max_value, increment_by from all_sequences
select username, account_status from dba_users;
describe dba_indexes;

8장 Managing Data and Concurrency


COMMIT의 구조적인 정의 ->  Redo log buffer 에 내용을 Redo log File에 저장한다.            

         
       Redo log buffer
       |
             LGWR
       |
       Redo   log File

PL/SQL
SQL의 확장한 4세데 언어있다. (자바,C++은 3세대 언어이다.)
서로 다른 OS간의 사용이 가능하다.(이식이 가능하다.Portability)
PL/SQL을 사용할 경우 대량의 데이터와 네트워크 상의 트래픽이 감소된다.


실습예제)
// 특정 사원의 급여를 일정 %센트 인상/인하하는 프로시저를 작성하시오


SQL> conn scott/tiger 에서만 실습할것
Connected.
SQL> create or replace procedure Update_test
  2  (v_empno IN emp.empno%TYPE, --급여를 수정한 사원의 사번
  3  v_rate IN NUMBER)   --급여 인상/인하율
  4  is
  5  v_emp emp%ROWTYPE;
  6  begin
  7     dbms_OUTPUT.ENABLE;
  8     UPDATE emp
  9  SET sal=sal+(sal * (v_rate/100)) --급여를 계산
 10     where empno = v_empno;
 11  DBMS_OUTPUT.PUT_LINE('*** Data Modify Successful ***');
 12     SELECT empno, ename, sal
 13     INTO v_emp.empno, v_emp.ename, v_emp.sal
 14     FROM emp WHERE empno = v_empno;
 15  DBMS_OUTPUT.PUT_LINE(' *** Modify Check ***');
 16  DBMS_OUTPUT.PUT_LINE('1.Emp_no: ' || v_emp.empno );
 17  DBMS_OUTPUT.PUT_LINE('2.Emp_name :' || v_emp.ename);
 18  DBMS_OUTPUT.PUT_LINE('3.Emp_salary:' || v_emp.sal);
 19  END;
 20
 21  /

Procedure created.


SQL> SET SERVEROUTPUT ON; --  해줘야 DBMS_OUTPUT.PUT_LINE사용할 수 있다.
SQL> execute Update_Test(7900, -10);
*** Data Modify Successful ***
*** Modify Check ***
1.Emp_no: 7900
2.Emp_name :JAMES
3.Emp_salary:855

PL/SQL procedure successfully completed.

SQL>

변경 이전 급여를 출력하게 PL/SQL을 수정해보자
create or replace procedure Update_test
( v_empno in emp.empno%TYPE,
  v_rate in number)
is
v_emp emp%ROWTYPE;
v_sal emp.sal%TYPE;
begin
        DBMS_OUTPUT.ENABLE;
        SELECT  sal into v_sal from emp where empno=v_empno;
UPDATE emp
SET sal=sal+(sal * (v_rate/100))
where empno = v_empno;
DBMS_OUTPUT.PUT_LINE('*** Data Modify Successful ***');
SELECT empno, ename, sal INTO v_emp.empno, v_emp.ename, v_emp.sal FROM
emp WHERE empno = v_empno;
DBMS_OUTPUT.PUT_LINE(' *** Modify Check ***');
DBMS_OUTPUT.PUT_LINE('1. Emp_no:' || v_emp.empno);
DBMS_OUTPUT.PUT_LINE('2. Emp_name:' || v_emp.ename);
DBMS_OUTPUT.PUT_LINE('3. PreviewEmp_Salary:' || v_sal);
DBMS_OUTPUT.PUT_LINE('4. Emp_salary:' || v_emp.sal);
END;
/
SQL> execute Update_Test(7900, -10);
*** Data Modify Successful ***
*** Modify Check ***
1. Emp_no:7900
2. Emp_name:JAMES
3. PreviewEmp_Salary:855
4. Emp_salary:769.5

관리자로서 PL/SQL 사용할수 있는 능력

- 문제가있는 PL/SQL 식별해라
- 문제발견시 수정해라
- PL/SQL 객체를 불러 들일수 있어야 한다.
- 조낸 공부해라 -ㅇ-

Triggers - 자동이벤트 실행객체

Triggering Event  - 모든 명령어들은 트리거에 의해 처리된다.

------------------------------------------
Event Type  Examples of Events
------------------------------------------
DML    - INSERT, UPDATE, DELETE
------------------------------------------
DDL    - CREATE, DROP, ALTER, GRANT, REVOKE, RENAME
------------------------------------------------------------
Database - LOGON, LOGOFF, STARTUP, SHUTDOWN, SERVERERROR
---------------------------------------------------------------

Locks -잠금 ★★★★★

Lock은 일관성을 보장한다. 동시성을 제어한다.



Comments