2014. 11. 7. 11:13

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.

Oracle2009. 11. 20. 13:44

관리 >> 파티션(Range List Composition Partition)  오라클(운영)

2007/12/24 17:16

복사http://blog.naver.com/owner71/20045212389

No. 22103

(V9.2) RANGE LIST PARTITIONING - ORACLE 9.2 ENHANCEMENT
=======================================================

PURPOSE
-------

   이 문서는 Oracle 9.2의 새 기능인 Range list partition을 생성하고
   관리하기 위한 방법에 대한 자료이다.


Explanation
-----------

Range List Partitioning은 RDBMS V9.2에서 처음으로 소개된 기능이다. 
이 방법은 V8.0에서 소개된 Range partitioning과 V9.0.1에서 소개된 
List partitioning을 결합한 형태의 새로운 방법이다.

Range-List method는 Range 형태로 먼저 데이타를 partition하고  
그 다음에 List-method를 이용하여 subpartitioning을 하는 방법이다.

Composite Range-Hash method와는 달리 이 방법은 각 row가 어느 
subpartition에 속하게 될지를 조절할 수 있다. 
그러나, multiple subpartition keys 는 지원하지 않는다. 이는 List 
method가 이것을 지원하지 않기 때문이다. 
오직 하나의 column만 key partition으로 가능하다.
List partitioning 에 대한 자료는 <Note:149116.1>을 참고하기 바란다.


RANGE-LIST Table에 지원되는 명령어
----------------------------------
1) All DMLs operations
2) Add partition or subpartition
3) Drop partition or subpartition
4) Modify partition or subpartition
5) Rename partition or subpartition
6) Exchange partition or subpartition
7) Merge partitions or subpartition
8) Modify default attribute of a table or partition
9) Modify real attribute of a partition or subpartition
10) Add/Drop values in subpartition
11) Set subpartition template
12) Rename partition or subpartition
13) Move subpartition
14) Split partition or subpartition
15) Truncate partition or subpartition


Index에 지원되는 명령어
-----------------------

단지 btree 또는 bitmap Local Index 만이 RANGE-LIST type일 수 있다.

아래의 command만이 가능하다.

1) Modify default attributes for table or partition.
2) Modify real attributes for partition or subpartition
3) Rebuild of index subpartition
4) Rename partition or subpartition


제약사항
--------

The same known restrictions are still available for Range-List 
partitioning like the current limit of 64k overall segments.


Example
-------
1) Range-List partition 생성 예제

CREATE TABLE empdata
( empno number,
ename varchar2(20),
deptno number,
continent varchar2(6),
hiredate date,
job varchar2(10),
salary number)
PARTITION BY RANGE (deptno)
SUBPARTITION BY LIST (continent)
(PARTITION d1_emp VALUES LESS THAN (100)
(SUBPARTITION d1_con1 VALUES ('ASIA', 'AUST'),
SUBPARTITION d1_con2 VALUES ('AMER'),
SUBPARTITION d1_con3 VALUES ('AFRICA'),
SUBPARTITION d1_con4 VALUES ('EUROPE')),
PARTITION d2_emp VALUES LESS THAN (maxvalue)
(SUBPARTITION d2_con1 VALUES ('ASIA', 'AUST'),
SUBPARTITION d2_con2 VALUES ('AMER'),
SUBPARTITION d2_con3 VALUES ('AFRICA'),
SUBPARTITION d2_con4 VALUES ('EUROPE'))
);


2) Range-Hash partition 생성 예제

Range-Hash method는 어떤 level에 모든 다른 subpartition들을 
반드시 명시하지 않아도 된다. 
아래와 같이 SUBPARTITION TEMPLATE 절을 사용할 수 있다.


CREATE TABLE empdata
( empno number,
ename varchar2(20),
deptno number,
continent varchar2(6),
hiredate date,
job varchar2(10),
salary number)
PARTITION BY RANGE (deptno)
SUBPARTITION BY LIST (continent)
SUBPARTITION TEMPLATE
(SUBPARTITION d1_con1 VALUES ('ASIA', 'AUST') tablespace PART1,
SUBPARTITION d1_con2 VALUES ('AMER') tablespace PART2,
SUBPARTITION d1_con3 VALUES ('AFRICA') tablespace PART3,
SUBPARTITION d1_con4 VALUES ('EUROPE') tablespace PART3
)
(PARTITION d1_emp VALUES LESS THAN (100),
PARTITION d2_emp VALUES LESS THAN (maxvalue)
);

Storage 절은 TABLESPACE 절을 제외하고는 partition level로부터 상속받는다. 
만약, partition level에서 정의되어 있지 않으면 underlying table로부터 
storage 절을 상속받는다.

Sample data to load:
INSERT INTO empdata(empno,deptno,continent) values(1,50,'AMER');
--> Will be inserted into subpartition d1_con2
INSERT INTO empdata(empno,deptno,continent) values(2,100,'ASIA');
--> Will be inserted into subpartition d2_con1
INSERT INTO empdata(empno,deptno,continent) values(3,150,'EUROPE');
--> Will be inserted into subpartition d2_con4
INSERT INTO empdata(empno,deptno,continent) values(4,50,'AUST');
--> Will be inserted into subpartition d1_con1
INSERT INTO empdata(empno,deptno,continent) values(5,250,'AFRICA');
--> Will be inserted into subpartition d2_con3

  
Reference Documents
-------------------
<Note:209368.1>
Oracle 9.2 Administrator's Guide
Oracle 9.2 Performance Tuning and Reference

 

[ 생성 / 수정 / 관리 ]

set linesize 130;
col high_value format a20;


SELECT table_name, partition_name partition, high_value,
            partition_position position 
     FROM user_tab_partitions 
     WHERE table_name='PTNEW2' order by position;

 SELECT TABLESPACE_NAME, PARTITION_NAME, SUBPARTITION_NAME
  FROM user_TAB_SUBPARTITIONS WHERE TABLE_NAME='PTNEW2'
  ORDER BY TABLESPACE_NAME;


alter table ptnew2  add  partition pt_Site02 values less than('003');

ALTER TABLE ptnew2
   MODIFY PARTITION pt_Site02 
      ADD SUBPARTITION site02_z_article_pt
         VALUES ('z0000') tablespace partition_1;


ALTER TABLE ptnew2
   MODIFY PARTITION pt_Site01 
      ADD SUBPARTITION site01_x_article_pt
         VALUES ('x0000') tablespace partition_1;

alter table ptnew2 
       modify subpartition site01_x_article_pt  
       add values('x0001');


alter table ptnew2 
       modify subpartition site01_a_article_pt  
       drop values('a0002');

alter table ptnew2 
       modify partition pt_site01
       drop subpartition site01_x_article_pt;

alter table ptnew2
      drop subpartition site01_x_article_pt;


alter table ptnew2  add  partition pt_Site03 values less than('003')
                         (subpartition site03_a_article_pt values('a0000'));

ALTER TABLE ptnew2
   MODIFY PARTITION pt_Site03 
      ADD SUBPARTITION site03_b_article_pt
         VALUES ('b0000') tablespace partition_1;

 

SELECT partition_name partition, high_value,
            partition_position position 
     FROM user_tab_partitions 
     WHERE table_name='ARTICLE_TB'
     order by position;


SELECT  PARTITION_NAME, SUBPARTITION_NAME,TABLESPACE_NAME
FROM USER_TAB_SUBPARTITIONS WHERE TABLE_NAME='ARTICLE_TB'
 ORDER BY TABLESPACE_NAME;


SELECT partition_name partition, high_value
     FROM user_tab_subpartitions 
     WHERE table_name='ARTICLE_TB'
     order by position;

select partition_name,  SUBPARTITION_NAME,high_value, subpartition_position from user_tab_subpartitions

Posted by Julyus
Oracle2009. 9. 21. 12:00
PL/SQL EXCEPTION 종류 sql

2009/08/13 14:57

복사 http://blog.naver.com/soo02da/150067422573

PL/SQL EXCEPTION 종류

예외 내용

예외 번호

SQLCODE

발생시점

ACCESS_INTO_NULL

ORA-06530

-6530

초기화 되지 않은 오브젝트에 값을 할당하려고 할 경우

CASE_NOT_FOUND

ORA-06592

-6592

CASE 문장에서 ELSE 구문도 없고 WHEN 절에 명시된 조건을 만족하는 것이 하나도 없을 경우

COLLECTION_IS_NULL

ORA-06531

-6531

초기화 되지 않은 중첩 테이블이나 VARRAY같은 콜렉션을 EXISTS 외의 다른 메소드를 접근을 시도할 경우

CURSOR_ALREADY_OPEN

ORA-06511

-6511

이미 오픈된 커서를 다시 오픈하려고 시도하는 경우

DUP_VAL_ON_INDEX

ORA-00001

-1

유일 인덱스가 걸린 칼럼에 중복 데이터를 입력할 경우

INVALID_CURSOR

ORA-01001

-1001

허용되지 않은 커서에 접근할 경우(오픈되지 않은 커서를 닫으려고 시도하는 경우)

INVALID_NUMBER

ORA-01722

-1722

SQL 문장에서 문자형 데이터를 숫자형으로 변환할 때 제대로 된 숫자로 변환이 되지 않을 경우

LOGIN_DENIED

ORA-01017

-1017

잘못된 사용자나 비밀번호로 로그인을 시도할 때

NO_DATA_FOUND

ORA-01403

+100

SELECT INTO 문장의 결과로 선택된 로우가 하나도 없을 경우

NOT_LOGGED_ON

ORA-01012

-1012

오라클에 연결되지 않았을 경우

PROGRAM_ERROR

ORA-06501

-6501

PL/SQL 내부에 문제가 발생했을 경우

SELF_IS_NULL

ORA-30625

-30625

OBJECT 타입이 초기화 되지 않은 상태에서 MEMBER메소드를 사용할 경우

STORAGE_ERROR

ORA-06500

-6500

메모리가 부족한 경우

SUBSCRIPT_BEYOND_COUNT

ORA-06533

-6533

중첩 테이블이나 VARRAY의 요소값에 접근할 때, 명시한 인덱스 번호가 콜렉션 전체 크기를 넘어설 경우

SUBSCRIPT_OUTSIDE_LIMIT

ORA-06532

-6532

중첩 테이블이나 VARRAY의 요소값에 접근할 때, 잘못된 인덱스 번호를 사용할 경우(, 인덱스 번호로 -1 사용시)

SYS_INVALID_ROWID

ORA-01410

-1410

오라클 리소스를 기다리는 동안 타임아웃이 발생했을 때

TIMEOUT_ON_RESOURCE

ORA-00051

-51

오라클이 리소를 기다리는 동안 타임아웃이 발생했을 때

TOO_MANY_ROWS

ORA-01422

-1422

SELECT INTO 문장에서 하나 이상의 로우가 반환될 때

VALUE_ERROR

ORA-06502

-6502

문자형 데이터를 숫자형으로 변환하는데 타당한 수사가 아니거나 값을 할당 시 값의 크기가 선언된 변수의 크기를 넘어서는 경우와 같이 값을 변환하거나 할당할 때 오류가 발생할 경우

ZERO_DIVIDE

ORA-01476

-1476

제수가 0일 때

 

[출처] PL/SQL EXCEPTION 종류|작성자 셩이

Posted by Julyus
Oracle2009. 9. 3. 10:56
대처1



Table Lock 걸렸을 때 처리하는 법 (ORA-00054) 오라클/기타DB

2007/04/26 14:26

복사 http://blog.naver.com/xacti/80037278371

ORA-00054 발생했을때 처리하는 방법.

 

여러가지 문제가 있을수 있지만...

Commit을 안했다던지... 무슨 작업중이라던지... 이유는 다양합니다.

Truncate같은 명령은... ORA-00054라는 에러라도 출력하지만...

DML(Delete) 문장 실행시 그냥 멈쳐버립니다.ㅡㅡ;;;

오라클 재시작!!! 하면 간다하게 처리됩니다.^^;

하지만 DB 특성상 재시작 할수 없는 경우가 많죠~

그때는 Lock걸린 세션을 찾아서.. Kill해주면 됩니다.

다음 명령어로 검색.

select a.sid , a.serial#
from v$session a , v$lock b , dba_objects c
where a.sid = b.sid and b.id1 = c.object_id
and b.type = 'TM' and c.object_name='TABLE_NAME';

   SID    SERIAL#
------- ----------

  2715      40427


Kill은 이렇게...

alter system kill session '2715,40427';

[출처] Table Lock 걸렸을 때 처리하는 법 (ORA-00054)|작성자 핑크



[oracle]table lock 종류 Oracle10g

2008/01/29 19:33

복사 http://blog.naver.com/dshnaldo/100046855801

제발 잊지말자 이거 천천히 읽으면 이해되요ㅠㅠ

 

User가 INSERT, DELETE, UDATE, SELECT .. FROM .. FOR UPDATE OF 문장을 실행하면,
변경되는 ROW에 대한 ROW LOCK과 TABLE에 대한 TABLE LOCK이 발생.

ROW LOCK (TX)
INSERT INTO … VALUE.. ;,
DELETE FROM …WHERE …;,
UPDATE ..SET ..WHERE ..;,
SELECT .. FROM .. WHERE .. FOR UPDATE OF.. ; 등의 SQL 문장에서,
WHERE 조건에 해당되는 ROW에 대하여 다른 유저들이 변경할 수 없도록 EXCLUSIVE LOCK 이 생긴다.
TX LOCK이 걸린 ROW는 DML 문장을 실행한 유저가 COMMIT이나 ROLLBACK을 할때 까지 걸리므로
다른 유저들이 변경할 수 없다.

TABLE LOCK (TM)
TX LOCK이 걸린 ROW가 저장된 TABLE에 대한 LOCK 이다.
DML SQL 문장을 수행하는 중에,
해당 테이블이 ALTER 나 DROP 되는 것을 방지하기 위해서 TM LOCK을 사용한다.
같은 테이블에서 실행할 수 있는 SQL 문장과 실행할 수 없는 SQL 문장을 구분하기 위해서다.
TM LOCK에는 RS(ROW SHARE), RX(ROW EXCLUSIVE), S(SHARE), SRX(SHARE ROW EXCLUSIVE), X(EXCLUSIVE) 가 있다.

 

RS : ROW SHARE LOCK
table에 lock을 걸려는 transaction이 table안에 lock된 row가 있고
그 row를 변경시키고자 하는 것을 가리킨다.

SELECT .. FROM .. WHERE .. FOR UPDATE OF .. ; 이나
LOCK TABLE .. IN ROW SHARE MODE; 명령에 의해 해당 테이블에는 RS LOCK 이 생긴다.
RS LOCK 이 걸린 테이블에는 RS, RX, S, SRX LOCK 을 걸 수 있고, X LOCK 은 걸 수 없다.

단, SELECT .. FROM FOR UPDATE OF 명령에 의해 WHERE 조건에 걸린 ROW 에 대해서는
TX LOCK 이 생기므로 이 ROW 에 대해서 UPDATE, DELETE 를 실행할때는 테이블에 대해서는
RX LOCK이 생기므로 에러는 안 나지만, COMMIT 이나 ROLLBACK 할때까지 WAITING 을 한다.

SELECT .. FOR UPDATE OF; 문장은 테이블에는 RS LOCK 이므로 에러는 안나지만,
ROW 에 대해서는 TX LOCK 이 걸리므로 WAITING 한다.

 

RX : ROW EXCLUSIVE LOCK
lock이 걸린transaction이 그 table에 있는 row들에 대해
하나 이상의 update를 수행하고자 하는 것을 가리킨다.

UPDATE ..;, INSERT INTO ..;, DELETE FROM ..; 이나
LOCK .. IN ROW EXCLUSIVE MODE ; 명령에 의해 테이블에 걸리는 LOCK 이다.
RX LOCK 도 RS LOCK 과 비슷한 내용이고, 단지 S, SRX, X LOCK 을 걸 수 없다.

 

S : SHARE LOCK
Transaction에 의해서 걸리는 share table lock은 다른 transaction들이
단지, table에 대한 query, SELECT … FOR UPDATE를 이용한 특정 row에 대한
lock, LOCK TABLE … IN SHARE MODE문들을 성공적으로 수행하기 위해서 허용한다.

LOCK .. IN SHARE MODE; 에 의해 테이블에 생긴 LOCK 이다.
S LOCK 은 같은 테이블에 대해서 RS, S LOCK 만 가능하고, RX, SRX, X LOCK 을 걸 수는 없다.
SQL> LOCK TABLE EMP IN SHARE MODE;

 

SRX : SHARE ROW EXCLUSIVE
한 시점에 주어진 table에 대해 하나의 share row exclusive table lock만이 걸릴 수 있다.
transaction에 의해 걸린 share row exclusive table lock은
다른 transaction이 query을 하거나 SELECT … FOR UPDATE로
특정 row를 lock하는 것을 허용하나 table의 갱신은 허용하지 않는다.

LOCK TABLE .. IN SHARE ROW EXCLUSIVE MODE; 에 의해 테이블에 생긴 LOCK 이다.
SRX LOCK 은 같은 테이블에 대해서 RS LOCK 만 가능하고 RX, SRX, S, X, LOCK 을 걸 수 없다.
SQL> LOCK TABLE 사원 IN SHARE ROW EXCLUSIVE MODE;

 

X : EXCLUSIVE
lock을 건 transaction이 table에 대한 access를 exclusive write로 허용하는
table lock의 가장 제한적인모드

LOCK TABLE .. IN EXCLUSIVE MODE; 에 의해 테이블에 생긴 LOCK 이다.
X LOCK 은 같은 테이블에서는 어떠한 LOCK 도 걸 수 없다.
즉, DROP TABLE ..;, ALTER TABLE ..; 등의 DDL 문장에 의해 테이블에 생기는 LOCK 이다.

Posted by Julyus
Oracle2009. 6. 24. 17:25

※ Error관련 내장함수
- SQLCODE : 현재 발생한 오류에 따른 오류 코드를 반환
- SQLERRM : 오라클 오류 코드와 연결된 오류 메시지를 반환

 

 

※ 문자열 함수
ASCII <--> CHAR : ASCII, CHAR로 변환하기

 

CONCAT : 조합하기(||와 같은 역할)

 

SUBSTR : 자르기

 

SUBSTRB : 자르기

 

INITCAP : 첫글자만 대문자, 나머지글자는 소문자로 변환하기

 

UPPER / LOWER : 대문자/소문자로 변환하기

 

LPAD / RPAD : 왼쪽채우기/오른쪽채우기

 

LENGTH : 문자열의 길이 반환하기

 

LANGUAGE : KOREAN_LOREA.KO16KSC5601/AMERICAN_AMERICA.US7ASCII

 

REPLACE : 문자 대체하기

 

INSTR : 문자열에서 해당문자의 위치 반환하기

 

LTRIM / RTRIM : 문자열의 왼쪽/오른쪽 공백 버리기

 

TRANSLATE : 문자 대체하기(REPLACE와 같은 기능이나 스트링단위가 아닌 문자단위)

 

 


※ 수학 함수
ROUND : 반올림(해당자리수까지 보여주면서 반올림)

TRUNC : 버림값
MOD : 나눈후 나머지
CEIL : 무조건 올림

POWER : 승수값

GREATEST : 주어진 데이터중 최대값

LEAST : 주어진 데이터중 최소값

 

 


※ DATE 함수
- ADD_MONTHS : 지정된 날짜에 1달을 더함. 만일 결과가 나온 달이 현재 일수보다

  작은 일수를 갖고 있는 달로 변경되면 그 달의 마지막 날을 반환
- LAST_DAY : 주어진 달의 마지막 날을 반환
- MONTHS_BETWEEN : 두 날짜 사이의 개월수를 계산. 만일 두 날짜가 그 달의 마지막

  이라면 정수를 반환하고 그렇지 않으면 한달을 31로 계산한 분수값을 반환
- NEW_TIME : 사용자가 지정한 시간대에 대한 시간/날짜 값을 반환
- NEXT_DAY : 시작 날짜 다음에 지정된 요일이 처음으로 나오는 날짜를 반환
- ROUND : 월,년도,세기 등과 같이 선택한 날짜 파라미터를 반올림
- SYSDATE : 시스템 날짜와 시간을 DATE형식으로 반환
- TRUNC : 일,월 등과 같이 지정된 날짜 파라미터를 잘라냄
- date + number : date에 number만큼 후의 날짜를 보여줌(일수를 더함)
- date - number : date에 number만큼 전의 날짜를 보여줌(일수를 뺌)
- date1 - date2 : date1에서 date2까지의 총 일수를 보여줌(어떤날짜에서 다른날짜를 뺌)
- date1 + 숫자/24 : date1에서 시간을 더해 날짜를 보여줌(시간에 날짜를 더함)

MONTHS_BETWEEN : 날짜와 날짜 사이의 개월수를 반환

 

ADD_MONTHS : 날짜에 개월수를 더한 일자를 반환

 


NEXT_DAY : 해당일 다음에 오는 특정 요일을 반환

 


LAST_DAY : 지정한 달의 마지막날 반환

 


SYSTEM시간

 


※ 변환 함수
① TO_CHAR : DATE형, NUMBER형을 문자형으로 변환
② TO_NUMBER : 문자를 숫자형으로 변환
③ TO_DATE : 날자 형태의 문자열을 format에 맞게 날짜 형식으로 변환
     to_date('" + ls_refill_date2 + "235959','yyyymmddhh24miss') "

④ NUMBER와 DATE를 문자타입으로 변환
⑤ TO_TIMESTAMP : 문자열을 timestamp형식으로 변환
⑥ NVL : null일때 0을 보여줌
⑦ DECODE : default 반환, 디폴트가 없는 경우에는 null값을 반환. 반환하는 값은 최초의

    result와 같은 데이터타입(if..then..else기능을 구사하는 유용한 함수)
⑧ NULLIF : 결과값이 동일하면 null, 그렇지 않으면 첫번째 인자값 반환
⑨ NVL2 : 첫번째 인자값이 null이 아니면 두번째 인자값, null이면 세번째 인자값 반환

 

* 오라클의 환경변수 값 구하기
   select userenv('language') "lanugage",userenv('sessionid') "sessionid"

   from dual;

 

 

※ 그룹 함수
① COUNT : 행의 개수를 구함
② AVG : 평균을 구함
③ SUM : 합계를 구함
④ MIN : 최소값을 구함
⑤ MAX : 최대값을 구함
⑥ STDDEV : 표준편차를 구함
⑦ VARIALCE : 분산을 구함
⑧ VSIZE : 어떤값의 바이트수를 구함

 

 

 

 

** 변환함수/그룹함수는 예를 아직 못 올렸네요

     조만간 업데이트 할게요^-^

[출처] 오라클 함수|작성자 공부중

Posted by Julyus