'ORACLE'에 해당되는 글 125건

  1. 2007.01.12 sqlplus 사용을 고급화하기.
  2. 2006.12.18 오라클 Role 관리
  3. 2006.12.15 테이블의 필드명 변경하기...
  4. 2006.09.08 테이블 스페이스의 정보 확인
  5. 2006.09.08 ORA 1688 에러발생
  6. 2006.09.07 ORA-01502 1
  7. 2006.08.30 sqlplus 2
  8. 2006.08.30 sqlplus 정리
posted by 구름너머 2007. 1. 12. 19:20
Re: oracle 9i에서 sqlplus질문좀 할께요...
게시일: Jan 7, 2007 7:02 AM Zenos님의 질문에 답변 Zenos 님의 질문에 답변

sqlplus 에 접속하면 $ORACLE_HOME/sqlplus/admin/glogin.sql 에서
설정된 환경변수들을 가져오지요...
컬럼값은 default로 어떻고 pages는 어떻게 하고
만약 default로 설정된 값을 수정하고 싶다면
glogin.sql을 수정하시면 됩니다.


1. 한 라인에 출력되는 수 조정하기
SQL> set line 150 ==> 150라인까지 넓게 씁니다. default는 80라인일 겁니다.

2. 페이지 수 조정하기
SQL> set pages 1000 => 출력되는 row수가 glogin.sql에 설정된
14보다 많이 나오면(컬럼이름출력 포함)
다시 컬럼이 어떤 거다 하면서 나오는데 pages를 1000으로 주면
1000개의 row가 출력되고 나서야 아래 컬럼이 모다 라고 나옵니다.

예를들면


SQL> select d.deptno, e.empno, e.ename, d.dname, e.sal from dept d, emp e
2 where d.deptno=e.deptno;



DEPTNO EMPNO ENAME DNAME SAL
---------- ---------- ---------- -------------- ----------
10 7782 CLARK ACCOUNTING 2450
10 7839 KING ACCOUNTING 5000
10 7934 MILLER ACCOUNTING 1300
20 7369 SMITH RESEARCH 800
20 7876 ADAMS RESEARCH 1100
20 7902 FORD RESEARCH 3000
20 7788 SCOTT RESEARCH 3000
20 7566 JONES RESEARCH 2975
30 7499 ALLEN SALES 1600
30 7698 BLAKE SALES 2850
30 7654 MARTIN SALES 1250

DEPTNO EMPNO ENAME DNAME SAL
---------- ---------- ---------- -------------- ----------
30 7900 JAMES SALES 950
30 7844 TURNER SALES 1500
30 7521 WARD SALES 1250

14 rows selected.


SQL> set pages 1000
SQL> /

DEPTNO EMPNO ENAME DNAME SAL
---------- ---------- ---------- -------------- ----------
10 7782 CLARK ACCOUNTING 2450
10 7839 KING ACCOUNTING 5000
10 7934 MILLER ACCOUNTING 1300
20 7369 SMITH RESEARCH 800
20 7876 ADAMS RESEARCH 1100
20 7902 FORD RESEARCH 3000
20 7788 SCOTT RESEARCH 3000
20 7566 JONES RESEARCH 2975
30 7499 ALLEN SALES 1600
30 7698 BLAKE SALES 2850
30 7654 MARTIN SALES 1250
30 7900 JAMES SALES 950
30 7844 TURNER SALES 1500
30 7521 WARD SALES 1250

14 rows selected.

3. 컬럼크기 조정하기
1) 숫자값일 경우
col 컬럼이름 format 999,999,999,999 => 천단위로 콤마를 찍어서 표현
col 컬럼이름 format 999999999999 ==> 출력하는 단위가 클 경우에 ###으로
표시되곤 하는데 이것을 방지해줍니다.


2) 문자값일 경우
col 컬럼이름 format a40 => 40개 글자의 공간에 찍힙니다.


테스트를 해보면..
v$datafile의 name은 너무 길어서 한 라인이 넘어가버리죠.

SQL> select name, status from v$datafile;

NAME
--------------------------------------------------------------------------------
STATUS
-------
/data/oradata/PROD/system01.dbf
SYSTEM

/data/oradata/PROD/undotbs01.dbf
ONLINE

/data/oradata/PROD/user01.dbf
ONLINE


NAME
--------------------------------------------------------------------------------
STATUS
-------
/data/oradata/PROD/test.dbf
ONLINE


SQL> col name format a40
아래처럼 40글자 공간에만 나옵니다.
SQL> /

NAME STATUS
---------------------------------------- -------
/data/oradata/PROD/system01.dbf SYSTEM
/data/oradata/PROD/undotbs01.dbf ONLINE
/data/oradata/PROD/user01.dbf ONLINE
/data/oradata/PROD/test.dbf ONLINE


자세한 것은
http://intranet.warevalley.com/manual/Oracle9iR2OnlineManual/server.920/a90843/toc.htm#765270

을 참고하세요.


추가적으로.. SQL> set autot on 을 했을 경우에 쿼리결과값과 쿼리수행에 대한
통계정보 그리고 execution plan이 나옵니다.
그런데 execution plan이 라인이 내려가고 보기가 어렵죠.
아래처럼 하면 넓게 보여서 쉽습니다.

SQL> select d.deptno, e.empno, e.ename, d.dname, e.sal from dept d, emp e
2 where d.deptno=e.deptno;


Execution Plan
----------------------------------------------------------
0 SELECT STATEMENT Optimizer=CHOOSE (Cost=9 Card=409 Bytes=241
31)

1 0 MERGE JOIN (Cost=9 Card=409 Bytes=24131)
2 1 TABLE ACCESS (BY INDEX ROWID) OF 'DEPT' (Cost=2 Card=4 B
ytes=52)

3 2 INDEX (FULL SCAN) OF 'UK_DEPT' (NON-UNIQUE) (Cost=1 Ca
rd=4)

4 1 SORT (JOIN) (Cost=7 Card=409 Bytes=18814)
5 4 TABLE ACCESS (FULL) OF 'EMP' (Cost=2 Card=409 Bytes=18
814)
....


이제 execution plan이 나오는 것을 조정해봅니다.

#plan table 조정하기

COLUMN id_plus_exp FORMAT 990 HEADING i
COLUMN parent_id_plus_exp FORMAT 990 HEADING p
COLUMN object_node_plus_exp FORMAT a8
COLUMN other_tag_plus_exp FORMAT a29
COLUMN other_plus_exp FORMAT a44
COLUMN plan_plus_exp FORMAT a100
SET linesize 132

아래처럼 execution plan이 보기쉽게 나오죠.
DB2 UDB는 SUBSTR를 사용해야만 되는데 sqlplus 는 정말 강력해서
좋은 기능들이 많아요. 왜 DBA들이 sqlplus만 사용하는지 그 강력한
기능을 메뉴얼을 보시면 알게 될 겁니다.

Execution Plan
----------------------------------------------------------
0 SELECT STATEMENT Optimizer=CHOOSE (Cost=9 Card=409 Bytes=24131)
1 0 MERGE JOIN (Cost=9 Card=409 Bytes=24131)
2 1 TABLE ACCESS (BY INDEX ROWID) OF 'DEPT' (Cost=2 Card=4 Bytes=52)
3 2 INDEX (FULL SCAN) OF 'UK_DEPT' (NON-UNIQUE) (Cost=1 Card=4)
4 1 SORT (JOIN) (Cost=7 Card=409 Bytes=18814)
5 4 TABLE ACCESS (FULL) OF 'EMP' (Cost=2 Card=409 Bytes=18814)

'ORACLE' 카테고리의 다른 글

CORE DUMP 해결방법  (0) 2007.03.06
Pro*C란  (11) 2007.03.06
오라클 Role 관리  (0) 2006.12.18
테이블의 필드명 변경하기...  (0) 2006.12.15
테이블 스페이스의 정보 확인  (0) 2006.09.08
posted by 구름너머 2006. 12. 18. 14:43
오라클 Role 관리 | Oracle2006/07/27 11:31
http://blog.naver.com/mirmir96/70006629275

롤 관리


■ 목적

. 롤 생성과 수정

. 롤의 가용성 제어

. 롤 제거

. 미리 정의된 롤 사용

. 데이터 딕셔너리의 롤 정보 출력


오라클의 롤을 이용하면 권한 관리가 쉽고 간편해 집니다. 롤은 사용자나 다른 롤에

부여되는 관련 권한들의 명명된 그룹입니다. 롤은 데이터베이스 내에서 권한을

관리하기 쉽도록 설계되었습니다.


롤의 특성

. 시스템 권한을 부여하고 철회할때 사용되는 것과 동일한 명령으로 사용자에게 부여하고

철회할 수 있습니다.

. 롤 자신(간접적으로도 불가능)을 제외한 모든 사용자와 롤에게 부여할 수 있습니다.

. 시스템 권한과 오브젝트 권한으로 이루어집니다.

. 각 사용자가 부여받은 롤을 enable하거나 disable할 수 있습니다.

. 암호를 요구하도록 할 수도 있습니다.

. 각 롤 이름은 기존의 사용자 이름과 롤 이름과는 다른 유일한 것이어야 합니다.

. 누군가가 공유하는 것도 아니고 어느 스키마에 속하는 것도 아닙니다.

. 데이터 딕셔너리에 설명되어져 있습니다.


■ 롤의 장점

권한 부여 작업 감소

동적 권한 관리

권한의 선택적 사용

OS를 통해 부여

연쇄적으로 철회되지 않음

연쇄적으로 철회되지 않음

향상된 성능

권한부여 작업 감소

롤을 사용하면 권한 관리가 간단해 집니다.

일련의 권한을 여러 사용자에게 부여하기 보다는 권한들을 하나의 롤에 부여한 후

그 롤을 각 사용자에게 부여하십시오

동적 권한 관리

롤과 관련된 권한이 수정되면 해단 롤을 부여받은 모든 사용자는

자동적으로 죽시 수정된 권한을 갖게 됩니다.

권한의 선택적 사용

롤은 enable 되거나 disable되어 임시로 권한을 on,off할 수 있습니다.

롤을 enable하는 것은 사용자가 그 롤을 부여받았는지 검증하는데도 사용될 수 있습니다.

OS를 통해 부여

운영 체제 명령이나 유틸리티가 데이터베이스의 사용자에게 롤을 할당하는데 사용될수

있습니다.


■ 연쇄적으로 철회하지 않음

연쇄 철회를 발생시키지 않고 오브젝트 권한을 철회할 수 있습니다.

향상된 성능

롤을 disable하여 실행 중 검증해야 할 권한을 줄일 수 있습니다.

롤을 사용하면 데이타 딕셔너리에 저장된 부여에 대한 정보가 줄어들게 됩니다.


■ 롤생성

CREATE ROLE sales_clerk;

CREATE ROLE hr_clerk

IDENTIFIED by bonus;

CREATE ROLE hr_manager

IDENTIFIED EXTERNALLY;

구문

롤을 생성하려면 다음 명령을 사용하십시오

CREATE ROLE role [NOT IDENTIFIED | IDENTIFIED

{BY password | EXTERNALLY } ]

구문에서

role 롤 이름

NOT IDENTIFIED 롤을 enable할때 아무런 검증도 필요하지 않음을 의미

BY password 롤을 enable할때 사용자가 입력해야만 하는 암호 제공

EXTERNALLY 사용자가 롤을 enable하기전에 외부 서비스(운영 체제나 협력

업체서비스 같은)에 의해 인증을 받아햐만 함을 의미


■ 주 CREATE ROLE IDENTIFIED GLOBALLY 명령은 Oracle Security Server를 통해 롤 검증이 이루어져만 하도록 지정합니다.


■ 미리 정의된 롤 사용


롤 명 설 명

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

CONNECT | 이전 버전과의 호환을 위해서 제공됩니다

RESOURCE | 이전 버전과의 호환을 위해서 제공됩니다

DBA | 모든 시스템 권한과 WITH ADMIN OPTION

EXP_FULL_DATABASE | DB를 익스포트할 권한

IMP_FULL_DATABASE | DB를 임포트할 권한

DELETE_CATALOG_ROLE | DB 테이블에 대한 DELETE 권한

EXECUTE_CATALOG_ROLE | DD 패키지에 대한 EXECUTE권한

SELECT_CATALOG_ROLE | DD 테이블에 대한 SELECT 권한

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


위의 롤들은 오라클 데이터베이스에 자동적으로 정의됩니다. Connect, Resouse롤은 오라클 이전 버전과의 역 호환을 위해 제공되며 오라클 데이터베이스의 다른 롤과 같은 방법으로 수정할 수 있습니다.

EXP_FULL_DATABASEIMP_FULL_DATABASE 롤이 임포트와 익스포트 유틸리티를 사용할 때의 편의를 위해 제공됩니다

DELETE_CATALOG_ROLE, EXECUTE_CARLOG_ROLE, 그리고 SELECT_CATALOG_ROLE

롤은 데이터 딕셔너리 뷰와 패키지에의접근을 위해 제공됩니다. 이들 롤은 DBA 롤은 가지고 있지 않지만 데이터 딕셔너리의 뷰와 테이블에 접근해야만 하는 사용자들에게 부여될 수 있습니다.

다른 특별한 롤들 오라클은 또한 데이터베이스를 관리할 수 있도록 허가해주는 롤도 생성합니다. 여러 운영체제에서 이러한 롤들은 OSOPER 와OSDBA라 불리웁니다. 이름은 운영 체제에 따라 다를 수 있습니다.


오라클 데이터베이스를 생성하면 기본적으로 몇 가지의 Role이 생성 됩니다.


DBA_ROLES데이터 사전을 통하여 미리 정의된 Role을 조회 할 수 있습니다.


SQL>SELECT * FROM DBA_ROLES;


ROLE PASSWORD

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

CONNECT NO

RESOURCE NO

DBA NO

SELECT_CATALOG_ROLE NO

EXECUTE_CATALOG_ROLE NO

DELETE_CATALOG_ROLE NO

EXP_FULL_DATABASE NO

IMP_FULL_DATABASE NO

....

이 외에도 많이 ROLE이 존재합니다.

그 중에서 가장 많이 사용하는 3가지만 설명 하겠습니다.





CONNECT


- 오라클에 접속 할 수 있는 세션 생성 및 테이블을 생성하거나 조회 할 수 있는 가장 일반적인 권한들로 이루어져 있습니다.


- CONNECT Role이 없으면 유저를 생성하고서도 Oracle에 접속 할 수가 없습니다.


- 아래의 명령어로 CONNECT Role이 어떤 권한으로 이루어져 있는지 확인 할 수 있습니다.



SQL>SELECT grantee, privilege

FROM DBA_SYS_PRIVS

WHERE grantee = 'CONNECT';


GRANTEE PRIVILEGE

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

CONNECT ALTER SESSION

CONNECT CREATE CLUSTER

CONNECT CREATE DATABASE LINK

CONNECT CREATE SEQUENCE

CONNECT CREATE SESSION

CONNECT CREATE SYNONYM

CONNECT CREATE TABLE

CONNECT CREATE VIEW




RESOURCE


- Store Procedure나 Trigger와 같은 PL/SQL을 사용할 수 있는 권한 들로 이루어져 있습니다.


- PL/SQL을 사용하려면 RESOURCE Role을 부여해야 합니다.


- 유저를 생성하면 일반적으로 CONNECT, RESOURCE롤을 부여 합니다.


SQL>SELECT grantee, privilege

FROM DBA_SYS_PRIVS

WHERE grantee = 'RESOURCE';




DBA


- 모든 시스템 권한이 부여된 Role입니다.


- DBA Role은 데이터베이스 관리자에게만 부여해야 합니다.


■ 다른 롤은 데이터베이스와 함께 제공되는 SQL 스크립트로 정의됩니다. 예를 들어

AQ_ADMINSRTATOR_ROLE 과 AQ_USER_ROLE 은 dbmsaqsd.sql의 스크립트로 생성됩니다. 이들 롤은 Advanced Queuing기능과 함께 사용됩니다.

-미리 정의된 롤에만 의지할 필요는 없습니다. 오히려 데이터베이스 보안을 위해 자신만의

고유 롤을 설계하도록 권장하는 바입니다. 미리 정의된 롤은 앞으로의 오라클 버전에서는

자동적으로 생성되지 않을 수 도 있습니다.

-Solaris 같은 플랫폼에서는 RESOUCE 롤을 부여받은 사용자는 UNLIMITED

TABLESPACE 권한이 롤에 할당되어 있지 않더라도 명시적으로 함께 받게 됩니다.


■ 롤 수정

ALTER ROLE sales_clerk

IDENTIFIED BY commission;

ALTER ROLE hr_clerk

IDENTIFIED EXTERNALLY;

ALTER ROLE hr_manager

NOT IDENTIFIED;

롤은 그 인증 방식을 변경하기 위해서만 수정될 수 있습니다.

구문

룰을 수정하려면 다음 명령을 사용하십시요.

ALTER ROLE role (NOT IDENTIFIED) | IDENTIFIED

(BY password | externally));

구문에서:

role 롤의 이름

NOT IDENTIFIED 롤을 enable할 때 검증이 필요없음을 의미

IDENTIFIED 롤을 enable할 때 검증이 필요함을 의미

BY password 를을 enable할 때 사용될 암호 제공

EXTERNALLY 롤을 enable하기 전에 사용자가 외부 서비스

(운영체제나 협력 업체(third-party)

서비스)에 의해 허가를 받아야만 함을 의미


■ 롤 지정

GRANT sales_clerd TO scott;

GRANT hr_clerk,

TO hr_manager;

GRANT hr_manager TO scott

WITH ADMIN OPTION;

구문

사용자에게 롤을 부여하려면 사용자에게 시스템 권한을 부여할 때 사용했던 것과

동일한 구문의 명령을 사용하십시요.

GRANT role[ , role] . . .

TO {user | role | PUBLIC}

[, {user | role | PUBLIC}]

[WITH ADMIN OPTION]

구문에서:

role 부여될 롤, 또는 롤을 부여받을 롤

user 롤을 받을 사용자

role 롤을 받을 롤

PUBLIC 모든 사용자에게 롤을 부여

WITH ADMIN OPTION 부여받은 롤을 다른 사용자나 롤에게 부여하는 것을

가능하게 합니다.

(이 옵션으로 롤을 부여하면 롤을 받은 사용자는 다른

사용자에게 받은 롤을 부여하거나 철회할 수 있으며

롤을 수정하거나 삭제할 수 있습니다.)


■ 롤을 생성한 사용자는 암시적으로 ADMIN OPTION과 함께 생성한 롤이 지정된 것입니다. ADMIN OPTION을 가진 롤을 부여받지 못한 사용자가 다른 사용자에게 롤을 부여하거나 철회하려면 GRANT ANY ROLE 시스템 권한이 필요합니다.


■ 기본 롤 설정

ALTER USER SCOTT

DEFAULT ROLE hr_clerk, sales_clerk;

ALTER USER scott DEFAULT ROLE ALL;

ALTER USER scott DEFAULT ROLE ALL

EXCEPT hr_clerk;

ALTER USER scott DEFAULT ROLE NONE;

사용자는 많은 롤을 할당받을 수 있습니다. default role은 사용자가 로그인 할 때 자동적으로 enable 되는 할당된 롤의 부분 집합입니다. 디폴트로 사용자에게 할당된 모든 롤이 로그인 시 enable됩니다.

ALTER USER 명령으로 사용자에 대한 기본 롤을 제한하십시요.

구문

사용자에게 기본 롤을 할당하려면 다음 구문을 사용하십시요.

ALTER USER user DEFAULT ROLE

{role, [,role]...|ALL [EXCEPT role [,role]...] | NONE}

구문에서:

user 롤을 부여받을 사용자 이름

role 사용자에게 기본 롤이 될 롤

ALL 사용자에게 부여된 롤 중 EXCEPT절에 나열된것을 제외한 모든

롤을 기본 롤로 만듭니다.(기본값입니다.)

EXCEPT 기본 롤에 포함되지 않는 롤을 나타냅니다.


NONE 기본 롤로 아무것도 부여하지 않습니다. (로그인 시 사용자가

갖는 권한은 사용자에게 직접 할당된 권한 뿐입니다.)

기본 롤이 되려면 반드시 사전에 부여되어 있어야 합니다. 따라서 CREATE USER 명령으로

기본 암호로 인증되는 롤의 경우 기본 롤로 만들 때에는 암호가 필요하지 않습니다.

0-(17~18) ROLE Enable과 Disable

. 사용자로부터 임시로 롤을 철회하려면 그롤을 disable하십시요.

. 임시로 롤을 부여하려면 그 롤을 enable하십시요.

. SET ROLE 명령은 롤을 enable하고 disable합니다.

. 로그인 시 기본 롤이 enable됩니다.

. 롤을 enable할 때 암호가 필요할 수도 있습니다.

롤에 관련된 권한을 임시로 활성화시키려면 롤을 enable하거나 disable

하십시오. 롤을 enable하려면 먼저 해당 롤이 사용자에게 부여되어 있어야 합니다.

롤이 enable되면 사용자는 그 롤에 부여된 권한을 사용할 수 있습니다. 롤이 disable되면

권한이 사용자에게 직접 부여되거나 그 권한을 사용 가능하게 해주는 다른 롤이

enable되지 않는 한 사용자는 disable된 롤에 관련된 권한을 사용할 수 없습니다.

세션동안 여러 롤들이 enable될수있습니다.

세션을 시작하면 다시 기본 롤들만 enable되어 있게 됩니다.

.롤이 enable 되도록 지정

SET ROLE 명령과 DBMS_SESSION.SET_ROLE 프로시저는 명령에 포함된 모든 롤을 enable 하며 포함되지 않은 롤은 모두 disable합니다. 롤은 PL/SQL 명령을 허용하는 어떤 도구나 프로그램에서 enable될 수 있습니다. 세션을 시작하면 다시 기본 롤들만 enable되어 있게 됩니다.

ALTER USER...DEFAULT ROLE 명령을 사용하여 사용자가 로그인할 때 어떤 롤이 ebable되게 할 것인지 지정할 수 있습니다. 다른 롤은 모두 disable됩니다.

롤을 enable하는데 암호가 필요할 수도 있습니다. 롤을 enable하려면 암호가 SET ROLE

명령에 포함되어 있어야 합니다.

사용자에게 할당된 기본 롤은 암호가 필요하지 않습니다. 암호가 없는 롤들과 마찬가지로

로그인 시 enable됩니다.


제한사항

롤은 저장 프로시저로부터는 enable될 수 없습니다. 왜냐하면 무엇보다도 이 작업이

프로시저를 호출한 보안 도메인(권한 집합)을 변경할 수도 있기 때문입니다.

그러므로 PL/SQL에서는 롤이 익명의 블록(anonymous block)이나 응용 프로그램

프로시저 (예를 들자면 oracle Forms 프로시저)에서만 enable되고 disable될 수있고

저장 프로시저에서는 안 됩니다.

저장 프로시저가 SET ROLE에 대한 명령을 포함하고 있다면 실행시 다음 에러가 발생될

것입니다.

ORA-06565: cannot execute SET ROLE from with stored procedure

■ ROLE Enable과 Disable: 예

SET ROLE sales_clerk

IDENTIFIED BY commission;

SET ROLE hr_clerk;

SET ROLE ALL EXECPT

sales_clerk;

SET ROLE NONE;


구문

롤을 enable하거나 disable하려면 다음 명령을 사용하십시오.

SET ROLE {role [IDENTIFIED BY PASSWORD]

[, role [IDENTIFIED BY PASSWORD] ] ...

| ALL [EXCEPT role [ , role] ... ]

| NONE }

SET ROLE 명령은 사용자에게 부여된 그 밖의 롤은 turn off 시킵니다.

구문에서 :

role 롤 이름

IDENTIFIED

BY password 롤을 enable할때 필요한 암호 제공

ALL EXCEPT 절에 나열된 롤을 제외한, 현재 사용자에게 부여된 모든 롤을

enable(암호를 가진 롤을 enable할 때는 사용할수 없습니다.)

EXCEPT role enable 하지 않은 롤

NONE 현재세션에서 모든 롤 disable(사용자에게 직접 부여된 권한만 활성

상태가 됩니다.)

EXCEPT 절 없는 ALL옵션은 enable된느 모든 롤이 암호를 갖지 않을 때에만 작동합니다.

■ 사용자에게서 롤 제거

REVOKE sales_clerk FROM scott;

REVOKE hr_manager FROM PUBLIC;

구문

사용자에게서 롤을 철회하려면 시스템 권한을 철회할 때 사용하는 것과 동일한 구문을

사용하십시오.

REVOKE role [, role]...

FROM {user|role|PUBLIC}

[, {user|role|PUBLIC} ]...

구문에서 :

role 철회될 롤, 또는 롤이 철회될 롤

user 롤이 철회될 사용자

PUBLIC 모든 사용자로부터 권한이나 롤 철회

롤제거

구문

데이터베이스로부터 룰을 제거하려면 다음 구문을 사용하십시오.

DROP ROLE role

구문에서:

role 제거할 롤

롤을 삭제할 때 오라클 서버는 삭제할 롤이 부여되었던 모든 사용자와

롤로부터 철회한 후 데이터베이스로부터 제거합니다.

ADMIN OPTION과 함께 삭제할 롤을 부여받았거나 DROP ANY ROLE시스템

권한을 가지고 있어야 롤을 삭제할 수 있습니다.


롤 생성시 지침사항

롤이 임무를 수행하는데 필요한 권한을 포함하고 있기 때문에 이름은 보통 응용 프로그램 작업이나 직무 이름입니다. 위의 예는 롤 이름으로 응용 프로그램 작업과 직무 이름을 모두 사용하고 있습니다.

1. 각 응용 프로그램 작업을 위한 롤을 생성합니다. 응용 프로그램 롤의 이름은 payroll같이 응용 프로그램 작업데 대응됩니다.

2. 응용 프로그램 롤에 작업을 수행하는데 필요한 권한을 할당합니다.

3. 각 유형의 사용자를 위한 롤을 생성합니다. 사용자 롤의 이름은 pay_clerk같이 직무 이름에 대응됩니다.

4. 사용자의 롤을 개개의 권한이 아닌 응용 프로그램 롤을 부여합니다.

5. 사용자에게 사용자 롤과 응용 프로그램 롤을 부여합니다.

응용 프로그램을 수정한 결과 payroll작업을 수행하기 위해 새로운 권한이 필요하다면 DBA는 새 권한을 응용 프로그램 롤,PATROLL에 할당하기만 하면 됩니다. 현재 이 작업을 수행하고 있는 사용자는 새 권한을 받게 될 것입니다.


암호와 기본 롤을 사용할 때 지침 사항

암호사용

. 롤을 enable할 때 암호는 추가 레벨의 보안을 제공합니다. 응용 프로그램은 수표를 발행하는데 필요한 PAY_CLERK롤을 enable할 때 사용자가 암호를 입력하도록 요구할 수도 있습니다.

. 암호는 롤이 응용 르로그램을 통해서만 enable되도록 합니다. 이 기술은 위의 예에 나타나 있습니다.

- DBA가 사용자에게 두 롤 PAY_CLERK와 PAY_CLERK_RO를 부여했습니다.

- PAY_CLERK는 payroll clerk 작업을 수행하는데 필요한 모든 권한을 부여 받았습니다.

- PAY_CLERK_RO(RO는 읽기 전용(read only)를 의미)는 payroll clerk 작업을 수행하는데 필요한 테이블 예의 SELECT권한을 부여 받았습니다.

- 사용자는 질의를 수행하기 위해 SQL*Plus에 로그인 할 수 있습니다.

하지만 PAY_CLERK이 기본 롤이 아니고 PAY_CLERK의 암호를 알지 못하므로 데이터를 수정할 수는 없습니다.

- 사용자가 payroll응용 프로그램에 로그인할 때 응용 프로그램은 암호를 제공하여 PAY_CLERK을 enable 합니다. 암호는 프로그램 내에 코당 되어 있어 사용자가 암호를 입력하지 않습니다.


롤 정보 출력

많은 데이터 딕셔너리 뷰가 사용자와 롤에 부여된 권한에 대한 정보를 가지고 있습니다.

SVRMGR> SELECT role, password_required FROM dba_roles;

ROLE PASSWORD

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

CONNECT NO

RESOURCE NO

DBA NO

AQ_USER_ROLE NO

SELECT_CATALOG_ROLE NO

EXECUTE_CATALOG_ROLE NO

롤 관리


■ 목적

. 롤 생성과 수정

. 롤의 가용성 제어

. 롤 제거

. 미리 정의된 롤 사용

. 데이터 딕셔너리의 롤 정보 출력


오라클의 롤을 이용하면 권한 관리가 쉽고 간편해 집니다. 롤은 사용자나 다른 롤에

부여되는 관련 권한들의 명명된 그룹입니다. 롤은 데이터베이스 내에서 권한을

관리하기 쉽도록 설계되었습니다.


롤의 특성

. 시스템 권한을 부여하고 철회할때 사용되는 것과 동일한 명령으로 사용자에게 부여하고

철회할 수 있습니다.

. 롤 자신(간접적으로도 불가능)을 제외한 모든 사용자와 롤에게 부여할 수 있습니다.

. 시스템 권한과 오브젝트 권한으로 이루어집니다.

. 각 사용자가 부여받은 롤을 enable하거나 disable할 수 있습니다.

. 암호를 요구하도록 할 수도 있습니다.

. 각 롤 이름은 기존의 사용자 이름과 롤 이름과는 다른 유일한 것이어야 합니다.

. 누군가가 공유하는 것도 아니고 어느 스키마에 속하는 것도 아닙니다.

. 데이터 딕셔너리에 설명되어져 있습니다.


■ 롤의 장점

권한 부여 작업 감소

동적 권한 관리

권한의 선택적 사용

OS를 통해 부여

연쇄적으로 철회되지 않음

연쇄적으로 철회되지 않음

향상된 성능

권한부여 작업 감소

롤을 사용하면 권한 관리가 간단해 집니다.

일련의 권한을 여러 사용자에게 부여하기 보다는 권한들을 하나의 롤에 부여한 후

그 롤을 각 사용자에게 부여하십시오

동적 권한 관리

롤과 관련된 권한이 수정되면 해단 롤을 부여받은 모든 사용자는

자동적으로 죽시 수정된 권한을 갖게 됩니다.

권한의 선택적 사용

롤은 enable 되거나 disable되어 임시로 권한을 on,off할 수 있습니다.

롤을 enable하는 것은 사용자가 그 롤을 부여받았는지 검증하는데도 사용될 수 있습니다.

OS를 통해 부여

운영 체제 명령이나 유틸리티가 데이터베이스의 사용자에게 롤을 할당하는데 사용될수

있습니다.


■ 연쇄적으로 철회하지 않음

연쇄 철회를 발생시키지 않고 오브젝트 권한을 철회할 수 있습니다.

향상된 성능

롤을 disable하여 실행 중 검증해야 할 권한을 줄일 수 있습니다.

롤을 사용하면 데이타 딕셔너리에 저장된 부여에 대한 정보가 줄어들게 됩니다.


■ 롤생성

CREATE ROLE sales_clerk;

CREATE ROLE hr_clerk

IDENTIFIED by bonus;

CREATE ROLE hr_manager

IDENTIFIED EXTERNALLY;

구문

롤을 생성하려면 다음 명령을 사용하십시오

CREATE ROLE role [NOT IDENTIFIED | IDENTIFIED

{BY password | EXTERNALLY } ]

구문에서

role 롤 이름

NOT IDENTIFIED 롤을 enable할때 아무런 검증도 필요하지 않음을 의미

BY password 롤을 enable할때 사용자가 입력해야만 하는 암호 제공

EXTERNALLY 사용자가 롤을 enable하기전에 외부 서비스(운영 체제나 협력

업체서비스 같은)에 의해 인증을 받아햐만 함을 의미


■ 주 CREATE ROLE IDENTIFIED GLOBALLY 명령은 Oracle Security Server를 통해 롤 검증이 이루어져만 하도록 지정합니다.


■ 미리 정의된 롤 사용


롤 명 설 명

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

CONNECT | 이전 버전과의 호환을 위해서 제공됩니다

RESOURCE | 이전 버전과의 호환을 위해서 제공됩니다

DBA | 모든 시스템 권한과 WITH ADMIN OPTION

EXP_FULL_DATABASE | DB를 익스포트할 권한

IMP_FULL_DATABASE | DB를 임포트할 권한

DELETE_CATALOG_ROLE | DB 테이블에 대한 DELETE 권한

EXECUTE_CATALOG_ROLE | DD 패키지에 대한 EXECUTE권한

SELECT_CATALOG_ROLE | DD 테이블에 대한 SELECT 권한

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


위의 롤들은 오라클 데이터베이스에 자동적으로 정의됩니다. Connect, Resouse롤은 오라클 이전 버전과의 역 호환을 위해 제공되며 오라클 데이터베이스의 다른 롤과 같은 방법으로 수정할 수 있습니다.

EXP_FULL_DATABASEIMP_FULL_DATABASE 롤이 임포트와 익스포트 유틸리티를 사용할 때의 편의를 위해 제공됩니다

DELETE_CATALOG_ROLE, EXECUTE_CARLOG_ROLE, 그리고 SELECT_CATALOG_ROLE

롤은 데이터 딕셔너리 뷰와 패키지에의접근을 위해 제공됩니다. 이들 롤은 DBA 롤은 가지고 있지 않지만 데이터 딕셔너리의 뷰와 테이블에 접근해야만 하는 사용자들에게 부여될 수 있습니다.

다른 특별한 롤들 오라클은 또한 데이터베이스를 관리할 수 있도록 허가해주는 롤도 생성합니다. 여러 운영체제에서 이러한 롤들은 OSOPER 와OSDBA라 불리웁니다. 이름은 운영 체제에 따라 다를 수 있습니다.


오라클 데이터베이스를 생성하면 기본적으로 몇 가지의 Role이 생성 됩니다.


DBA_ROLES데이터 사전을 통하여 미리 정의된 Role을 조회 할 수 있습니다.


SQL>SELECT * FROM DBA_ROLES;


ROLE PASSWORD

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

CONNECT NO

RESOURCE NO

DBA NO

SELECT_CATALOG_ROLE NO

EXECUTE_CATALOG_ROLE NO

DELETE_CATALOG_ROLE NO

EXP_FULL_DATABASE NO

IMP_FULL_DATABASE NO

....

이 외에도 많이 ROLE이 존재합니다.

그 중에서 가장 많이 사용하는 3가지만 설명 하겠습니다.





CONNECT


- 오라클에 접속 할 수 있는 세션 생성 및 테이블을 생성하거나 조회 할 수 있는 가장 일반적인 권한들로 이루어져 있습니다.


- CONNECT Role이 없으면 유저를 생성하고서도 Oracle에 접속 할 수가 없습니다.


- 아래의 명령어로 CONNECT Role이 어떤 권한으로 이루어져 있는지 확인 할 수 있습니다.



SQL>SELECT grantee, privilege

FROM DBA_SYS_PRIVS

WHERE grantee = 'CONNECT';


GRANTEE PRIVILEGE

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

CONNECT ALTER SESSION

CONNECT CREATE CLUSTER

CONNECT CREATE DATABASE LINK

CONNECT CREATE SEQUENCE

CONNECT CREATE SESSION

CONNECT CREATE SYNONYM

CONNECT CREATE TABLE

CONNECT CREATE VIEW




RESOURCE


- Store Procedure나 Trigger와 같은 PL/SQL을 사용할 수 있는 권한 들로 이루어져 있습니다.


- PL/SQL을 사용하려면 RESOURCE Role을 부여해야 합니다.


- 유저를 생성하면 일반적으로 CONNECT, RESOURCE롤을 부여 합니다.


SQL>SELECT grantee, privilege

FROM DBA_SYS_PRIVS

WHERE grantee = 'RESOURCE';




DBA


- 모든 시스템 권한이 부여된 Role입니다.


- DBA Role은 데이터베이스 관리자에게만 부여해야 합니다.


■ 다른 롤은 데이터베이스와 함께 제공되는 SQL 스크립트로 정의됩니다. 예를 들어

AQ_ADMINSRTATOR_ROLE 과 AQ_USER_ROLE 은 dbmsaqsd.sql의 스크립트로 생성됩니다. 이들 롤은 Advanced Queuing기능과 함께 사용됩니다.

-미리 정의된 롤에만 의지할 필요는 없습니다. 오히려 데이터베이스 보안을 위해 자신만의

고유 롤을 설계하도록 권장하는 바입니다. 미리 정의된 롤은 앞으로의 오라클 버전에서는

자동적으로 생성되지 않을 수 도 있습니다.

-Solaris 같은 플랫폼에서는 RESOUCE 롤을 부여받은 사용자는 UNLIMITED

TABLESPACE 권한이 롤에 할당되어 있지 않더라도 명시적으로 함께 받게 됩니다.


■ 롤 수정

ALTER ROLE sales_clerk

IDENTIFIED BY commission;

ALTER ROLE hr_clerk

IDENTIFIED EXTERNALLY;

ALTER ROLE hr_manager

NOT IDENTIFIED;

롤은 그 인증 방식을 변경하기 위해서만 수정될 수 있습니다.

구문

룰을 수정하려면 다음 명령을 사용하십시요.

ALTER ROLE role (NOT IDENTIFIED) | IDENTIFIED

(BY password | externally));

구문에서:

role 롤의 이름

NOT IDENTIFIED 롤을 enable할 때 검증이 필요없음을 의미

IDENTIFIED 롤을 enable할 때 검증이 필요함을 의미

BY password 를을 enable할 때 사용될 암호 제공

EXTERNALLY 롤을 enable하기 전에 사용자가 외부 서비스

(운영체제나 협력 업체(third-party)

서비스)에 의해 허가를 받아야만 함을 의미


■ 롤 지정

GRANT sales_clerd TO scott;

GRANT hr_clerk,

TO hr_manager;

GRANT hr_manager TO scott

WITH ADMIN OPTION;

구문

사용자에게 롤을 부여하려면 사용자에게 시스템 권한을 부여할 때 사용했던 것과

동일한 구문의 명령을 사용하십시요.

GRANT role[ , role] . . .

TO {user | role | PUBLIC}

[, {user | role | PUBLIC}]

[WITH ADMIN OPTION]

구문에서:

role 부여될 롤, 또는 롤을 부여받을 롤

user 롤을 받을 사용자

role 롤을 받을 롤

PUBLIC 모든 사용자에게 롤을 부여

WITH ADMIN OPTION 부여받은 롤을 다른 사용자나 롤에게 부여하는 것을

가능하게 합니다.

(이 옵션으로 롤을 부여하면 롤을 받은 사용자는 다른

사용자에게 받은 롤을 부여하거나 철회할 수 있으며

롤을 수정하거나 삭제할 수 있습니다.)


■ 롤을 생성한 사용자는 암시적으로 ADMIN OPTION과 함께 생성한 롤이 지정된 것입니다. ADMIN OPTION을 가진 롤을 부여받지 못한 사용자가 다른 사용자에게 롤을 부여하거나 철회하려면 GRANT ANY ROLE 시스템 권한이 필요합니다.


■ 기본 롤 설정

ALTER USER SCOTT

DEFAULT ROLE hr_clerk, sales_clerk;

ALTER USER scott DEFAULT ROLE ALL;

ALTER USER scott DEFAULT ROLE ALL

EXCEPT hr_clerk;

ALTER USER scott DEFAULT ROLE NONE;

사용자는 많은 롤을 할당받을 수 있습니다. default role은 사용자가 로그인 할 때 자동적으로 enable 되는 할당된 롤의 부분 집합입니다. 디폴트로 사용자에게 할당된 모든 롤이 로그인 시 enable됩니다.

ALTER USER 명령으로 사용자에 대한 기본 롤을 제한하십시요.

구문

사용자에게 기본 롤을 할당하려면 다음 구문을 사용하십시요.

ALTER USER user DEFAULT ROLE

{role, [,role]...|ALL [EXCEPT role [,role]...] | NONE}

구문에서:

user 롤을 부여받을 사용자 이름

role 사용자에게 기본 롤이 될 롤

ALL 사용자에게 부여된 롤 중 EXCEPT절에 나열된것을 제외한 모든

롤을 기본 롤로 만듭니다.(기본값입니다.)

EXCEPT 기본 롤에 포함되지 않는 롤을 나타냅니다.


NONE 기본 롤로 아무것도 부여하지 않습니다. (로그인 시 사용자가

갖는 권한은 사용자에게 직접 할당된 권한 뿐입니다.)

기본 롤이 되려면 반드시 사전에 부여되어 있어야 합니다. 따라서 CREATE USER 명령으로

기본 암호로 인증되는 롤의 경우 기본 롤로 만들 때에는 암호가 필요하지 않습니다.

0-(17~18) ROLE Enable과 Disable

. 사용자로부터 임시로 롤을 철회하려면 그롤을 disable하십시요.

. 임시로 롤을 부여하려면 그 롤을 enable하십시요.

. SET ROLE 명령은 롤을 enable하고 disable합니다.

. 로그인 시 기본 롤이 enable됩니다.

. 롤을 enable할 때 암호가 필요할 수도 있습니다.

롤에 관련된 권한을 임시로 활성화시키려면 롤을 enable하거나 disable

하십시오. 롤을 enable하려면 먼저 해당 롤이 사용자에게 부여되어 있어야 합니다.

롤이 enable되면 사용자는 그 롤에 부여된 권한을 사용할 수 있습니다. 롤이 disable되면

권한이 사용자에게 직접 부여되거나 그 권한을 사용 가능하게 해주는 다른 롤이

enable되지 않는 한 사용자는 disable된 롤에 관련된 권한을 사용할 수 없습니다.

세션동안 여러 롤들이 enable될수있습니다.

세션을 시작하면 다시 기본 롤들만 enable되어 있게 됩니다.

.롤이 enable 되도록 지정

SET ROLE 명령과 DBMS_SESSION.SET_ROLE 프로시저는 명령에 포함된 모든 롤을 enable 하며 포함되지 않은 롤은 모두 disable합니다. 롤은 PL/SQL 명령을 허용하는 어떤 도구나 프로그램에서 enable될 수 있습니다. 세션을 시작하면 다시 기본 롤들만 enable되어 있게 됩니다.

ALTER USER...DEFAULT ROLE 명령을 사용하여 사용자가 로그인할 때 어떤 롤이 ebable되게 할 것인지 지정할 수 있습니다. 다른 롤은 모두 disable됩니다.

롤을 enable하는데 암호가 필요할 수도 있습니다. 롤을 enable하려면 암호가 SET ROLE

명령에 포함되어 있어야 합니다.

사용자에게 할당된 기본 롤은 암호가 필요하지 않습니다. 암호가 없는 롤들과 마찬가지로

로그인 시 enable됩니다.


제한사항

롤은 저장 프로시저로부터는 enable될 수 없습니다. 왜냐하면 무엇보다도 이 작업이

프로시저를 호출한 보안 도메인(권한 집합)을 변경할 수도 있기 때문입니다.

그러므로 PL/SQL에서는 롤이 익명의 블록(anonymous block)이나 응용 프로그램

프로시저 (예를 들자면 oracle Forms 프로시저)에서만 enable되고 disable될 수있고

저장 프로시저에서는 안 됩니다.

저장 프로시저가 SET ROLE에 대한 명령을 포함하고 있다면 실행시 다음 에러가 발생될

것입니다.

ORA-06565: cannot execute SET ROLE from with stored procedure

■ ROLE Enable과 Disable: 예

SET ROLE sales_clerk

IDENTIFIED BY commission;

SET ROLE hr_clerk;

SET ROLE ALL EXECPT

sales_clerk;

SET ROLE NONE;


구문

롤을 enable하거나 disable하려면 다음 명령을 사용하십시오.

SET ROLE {role [IDENTIFIED BY PASSWORD]

[, role [IDENTIFIED BY PASSWORD] ] ...

| ALL [EXCEPT role [ , role] ... ]

| NONE }

SET ROLE 명령은 사용자에게 부여된 그 밖의 롤은 turn off 시킵니다.

구문에서 :

role 롤 이름

IDENTIFIED

BY password 롤을 enable할때 필요한 암호 제공

ALL EXCEPT 절에 나열된 롤을 제외한, 현재 사용자에게 부여된 모든 롤을

enable(암호를 가진 롤을 enable할 때는 사용할수 없습니다.)

EXCEPT role enable 하지 않은 롤

NONE 현재세션에서 모든 롤 disable(사용자에게 직접 부여된 권한만 활성

상태가 됩니다.)

EXCEPT 절 없는 ALL옵션은 enable된느 모든 롤이 암호를 갖지 않을 때에만 작동합니다.

■ 사용자에게서 롤 제거

REVOKE sales_clerk FROM scott;

REVOKE hr_manager FROM PUBLIC;

구문

사용자에게서 롤을 철회하려면 시스템 권한을 철회할 때 사용하는 것과 동일한 구문을

사용하십시오.

REVOKE role [, role]...

FROM {user|role|PUBLIC}

[, {user|role|PUBLIC} ]...

구문에서 :

role 철회될 롤, 또는 롤이 철회될 롤

user 롤이 철회될 사용자

PUBLIC 모든 사용자로부터 권한이나 롤 철회

롤제거

구문

데이터베이스로부터 룰을 제거하려면 다음 구문을 사용하십시오.

DROP ROLE role

구문에서:

role 제거할 롤

롤을 삭제할 때 오라클 서버는 삭제할 롤이 부여되었던 모든 사용자와

롤로부터 철회한 후 데이터베이스로부터 제거합니다.

ADMIN OPTION과 함께 삭제할 롤을 부여받았거나 DROP ANY ROLE시스템

권한을 가지고 있어야 롤을 삭제할 수 있습니다.


롤 생성시 지침사항

롤이 임무를 수행하는데 필요한 권한을 포함하고 있기 때문에 이름은 보통 응용 프로그램 작업이나 직무 이름입니다. 위의 예는 롤 이름으로 응용 프로그램 작업과 직무 이름을 모두 사용하고 있습니다.

1. 각 응용 프로그램 작업을 위한 롤을 생성합니다. 응용 프로그램 롤의 이름은 payroll같이 응용 프로그램 작업데 대응됩니다.

2. 응용 프로그램 롤에 작업을 수행하는데 필요한 권한을 할당합니다.

3. 각 유형의 사용자를 위한 롤을 생성합니다. 사용자 롤의 이름은 pay_clerk같이 직무 이름에 대응됩니다.

4. 사용자의 롤을 개개의 권한이 아닌 응용 프로그램 롤을 부여합니다.

5. 사용자에게 사용자 롤과 응용 프로그램 롤을 부여합니다.

응용 프로그램을 수정한 결과 payroll작업을 수행하기 위해 새로운 권한이 필요하다면 DBA는 새 권한을 응용 프로그램 롤,PATROLL에 할당하기만 하면 됩니다. 현재 이 작업을 수행하고 있는 사용자는 새 권한을 받게 될 것입니다.


암호와 기본 롤을 사용할 때 지침 사항

암호사용

. 롤을 enable할 때 암호는 추가 레벨의 보안을 제공합니다. 응용 프로그램은 수표를 발행하는데 필요한 PAY_CLERK롤을 enable할 때 사용자가 암호를 입력하도록 요구할 수도 있습니다.

. 암호는 롤이 응용 르로그램을 통해서만 enable되도록 합니다. 이 기술은 위의 예에 나타나 있습니다.

- DBA가 사용자에게 두 롤 PAY_CLERK와 PAY_CLERK_RO를 부여했습니다.

- PAY_CLERK는 payroll clerk 작업을 수행하는데 필요한 모든 권한을 부여 받았습니다.

- PAY_CLERK_RO(RO는 읽기 전용(read only)를 의미)는 payroll clerk 작업을 수행하는데 필요한 테이블 예의 SELECT권한을 부여 받았습니다.

- 사용자는 질의를 수행하기 위해 SQL*Plus에 로그인 할 수 있습니다.

하지만 PAY_CLERK이 기본 롤이 아니고 PAY_CLERK의 암호를 알지 못하므로 데이터를 수정할 수는 없습니다.

- 사용자가 payroll응용 프로그램에 로그인할 때 응용 프로그램은 암호를 제공하여 PAY_CLERK을 enable 합니다. 암호는 프로그램 내에 코당 되어 있어 사용자가 암호를 입력하지 않습니다.


롤 정보 출력

많은 데이터 딕셔너리 뷰가 사용자와 롤에 부여된 권한에 대한 정보를 가지고 있습니다.

SVRMGR> SELECT role, password_required FROM dba_roles;

ROLE PASSWORD

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

CONNECT NO

RESOURCE NO

DBA NO

AQ_USER_ROLE NO

SELECT_CATALOG_ROLE NO

EXECUTE_CATALOG_ROLE NO

AQ_ADMINISTRATOR_ROLE NO

RECOVERY_CATALOG_OWNER NO

IMP_FULL_DATABASE NO

EXP_FULL_DATABSE NO

SNMPAGENT NO

SALES_CLERK YES

HR_CLERK EXTERNAL

14 row

s selectd.




AQ_ADMINISTRATOR_ROLE NO

RECOVERY_CATALOG_OWNER NO

IMP_FULL_DATABASE NO

EXP_FULL_DATABSE NO

SNMPAGENT NO

SALES_CLERK YES

HR_CLERK EXTERNAL

14 row

s selectd.

'ORACLE' 카테고리의 다른 글

Pro*C란  (11) 2007.03.06
sqlplus 사용을 고급화하기.  (0) 2007.01.12
테이블의 필드명 변경하기...  (0) 2006.12.15
테이블 스페이스의 정보 확인  (0) 2006.09.08
ORA 1688 에러발생  (0) 2006.09.08
posted by 구름너머 2006. 12. 15. 14:51

테이블의 필드명 변경하기...

ALTER TABLE테이블명
RENAME COLUMN TARNSDAY to TRANSDAY

'ORACLE' 카테고리의 다른 글

sqlplus 사용을 고급화하기.  (0) 2007.01.12
오라클 Role 관리  (0) 2006.12.18
테이블 스페이스의 정보 확인  (0) 2006.09.08
ORA 1688 에러발생  (0) 2006.09.08
ORA-01502  (1) 2006.09.07
posted by 구름너머 2006. 9. 8. 10:54
테이블 스페이스의 정보 확인
OracleClub.com
작 성 일 2002-02-03조 회 수11393
제 목 테이블 스페이스의 정보 확인
내 용
스크랩 프린트
* 내용을 복사하실때는 마우스로 선택 후 Ctrl+C로 복사하세요.


테이블 스페이스의 데이터 파일과 테이블 스페이스의 크기 확인

DBA_DATA_FILES 데이터 사전을 이용 하면 됩니다.

SQL> COL FILE_NAME FORMAT A40
SQL> COL TABLESPACE_NAME FORMAT A15

SQL> SELECT file_name, tablespace_name, bytes, status FROM DBA_DATA_FILES;

FILE_NAME T ABLESPACE_NAME BYTES STATUS
------------------------------------- --------------- ------------ ------------
C:\ORACLE\ORADATA\ORACLE\SYSTEM01.DBF SYSTEM 248250368 AVAILABLE
C:\ORACLE\ORADATA\ORACLE\RBS01.DBF RBS 545259520 AVAILABLE
C:\ORACLE\ORADATA\ORACLE\USERS01.DBF USERS 113246208 AVAILABLE
C:\ORACLE\ORADATA\ORACLE\TEMP01.DBF TEMP 75497472 AVAILABLE
C:\ORACLE\ORADATA\ORACLE\TOOLS01.DBF TOOLS 12582912 AVAILABLE
C:\ORACLE\ORADATA\ORACLE\INDX01.DBF INDX 60817408 AVAILABLE
C:\ORACLE\ORADATA\ORACLE\DR01.DBF DRSYS 92274688 AVAILABLE

FILE_NAME : DATAFILE의 물리적인 위치와 파일명을 알 수 있습니다.
TABLESPACE_NAME : 테이블 스페이스의 이름을 알 수 있습니다.
BYTES : 테이블 스페이스의 크기를 알수 있습니다.
STATUS : 테이블 스페이스의 이용 가능 여부를 알 수 있습니다.



테이블 스페이스별 사용 가능한 공간의 확인


DBA_FREE_SPACE 데이터 사전


SQL> SELECT tablespace_name, SUM(bytes), MAX(bytes)
FROM DBA_FREE_SPACE
GROUP BY tablespace_name


TABLESPACE_NAME SUM(BYTES) MAX(BYTES)
--------------- ---------- ----------
DRSYS 88268800 88268800
INDX 60809216 60809216
RBS 524279808 498589696
SYSTEM 65536 65536
TEMP 75489280 74244096
TOOLS 12574720 12574720
USERS 113238016 113238016


◎ SUM을 사용한 이유는하나의 테이블 스페이스에 분산되어 있는 여유공간을 합한 것이며,
◎ MAX를 사용한 이유는 여유 공간중 가장 큰 공간의 SIZE를 의미 합니다.



데이타 화일에 대한 총 크기와 남아있는 공간, 사용한 용량, 남은 %율


DBA_FREE_SPACE, DBA_DATA_FILES 데이터 사전


SQL> COL FILE_NAME FORMAT A40
SQL> COL TABLESPACE_NAME FORMAT A30
SQL> SET LINESIZE 150
SQL> SELECT b.file_name "FILE_NAME", -- DataFile Name
b.tablespace_name "TABLESPACE_NAME", -- TableSpace Name
b.bytes / 1024 "TOTAL SIZE(KB)", -- 총 Bytes
((b.bytes - sum(nvl(a.bytes,0)))) / 1024 "USED(KB)", -- 사용한 용량
(sum(nvl(a.bytes,0))) / 1024 "FREE SIZE(KB)", -- 남은 용량
(sum(nvl(a.bytes,0)) / (b.bytes)) * 100 "FREE %" -- 남은 %
FROM DBA_FREE_SPACE a, DBA_DATA_FILES b
WHERE a.file_id(+) = b.file_id
GROUP BY b.tablespace_name, b.file_name, b.bytes
ORDER BY b.tablespace_name


FILE_NAME TABLESPACE_NAME TOTAL SIZE(KB) USED(KB) FREE SIZE(KB) FREE %
------------------------------------- --------------- -------------- ------------- ------------- ----------
C:\ORACLE\ORADATA\ORACLE\DR01.DBF DRSYS 90112 3912 86200 95.6587358
C:\ORACLE\ORADATA\ORACLE\INDX01.DBF INDX 59392 8 59384 99.9865302
C:\ORACLE\ORADATA\ORACLE\RBS01.DBF RBS 532480 20488 511992 96.1523438
C:\ORACLE\ORADATA\ORACLE\TEMP01.DBF TEMP 73728 8 73720 99.9891493
C:\ORACLE\ORADATA\ORACLE\TOOLS01.DBF TOOLS 12288 8 12280 99.9348958
C:\ORACLE\ORADATA\ORACLE\USERS01.DBF USERS 110592 8 110584 99.9927662

================================================
* Oracle Community OracleClub.com
* http://www.oracleclub.com
* http://www.oramaster.net
* 운영자 : 김정식 (oramaster _at_ empal.com)
================================================
※ oracleclub 강좌를 다른 홈페이지에 퍼가실 경우에는 출처를 꼭 밝혀 주시면 고맙겠습니다.~^^

'ORACLE' 카테고리의 다른 글

오라클 Role 관리  (0) 2006.12.18
테이블의 필드명 변경하기...  (0) 2006.12.15
ORA 1688 에러발생  (0) 2006.09.08
ORA-01502  (1) 2006.09.07
sqlplus 2  (0) 2006.08.30
posted by 구름너머 2006. 9. 8. 10:54


1.ORA 1688 에러발생.
[ORA-01688: unable to extend table BILL.TB_BERR partition P200608]

oerr ora 1688
01688, 00000, "unable to extend table %s.%s partition %s by %s in tablespace %s"
// *Cause: Failed to allocate an extent for table segment in tablespace.
// *Action: Use ALTER TABLESPACE ADD DATAFILE statement to add one or more
// files to the tablespace indicated.


2.해당 테이블 스페이스 사용현황 조회.
SELECT a.tablespace_name,
a.total as "Total(Mb)",
a.total - b.free as "Used(Mb)",
nvl(b.free,0) as "Free(Mb)",
round((a.total - nvl(b.free,0))*100/total,0) as "Used(%)"
FROM (select tablespace_name,
round((sum(bytes)/1024/1024),0) as total
from dba_data_files
group by tablespace_name) a,
(select tablespace_name,
round((sum(bytes)/1024/1024),0) as free
from dba_free_space
group by tablespace_name) b
WHERE a.tablespace_name = b.tablespace_name(+)
AND a.tablespace_name like 'M_ETC1_P%'
ORDER BY a.tablespace_name, 4;

3.해당 tablespace의 data file 추가 또는 늘려주기.
alter database datafile ‘users01’ resize 10m;
또는
alter tablespace add datafile ‘users02’ to TBLSPACE;

'ORACLE' 카테고리의 다른 글

테이블의 필드명 변경하기...  (0) 2006.12.15
테이블 스페이스의 정보 확인  (0) 2006.09.08
ORA-01502  (1) 2006.09.07
sqlplus 2  (0) 2006.08.30
sqlplus 정리  (0) 2006.08.30
posted by 구름너머 2006. 9. 7. 11:24

1.오라클 에러..


ORA-01502: index 'IDX_AADB_01' or partition of
such index is in unusable state

2.오라클 핼프
01502, 00000, "index '%s.%s' or partition of such index is in unusable state"
// MERGE: 1489 RENUMBERED TO 1502
// *Cause: An attempt has been made to access an index or index partition
// that has been marked unusable by a direct load or by a DDL
// operation
// *Action: DROP the specified index, or REBUILD the specified index, or
// REBUILD the unusable index partition

3.문제되는 인덱스 찾기.
select index_owner,index_name,partition_name,STATUS
from dba_ind_partitions
where index_owner='BILL'
and index_name = 'IDX_AADB_01'
--and status = 'unUSABLE'


4.unUSABLE 를 rebuild한다.
==> alter index 인덱스명 rebuild 혹은
alter index 인덱스명 rebuild partition명

'ORACLE' 카테고리의 다른 글

테이블 스페이스의 정보 확인  (0) 2006.09.08
ORA 1688 에러발생  (0) 2006.09.08
sqlplus 2  (0) 2006.08.30
sqlplus 정리  (0) 2006.08.30
자동화 툴로 채울 수 없는 DB 성능관리 2% 2 :테이블 파티셔닝의 재발견  (0) 2006.08.09
posted by 구름너머 2006. 8. 30. 16:13

APPI[NFO]{ON|OFF|text} NULL text
ARRAY[SIZE] {20|n} NUMF[ORMAT] format
AUTO[COMMIT] {OFF|ON|IMM[EDIATE|n]} NUM[WIDTH] {10|n}
AUTOP[RINT] {OFF|ON} PAGES[IZE] {24|n}
AUTOT[RACE] {OFF|ON|TRACE[ONLY]} PAU[SE] {OFF|ON|text}
[EXP[LAIN]] [STAT[ISTICS]] RECSEP {WR[APPED]|
EA[CH]|OFF}
BLO[CKTERMINATOR] {.|c} RECSEPCHAR { |c}
CMDS[EP] {;|c|OFF|ON} SEVEROUT[PUT] {OFF|ON}
[SIZE n] [FOR[MAT]
COLSEP { |text} {WRA[PPED]|
WOR[D_WRAPPED]|
COM[PATIBILITY] {V7|V8|NATIVE} TRU[NCATED]}]
CON[CAT] {.|c|OFF|ON} SHIFT[INOUT] {VIS[IBLE]|
INV[ISIBLE]}
COPYC[OMMIT] {0|n} SHOW[MODE] {OFF|ON}
COPYTYPECHECK {OFF|ON} SQLC[ASE] {MIX[ED]|
LO[WER]|UP[PER]}
DEF[INE] {&|c|OFF|ON} SQLCO[NTINUE] {> | text}
ECHO {OFF|ON} SQLN[UMBER] {OFF|ON}
EDITF[ILE] file_name[.ext] SQLPRE[FIX] {#|c}
EMB[EDEDDED] {OFF|ON} SQLP[ROMPT] {SQL>|text}
ESC[APE] {\|c|OFF|ON} SQLT[ERMINATOR]
{;|c|OFF|ON}
FEED[BACK] {6|n|OFF|ON} SUF[FIX] {SQL|text}
FLAGGER {OFF|ENTRY|INTERMED[IATE]|FULL} TAB {OFF|ON}
FLU[SH] {OFF|ON} TERM[OUT] {OFF|ON}
HEA[DING] {OFF|ON} TI[ME] {OFF|ON}
HEADS[EP] {||c|OFF|ON} TIMI[NG] {OFF|ON}
LIN[ESIZE] {80|n} TRIM[OUT] {OFF|ON}
LOBOFFSET {n|1} TRIMS[POOL] {ON|OFF}
LONG {80|n} UND[ERLINE] {-|c|ON|OFF}
LONGC[HUNKSIZE] {80|n} VER[IFY] {OFF|ON}
NEWP[AGE] {1|n|NONE} WRA[P] {OFF|ON}

Syntax:

   SET option value   SHO[W] optionoptions: most of these have an abbreviated and a long form         e.g. APPINFO or APPI will do the same thing         You can get a list of the set options in sqlplus with the command              HELP SETAPPI[NFO]{ON|OFF|text}   Application info for performance monitor (see DBMS_APPLICATION_INFO)ARRAY[SIZE] {15|n}   Fetch size (1 to 5000) the number of rows that will be retrieved in one go.AUTO[COMMIT] {OFF|ON|IMM[EDIATE]|n}    Autocommit commits after each SQL command or PL/SQL blockAUTOP[RINT] {OFF|ON}   Automatic PRINTing of bind variables.(see PRINT)AUTORECOVERY [ON|OFF]   Configure the RECOVER command to automatically apply    archived redo log files during recovery - without any user confirmation.AUTOT[RACE] {OFF|ON|TRACE[ONLY]} [EXP[LAIN]] [STAT[ISTICS]]    Display a trace report for SELECT, INSERT, UPDATE or DELETE statements   EXPLAIN shows the query execution path by performing an EXPLAIN PLAN.   STATISTICS displays SQL statement statistics.   Using ON or TRACEONLY with no explicit options defaults to EXPLAIN STATISTICSBLO[CKTERMINATOR] {.|c|OFF|ON}   Set the non-alphanumeric character used to end PL/SQL blocks to cCMDS[EP] {;|c|OFF|ON}   Change or enable command separator - default is a semicolon (;)COLSEP { |text}    The text to be printed between SELECTed columns normally a space.COM[PATIBILITY] {V5|V6|V7|V8|NATIVE}   Version of oracle - see also init.ora COMPATIBILITY=   You can set this back by up to 2 major versions e.g. Ora 9 supports 8 and 7CON[CAT] {.|c|OFF|ON}   termination character for substitution variable reference   default is a period.COPYC[OMMIT] {0|n}   The COPY command will fetch n batches of data between commits.   (n= 0 to 5000) the size of each fetch=ARRAYSIZE.   If COPYCOMMIT = 0, COPY will commit just once - at the end.COPYTYPECHECK {OFF|ON}   Suppres the comparison of datatypes while inserting or appending to DB2DEF[INE] {&|c|OFF|ON}   c =  the char used to prefix substitution variables.    ON or OFF controls whether to replace substitution variables with their values.   (this overrides SET SCAN) DESCRIBE [DEPTH {1|n|ALL}][LINENUM {ON|OFF}][INDENT {ON|OFF}]   Sets the depth of the level to which you can recursively describe an object   (1 to 50) see the DESCRIBE command ECHO {OFF|ON}   Display commands as they are executedEMB[EDDED] {OFF|ON}   OFF = report printing will start at the top of a new page.   ON = report printing may begin anywhere on a page. ESC[APE] {\|c|OFF|ON}     Defines the escape character. OFF undefines. ON enables. FEED[BACK] {6|n|OFF|ON}   Display the number of records returned (when rows > n )   OFF (or n=0) turns the display off   ON sets n=1FLAGGER {OFF|ENTRY|INTERMED[IATE]|FULL}   Checks to make sure that SQL statements conform to the ANSI/ISO SQL92 standard.   non-standard constructs are flagged as errors and displayed    See also ALTER SESSION SET FLAGGER.FLU[SH] {OFF|ON}   Buffer display output (OS)   (no longer used in Oracle 9)HEA[DING] {OFF|ON}   print column headingsHEADS[EP] {||c|OFF|ON}   Define the heading separator character (used to divide a column heading onto > one line.)   OFF will actually print the heading separator char   see also: COLUMN commandINSTANCE [instance_path|LOCAL]    Change the default instance for your session, this command may only be issued when    not already connected and requires Net8LIN[ESIZE] {150|n}    Width of a line (before wrapping to the next line)   Earlier versions default to 80, Oracle 9 is 150LOBOF[FSET] {n|1}   Starting position from which CLOB and NCLOB data is retrieved and displayedLOGSOURCE [pathname]    Change the location from which archive logs are retrieved during recovery   normally taken from LOG_ARCHIVE_DEST LONG {80|n}   Set the maximum width (in chars) for displaying and copying LONG values.LONGC[HUNKSIZE] {80|n}   Set the fetch size (in chars) for retrieving LONG values.MARK[UP] HTML [ON|OFF]  [HEAD text] [BODY text] [TABLE text]      [ENTMAP {ON|OFF}][SPOOL {ON|OFF}]        [PRE[FORMAT] {ON|OFF}]   Output HTML text, which is the output used by iSQL*Plus.NEWP[AGE] {1|n} NULL text   The number of blank lines between the top of each page and the top title.   0 = a formfeed between pages.NULL text   Replace a null value with 'text'   The NULL clause of the COLUMN command will override this for a given column.NUMF[ORMAT] format   The default number format.   see COLUMN FORMAT. NUM[WIDTH] {10|n}   The default width for displaying numbers.PAGES[IZE] {14|n}   The height of the page - number of lines.   0 will suppress all headings, page breaks, titlesPAU[SE] {OFF|ON|text}   press [Return] after each page   enclose text in single quotesRECSEP {WR[APPED]|EA[CH]|OFF}   Print a single line of the RECSEPCHAR between each record.   WRAPPED = print only for wrapped lines   EACH=print for every rowRECSEPCHAR {_|c}   Define the RECSEPCHAR character, default= ' 'SCAN {OFF|ON}   OFF = disable substitution variables and parametersSERVEROUT[PUT] {OFF|ON} [SIZE n] [FOR[MAT] {WRA[PPED]|WOR[D_WRAPPED]|TRU[NCATED]}]    whether to display the output of stored procedures (or PL/SQL blocks)   i.e., DBMS_OUTPUT.PUT_LINE   SIZE = buffer size (2000-1,000,000) bytesSHOW[MODE] {OFF|ON}   Display old and new settings of a system variableSPA[CE] {1|n}   The number of spaces between columns in output (1-10)SQLBL[ANKLINES] {ON|OFF}    Allow blank lines within an SQL command. reverts to OFF after the curent command/block.SQLC[ASE] {MIX[ED]|LO[WER]|UP[PER]}    Convert the case of SQL commands and PL/SQL blocks   (but not the SQL buffer itself)SQLPLUSCOMPAT[IBILITY] {x.y[.z]}  Set the behavior or output format of VARIABLE to that of the  release or version specified by x.y[.z]. SQLCO[NTINUE] {> |text}   Continuation prompt (used when a command is continued on an additional line using a hyphen -)SQLN[UMBER] {OFF|ON}   Set the prompt for the second and subsequent lines of a command or PL/SQL block.   ON = set the SQL prompt = the line number.   OFF = set the SQL prompt = SQLPROMPT.SQLPRE[FIX] {#|c}   set a non-alphanumeric prefix char for immediately executing one line of SQL (#)SQLP[ROMPT] {SQL>|text}   Set the command prompt.SQLT[ERMINATOR] {;|c|OFF|ON}|    Set the char used to end and execute SQL commands to c.    OFF disables the command terminator - use an empty line instead.   ON resets the terminator to the default semicolon (;). SUF[FIX] {SQL|text}    Default file extension for SQL scriptsTAB {OFF|ON}   Format white space in terminal output.     OFF = use spaces to format white space.   ON = use the TAB char.   Note this does not apply to spooled output files.   The default is system-dependent. Enter SHOW TAB to see the default value. TERM[OUT] {OFF|ON}   OFF suppresses the display of output from a command file   ON displays the output.   TERMOUT OFF does not affect the output from commands entered interactively. TI[ME] {OFF|ON}   Display the time at the command prompt.TIMI[NG] {OFF|ON}   ON = display timing statistics for each SQL command or PL/SQL block run.   OFF = suppress timing statisticsTRIM[OUT] {OFF|ON}   Display trailing blanks at the end of each line.   ON = remove blanks, improving performance   OFF = display blanks.    This does not affect spooled output.   SQL*Plus ignores TRIMOUT ON unless you set TAB ON.TRIMS[POOL] {ON|OFF}   Allows trailing blanks at the end of each spooled line.   This does not affect terminal output.UND[ERLINE] {-|c|ON|OFF}   Set the char used to underline column headings to c.VER[IFY] {OFF|ON}   ON = list the text of a command before and after replacing substitution variables with values.   OFF = dont display the command.WRA[P] {OFF|ON}   Controls whether to truncate or wrap the display of long lines.    OFF = truncate    ON = wrap to the next line   The COLUMN command (WRAPPED and TRUNCATED clause) can override this for specific columns. 
posted by 구름너머 2006. 8. 30. 15:58

원본 출처 : http://www.cyberlab.pe.kr/dev_tip_board/read.neo?id=2&cn=2&tn=4&ln=2&pn=20&lv=0&topic=oracle

SQL

SQL문

SELECT

DML(데이터 조작어)

INSERT, UPDATE, DELETE

DDL(데이터 정의어) IMPLICIT COMMIT

CREATE, ALTER, DROP, RENAME, TRUNCATE

TCL(트랜잭션 제어)

COMMIT, ROLLBACK, SAVEPOINT

DCL(데이터 제어어)IMPLICIT COMMIT

GRANT, REVOKE

[1] Writing Basic SQL Statements

1. SELECT 기본 문장( 선택, 프로잭션, 조인)

SELECT [DISTINCT] { *, column [alias], ... }

FROM table ;

2. SELECT 예제

SELECT * FROM dept ;

SELECT deptno, loc FROM dept ;

SELECT ename, sal, 12 * (sal + 100) FROM emp ;

* Null 값과 연산을 하면 Null이 나온다.

3. Column Alias 예제

SELECT ename AS nme, sal salary

FROM emp ;

SELECT ename "Name", sal*12 "Annual Salary"

FROM emp ;

* 대소문자를 구분하고 공백있는 컬럼 Alias를 만들고 싶을땐 " "로 막는다.

* AS는 안 써도 된다.

* WHERE, GROUP BY절에는 안된다. ORDER BY 절에는 사용 가능.

4. Concatenation 연산자 (|| : pipeline 2개)

SELECT ename||job "Employees" FROM emp ;

--> ename 데이터와 job 데이터가 붙어서 출력된다.

5. 문자열을 데이터로 출력할때

SELECT ename||' '||'is a'||' '||job "Employee Details"

FROM emp ;

* 문자열은 ' '로 막고, 컬럼 Alias는 " "로 막는다.

6. DISTINCT keyword : 중복된 Row를 하나로 만들어 준다. 자동 SORTING[ASC]

SELECT DISTINCT deptno

FROM emp ;

* DISTINCT 대신 UNIQUE를 써도 된다.

7. SQL*Plus Log On 방법

* UserName, PassWord, HostString에 일일이 입력해도 되지만,

UserName에 username/password@HostString이라고 입력하면 된다.

* UNIX상에서 command로 들어 갈 때는 sqlplus username/password 만 입력하면된다.

8. 테이블 구조보는 SQL Command (DESC)

SQL> DESC dept : Column Name, Null?, Data Type display

9. SQL*Plus Editing Commands( 다음 행까지 계속하려면 -(하이픈)으로 연결한다.)

① A[PPEND] text : 현재 line의 마지막 문장 뒤에 text를 붙인다.

② C[HANGE]/old/new : 현재 line의 old text를 new text로 바꾼다.

③ C[HANGE]/text/ : 현재 line을 text를 삭제한다.

④ CL[EAR] BUFF[ER] : buffer의 내용을 모두 지운다.

⑤ DEL : 현재 line을 지운다.

⑥ DEL n : n번째 line을 지운다.

⑦ DEL m n : m ~ n번째 line을 지운다.

⑧ I[NPUT] : 현재 line 다음에 line이 제한없이 추가된다.

⑨ I[NPUT] text : 현재 line 다음에 line이 추가되면서 text가 들어간다.

⑩ L[IST] : buffer전체를 보여준다.

⑪ L[IST] n : n번째 line을 보여준다.

⑫ R[UN] or / : SQL, PL/SQL문장을 실행하라!

⑬ n : n번째 line을 display하면서 Editing 상태로 해준다.

⑭ n text : n번째 line이 text로 바뀐다.

⑮ 0 text : 1번째 line이 추가되면서 text가 1번째 line으로 들어간다.

* Bald로 표시된 명령어는 line번호를 먼저 수행한 후 실행해야 한다.

10. SQL*Plus File Commands

① SAV[E] filename [REP[LACE]|APP[END]] : buffer의 내용을 filename.sql로 저장한다.

② GET filename : filename.sql을 buffer로 불러온다.

③ START filename : filename.sql을 실행하라.

④ @filename : START filename과 같다.

⑤ ED[IT] : buffer의 내용을 edit program으로 실행한다.

⑥ ED[IT] filename : filename.sql을 edit program으로 실행한다.

⑦ SPO[OL] filename : retrieve data를 filename.lst로 저장한다.

⑧ SPOOL OFF : SPOOL을 끝내라.

⑨ SPOOL OUT : retrieve data를 system printer로 출력하라.

⑩ EXIT : SQL*Plus를 종료한다.

* SPOOL 사용법

SQL> spool filename

SQL> select ...

SQL> spool off

11. Special Tip

* 잠시 host상태로 나가고 싶을 때.

SQL> ! ( $)

-- host 상에서 다시 SQL로 들어가려면 exit(lo)

-- unix 상에서 env를 치면 오라클 환경을 볼 수 있다.

* SQL> define -editor

--> Editor가 vi인지..다른 edit프로그램인지를 보여준다.

* line size 바꾸기

SQL> SET PAGESIZE 20 -- 한 page를 20line으로 보여준다.

-- log off하면 사라진다.

* NLS값 보기

SQL> select * from V$NLS_PARAMETERS

* NLS값 바꾸기

SQL> ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD'

-- SESSION : 현 session동안만 YYYY-MM-DD 포맷으로 사용한다는 뜻.

sqlplus가 종료되면 원상태로 복구된다.

[2]Restricting and Sorting Data

1. 비교연산자

= : Equal to

> : Grater than

>= : Greater than or equal to

< : Less than

<= : Less than or equal to

<> : Not equal to

예) SELECT ename, sal, comm

FROM emp

WHERE sal <= comm ;

2. 비교연산자 2

BETWEEN A AND B , IN(list), LIKE, IS NULL

3. BETWEEN 연산자( NOT BETWEEN )

SELECT ename, sal

FROM emp

WHERE sal BETWEEN 1000 AND 1500 ; --> sal >= 1000 and sal <= 1500

4. IN 연산자( NOT IN )

SELECT emp, ename, sal, mgr

FROM emp

WHERE mgr IN (7902, 7566, 7788) ; --> mgr = 7902 or mgr = 7566 or mgr = 7788

5. LIKE 연산자( NOT LIKE )

예1) SELECT ename

FROM emp

WHERE ename LIKE 'S%' ; --> ename이 S로 시작하는 모든 데이터를 찾는다.

예2) SELECT ename

FROM emp

WHERE ename LIKE '_A%' ; --> 두 번째 글자가 A인 모든 데이터를 찾는다.

예3) SELECT ename

FROM emp

WHERE ename LIKE '%A/_%B' ESCAPE '/' ;

--> '/'는 Escape문자로 정의되었기 때문에 '_'도 문자로 인식한다.

즉, ename이 A_로 포함하는 모든 데이터를 찾는다.

* ESCAPE는 모든 문자가 가능하다.

6. IS NULL 연산자

SELECT ename, mgr

FROM emp

WHERE mgr IS NULL ; --> mgr이 null인 데이터를 찾는다.

7. Logical 연산자

AND : 두 개의 조건이 모두 만족해야 OK

OR : 한 개의 조건만 만족하면 OK

NOT

8. AND 연산자

SELECT empno, ename, job, sal

FROM emp

WHERE sal >= 1100

AND job = 'CLERK' ;

9. OR 연산자

SELECT empno, ename, job, sal

FROM emp

WHERE (sal >= 1100 OR job = 'CLERK') ;

10. NOT 연산자

SELECT ename, job

FROM emp

WHERE job NOT IN ('CLERK', 'MANAGER') ;

--> NOT (job = 'CLERK OR job = 'MANAGER')

11. 연산자 우선순위( 산술 > 문자 > 비교 > 논리 )

1 : 모든 비교 연산자

2 : NOT

3 : AND --> False > Null > True

4 : OR --> True > Null > False

예) A AND B에서...

- A가 False이고 B가 Null이면... False 이다.

- A가 True이고 B가 Null이면.... Null이다.

12. SORT (ORDER BY)

* ASC는 default값이다.(작은 값부터..)

* 값이 Null일 때 가장 큰 값이 된다. (ASC일 때...맨 뒤에 붙는다.)

* column alias도 sorting이 된다.

예1) SELECT ename, job, deptno, hiredate "Date"

FROM emp

ORDER BY hiredate["Date" or 4 ] ;

예2) SELECT ename, job, deptno, hiredate

FROM emp

ORDER BY hiredate DESC ;

예3) SELECT empno, ename, sal*12 annsal

FROM emp

ORDER BY empno, annsal ; * select 절에 없는 열을 기준으로 정렬 가능.

예4) SELECT ename, deptno, sal

FROM emp

ORDER BY deptno, sal DESC

[3] Single-Row Functions

1. Character Functions

①LOWER( column|expression )

LOWER('String') --> string : 소문자로 변환

②UPPER( column|expression )

UPPER('String') --> STRING : 대문자로 변환

③INITCAP( column|expression )

INITCAP('string') --> String : 첫글자만 대문자이고 나머지글자는 소문자로 변환

④CONCAT( column1|expression1 ,column2|expression2 )

CONCAT('Good','String') --> GoodString : ||와 같은 역할을 한다.

⑤SUBSTR(column|expression, m [,n]) : m값이 음수면 문자값의 끝부터..)

SUBSTR('String',1,3) --> Str : 1번째부터 3개의 문자를 리턴한다.

⑥LENGTH( column|expression )

LENGTH('String') --> 6 : 문자열의 길이를 리턴한다.

⑦INSTR( column|expression, )

INSTR('String','r') --> 3 : 문자열에 'r'이 몇번째 위치하고 있나를 리턴한다.

⑧LPAD( column|expression,n,'string' ) : n 은 전체 길이

LPAD('String',10,'*') --> ****String

: 10자리수중에 모자란 자리수를 '*'로 왼쪽에 채운다.(문자,숫자 가능!!!)

⑨ RPAD('String',10,'*') --> String****

: 10자리수중에 모자란 자리수를 '*'로 오른쪽에 채운다.(문자,숫자 가능!!!)

⑩ LTRIM(' String') --> 'String' : 문자열의 왼쪽 공백을 버린다.

⑪ RTRIM('String ') --> 'String' : 문자령의 오른쪽 공백을 버린다.

* TRIM(leading/tailing/both, trim_character FROM trim_source )

TRIM( 'S' FROM 'SSMITH') --> MITH

2. Number Functions

① ROUND(45.926, 2) --> 45.93 : 소수점 두자리수까지 보여주면서 반올림한다.

② TRUNC(45.926, 2) --> 45.92 : 소수점 두자리까지만 보여주고 나머지는 버린다.

③ MOD(1600,300) --> 100 : 1600을 300으로 나누고 나머지를 리턴한다.

* ROUND예제(WHOLE NUMBER:정수)

SELECT ROUND(45.923,2), ROUND(45.923,0), ROUND(45.923,-1) FROM DUAL

==> 45.92 46 50

* TRUNC예제

SELECT TRUNC(45.923,2), TRUNC(45.923), TRUNC(45.923,-1) FROM DUAL

==> 45.92 45(n이 생략된면 일의 자리까지 남기고 버린다.) 40

* SYSTEM 날짜를 갖고 오는 방법.

SELECT sysdate FROM dual

3. Date 계산( 날짜를 숫자로 저장)

date + number : date에 number만큼 후의 날자를 보여준다.

date - number : date에 number만큼 전의 날자를 보여준다.

date1 - date2 : date1에서 date2 까지의 총 일수를 보여준다.( date1+date2는 X )

date1 + 숫자/24 : date1에서 시간을 더해 날짜를 보여준다.

4. Date Functions

MONTHS_BETWEEN('01-SEP-95','11-JAN-94') --> 19.6774194

; 두날짜 사이의 달수를 보여준다.

ADD_MONTHS('11-JAN-94', 6) --> 11-JUL-94

; 날짜에 6개월을 더한 날자를 보여준다.

NEXT_DAY('01-SEP-95','FRIDAY') --> '08-SEP-95'

; 해당일 다음에 오는 FRIDAY의 일자를 보여준다.

('SUNDAY'는 1, 'MONDAY'는 2...이런식으로 숫자를 써줘도 된다.)

LAST_DAY('01-SEP-95') --> '30-SEP-95'

; 해당월의 마지막날자를 보여준다.

ROUND('25-JUL-95','MONTH')--> 01-AUG-95 ROUND('25-JUL-95','YEAR')--> 01-JAN-96

TRUNC('25-JUL-95','MONTH') --> 01-JUL-95 TRUNC('25-JUL-95','YEAR') --> 01-JAN-95

5. Conversion Functions

nlsparams : 십진수, 그룹구분자, 지역 통화 기호, 국제 통화 기호

TO_CHAR(date,['format'],[nlsparams]) : date를 format에 맞게 문자열로 변환한다.

- Date Format Elements

YYYY --> 1999 (년출력) , YEAR --> nineteen ninety-nine (년출력)

MM --> 12 (월출력) , MONTH --> DECEMBER (월출력), MON --> DEC

D --> 요일을 숫자로 리턴한다.(일요일은 1, 월요일은 2...)

DD --> 07 (달의 일출력)

DDD --> 200 (연의 일출력)그 해의 총 몇 일째인가를 리턴한다.

DAY --> MONDAY (요일출력) DY-->MON

CC --> 20 (몇 세기인지를 보여준다.)

WW --> 그 해의 몇 번째 주인가를 리턴한다.

W --> 그 달의 몇 번째 주인가를 리턴한다.

* Element들을 소문자로 쓰면 소문자로 나오고 대문자로 쓰면 대문자로 출력된다.

HH or HH12 or HH24 / MI(0-59분) / SS(0-59초)

* 문자열은 " " 묶어 추가한다 DD " of " MONTH --> 12 of DECEMBER

*숫자 접미어는 숫자를 문자로 표기. TH(4->4TH)/ SP(4->FOUR)/ SPTH or THSP(4->FOURTH)

ddspth : 14-> fothteenth

* / . , : 구두점은 결과에 그대로 출력한다. * 공백, 선행제로를 제거하는 fm요소가 있다.

TO_CHAR(number,'format',[nlsparams]) : number를 format에 맞게 문자열로 변환한다.

- Number Format Elements

9 : 999,999 --> 1,234 $: 부동 달러 기호 $99999 -> $1234

0 : 099999 --> 001234 99.999EEEE -> 1.234E+03 B: 0값을 공백으로

L : L99,999 --> FF1,234 (NLS_CURRENCY에 설정되어있는 값이 L로 보여진다.)

TO_NUMBER(char,['format'],[nlsparams]) : 숫자형태의 문자열을 숫자로 변한한다.

TO_DATE(char,['format'],[nlsparams]):날자형태의 문자열을 format에 맞게 날자형식으로 변환 한다.

6. NVL Funcion : 값이 null일 때 설정값을 보여준다.

NVL(number_column, 0) : null일 때 0을 보여준다.

NVL(date_column, '01-JAN-95') : null일 때 '01-JAN-95'를 보여준다.

NVL(character_column, 'Empty') : null일 때 'Empty'를 보여준다.

* column Type과 표현식의 type이 반드시 일치해야 한다.

7. DECODE Function : CASE or IF-THEN-ELSE 형식과 비슷하다.

*DECODE(col/expression, search1, result1 [,search2,result2,…] [,default])

F1 (F2 (F3 (col,arg1),arg2),arg3)

[4] Displaying Data from Multiple Tables (JOIN)

1. EquiJoin : column1과 column2는 Primary Key와 Foreign Key관계인 경우

SELECT emp.empno, emp.ename, emp.deptno, dept.deptno, dept.loc

FROM emp, dept

WHERE emp.deptno = dept.deptno

2. Non-EquiJoin : Join하는 Table 사이에 서로 대응하는 Key가 없는 경우

where절의 Join조건에 '='을 제외한 비교연산자를 사용한다.

SELECT e.ename, e.sal, s.grade

FROM emp e, salgrade s

WHERE e.sal BETWEEN s.losal AND s.hisal

3. Outer Join : 서로 = 되지 않는 row 까지도 모두 보여준다.

정보가 없는쪽 컬럼 뒤에 (+)를 붙인다.( =, and 만 사용가능)

SELECT e.ename, d.deptno, d.dname

FROM emp e, dept d

WHERE e.deptno (+) = d.deptno

ORDER BY e.deptno

4. Self Join : 같은 Table을 그것이 마치 2개의 Table인 것처럼 Join해서 사용한다.

SELECT worker.ename, manager.ename

FROM emp worker, emp manager

WHERE worker.mgr = manager.empno

5. SET OPERATORS

UNION : 중복된 row는 제외하고 보여준다. UNION ALL : 중복된 row까지 모두 보여준다. INTERSECT : A,B의 중복된 row만 보여준다.MINUS : A,B의 중복된 row를 제외한 A row를 보여준다.

[5] Aggregating Data Using Group Functions(그룹함수를 사용한 데이터집계)

1. Group Function : 행집합에 적용하여 그룹당 하나의 결과를 생성한다.

AVG([DISTINCT|ALL] n) : 평균값

COUNT({*|[DISTINCT|ALL] expr}) : row수

MAX([DISTINCT|ALL] expr) : 최대값

MIN([DISTINCT|ALL] expr) : 최소값

SUM([DISTINCT|ALL] n) : 합

STDDEV([DISTINCT|ALL] x) : 표준편차

VARIANCE([DISTINCT|ALL] x) : 분산

* count(*)를 제외한 모든 Group Function은 Null을 배제하고 수행한다.

Null을 포함하고 싶다면 NVL함수를 사용한다.

* DISTINCT나 ALL을 쓰지 않으면 Default가 ALL이다.

* AVG,SUM, STDDEV, VARIANCE는 반드시 숫자형이다.

2. 어떤 컬럼에 해당하는 데이터별 그룹함수를 사용할 때

SELECT [deptno,] COUNT(ename)

FROM emp --> 이문장은 성립되지 않는다. GROUP BY가 없다.

<추가>

GROUP BY deptno

*일반칼럼과 그룹함수를 같이 쓰면 group by절에 일반칼럼 명시(열 별칭 사용못함)

*GROUP BY 열을 SELECT 절에 포함시키지 않아도 된다

3. 그룹함수는 WHERE절에 올수가 없다.

SELECT deptno, AVG(sal)

FROM emp

WHERE AVG(sal) > 2000

GROUP BY deptno

--> 이문장은 성립되지 않는다. WHERE절에 그룹함수가 올 수 없다.

SELECT deptno, AVG(sal)

FROM emp

GROUP BY deptno

HAVING AVG(sal) > 2000

4. HAVING : 그룹함수를 조건절에 적용시키기 위해서 사용한다.

SELECT job, SUM(sal)

FROM emp

WHERE job NOT LIKE 'SALES%'

GROUP BY job

HAVING SUM(sal) > 5000

ORDER BY SUM(sal)

*절 평가 순서 : ① WHERE -> ② GROUP BY절 -> ③ HAVING절

*그룹함수는 두번까지 중첩될수 있습니다. MAX( AVG(SAL))

[6] Subqueries( WHERE 절, HAVING 절, FROM 절 )

1. Subquery 규칙

- 반드시 ()로 묶어야 한다.

- 반드시 비교연산자 오른쪽에 위치해야 한다.

- ORDER BY 절에는 사용할 수 없다.

- 서브쿼리 결과가 한개일때는 Single-Row 비교연산자를 사용해야 한다.

( =, >, >=, <, <=, <> )

- 서브쿼리 결과가 여러개일때는 Multi-Row 연산자를 사용해햐 한다.

2. Subquery 사용예1

* 반드시 비교연산자 오른쪽에 써야한다.

SELECT ename FROM emp

WHERE sal > (SELECT sal FROM emp

WHERE empno = 7566)

3. Subquery 사용예2

SELECT ename, job

FROM emp

WHERE job = (SELECT job

FROM emp

WHERE empno = 7369)

AND

sal > (SELECT sal

FROM emp

WHERE empno = 7876)

4. Subquery 사용예3

SELECT job, AVG(sal)

FROM emp

GROUP BY job

HAVING AVG(sal) > (SELECT MIN(AVG(sal))

FROM emp

GROUP BY job)

5. Subquery 사용예4 (Subquery 결과가 여러개가 나올때 비교연산자 사용법)

SELECT empno, ename

FROM emp

WHERE sal IN (SELECT MIN(sal) ( =ANY 와 같음 )

FROM emp

GROUP BY deptno)

6. ANY(동의어:SOME)연산자를 사용한 Subquery : 조건중에 한개만 만족하면 OK

SELECT empno, ename, job

FROM emp

WHERE sal < ANY (SELECT sal --> OR

FROM emp

WHERE job = 'CLERK')

AND job <> 'CLERK'

7. ALL연산자를 사용한 Subquery : 모든 조건을 만족해야 OK

SELECT empno, ename, job

FROM emp

WHERE sal > ALL (SELECT avg(sal) --> AND

FROM emp

GROUP BY deptno

[7] Multiple-Column Subqueries

1. Multiple-Column Subquery (Pairwise Subquery)

: 서브쿼리의 결과가 두개 이상의 컬럼형식으로 나올 때 비교하는 컬럼도 서브쿼리 컬럼

갯수와 형식이 같아야한다.

SELECT ename, deptno, sal, comm

FROM emp

WHERE (sal, NVL(comm,-1)) IN

(SELECT sal, NVL(comm,-1)

FROM emp

WHERE deptno = 30)

2. NonPairwise Subquery

SELECT ename, deptno, sal, comm

FROM emp

WHERE sal IN (SELECT sal FROM emp

WHERE deptno = 30)

AND

NVL(comm,-1) IN (SELECT NVL(comm,-1) FROM emp

WHERE deptno = 30)

3. Subquery 안에 Null값이 있을 때...

* 매니저가 아닌 사원을 보여주기?

SELECT e.ename

FROM emp e

WHERE e.empno NOT IN

(SELECT m.mgr FROM emp m)

IN은 Null value가 나와도 한개의 조건만 만족하면 OK이지만,

NOT IN은 !=ALL과 같아서 모든조건이 TRUE여만 TRUE인 것이다.

* NOT IN 을 !=ANY 로 바꿔주는게 정답에 가깝다.

4. FROM절에 사용되는 Subquery

SELECT a.ename, a.sal, a.deptno, b.salavg

FROM emp a,

(SELECT deptno, avg(sal) salavg

FROM emp

GROUP BY deptno) b

WHERE a.deptno = b.deptno

AND a.sal > b.salavg

5. EXISTS : EXISTS 뒤에 나오는 서브쿼리의 결과가 한건이 row라도 있다면 O.K

SELECT dname, deptno

FROM dept

WHERE EXISTS (SELECT * FROM emp

WHERE dept.deptno = emp.deptno)

: 행의 존재유무만 확인

[8] Producing Readable Output with SQL*Plus

1. Substitution Variable (치환변수)

& : 변수가 한 번 사용되고 메모리에서 사라진다.

&& : 한 번 입력한 변수는 CLEAR하기 전까지 계속 메모리에 남아있다.

DEFINE variable=value : CHAR 데이터 유형의 사용자 변수를 생성하여 값을 변수에 할당한다.

DEFINE : 현재 DEFINE 된 모든 것들을 보여준다.

DEFINE 변수명 : 지정한 변수명의 DEFINE 사항을 보여준다.

UNDEFINE 변수명 : 지정한 변수명의 DEFINE 상태를 CLEAR한다.

ACCEPT : 변수를 입력하라고 물어보는 Prompt의 Text를 변경할수 있다. USER가

입력하는 값을 HIDE시킬수가 있다. DataType의 Format을 변경할수가 있다.

* SET VERIFY 는 SQL*PLUS 가 치환변수를 값으로 바꾸기 전후의 명령 텍스트 표시를 토글한다.

2. & 치환변수 사용예

SELECT empno, ename, sal, deptno

FROM emp

WHERE empno = &employee_num

3. && 치환변수 사용 예 --> 한번만 물어보게 된다.

SELECT empno, ename, job, &&column_name

FROM emp

ORDER BY &column_name

4. 변수 값이 character or date value일때 꼭 single quotation mark로 묶어 줘야 한다.

SELECT ename, deptno, sal*12

FROM emp

WHERE job = '&job_title'

5. 종합적인 예제(실행중에 열이름, 표현식, 텍스트를 지정)

--> 어떤 절에나 사용해도 된다.

SELECT empno, ename, job, &column_name

FROM emp

WHERE &condition

ORDER BY &order_column

6. ACCEPT 사용예 (file로 만들어서 START시켜야 한다.)

*ACCEPT variable [datatype] [FORMAT format] [PROMPT text] [HIDE]

ACCEPT dept PROMPT 'Provide the department name: '

SELECT *

FROM dept

WHERE dname = UPPER('&dept')

/

Provide the department name: Sales

처리된 결과값...

7. 파일로 만들어서 치환변수를 여러개 처리할때 예제

test.sql

SELECT &1 FROM &2

SQL> @test empno emp

==> &1에 empno, &2에 emp가 들어간다.(define)

SELECT &2 FROM &4

SQL> @test e empno b emp

==> &1에 e, &2에 empno,&3에 b, &4에 emp가 들어간다.(define)

8. SET command 변수

① ARRAY[SIZE] {20 | n} : 데이터 fatch size

② COLSEP {_ | text} : column seperator

③ FEED[BACK] {6 | n | OFF | ON} : n 개이상의 레코드 반환시 레코드 수를 표시

④ HEA[DING] {OFF | ON} : column heading 출력

⑤ LIN[ESIZE] {80 | n} : 가로 80 으로 출력

⑥ PAGES[IZE] {50 | n} : 세로 50 으로 출력

⑦ LONG {80 | n} : long date type의 데이터를 출력할때 80byte까지만 보여주겠다.

⑧ PAU[SE] {OFF | ON | text} : text에 문자열을 넣으면 pause될 때마다 메시지를 보여준다.

⑨ TERM[OUT] {OFF | ON} : 결과를 화면에 보여주겠는가?

⑩ VERIFY {OFF | ON} : 치환변수의 old값과 new값을 보여주면서 결과가 처리된다.

* SHOW {SET command 명} : SET command명의 현재 상태를 보여준다. SQL> SHOW ECHO)

* SHOW ALL : 모든 SET command의 현재 상태를 보여준다.

* SET 상태를 바꿔 주려면... SQL> SET PAUSE ON <-- 이런식으로 하면 된다.

* DEFINE command나 SET command는 자신의 환경파일(login.sql)에 일괄적으로 처리 할수 있다.

* login.sql은 oracle superuser용 환경파일이다.

* SQL Plus command가 다음 줄로 이어질 때는 (-)으로 연결한다.

9. REPORT 출력 예

① SET PAGESIZE 37 --> 세로 37로 출력

② SET LINESIZE 60 --> 가로 60으로 출력

③ SET FEEDBACK OFF

④ TTITLE 'Employee|Report' --> Top Title을 Employee 다음 줄에 Report를 쓰겠다.

⑤ BTITLE 'Confidential' --> Bottom Title을 Confidential로 쓰겠다.

⑥ COLUMN job HEADING 'Job|Category' FORMAT A15 : | 은 text를 두줄로 찍는다.

--> job column Heading을 Job 다음줄에 Category로쓰고 15byte의 자리수로

만들겠다.

형식 : COL[UMN] [{column | alias } [option]]

COL[UMN] [column], COL[UMN] column CLE[AR], CLE[AR] COL[UMN]

옵션 : CLE[AR], FOR[MAT] format, HEA[DING] text, JUS[TIFY] {align}, NUL[L] text,

NOPRI[NT]:열을 숨김니다 <> PRI[NT],

TRU[NCATED] : 첫 행 끝에 표시되는 문자열을 잘라버린다.

WRA[PPED] : 문자열의 끝을 다음 행으로 줄바꿈합니다.

⑦ REM ** Insert SELECT statement --> 주석문

*BREAKE 명령?

[9] Multipulating Data (DML)

*트랜젝션 : 논리 작업 단위를 형성하는 DML 문 모음으로 구성된다., DDL문(한개),DCL문(한개)

1. INSERT 예제1

: 모든 컬럼에 INSERT할 때는 컬럼명을 쓰지 않아도 되지만 테이블 CREATE시

만들어진 순서대로 입력해야한다.

INSERT INTO dept

VALUES (50,'AAA','BBB')

* NULL 값을 갖는 행 삽입시 열목록에서 열을 생략(암시적)하는 방법과

NULL 키워드를 지정(명시적)하는 방법이 있다.

2. INSERT 예제2

INSERT INTO emp ( empno, ename, job, mgr, hiredate, sal, comm, deptno )

VALUES ( 7196, 'GREEN', 'SALESMAN', 7782, SYSDATE, 2000, NULL, 10 )

3. sql 파일로 만들어서 Argument를 받으면서 INSERT 실행하기.

* test.sql 파일

ACCEPT department_id PROMPT 'Please enter the department number: '

ACCEPT department_name PROMPT 'Please enter the department name: '

ACCEPT location PROMPT 'Please enter the location: '

INSERT INTO dept ( deptno, dname, loc )

VALUES (&department_id, '&department_name', '&location' )

SQL> @test = START test

Please enter the department number: 90

Please enter the department name: PAYROLL

Please enter the location: HOUSTON

1 row created

4. 다른 테이블의 row를 Copy하기(VALUES 절을 사용하지 않는다.)

INSERT INTO managers (id, name, salary, hiredate)

SELECT empno, ename, sal, hiredate

FROM emp

WHERE job = 'MANAGER'

5. UPDATE 예제1

UPDATE emp

SET deptno = 20,

sal = 2500,

comm = null

WHERE empno = 7782

6. UPDATE 예제2 (Multiple-Column Subquery를 사용한 예)

UPDATE emp

SET (job, deptno) = (SELECT job, deptno

FROM emp

WHERE empno = 7499)

WHERE empno = 7689

7. UPDATE 예제3 (다른 테이블에 있는 데이터를 SELECT해서 UPDATE하기)

UPDATE employee

SET deptno = (SELECT deptno FROM emp WHERE empno = 7788)

WHERE job = (SELECT job FROM emp WHERE empno = 7788)

8. DELETE 예제1 (조건에 맞는 데이터 지우기)

DELETE FROM dapartment

WHERE dname = 'DEVELOPMENT'

9. DELETE 예제2 (한 테이블의 전체 데이터 삭제)

DELETE FROM department

10. DELETE 규칙

* FROM은 옵션이므로 사용하지 않아도 된다.(예: DELETE department)

* Primary Key, Forien Key 관계가 설정되어 있는 데이터를 DELETE할때는 문제가 발생 할 수 있다.

11. COMMIT

* 변경된 데이터를 Fix시킨다.

* 이전상태의 데이터는 모두 잃게 된다.

* 모든 User가 결과를 볼수 있다.

* LOCK이 풀린다.

* 모든 SavePoint들이 clear된다.

* 자동 커밋 : DDL, DCL, 정상 종료시

12. ROLLBACK

* 변경된 데이터를 undo 시킨다.

* Transaction 전단계의 데이터로 돌아간다.

* Lock이 풀린다.

* 자동 롤백 : 비정상 종료, 시스템 장애

13. SAVEPOINT 예제

* SAVEPOINT : Transaction이 일어난 곳에 Marking을 할 수가 있다.

* 오라클은 자동적으로 눈에 안보이는 savepoint를 찍어 놓는다.

SQL> UPDATE.....

SQL> SAVEPOINT update_done ;

Savepoint created.

SQL> INSERT.....

SQL> ROLLBACK TO update_done ;

Rollback complete.

14. TABLE LOCK 예제 (DBA가 임으로 TABLE에 LOCK을 걸 수가 있다.)