SyntaxHighlighter.all(); 'SW/Database' 카테고리의 글 목록 :: 또르의 개발노트 ss
반응형

1.SQLLINES를 실행한다.

 

2.Oracle -> MariaDB Convert

-.상단에서  SOURCE를 ORACLE , TARGET을 MARIADB로 설정한다.

-.EXPORT한 내용을 Sqllines에 복사,붙여넣기하여 Convert 한다.

-.그래도 변경되지 않는 함수들이 있다. 수동으로 바꿔야한다.

-.Table Data Import를 하기 위한 CHARATER_SET 세팅

다음과 같이 실행하면 Charater_Set 리스트가 나오는데  다음과 같이 설정해준다 아니면 모두 UTF-8로해도됨

 

 

 

 

 

-TABLE COLUMN마다 CHARACTER SET이 있어 UTF-8로 맞춰 주어야 한다. DEFAULT LATIN으로 되어있어 IMPORT가 불가능 했음

 

 

-.ORACLE에서 추출한 데이터 IMPORT 하기

-.Dbeaver에서 데이터베이스-import할 테이블을 선택 한 후 우클릭하여 데이터 가져오기를 누른다.

 

다음과 같은 화면이 나오는데 CSV파일로 가지고 올꺼면 CSV, 테이블로 가지고 올꺼면 테이블로 선택하여 들고오면 된다.필자는 CSV파일로 들고올꺼기에 CSV로 선택

 

 

 

 

 

 

 

 

 

 

 

그리고 Source를 선택하여 CSV파일의 경로로 접속하여 선택 후 다음 버튼을 누른다.

 

 

 

 

 

 

 

 

 

 

 

 

 

-해당사항없으므로 다음~

 

 

 

 

 

 

 

 

 

 

CSV파일과 IMPORT할 테이블 매칭이 되어있는지 확인하는 창으로

매칭이 잘되었는지 확인을 한다.

IMPORT시에 데이터타입, 시간포멧, 한글 등 여러가지 제약사항이 생길때 에는 Mapping type을 선택하여 skip 또는 default 값을 넣을수도있다.

확인 후 다음을 클릭한다.

 

 

 

 

 

 

 

 

 

 

.

그리고 Start를 클릭한다.

반응형
반응형

 

1.ORACLE EXPORT

-.먼저 테이블을 옮기기위해 테이블 Script를 Export 합니다.

-.Database - Export DDL을 활용하여 Export 하였습니다.

 

-.Script Option을 다음과 같이 하였습니다. Comment, Synonyms, Storage MariaDB에서 인식할 수  없는 항목들이 많기에 단순 DDL만 복사하기 위해 다음과같이 체크란을 해제하였음.

 

-.이 과정을 마치고 Export를 하면 다음과 같이 단순 DDL만 추출된다

 

-Oracle Data export

EXPORT할 테이블에서 우클릭하여 EXPORT DATASET을 클릭한다.

Export fotmatDelimited Text로하여 EncodingUTF-8로 설정한다.

OK를 누른 후 txt파일을 csv파일로 변경시키고 파일을 열어 파일 혹은 한글이 깨졌는지 확인을 한다.

정상적으로 데이터가 저장된 것을 확인했다면

이로써 EXPORT는 끝이 난다.

 

반응형
반응형

설치환경

DataBase : MariaDB

Tool : Dbeaver

SQL Converter : SQLines

 

 

목차

1. Maria DB 설치

2. Dbeaver 설치

3. SQLines 사용법

 

 

1.MariaDB 설치

-.MariaDB 홈페이지에 접속하여 다음 파일을 다운로드를 한다

URL :  https://mariadb.com/

 

 

 

-.Next를 하여 계속하여 설치해줍니다. Heidisql  Tool이 자동으로 체크되어 있는데 나는 Dbeaver를 사용하기때문에 체크해제를 했다. 그리고 중요한 것이 Server의 문자열 세팅을 UTF-8로 하여야한다. 체크해제가 되어 있는데 체크해야함. 로그인시 문자인식이안되어 계속 에러가 발생했었음.

 

 

2.Dbeaver 설치

-.다음 홈페이지에 접속하여 운영체제 환경에 맞게 다운받습니다

-.Toad를 사용하다가 Dbeaver를 사용하니 불편한점이 꽤 있었습니다만 무료툴에 여러종류의 DB를 한 프로그램에서 컨트롤 가능하기하는 것들이 편리했네요. 

URL :https://dbeaver.io/download/

 

 

3.SQLlines 설치 및 Online Converter 

-.ORACLE의 쿼리를 모두 재작성하긴 힘드니 컨버터 툴을 이용합니다. 물론 인식못하는 함수나 컨버터되지 못한 것들은 

  일일히 수정해주셔야합니다. 

URL : http://www.sqlines.com/download

-.다음 홈페이지에 접속하여 운영체제 환경에 맞게 다운받습니다. 웹페이지에서도 Convert가 가능하며 단점은 느리고 프로그램으로도 설치하여 Convert가 가능합니다.

-온라인으로 Convert시에는 “Convert Online”을 클릭하면되고 프로그램 설치시에는 “SQLLines SQL Converter”를 선택하여 설치하면됩니다.

 

-.다음과 같이 상단에 Oracle -> MariaDB로 설정 한 후 Convert가 가능합니다.

-.각종 함수, 타입 등 다른 부분이 많습니다. 확인하시면서 적용하시는 것을 추천 드립니다

 

반응형
반응형

백업(Backup)이란 데이터의 복사본이고,

복구(Recovery)란 장애가 나기 바로 전 시점으로 복구 하는 것

 

*오라클 데이터베이스의 백업대상

1.모든 데이터파일

2.컨트롤 파일

3.Redo Log file

4.파라미터 파일

5.패스워드 파일

 

*Database Mode

  - NOARCHIVELOG Mode : Redo Log Group에 Log Switch가 발생하여 다른 그룹을 사용 할 때 이 복사본을 생성하지 않고 재사용 하는 방법입니다.

  - ARCHIVELOG Mode : Redo Log Group에 Log Switch가 발생하여 다른 그룹을 사용하기 전에 복사본을 생성하는 방법입니다.

 

*Backup의 종류

Physical Backup

-데이터베이스를 구성하는 파일들을 그대로 복사하는 방법

-DB가 손상시에 아무런 피해 없이 또는 최소한의 피해로 데이터베이스를 복구하는 방법

 

 1)Offline Backup(Cold Backup)

   -Oracle이 Close(ShotDown된 상태)된 상태에서 OS의 Copy 명령어를 통해 복사하는 방법 , NoArchiveLog Mode,          ArchiveLog Mode 둘 다에서 가능합니다.

 2)Online Backup(Hot Backup)

   -Oracle이 Open(운영중인 상태)에서 OS의 COPY명령어를 통해 복사하는 방법으로서, ArchiveLog Mode일 경우만 가      능하며, Database를 24시간 운영하는 System에서 사용하는 백업 방법입니다

 

Logical Backup

  - Export Utility $ORACLE_HOME/bin/exp 명령어를 이용하여 Backup하는 방식으로 Database의 논리적인 정보(Schema 구조, 데이터 등)를 저장하는 방식입니다.

 

*Recovery 종류

1. Media Recovery

  Disk나 매체등의 장애로 인한 Recovery 입니다.

Physical Backup으로부터의 복구 : ① Complete Recovery

  장애 시점까지 Recovery하는 방법입니다.

  Complete Recovery는 변경된 정보를 저장하고 있는 Redo Log 파일들이 재 사용 되기 전에 저장되어 지는 Archive File이 필요 하므로 Archive Log Mode 에서만 가능하며, NoArchiveLog Mode에서는 백업본 이후 RedoLog File이 재사용(Archive File이 없는 경우) 이전의 백업본으로만 데이터베이스를 복구 할 수 있습니다.

장애시점 바로 전으로 복구

Physical Backup으로부터의 복구 : ② Incomplete recovery

  Backup본을 Restore 한 이후 변경된 작업이 들어 있는 Archived Log 파일을 찾을 수 없거나, Database를 특정 시점으로 돌리는 방법 입니다.

Physical Backup을 통한 복구

Logical Backup으로부터의 복구 : Import Utility

  Import Utility $ORACLE_HOME/bin/imp 를 이용하여 데이터를 복구 하는 방법입니다. (데이터파일이 손상된 경우, 디비를 다시 설치한 후 또는 해당 데이터파일을 재 생성한 이후 IMP로 복구 가능)

2. Instance Recovery

  비정상적인 종료(abort명령어로 shutdown, 정전, CPU고장, 메모리 손실등과 같은 장애)에 의해 Oracle Instance가 Error를 일으켜 인스턴스가 실패한 경우입니다

  1. 비정상적인 종료후 비동기화 되어 있는 상태에서 Database OPEN

  2. 롤 포워드 (마운트 단계에서 수행) : 마지막 CKPT 이후의 RedoLog File에 기록된 모든 변경사항(commit된 데이터와 commit되지 않은 데이터)를 DBWR에 의해 데이터파일에 기록

  3. 데이터베이스 오픈

  4. 롤백 단계 : 모든데이터 파일에서 COMMIT되지 않은 데이터를 롤백하는 단계

  5. 데이터베이스가 동기화 되어 데이터베이스 운영

  ※ 비동기화 되어 있는 상태에서 롤백한 이후에 데이터베이스를 OPEN 하게 되면은 DOWN time이 길어지므로, 일단 롤 포워드 단계를 거쳐 데이터베이스를 오픈한 이후 롤백 하는 과정을 Warm-Start라고 부릅니다.

3. User Error Recovery

  사용자의 실수로 인한 Transaction으로 인해 원하지 않는 결과가 발생한 경우(Table truncation 또는 Drop같은 에러) 다시 복원하는 방식으로 imp를 이용하는 경우가 대부분입니다.

 

*기본적인 Backup 정책 

Backup 정책의 GUIDELINE

  - 정기적으로 COLD BACKUP을 받도록 합니다.

  - Database이 구조적인 변화가 생기기 전 반드시 COLD BACKUP을 받도록 합니다.

  - Database에 장애가 발생하지 않도록 운영해야 하며, 장애 시에는 Recovery까지의 시간이 최소한이 되도록 백업 정책을 세워야 합니다.

기본적인 Backup 규칙

  - LOG FILE을 Disk에 Archive한 후, 추후에 다른 Disk나 Tape 등에 다시 복사합니다.

  - DATA FILE의 Backup은 실제 DATA FILE과는 다른 Disk에 유지해야 합니다.

  - CONTROL FILE은 다중화 하여 여러 개를 유지 합니다.

  - LOG FILE이나 DATA FILE을 추가하거나, Rename 삭제 하는 등 Database의 구조가 변경되었을 경우는 반드시 CONTROL FILE을 백업 받아야 합니다.

 

 

출처:http://www.gurubee.net/lecture/1988

반응형
반응형

--테이블스페이스 생성
CREATE TABLESPACE HSL_SON(테이블스페이스명) DATAFILE
'HSL_SON'(테이블스페이스명)  SIZE 2048M AUTOEXTEND ON NEXT 4M MAXSIZE UNLIMITED
LOGGING
PERMANENT
EXTENT MANAGEMENT LOCAL AUTOLLOCATE
BLOCKSIZE 8K
SEGMENT SPACE MANAGEMENT MANUAL
FLASHBACK ON;



--유저생성
CREATE USER [생성할 유저] 
IDENTIFIED BY [비밀번호]
DEFAULT TABLESPACE [테이블스페이스명] 
TEMPORARY TABLESPACE TEMP;


--권한주기 (connect, resuorce, dba 권한주기)
GRANT connect, resource, dba TO [유저명]

반응형
반응형

프로시저(Procedure)란?

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

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

     보통 연속 실행 또는 구현이 복잡한 트랜잭션을 수행하는 PL/SQL BLOCK을 데이터     베이스에 저장하기 위해 생성 한다.

 

프로시저 문법

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

CREATE OR REPLACE procedure name

IN argument

OUT argument

IN OUT argument

 

IS 

 

   [변수의 선언]

 

BEGIN  --> 필수 

 

   [PL/SQL Block]

-- SQL문장, PL/SQL제어 문장 

 

   [EXCEPTION]  --> 선택

-- error가 발생할 때 수행하는 문장

 

END;  --> 필수

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

-CREATE OR REPLACE 구문을 사용하여 생성 한다.

-IS로 PL/SQL의 블록을 시작 한다.

-LOCAL 변수는 IS BEGIN 사이에 선언 한다.

 

 

프로시저 예제

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

-- 프로시저의 이름은 update_sal이다

-- update_sal 프로시저는 사번을 입력받아 급여를 인상 한다.

-- 프로시저를 끝마칠 때에는 항상 "/"를 지정 한다.

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>EXCECUTE update_sal(7369)

PL/SQL처리가 정상적으로 완료되었습니다

 

 

함수(Function)란?

-보통 값을 계산하고 결과 값을 반환하기 위해서 함수를 많이 사용 한다.

대부분 구성이 프로시저와 유사 하지만 IN 파라미터만 사용 할 수있다.

반드시 반환 될 값의 데이터 타입을 RETURN문에 선언해야 한다.

도한 PL/SQL블록 내에서 RETURN문을 통해서 반드시 값을 반환해야 한다.

 

함수문법

-- PL/SQL 블록에는 적어도 한 개의 RETURN 문이 있어야 한다.

-- PL/SQL Block은 함수가 수행 할 내용을 정의한 몸체부분이다.    

CREATE OR REPLACE FUNCTION function name

[(argument...)]

 

  RETURN datatype

-- datatype은 반환되는 값의 datatype입니다.

 

IS 

 

  [변수 선언 부분]

 

BEGIN

 

  [PL/SQL Block]

 

  -- 리턴문이 꼭 존재해야 합니다

RETURN 변수;

 

END;     

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

함수 실행 예제

-- 먼저 함수의 반환값을 저장 할 변수 선언.

SQL> VAR salary NUMBER;

 

-- EXECUTE 문을 이용해 함수를 실행합니다.

SQL>EXECUTE :salary := FC_update_sal(7900);

 

-- PRINT문을 사용하여 출력

SQL>PRINT salary;

 

    SALARY

----------

1045

 

-- 아래와 같이 SELECT문장에서도 사용 할 수 있다.

SQL> SELECT ename, FC_update_sal(sal) FROM emp;

 

END;  --> 필수 D update_sal;

/ D update_sal;

/ D update_sal;

/ D update_sal;


[출처]http://www.gurubee.net/lecture/1042

반응형
반응형

 PL/SQL 구조


PL/SQL에서 사용하는 모든 변수나 상수를 선언하는 부분으로서 DECLARE로 시작합니다.

*실행부(EXECUTABLE SECTION)

절차적 형식으로 SQL문을 실행할 수 있도록 절차적 언어의 요소인 제어문,반복문,함수 정의 등 로직을 기술 할 수 있는 부분으로 BEGIN으로 시작합니다.

*예외 처리(EXCEPTION SECTION)

PL/SQL문이 실행되는 중에 에러가 발생할 수 있는데 이를 예외 사항이라고 한다. 이러한 예외 사항이 발생했을 때 이를 해결하기 위한 문장을 기술할 수 있는 부분으로 EXCEPTION으로 시작한다.

 

PL/SQL 프로그램의 작성 요령

- PL/SQL 블록내에서는 한 문장이 종료할 때마다 세미콜론(;)을 사용 한다.

- END뒤에 세미콜론(;)을 사용하여 하나의 블록이 끝났다는 것을 명시 한다.

- PL/SQL 블록의 작성은 편집기를 통해 파일로 작성할 수도 있고, SQL 프롬프트에서 바로 작성 할 수도 있다.

- SQL*PLUS 환경에서는 DECLARE나 BEGIN이라는 키워드로 PL/SQL블럭이 시작하는 것을 알 수 있다.

- 단일행 주석 : --

- 여러행 주석 : /* */

- PL/SQL 블록은 행에 / 가 있으면 종결 된다.

 

PL/SQL 블럭의 유형

Anonymous Block(익명 블록)

-이름이 없는 블록을 의미하며, 실행하기 위해 프로그램 안에서 선언 되고 실행시에 실행을 위해 PL/SQL 엔진으로 전달 된다.

-선행 컴파일러 프로그램과 SQL*PLUS 또는 서버 관리자에서 익명의 블록을 내장 할 수 있다.

 

Procedure(프로시저)

-득정 작업을 수행할수 있는 이름이 있는 PL/SQL 블록으로서, 매개 변수를 받을수 있고, 반복적으로 사용할 수 있따.

보통 션속 실행 도는 구현이 복잡한 트랜잭션을 수행하는 PL/SQL블록을 데이터베이스에 저장하기 위해 생성한다.

 

Function(함수)

보통 값을 계산하고 결과값을 반환하기 위해서 함수를 많이 사용 한다.

대부분 구성이 프로시저와 유사하지만 IN파라미터만 사용 할 수 있고, 반드시 반활 될 값의 데이터 타입을 RETURN문에 선언해야 한다

또한 PL/SQL블록 내에서 RETURN문을 통해서 반드시 값을 반환 해야 한다.


[출처]http://www.gurubee.net

반응형
반응형

(5)사용자관리

*데이터베이스 보안을 위한 권한

-데이터베이스 관리자는 사용자가 데이터베이스의 객체에 대한 특정권한을 가질 수 있게하
여 다수의 사용자가 데이터베이스에 저장된 정보를 공유하면서도 정보에 대한 보안이 이루어지도록 한다.




Tablespace: 디스크공간을 소비하는 데이터베이스객체들이 저장되는장소이다

 -권한을 부여해도 생성을 할 수 없는 이유가 테이블 스페이스 할당이 되지 않아서 인데 쿼터를 할당하면 된다

1)sys계정 접속

Conn system/manager

Show user

 

2)alter user user01

UQUOTA 2M on users;

 

*WITDH ADMIN OPTION

-사용자가 WITH ADMIN OPTIO과 함께 부여 받으면 데이터베이스 관리자가 아니더라도 다른 사용자에게 자신이 부여받은 권한을 줄 수 있다.


객체권한 : 특정 객체에 조작을 할 수 있는 권한

스키마 : 객체를 소유한 사용자명

SELECT * FROM SCOTT.EMP;

-SCOTT은 EMP테이블 객체를 소유한 사용자명

SELECT * FROM EMP;

-현재사용자가 SCOTT일 경우 생략가능

 

*사용자에게 부여된 권한조회

-현재 사용자가 다른 사용자에게 부여한권한 정보

USER_TAB_PRIVS_MADE;

자신에게 부여된 권한정보조회

-USER_TAB_PRIVS_RECD;

 

*객체 권한 제거

-REVOKE SELECT ON EMP FROM USER01;

 

* WITH ADMIN OPTION : 시스템권한을 부여할때 함께 부여하면 사용자는 데이터베이스 관리자가 아니더라도 다른 유저에게 권한을 줄 수 있다.

* WITH GRANT OPTION : 객체권한을 부여할때 함께 부여하면 사용자는 데이터베이스 관리자가 아니더라도 다른 유저에게 권한을 줄 수 있다.

 

*차이점

WITH ADMIN OPTION은 USER1 -> USER2로 권한을 부여한 후 USER1의 권한을 REVOKE 하면 USER1만 REVOKE되나  WITH GRANT OPTION은 둘다 REVOKE됨

반응형
반응형

오라클 객체

 

(1)인덱스 : SQL명령문의 처리 속도를 향상시키기 위해서 컬럼에 생성하는 오라클 객체

인덱스의 장점

1)검색속도가 빨라진다

2)시스템에 부하를 줄여서 시스템의 전체 성능을 향상시킨다


인덱스의 단점

1)인덱스를 위한 추가 공간이 필요하다

2)인덱스를 생성하는 데 시간이 걸린다

3)데이터의 변경 작업 이 자주 일어날 때는 오히려 성능이 저하된다.

*인덱스는 조회의 성능을 향상시키는 객체


-자동 인덱스: 프라이머리 키 또는 UNIQUE 제한 규칙에 의해 자동적으로 생성되는 인덱스

-수동 인덱스: CREATE INDEX 명령을 실행해서 만드는 인덱스

 

*인덱스를 생성하는 것이 좋은 컬럼은??

1) 테이블의 행의 수가 많을 때

2) WHERE문에 해당 컬럼이 많이 사용 될 때

3) 검색 결과가 전체 데이터의 2~4%일때

4) join에서 자주 사용되는 컬럼이나 null을 포함하는 컬럼이 많은 경우


 B-tree원리

 -주어진 값을 리스트의 중간점에 있는 값과 비교한다. 만약 그 값이 더 크면 리스트의 아래쪽  반을 버린다. 만약 그값이 더 작다면 위쪽 반을 버린다.

 -하나의 값이 발견될 때 까지 또는 리스트가 끝날 때까지 그와 같은 작업을 다른 반쪽에도 반복한다.

 

*다음과 같은 경우에는 인덱스 생성이 불필요 하다.

1)테이블이 작을 때

2)테이블이 자주 갱신될 때

 

인덱스문법

SQL> CREATE [BITMAP/UNIQUE/NON-UNIQUE/] INDEX emp_deptno_indx

ON emp(deptno);

 

비트맵 인덱스

비트맵 인덱스는 각 컬럼에 대해 적은 개수의 독특한 값이 있을 경우에 사용하는 것이 좋다.(ex 남,여의 값을 가지는 성별 컬럼)

비트맵 인덱스는 B-tree 인덱스가 사용되지 않을 경우에서 성능을 향상 시킨다.

테이블이 매우 크거나 수정/변경이 잘 일어나지 않는 경우에 사용할수 있다.

 

UNIQUE 인덱스

UNIQUE 인덱스는 인덱스를 사용한 컬럼의 중복값들을 포함하지 않고 사용할 수 있는 장점이 있다.

프라이머리키 와 UNIQUE 제약 조건시 생성되는 인덱스는 UNIQUE 인덱스이다.

 

NON-UNIQUE 인덱스

NON-UNIQUE 인덱스는 인덱스를 사용한 컬럼에 중복 데이터 값을 가질수 있다.

 

결합 인덱스

복수개의 컬럼에 생성할 수 있으며 복수키 인덱스가 가질수 있는 최대 컬럼값은 16개 이다.

SQL> CREATE UNIQUE INDEX emp_empno_ename_indx

ON emp(empno, ename);


인덱스의 삭제

인덱스의 구조는 테이블과 독립적이므로 인덱스의 삭제는 테이블의 데이터에는 아무런 영향도 미치지 않는다.

인덱스를 삭제하려면 인덱스의 소유자 이거나 DROP ANY INDEX권한을 가지고 있어야 한다.

인덱스는 ALTER를 할 수 없다.

SQL> DROP INDEX emp_empno_ename_indx;


인덱스 데이터사전

인덱스에 대한 정보는 USER_INDEXES 뷰 또는 USER_IND_COLUMNS뷰를 통해 검색할 수 있다.

 

SQL> SELECT index_name, index_type

FROM USER_INDEXES

WHERE table_name='EMP';

 

INDEX_NAME              INDEX_TYPE

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

EMP_DEPTNO_INDX         BITMAP

EMP_PK_EMPNO            NORMAL



 

 

(2)VIEW 테이블

VIEW?

- 뷰는 하나의 가상테이블이다

- 뷰는 실제 데이터가 저장되지는 않지만 데이터를 관리 할 수 있다.

- 뷰는 복잡한 쿼리를 통해 얻을 수 있는 결과를 간단한 쿼리로 얻을 수 있게 한다.

- 한 개의 뷰로 여러 테이블에 대한 데이터를 검색 할 수 있다.

- 특정 평가 기준에 따른 사용자 별로 다른 데이터를 액세스할 수 있도록 한다.

 

뷰의 제한 조건

- 테이블에 NOT NULL로 만든 컬럼들이 뷰에 다 포함이 되 있어야 한다.

- ROWID, ROWNUM, NEXTVAL, CURRVAL등과 같은 가상컬럼에 대한 참조를 포함하고 있는 뷰에는 어떤 데이터로 INSERT 할 수 없다.

-WITH READ ONLY옵션을 설정한 뷰도 데이터를 갱신 할 수 없다.

-- 아래 뷰는 읽기만 가능하다.

SQL> CREATE OR REPLACE VIEW read_only

AS

SELECT empno, ename, deptno

FROM  emp

WHERE deptno = 10

WITH READ ONLY;

 

-WITH CHECK OPTION을 설정한 뷰는 뷰의 조건에 해당되는 데이터만 삽입, 삭제, 수정을 할 수 있다.

-----------부서 번호 10의 데이터를 조회 하는 뷰-------------

SQL> CREATE OR REPLACE VIEW check_option

AS

SELECT empno, ename, deptno

FROM  emp

WHERE deptno = 10

WITH CHECK OPTION ;

 

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

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의 조건에 위배 됩니다

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

 

뷰 문법

CREATE [OR REPLACE] [FORCE | NOFORCE] VIEW view_name

AS subquery

[WITH CHECK OPTION [CONSTRAINT 제약조건]]

[WITH READ ONLY]

 

-- 뷰 생성    

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

 

(3)시퀀스의 이해 및 활용

시퀀스란?

-유일한 값을 생성해주는 오라클 객체이다

-시퀀스를 생성하면 기본키와 같이 순차적으로 증가하는 컬럼을 자동적으로 생성 할 수 있다.

보통 PRIMARY KEY 값을 생성하기 위해 사용한다.

-메모리에 Cache되었을 대 시퀀스값의 액세스 효율이 증가한다.

-시퀀스는 테이블과는 독립적으로 저장되고 생성된다.

 

시퀀스 생성

CREATE SEQUENCE sequence_name

     [START WITH n] - 시퀀스의 시작 값을 시정한다

     [INCREMENT BY n]  - 시퀀스의 증가 값을 지정한다

     [MAXVALUE n | NOMAXVALUE] - 시퀀스 최대값

     [MINVALUE n | NOMINVALUE] - 시퀀스 최소값

     [CYCLE | NOCYCLE] - 최대값 도달시 순환 여부

     [CACHE | NOCACHE] - CACHE 여부, 원하는 숫자만큼 미리 만들어 Shared Pool의      Library Cache에 상주시킨다.

시퀀스 수정 ALTER SEQUENCE sequence_name ...

시퀀스 삭제 DROP SEQUENCE seq_empno...


시퀀스 데이터 딕셔너리

USER_TABLES

USER_VIEWS

USER_SEQUENCE


CURRVAL 과 NEXTVAL

1)CURRVAL: 현재 값을 반환합니다.

2)NEXTVAL: 현재 시퀀스값의 다음 값을 반환합니다.


CURRVAL, NEXTVAL 사용하기

1)NEXTVAL로 새로운 값을 생성한다.

SELECT DEPT_DEPTNO_SEQ.NEXTVAL FROM DUAL;

NEXTVAL

-----------

10 


2)시퀀스의 현재값을 알아내기 위해서 CURRVAL을 사용한다

SELECT DEPT_DEPTNO_SEQ.CURRBAL FROM DUAL;

CURRVAL

-----------

10 



3)DEPT_DEPTNO_SEQ.CURRVAL을 조회할 때마다 시퀀스의 값이 계속 증가합니다. 증가치를 10으로 지정하였으므로 실행 할때마다 시퀀스 값은 10씩 증가합니다.

SELECT DEPT_DEPTNO_SEQ.CURRVAL FROM DUAL;

NEXTVAL

-----------

10 

SELECT DEPT_DEPTNO_SEQ.CURRVAL FROM DUAL;
20
SELECT DEPT_DEPTNO_SEQ.CURRVAL FROM DUAL;
30...

 

(4)SYNONYM(동의어)  

동의어를 사용하는 이유

1)데이터베이스의 투명성을 제공하기 위해서, 다른 유저의 객체 참조할 때 사용

2)객체의 긴 이름을 사용하기 편한 짧은 이름으로 해서 SQL코딩을 단순화

3)객체를 참조하는 사용자의 오브젝트를 감출 수 있기 때문에 보안을 유지할 수 있다.

 

종류

1)Private Synonym: 전용 시노님은 특정 사용자만 이용할 수 있다.

2)Public Synonym: 공용 기노님은 공용 사용자 그룹이 소유하며 그 데이터베이스에 있는 모든 사용자가 공유한다.



[출처]http://www.gurubee.net/oracle/sql

반응형
반응형

I. 그룹함수.

-SUM(합),AVG(평균),COUNT(총개수),MAX(최대값),MIN(최소값),STEDDEV(표준편차),VARIANCE

(분산)

-SELECT문에 그룹 함수를 사용하는 경우, 그룹 함수를 적용하지 않은 단순 컬럼은 올 수 없다.


GROUP BY

-어떤 컬럼 값을 기준으로 그룹함수를 적용해 줄지 기술해 주어야 할 경우에는 SELECT 문에 GROUP BY 절을 추가하되 GROUP BY 절 뒤에 해당 컬럼을 기술한다.

-GROUP BY절 뒤에 별칭 불가, 반드시 컬럼명 기술

EX)SELECT DEPTNO, AVG(SAL) : GROUP BY 절을 사용하지 않으면 개수가 매치되지 않음

   FROM EMP

   GROUP BY DEPTNO;


HAVING 조건

-WHERE은 특정 조건에 부합하는 자료만을 검색할 때 사용하는 절, 반면 HAVING절은 그룹 함수 사용 시 그룹 함수를 적용해서 나온 결과값 중에서 원하는 조건에 부합하는 자료만 산출할 때 사용하는 절

EX)부서의 최대값과 최소값을 구하되 최대 급여가 2900이상인 부서만 출력합니다.

부서:DEPTNO

급여:SAL

SELECT DEPTNO, MAX(SAL), MIN(SAL)

FROM EMP

GROUBY DEPTNO

HAVING MAX(SQL) > 2900;


II. 조인

- 한개 이상의 테이블에서 데이터를 조회하기 위해서 사용되는 것을 조인이라한다.

조인의 필요성: 데이터베이스에서는 데이터가 중복되면 여러 가지 이상 현상이 발생하기 때문에 데이터가 중복되지 않도록 하기 위해서 2개 이상의 테이블로 나누어서 정보를 저장해 놓는다. 하지만, 원하는 정보를 얻어오려면 여러 개의 테이블을 조인해야 한다.


 Cross Join

- 2개 이상의 테이블이 조인될 때 where절에 의해 공통되는 컬럼에 의한 결합이 발생하지 않는 경우를 의미한다. 그렇기에 테이블 전체 해의 전체 컬럼이 조인되는 경우입니다.

EX)다음은 Cross Join으로 SELECT문의 FROM절에 사원(EMP) 테이블과 부서(DEPT) 테이블을 콤마로 연결하여 연속적으로 기술하는 방법입니다.

Select *

From emp, dept;


 Equi Join

- 가장 많이 사용하는 조인 방법으로, 조인 대상이 되는 두 테이블에서 공통적으로 존재하는 컬럼의 값이 일치되는 행을 연결하여 결과를 생성하는 방법입니다.

-사원(EMP) 테이블과 부서(DEPT) 테이블의 공통 컬럼인 DEPTNO의 값이 일치되는 조건을 WHERE절에 기술하여 사용하였습니다. 두 테이블을 조인하려면 일치되는 공통 컬럼을 사용해야 합니다.컬럼이 이름이 같으면 혼동이 오기 때문에 컬럼 이름 앞에 테이블 이름을 기술합니다.

EX)다음은 사원 정보를출력할 때 각 사원이 소속된 부서의 상세 정보를 출력하기 위해 두 개의 테이블을 조인한 예입니다.

SELECT * : 컬럼이 동일한 경우에는 .Table 또는 .별칭 사용

FROM EMP, DEPT

WHERE EMP.DETNO = DEPT.DEPTNO;

 

 Non-Equi Join

- 조인 조건의 특정 범위 내에 있는지를 조사하기 위해 where절의 조인 조건으로 = 연산자와 비교 연산자를 사용합니다.

 

EQUI JOIN과 NON-EQUI JOIN의 차이점

•  EQUI JOIN : JOIN조건에 서로 다른 조건(=)을 가진 데이터를 JOIN해서 가져오는 방법

•  NON-EQUI JOIN : 같은 조건이 아닌 크거나 작거나 하는 경우 JOIN을 수행하는 방법


 Self Join

- 조인은 두개 이상의 서로 다른 테이블을 연결하기도 하지만 하나의 테이블 내에서 조인을 해야만 자료를 얻을 수 있는 경우도 있습니다. Self Join이란 말 그대로 자기 자신과 조인을 맺는 것

-별칭을 지정해서 두테이블이 존재하는 것처럼 사용

Ex)select employee.ename, manager.ename

   From emp employee, emp manager

   Where employee.mgr = manager.empno;


 Outer Join

- 2개 이상의테이블이 조인될 때 어느 한쪽의 테이블에는 해당하는 데이터가 존재하는데 다른 쪽 테이블에는 데이터가 존재하지 않는 경우 그 데이터는 출력되지 않는 문제를 해결하기 위해서 사용되는 조인 기법


 ANSI Join

1)ANSI Cross Join: ANSI구문을 사용하면 쉼표(,)없이 CROSS JOIN이라고 원하는 조인 타입을 명확하게 지정합니다.

2)ANSI inner Join: 동일 컬럼을 기준으로 조인하기 위한 EQUI JOIN을 ANSI조인에서는 FROM 다음에 INNER JOIN 이란 단어를사용하여 조인할 테이블 이름을 명시하고 ON절을 사용하여 조인 조건을 명시합니다. ‘=’(equal) 비교를 통해 같은 값을 가지는 로우를 연결하여 결과는 구하는 형태.

Ex)SELECT ENAME, DNAME

   FROM EMP INNER JOIN DEPT

   ON EMP.DEPTNO=DEPT.DEPTNO;

-ON : 조인 조건이나 논리 연상, 서브쿼리를 지정할 수 있다.

-USING절 : “ON EMP.DEPTNO = DEPT.DEPTNO”와 같이 작성하는 대신 “USING (DEPTNO)”라고 작성할 수 있다. USING 절은 두 테이블의 컬럼값이 동일할 때 조인되도록 지정한다.

주의할점: 테이블명을 명시할수도 별칭을 사용할 수도 없다.

3)Natural Join: USING이나 ON절보다

Ex)SELECT ENAME, DNAME

FROM EMP NATURAL JOIN DEPT;

 

4)AINSI Outer Join

-LEFT,RIGHT,FULL 3가지를 지원

-Outer Join은 어느 한쪽 테이블에는 해당하는 데이터가 존재하는데 다른쪽 테이블에는 데이터가 존재하지 않는 경우 그 데이터가 출력되지 않는 문제점을 해결하기 위해 사용하는 조인 기법.

 

III. 서브쿼리

- 서브쿼리란 SELECT문장 절 안에 포함된 또 하나의 SELECT문장. 서브쿼리를 포함하고 있는 쿼리문을 메인쿼리, 포함된 또 하나의 쿼리를 서브쿼리라 한다.

1)단일행 서브 쿼리는 수행 결과가 오직 하나의 로우(행, ROW)만을 반환하는 서브쿼리를 갖는 것

2)다중행 서브 쿼리는 서브 쿼리에서 반환되는 결과가 하나 이상의 행일때 사용하는 서브쿼리입니다. 종류: IN(포함), ANY=SOME(하나 이상 일치), ALL(모든값 일치), EXIST(하나라도 존재,참)

 


반응형

+ Recent posts