본문 바로가기
Database/Oracle

Oracle Database의 기본 개념-3

by 나비와꽃기린 2016. 11. 15.
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

 

1.1  제약조건

-테이블에 부적절한 자료가 입력되는 것을 방지하기 위해서 여러 가지 규칙을 적용해

놓은 것

-데이터의 무결성 유지를 위하여 사용자가 지정할 수 있는 성질.

제약조건

설명

PRIMARY KEY(PK)

FOREIGN KEY(FK)

유일하게 테이블의 각행을 식별(NOT NULL UNIQUE조건을 만족)

열과 참조된 열 사이의 외래키 관계를 적용하고 설정합니다

UNIQUE key(UK)

테이블의 모든 행을 유일하게 하는 값을 가진 열(NULL을 허용)

NOT NULL(NN)

열은 NULL값을 포함할 수 없습니다.

CHECK(CK)

참이어야 하는 조건을 지정함(대부분 업무 규칙을 설정)

 

2.7.1 제약조건-NOT NULL

Ex)

SQL> CREATE TABLE emp(

     ename VARCHAR2(20)  CONSTRAINT emp_nn_ename NOT NULL );

 

  - 위와 같이 테이블을 생성하면 ename 컬럼에는 꼭 데이터를 입력해야만 합니다.

  - 여기서 emp_nn_ename(테이블이름_제약조건이름_컬럼이름) 형식으로 CONSTRAINT NAME을 정의 합니다.

- CONSTRAINT NAME USER_CONSTRAINTS (VIEW)를 통해서 확인 할 수 있습니다.

 

SQL> SELECT CONSTRAINT_NAME  FROM USER_CONSTRAINTS  WHERE TABLE_NAME ='EMP' ;

   CONSTRAINT_NAME

 

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

   emp_nn_ename           à 이런 식으로 제약조건의 이름을 확인할 수 있습니다.

 

2.7.2 제약조건-UNIQUE

-데이터의 유일성을 보장 합니다. (중복되는 데이터가 존재할 수 없습니다.)

-유니크 조건을 생성하면 자동으로 index가 생성됩니다.

Ex)

SQL> ALTER TABLE emp ADD CONSTRAINT emp_uk_deptno UNIQUE (deptno) ;

테이블이 변경되었습니다.

- 위와 같이 제약조건을 생성하면 deptno 컬럼에 중복된 데이터가 들어갈 수 없습니다.

 

-- 제약 조건의 삭제

SQL>ALTER TABLE emp DROP CONSTRAINT emp_uk_deptno ;

테이블이 변경되었습니다.

 

2.7.3 제약조건-CHECK

-컬럼의 값을 어떤 특정 범위로 제한할 수 있다.

 

Ex)

SQL> ALTER TABLE emp ADD CONSTRAINT emp_ck_comm CHECK (comm >= 10 AND comm <= 100000) ;

 

SQL> ALTER TABLE emp                          

     ADD CONSTRAINT emp_ck_comm

     CHECK (comm  IN  (10000,20000,30000,40000,50000)) ;

 

 

2.7.4 제약조건-DEFAULT

-데이터 입력 시 입력을 하지 않아도 지정된 값이 디폴트로 입력 된다.

Ex)

SQL> CREATE TABLE emp(  

     hiredate DATE DEFAULT  SYSDATE ) ;

     --hiredate 컬럼에 INSERT를 하지 않아도 오늘 날짜가 들어간다.

 

 

2.7.5 제약조건-PRIMARY KEY(기본 키)

-Primary Key(기본 키, 주키)UNIQUE NOT NULL의 결합과 같다.

-다른 테이블에서 외래 키들이 참조할 수 있는 키로서의 자격을 가지고 있다.

-기본 키를 정의하면 자동으로 인덱스를 생성.

 

2.7.6 제약조건-FOREIGN KEY(외래 키)

-기본 키를 참조하는 컬럼 또는 컬럼들의 집합

-외래 키를 가지는 컬럼의 데이터 형은 외래 키가 참조하는 기본 키의 컬럼과 데이터 형이

일치해야 함.

Ex)

SQL>ALTER TABLE emp ADD CONSTRAINT emp_fk_deptno

    FOREIGN  KEY (deptno) REFERENCES dept(deptno)       

emp 테이블의 deptno 컬럼은 dept 테이블에 deptno 컬럼을 참조하는 외래키를 가지게 된다.

 

1.2  Index

- 원하는 Data를 빨리 찾기 위한 기술. 간단하게 설명하자면, Data가 어느 장소에 있는지 미리 기록해 놓은 것을 말한다. 이것을 통해 DBMS는 빠르게 Data에 접근이 가능하다

2.8.1 B*TREE Index

- 어떤 행에 대한 access 회수도 동일하게 하는 바이너리의 균형 탐색 tree. 찾으려는 행이 테이블 시작이나 끝 또는 중간에 있어도 거의 같은 횟수 내에 지정된 값을 access하는 효율적인 방법

2.8.2 Bitmap Index

- 비트맵 인덱스는 인덱스된 열의 정보를 0 1의 값으로 표현하여 데이터 검색시 사용되는 SQL 문의 WHERE에 정의된 AND, OR 연산자에 의해 AND 연산, OR 연산을 실행하여 데이터를 검색하는 방법.

2.8.3 Function-Based Index

- 인덱스가 생성될 열에 산술공식 또는 함수를 적용하여 인덱스를 생성하는 방식. 사용자가 실행하는 SQL 문의 WHERE 절에 산술 표현 또는 함수를 자주 사용할 때 빠르게 검색.

 

 

1.3  VIEW

-하나의 가상 테이블

-실제 데이터가 저장 되는 것은 아니지만 뷰를 통해 데이터를 관리 할 수 있다.

-복잡한query를 통해 얻을 수 있는 결과를 간단한 query를 써서 구할 수 있게 한다.

-한 개의 뷰로 여러 테이블에 대한 데이터를 검색 가능

2.9.1 VIEW 생성

Ex)

SQL> CREATE OR REPLACE VIEW Name_Query --뷰 생성방법

        AS

           SELECT a.ename, b.dname

           FROM  emp a, dept b

           WHERE a.deptno = b.deptno

                AND b.deptno = 20

 

--이렇게 뷰를 생성해 놓고 뷰를 통해 검색을 하면 됩니다.

 

SQL>SELECT * FROM Name_Query;

ENAME                DNAME

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

SMITH                RESEARCH

JONES                RESEARCH

 

 

Ex) WITH CHENK OPTION

-view 의 조건식을 만족하는 데이터만 INSERT 또는UPDATE가 가능하도록 하는 옵션

 

SQL> CREATE OR REPLACE VIEW Check_Option

     AS

       SELECT empno, ename, deptno

       FROM  emp

       WHERE deptno = 10

       WITH CHECK OPTION

 

SQL> INSERT INTO Check_Option(empno, ename, deptno)

     VALUES (10005, 'jain', 30);

 

INSERT INTO Check_Option(empno, ename, deptno)

            *

1행에 오류:

ORA-01402: 뷰의 WITH CHECK OPTION의 조건에 위배 됩니다

부서 번호가 10인 사원만 INSERT, UPDATE할 수 있습니다.

현재 depotno30으로 넣으려고 했기에 조건에 위배.

 

Ex) WITH READ ONLY

SELECT만 가능한 VIEW를 생성

 

1.4  프로시져(Procedure)

-특정 작업을 수행 하는, 이름이 있는 PL/SQL BLOCK 이다.

-매개 변수를 받을 수 있고, 반복적으로 사용 할 수 있는 BLOCK 이다

-함수, 프로시져등을 호출할 수 있다.

-리턴 값을 가질 수 없다.

-Query문에서 독립적으로 사용될 수 없다.

-데이터에 변형을 가할 수 있다.

-프로시저 내의 PL/SQL블럭은 어떤 DML문이든 포함이 될 수 있으나 DDL문은 사용할 수 없다.

 

2.10.1 프로시져(Procedure) 생성

CREATE [OR REPLACE] PROCEDURE [schema.]procedure

[ (argument [IN | OUT | IN OUT] datatype

[, argument [IN | OUT | IN OUT] datatype] ...)]

{IS | AS} pl/sql_subprogram_body

 

Ex)

CREATE OR REPLACE PROCEDURE parameter_length(p_para1 IN OUT VARCHAR2,

p_para2 IN OUT NUMBER) AS

BEGIN

    p_para1 := 'abcdefghijklmno';

    p_para2 := 12.3;

END;

 

 

2.10.2 프로시져(Procedure) 인자타입

-IN: 읽기전용, 프로시져가 return 될 때 프로시져 내의 값은 전달되지 않는다.

프로시져 내에서 값을 할당 할 수 없다.

프로시져 내에서 rvalue이며 대입문의 오른쪽에만 사용 가능

 

-OUT: 쓰기전용, 프로시져가 호출 될 때 실제 parameter가 가지는 값은 무시된다.

프로서져 내에서 lvalue이다. 대입문의 왼쪽에만 쓸 수 있다.

 

-IN OUT: 읽기쓰기, parameter의 값은 프로시저가 불릴 때 프로시져에게 전달되고,

제어가 리턴 될 때 실제 parameter에게 전달된다.

2.10.3 프로시져(Procedure)의 실행

-프로시져의 생성과 실행을 하기 위해서는 권한이 있어야 한다.

 

-프로시저의 생성을 위한 권한: CREATE PROCEDURE 권한.

프로시저의 실행을 위한 권한: EXECUTE 권한.

 

-DBA 권한의 User Procedure를 사용할 수 있는 권한을 부여.

EX) GRANT EXECUTE ON my_procedure to scotte;

 

-프로시져의 실행에는 그 프로시져를 실행할 수 있는 권한(EXECUTE권한)이 있어야 한다.

 

Ex) 프로시저 실행 예

 

SQL> CREATE OR REPLACE PROCEDURE update_sal
     /* IN  Parameter */
     (v_empno    IN    NUMBER)
        
     IS

     BEGIN

       UPDATE emp
       SET sal = sal  * 1.1
       WHERE empno = v_empno;

       COMMIT;

     END update_sal;
     /    

 

SQL> EXECUTE update_sal(7369);
PL/SQL 처리가 정상적으로 완료되었습니다.

 

 

1.5  트리거(Trigger)

-트리거(trigger)는 자기가 종속된 특정 테이블에서 데이터의 변화가 발생했을 때 자동으로 INSERT, UPDATE, DELETE문이 자동으로 실행되는 아주 특별한 종류의 stored 프로시저이다.

 

-그러나 프로시져는 아규먼트를 전달할 수 있고, 프로시져는 명시적으로 실행된는데 반해 트리거는 트리거링 이벤트(DML:INSERT, UPDATE, DELETE)가 발생할 때 사용자에게는 보이지 않게 실행된다.

 

2.11.1 트리거(Trigger) 구문

CREATE [OR REPLACE] TRIGGER [schema.]trigger

트리거 생성, 재 생성 명령.

 

BEFORE | AFTER

트리거의 시작시점이 트랜잭션의 전인지 후인지를 나타냄.

 

{DELETE | INSERT | UPDATE [OF column [, column] ...]}

데이타의 처리유형

 

[OR {DELETE | INSERT | UPDATE [OF column [, column] ...]}] ...

트리거의 처리유형을 조합하여 선언할때 사용하는

 

ON [schema.]table

트리거가 INVOKE시킬 트랜잭션이 일어나는 테이블

 

FOR EACH ROW : 트리거의 종류,

FOR EACH ROW이면 Row-Level Trigger

이문구를 쓰지 않으면 Statement-Level Trigger

 

[WHEN (condition)] ]

데이타의 처리유형이외의 조건을 삽입할 경우에 사용

 

pl/sql_block

실제 트리거의 BODY부분.

 

 

1.6  DB redo Log Archive Log

2.12.1 redo Log

- 오라클 에서 일어나는 트랜잭션에 대한 변경내역들을 기록하는 파일이다. redo Log redo 엔트리로 구성되어 있으며, 오라클 프로세스 LGWR에 의해 로그버퍼에 쓰여진 내용이 redo Log파일에 쓰여진다.

2.12.2 archive Log

- 리두로그의 단점(이전 작업한 내용의 손실 발생)을 해결하기 위한 방법으로 리두로그파일의 내용을 다른 디렉토리에 자동으로 복사해서 저장하도록 운영하는 방법.

 

 

1.7  OGG 의 복제 개념

서로 다른 데이터베이스를 온라인으로 동기화 시켜준다. 실시간 복제, 낮은 시스템 부하, 이기종 환경 지원, 확장성과 유연성, 높은 안정성의 장점이 있다.

트랜잭션 로그 파일을 읽어서 커밋된 변경 데이터를 추출하고 필터링도 지원한다. 변경정보를 모아두고 데이터의 변환을 통해 여러 개의 target으로 분배한다(에러 시 재발송). 압축화 암호화로 전달되며 트랜잭션을 보장하며 데이터를 적용한다.

 

 


Oracle Database의 기본 개념-2 보러가기 > 클릭

Oracle Database의 기본 개념-1 보러가기 > 클릭