캠핑과 개발

SQL Developer Data Modeler 명명 표준은 모든 이름에 사용 된 용어 (부분)는 용어집에 정의되어 있습니다. 용어집은 유효성 검증 및 이름 변환 프로세스 중에 사용됩니다. 정의 된 용어가 없으면 번역이 수행되지 않습니다.


용어 정의

하나 이상의 용어집을 유효성 검사 용어집으로 정의 할 수 있습니다. 둘 이상의 용어집이있는 경우 정의 된 용어집 중 하나를 사용하여 유효성을 검사 할 수있는 경우 이름은 유효한 것으로 간주됩니다.

서로 다른 용어집을 사용하여 개별 도메인 (영역)을 나타낼 수 있습니다.

그러나 많은 용어집을 함께 사용하면 예측 프로세스에서 약어를 사용할 때 예기치 않은 결과가 발생할 수 있습니다.

예 : AP는 'Accounts-Payable'일 수 있지만 다른 용어집에 정의 된 경우 '실제 게재 위치'와 일치 할 수 있습니다.

유효성 검사 프로세스에 사용되는 용어집을 추가하려면 추가 단추를 선택하고 추가 용어집을 포함하십시오.



용어집 편집기 사용

새 또는 기존 용어집을 이름 지정 표준 목록에 추가하여 사용할 수 있습니다.

SQL Developer Data Modeler는 Glossary Editor를 사용하여 새로운 용어집을 작성하는 기능을 제공합니다.

편집기를 호출하려면 Tools -> Glossary Editor를 선택합니다. 편집기를 사용하여 독창적 인 용어로 고유 한 용어집을 가져 오거나 정의 할 수 있으며 한 단어 또는 여러 단어를 사용하여 각 용어를 기본 또는 클래스 단어, 수정 자 또는 한정자 또는 이들의 조합으로 분류 할 수 있습니다.

각 용어에 대한 약어, 대체 약어 및 간단한 설명을 정의 할 수도 있습니다.

편집기를 사용할 때 처음부터 용어집을 작성하거나 다른 SQL Developer Data Modeler 용어집 파일에서 정의를 가져 와서 수정할 수 있습니다.

이름과 설명 외에도 다음 옵션을 설정할 수 있습니다.


Incomplete Modifiers: 기본 가정은 이름에 사용 된 모든 용어가 용어집에 정의되어야한다는 것입니다.

이 옵션을 선택하면 수식어와 한정어를 용어집에 정의해야하는 것은 아닙니다.

즉, 용어집에서 찾을 수없는 이름 부분이 이름 구조의 수정 자 또는 한정자와 일치하는 경우 이름 유효성 검사가 성공 함을 의미합니다.


Case Sensitive: 이것은 유효성 검증이 대소 문자를 구분하는지 여부를 정의합니다.

예 : '대소 문자 구분'을 선택하면 Code와 CODE가 다릅니다.


Unique Abbreviations: 약어의 고유성은 강제되지 않으므로 하나의 약어를 모든 단어 형식에 사용할 수 있습니다.

예 : ADMIN = Administrator, Administration, Administrative 또는 같은 약어로 세 가지 용어를 사용할 수 있습니다.

이러한 정의는 이름 유효성 검사와 이름 변환이 올바른 모든 용어가 동일한 분류 설정을 갖는 경우에만 결과가 나타납니다.

상태가 선택되지 않음에서 확인 됨으로 변경되면 다음 정보가 포함 된 보고서가 표시됩니다.


• 고유하지 않은 약어

• 대체 약어

• 약어가없는 단어


Separator: 이것은 다중 단어 용어에 대한 단어 분리 기호를 정의합니다. 용어집이 용어집 편집기에로드되면 구분 기호 설정이 검사됩니다.

구분 기호가 공백 문자가 아닌 경우 이름에 공백이있는 모든 용어를 나타내는 보고서가 표시됩니다.

공간을 정의 된 용어집 구분 기호로 바꾸는 옵션도 있습니다.


Apply new separator: 이렇게하면 여러 단어로 된 기존 구분 기호가 대체됩니다.



용어 속성 정의

Name : 논리적 모델에서 사용되는 표준 용어를 기술

Plural :  복수형

Abbreviation : 영문 약어명

Alt. Abb. : 영문명을 기술

Prime Word: Prime Word는 정의되는 객체 또는 요소를 식별합니다. 

일반적으로 이러한 객체는 조직에서 정보를 유지하고자하는 사람, 장소, 사물 또는 이벤트를 나타냅니다.

Prime Word는 데이터베이스 시스템을 쿼리 할 때 기본 검색 식별자로 사용되며 비즈니스 용도에 따라 일반 대 특정 분류 체계를 개발하기위한 기본 키워드 목록을 제공합니다.

Customer Address의 CUSTOMER는 Prime Word의 예입니다.

Class Word: Class Word는 데이터 요소 이름에서 가장 중요한 명사입니다.

Class Word는 데이터 요소의 사용 또는 용도를 식별합니다.

Class Word는 데이터 요소 이름의 객체 (Prime Word)에 대해 유지되는 정보 유형을 지정합니다.

고객 주소의 ADDRESS는 Class Word의 예입니다.

Modifier:  Class Word 또는 Prime Word에 대한 추가 정보를 제공합니다.

수식어는 형용사 또는 명사 일 수 있습니다.

Customer Delivery Address(고객 배달 주소)의 DELIVERY(배달)은 Modifier의 예입니다.

그외 Modifier 예제 : 연간, 분기 별, 최소 및 최소

Qualifier :  Class Word와 함께 값 도메인 내의 클래스 단어의 특성을 더 자세히 설명하거나 객체에 첨부 할 수있는 정보 유형을 지정하는 특수한 종류의 수정 자입니다. 예 : FEET, METERS, SECONDS, and WEEKS.



datamodelernamingstandards-167685.pdf

Data Modeler User's Guide.pdf


Oracle Sql Developer Data Modeler 툴을 사용하기 전에 설정하는 정보다.


1. 언어 변경


Oracle Sql Developer Data Modeler를 한글로 설정하면 엔티티의 속성이 제대로 반영되지 않는 경우가 있다. 이를 해결 하기 위해서는 영문으로 변경하여 사용한다.

영문으로 변경하는 방법은 "datamodeler/datamodeler/bin/datamodeler.conf" 파일을 편집기로 연 후 맨 아래에 아래 항목을 입력한 후 저장한다.

 

AddVMOption -Duser.language=en

AddVMOption -Duser.country=US


영문으로 바꿔도 한글 사용은 가능하다.

0. DBA 권한으로 접속

./sqlplus /nolog //sqlplus 접속

SQL>connect /as sysdba


1. Table space 생성

CREATE TABLESPACE 테이블스페이스명

DATAFILE '/oradata/orcl/테이블스페이스명.dbf' 

SIZE 100M autoExtend on next 100M

FLASHBACK ON;


2. Index Table space 생성

CREATE TABLESPACE 인텍스 테이블스페이스명

DATAFILE '/oradata/orcl/인덱스 테이블스페이스명.dbf'  

SIZE 100M  autoExtend on

FLASHBACK ON;


3. TEMP table space 생성

CREATE TEMPORARY TABLESPACE TEMP테이블스페이스명

TEMPFILE '/oradata/orcl/TEMP테이블스페이스명.dbf'  

SIZE 100M  autoExtend on;


4. 테이블 스페이스 삭제

DROP TABLESPACE 테이블스페이스명

INCLUDING CONTENTS AND DATAFILES

CASCADE CONSTRAINTS; 


- INCLUDING CONTENTS : 테이블 스페이스에 데이터가 이미 포함된 경우 내용을 포함한 모두 삭제

- CASECADE CONSTRAINTS : 기본키가 설정되어 있는 경우에 child에 FORIEGN KEY를 삭제하고 테이블 스페이스도 삭제


5. USER 생성

create user 사용자아이디 identified by 비밀번호

default tablespace 테이블스페이스명

temporary tablespace TEMP테이블스페이명;



/* 인덱스 테이블 생성시 사용자 인덱스 테이블에 준다. */

ALTER USER 사용자아이디 QUOTA UNLIMITED ON 인덱스테이블명;


6. 권한주기

GRANT CONNECT, RESOURCE, CREATE VIEW, CREATE PROCEDURE, CREATE SEQUENCE TO 사용자 아이디

GRANT CREATE SYNONYM TO 사용자 아이디;



개별 예제)

GRANT CONNECT, DBA, RESOURCE TO 유저명; /*모든 권한 주기*/

GRANT CREATE SESSION TO 유저명; /* 데이터베이스 접근 권한 */ 

GRANT CREATE DATABASE LINK TO 유저명;

GRANT CREATE MATERIALIZED VIEW TO 유저명;

GRANT CREATE PROCEDURE TO 유저명;

GRANT CREATE PUBLIC SYNONYM TO 유저명;

GRANT CREATE ROLE TO 유저명;

GRANT CREATE SEQUENCE TO 유저명;

GRANT CREATE SYNONYM TO 유저명;

GRANT CREATE TABLE TO 유저명; /* 테이블을 생성할 수 있는 권한 */

GRANT DROP ANY TABLE TO 유저명; /* 테이블을 제거할 수 있는 권한 */

GRANT CREATE TRIGGER TO 유저명; 

GRANT CREATE TYPE TO 유저명; 

GRANT CREATE VIEW TO 유저명;




7. 생성된 테이블 스페이즈 크기 변경

ALTER DATABASE DATAFILE '/oradata/orcl/테이블스페이스명.dbf' 

RESIZE 200M;



8. 기존 테이블스페이스 자동확장 변경

ALTER DATABASE DATAFILE '/oradata/orcl/테이블스페이스명.dbf' 

AUTOEXTEND ON NEXT 10m

MAXSIZE 100m;


9. 사용자 기본 테이블스페이스 변경

ALTER USER 유저명 default tablespace 테이블스페이스명;



10. Table 의 Tablespace 변경

ALTER TABLE 테이블명 MOVE Tablespace 테이블 스페이스명;


'DEVELOPMENT > Database' 카테고리의 다른 글

windows mongodb install  (0) 2015.01.14
ORACLE 리스너 시작 종료  (0) 2014.04.02
[ 오라클 ] 테이블 락 조회/ 해제 방법  (0) 2013.04.23
MySQL Table Schema 확인  (0) 2012.05.17
mysql DB 백업  (0) 2012.05.17

오라클을 사용할때 

어느 순간 데이터가 삭제가 않되는 상태가 발생했다. 

일명 테이블에 락이 걸린것이다.

테이블에 락이 걸리는 이유 사용중 비정상적이 종료로 인해서 발생한다.


락을 제거하기 위해서는 SYSTEM 계정(관리자)으로 접근해서 작업을 진행해야 한다.

일반 계정으로는 불가능하다.

 

1 .락이 걸린 테이블이 유무 확인

select *
from v$locked_object
where oracle_username = 'oracle user name'
; 


2 .락이 걸려있는 테이블 갯수 확인

SELECT count(*)
FROM v$locked_object vo , dba_objects do 
WHERE vo.object_id = do.object_id

 3. 락 걸린 섹션 확인 

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'


 4.락이 걸린 테이블명을 알고 있은 경우.

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='테이블명'

결과  값

SESSION_ID/SERIAL_NO/OS_USER_NAME/ORACLE_USERNAME/STATUS
24                1102            Administrator       ABCDWRK                  INACTIVE
92                4665            OPS$ABCD         OPS$ABCDUSR           INACTIVE
92.               4665            OPS$ABCD         OPS$ABCDUSR           INACTIVE


 

형식 

alter system kill session 'sid, serial#'

sid : session_id

serial# : serial_no 을 의미한다.


alter system kill session '24, 1102'; 

commit ;

 

 

출처 : http://twinstarbox.tistory.com/entry/%EC%98%A4%EB%9D%BC%ED%81%B4-%ED%85%8C%EC%9D%B4%EB%B8%94-%EB%9D%BD-%EC%A3%BC%ED%9A%8C-%ED%95%B4%EC%A0%9C-%EB%B0%A9%EB%B2%95

'DEVELOPMENT > Database' 카테고리의 다른 글

ORACLE 리스너 시작 종료  (0) 2014.04.02
ORACLE 테이블 스페이스 관리 명령  (0) 2014.04.02
MySQL Table Schema 확인  (0) 2012.05.17
mysql DB 백업  (0) 2012.05.17
MySQL table 용량 확인  (0) 2012.05.17

하나의 DB에서 다른 DB table 데이터가 필요할때 사용

DB Link


##create database link

 

CREATE [public] DATABASE LINK [dblink_name]

  CONNECT TO [user_id]

  IDENTIFIED BY password

  USING '[SID]'

 

[PUBLIC] : 생성한 사용자만이 아닌 다른 모든 유저들이 사용할 수 있도록 지정

                 PUBLIC을 제외하고 생성하면 생성한 계정만 LINK를 사용할 수 있음

[dblink_name] : 생성하고자 하는 DB LINK명

[user_id] : 연결하고자 하는 서버의 오라클 계정

[password] : 해당 오라클 계정의 비밀번호

[sid] : 서버의 tnsnames.ora에 정의되어있는 서비스 명



[사용예제]

remote db 에 대한 커넥션스트링이 ccc 로 tnsnames.ora 파일에 만들어져 있고,
계정의 id/pw 가 각각 aaa, bbb 라고 할 때,
dblink를 아래와 같이 만든다.

CREATE PUBLIC DATABASE LINK 디비링크명
CONNECT TO aaa
IDENTIFIED BY bbb
USING 'ccc'


[출처] [Oracle] DB link 생성|작성자 juner84

'DEVELOPMENT > Database' 카테고리의 다른 글

mysql DB 백업  (0) 2012.05.17
MySQL table 용량 확인  (0) 2012.05.17
index 생성  (0) 2012.05.17
Oracle Hint  (0) 2012.05.17
MySQL의 기본 설정 파일(my.cnf)의 위치 확인  (0) 2011.11.29

## 테이블 인덱스 생성

 

Create index [인덱스 명] on [테이블명]([컬럼명], ....)

 

## 테이블 인덱스 삭제

 

Drop index [인덱스 명]

 

## 인덱스 생성시 주의 사항

1. 인덱스를 만들 때

 - where절이나 조인 조건에서 Column을 자주 사용할 때

 - Column이 넓은 범위의 값을 가질때 (Column 범위가 넓을 때)  

 - 많은 Null 값을 갖는 Column일때

 - 테이블 data가 많고 그 테이블에서 쿼리 되는 행의 수가 전체의 10~15%정도 일때

 

2. 인덱스를 만들지 않아야 할때

 - 테이블이 작을때

 - Column의 질의의 조건으로 사용되는 경우가 별로 없을때

 - 대부분의 질의가 행의 10~15% 이상을 검색한다고 예상될때

 - 테이블이 자주 변경될 때

 

테이블 조회시 인덱스를 타게 하려면 where절 조건에 인덱스 순서로 조건을 걸어주면 좋다

'DEVELOPMENT > Database' 카테고리의 다른 글

MySQL table 용량 확인  (0) 2012.05.17
DB link 생성  (0) 2012.05.17
Oracle Hint  (0) 2012.05.17
MySQL의 기본 설정 파일(my.cnf)의 위치 확인  (0) 2011.11.29
mysql 소스 설치  (0) 2011.11.29

Oracle Hint

DEVELOPMENT/Database2012. 5. 17. 17:21

1. 사용법
{SELECT | INSERT | UPDATE | DELETE} /*+ hint [text] [hint [text]] ... */
혹은
{SELECT | INSERT | UPDATE | DELETE} --+ hint [text] [hint [text]] ...
 
- 이러한 힌트의 사용은 SQL 전체가 아닌 쓰여진 SQL 블럭에만 적용됩니다.


2. 힌트의 종류 별 분류
Optimization Goals and Approaches
             ALL_ROWS 혹은 FIRST_ROWS
             CHOOSE
             RULE
 
Acess Method Hints
             AND_EQUAL
             CLUSTER
             FULL
             HASH
             INDEX 혹은 NO_INDEX
             INDEX_ASC 혹은 INDEX_DESC
             INDEX_COMBINE
             INDEX_FFS
             ROWID
 
Join Order Hints
             ORDERED
             STAR
 
Join Operation Hints
             DRIVING_SITE
             HASH_SJ, MERGE_SJ 혹은 NL_SJ
             LEADING
             USE_HASH 혹은 USE_MERGE
             USE_NL
Parallel Execution Hints
             PARALLEL 혹은 NOPARALLEL
             PARALLEL_INDEX
             PQ_DISTRIBUTE
             NOPARALLEL_INDEX
 
Query Transformation Hints
             EXPAND_GSET_TO_UNION
             FACT 혹은 NOFACT
             MERGE
             NO_EXPAND
             NO_MERGE
             REWIRTE 혹은 NOREWRITE
             STAR_TRANSFORMATION
             USE_CONCAT
 
Other Hints
             APPEND 혹은 NOAPPEND
             CACHE 혹은 NOCACHE
             CURSOR_SHARED_EXACT
             DYNAMIC_SAMPLING
             NESTED_TABLE_GET_REFS
             UNNEST 혹은 NO_UNNEST
             ORDERED_PREDICATES
  
힌트의 설명 및 사용법
 
ALL_ROWS
             /*+ ALL_ROWS */
-         최소한의 자원을 사용하여 결과값의 전체를 추출하게 합니다.
 
AND_EQUAL
             /*+ AND_EQUAL (table index index [index] [index] [index] ) */
-         복수의 단일 컬럼을 스캔하여 머지 방식으로 처리하게 합니다.
 
APPEND_HINT
             /*+ APPEND */
-         직렬 모드 데이터베이스에서 Direct INSERT를 실행하게 합니다.
-         Enterprise Edition 이 아닌 데이터베이스의 기본 모드는 직렬 모드입니다. 이러한 직렬 모드 데이터 베이스에서의 INSERT 작업은 Conventional를 기본값으로 하고 병렬 처리 시에는 Direct INSERT를 기본값으로 합니다.
 
CACHE_HINT
             /*+ CACHE (table) +/
-         풀 테이블 스캔의 사용 시, 테이블에서 읽어온 블럭을 버퍼의 LRU 리스트 의 MRU 쪽에 위치시킵니다. 작은 테이블의 사용 시 유용합니다.
 
CHOOSE_HINT
             /*+ CHOOSE +/
-         Rule-Based 와 Cost-Based 방식 간의 선택을 유도합니다. 선택 기준은 사용 객체의 분석 정보 존재 여부이며, 사용되는 객체들중 하나라도 분석 정보가 존재한다면 Cost-Based 방식을 사용하게 됩니다.
 
CLUSTER_HINT
             /*+ CLUSTER (table) +/
-         지정 테이블의 클러스터 스캔을 유도합니다. 클러스터된 객체에만 사용할 수 있습니다.
 
CURSOR_SHARING_EXACT
             /*+ CURSOR_SHARING_EXACT +/
-         바인드 변수 값의 교체를 불가능하게 합니다.
-         기본적으로 CURSOR_SHARING 파라미터를 사용하여, 안전하다고 판단될 시 SQL 내의 바인드 변수 값을 교체할 수 있게 되어 있습니다.
 
DRIVING_SITE
             /*+ DRIVING_SITE (table) +/
-         오라클이 선택한 SITE 대신, 지정한 SITE를 사용하여 쿼리를 실행합니다. Rule-Based 와 Cost-Based, 두 모드 다 사용 가능합니다.
 
DYNAMIC_SAMPLING
             /*+ DYNAMIC_SAMPLING ( [table] n ) +/
-         해당 객체의 Selectivity 와 Cardinality 에 대한 보다 자세한 정보를 자동으로 생성시켜 실행합니다.
-         값은 0 부터 10 까지 지정할 수 있으며, 높을 수록 보다 자세한 정보를 생성하게 됩니다. 테이블에 해당 값을 지정하지 않았을 경우, 기본 값은 CURSOR 레벨의 값이 쓰여집니다.
 
EXPAND_GSET_TO_UNION
             /*+ EXPAND_GSET_TO_UNION +/
-         GROUP BY GROUPING SET 혹은 GROUP BY ROLLUP 등과 같은 구문을 포함하는 쿼리에 사용할 수 있습니다.
-         이 힌트는 기존의 쿼리를 개별적인 그룹 생성 후, UNION ALL 방식으로 실행되게 유도합니다.
 
FACT_HINT
             /*+ FACT (table) +/
-         스타 변형 구문에서 사용되며 해당 테이블이 FACT 테이블로 사용되게 유도합니다.
 
FIRST_ROWS
             /*+ FIRST_ROWS (n) +/
-         전체 결과값의 반환 대신 지정한 숫자만큼 로우의 결과값을 반환하는데 집중하게 유도합니다.
 
FULL_HINT
             /*+ FULL (table) */
-         지정한 테이블에 대해 풀 테이블 스캔을 유도합니다.
 
HASH_HINT
             /*+ HASH (table) */
-         지정한 테이블에 대해 hash 스캔을 수행하도록 유도합니다.
-         클러스터 테이블 만을 대상으로 합니다.
 
HASH_AJ
             /*+ HASH_AJ */
-         EXISTS 구문 뒤에 오는 서브 쿼리에 사용되며 HASH_SJ, MERGE_SJ 혹은 NL_SJ 등을 사용할 수 있습니다.
-         HASH_SJ 은 hash semi-join 이고, MERGE_SJ 은 sort merge semi-join 이며 NL_SJ 은 nested loop semi-join 입니다.
 
INDEX
             /*+ INDEX (table index [index] [index] ... ) */
-         지정한 테이블의 인덱스 스캔을 실행하도록 유도합니다.
-         Domain, B-tree, bitmap, bitmap join 인덱스 등이 사용될 수 있으나, bitmap 인덱스 들의 사용 시, INDEX 힌트보다는 INDEX_COMBINE 힌트 사용이 추천됩니다.
 
INDEX_ASC
             /*+ INDEX-ASC (table [index] [index] ... ) +/
-         해당 테이블의 인덱스를 순차적 방식으로 스캔하게 합니다.
-         해당 쿼리가 인덱스 범위 스캔의 사용 시, 인덱스 값의 순차적 방식으로 읽게 됩니다.
 
INDEX_COMBINE
             /*+ INDEX_COMBINE (table [index] [index] ... ) +/
-         해당 테이블에 Bitmap 인덱스의 존재 시, Bitmap 인덱스를 통한 액세스를 유도합니다.
-         힌트 내에 인덱스의 이름이 쓰여지지 않을 시, 해당 인덱스의 Boolean 값을 사용하여 최적의 Cost를 산출하여 실행하게 됩니다.
 
INDEX_DESC
             /*+ INDEX_DESC (table [index] [index] ... ) +/
-         지정한 인덱스에 대해 인덱스 스캔을 역순으로 실행합니다.
-         해당 쿼리가 인덱스 범위 스캔의 사용 시, 인덱스 컬럼의 값을 사용하여 역순으로 실행합니다.
-         파티션 인덱스에서는 파티션 별 개별적인 실행이 이루어집니다.
 
INDEX_FFS
/*+ INDEX_FFS (table [index] [index] ... ) +/
-         풀 테이블 스캔 대신에 빠른 풀 테이블 스캔의 실행을 유도합니다.
 
LEADING_HINT
             /*+ LEADING (table) +/
-         테이블 간의 조인 시에 지정한 테이블을 먼저 수행하도록 유도합니다.
-         두 개 이상의 LEADING 힌트의 사용 시, 힌트 자체가 사용되어 지지 않습니다.
-         ORDERED 힌트와 더불어 사용시, LEADING 힌트는 사용되지 않습니다.
 
MERGE
             /*+ MERGE (table) +/
-         각 쿼리의 결과값을 머지합니다.
-         해당 쿼리 내에 GROUP BY 절의 사용 이나 SELECT 구문에 DISTINCT 가 사용되었을 시, 머지의 실행이 가능할 경우에만 힌트가 실행됩니다.
-         IN 과 서브 쿼리의 사용 시, 서브 쿼리와 상위 쿼리 간의 상호 관계가 없을 때에만 머지의 실행이 가능합니다.
-         이 힌트는 Cost-based 가 아닙니다. 따라서 액세스하는 실행 쿼리 블럭에 MERGE 힌트가 반드시 명시되어야만 합니다. 그렇지 않을 경우 옵티마이저는 다른 실행 계획을 수립합니다.
 
MERGE_AJ
             HASH_AJ 를 참조하십시요.
 
MERGE_SJ
             HASH_AJ 를 참조하십시요.
 
NL_AJ
             HASH_AJ 를 참조하십시요.
 
NL_SJ
             HASH_AJ 를 참조하십시요.
 
NOAPPEND
             /*+ NOAPPEND +/
-         병럴 모드에서의 INSERT 작업을 Conventional 방식으로 수행합니다.
-         병렬 모드에서는 Direct-path INSERT 가, 직렬 모드에서는 Conventional INSERT가 기본값입니다.
 
NOCACHE
             /*+ NOCACHE (table) +/
-         풀 테이블 스캔의 사용 시, 테이블에서 읽어온 블럭을 버퍼의 LRU 리스트 의 LRU 쪽에 위치시킵니다. 기본 모드입니다.
 
NO_EXPAND
             /*+ NO_EXPAND +/
-         실행 쿼리 내에 OR 나 WHERE 절의 IN 이 사용되었을 시, Cost-Based 옵티마이저가 쿼리 처리를위해 OR 를 사용한 확장을 사용하는 것을 방지합니다.
-         일반적으로 옵티마이저는 위와 같은 경우 OR – 확장의 가격이 확장을 사용하지 않는 것보다 적을 시, 확장 방식으로 수행합니다.
 
NO_FACT
             /*+ NO_FACT (table) +/
-         Star 변형 시, 해당 테이블의 FACT 테이블로서의 사용을 방지합니다.
 
NO_INDEX
             /*+ NO_INDEX (table [index] [index] ... ) +/
-         지정 테이블의 인덱스 사용을 방지합니다.
 
NO_MERGE
             /*+ NO_MERGE (table) +/
-         머지 처리 방식의 사용을 방지합니다.
 
NOPARALLEL
             /*+ NOPARALLEL (table) +/
-         지정한 테이블의 병렬 처리를 방지합니다.
-         테이블의 지정된 PARALLEL 값에 대해서 우선권을 가집니다.
-         중첩 테이블에 대해서는 병렬 처리를 할 수 없습니다.
 
NOPARALLEL_INDEX
             /*+ NOPARALLEL_INDEX (table [index] [index] ... ) +/
-         인덱스 스캔 작업의 병렬 처리를 방지합니다.
-         인덱스에 지정된 PARALLEL 값에 우선권을 가집니다.
 
NO_PUSH_PRED
             /*+ NO_PUSH_PRED (table) +/
-         결과값에 대한 조인 방식 서술의 강제적 수행을 방지합니다.
 
NO_PUSH_SUBQ
             /*+ NO_PUSH_SUBQ +/
-         서브 쿼리의 결과값을 머지하지 않는 실행 계획이 실행 계획 설립 단계에서 제일 마지막으로 참조되는 것을 방지합니다.
-         일반적으로 서브 쿼리의 Cost 가 높거나, 처리 로우의 갯수를 크게 줄여주지 못할 때에는 서브 쿼리를 마지막에 참조하는 것이 성능 향상에 도움이 됩니다.
 
NOREWRITE
             /*+ NOREWRITE +/
-         해당 쿼리 블럭의 쿼리 재생성의 실행을 방지합니다.
-         QUERY_REWRITE_ENALBE 파라미터에 대해 우선권을 가집니다.
-         NOREWRITE 힌트의 사용 시, Function-Based 인덱스의 사용이 금지됩니다.
 
NO_UNNEST
             /*+ NO_UNNEST +/
-         해당 서브 쿼리 블럭의 UNNESTING 설정의 사용을 방지합니다.
 
ORDERED
             /*+ ORDERED +/
-         FROM 절에 나열된 테이블의 순서대로 조인 작업을 실행합니다.
 
ORDERED_PREDICATE
             /*+ ORDERED_PREDICATE +/
-         옵티마이저에 의한 조인 관계의 Cost를 산출하기 위해 미리 정해둔 조인 관계 별 실행 순서의 사용을 방지합니다.
n         인덱스 키를 사용한 조인 관계들은 제외됩니다.
-         이 힌트는 쿼리의 WHERE 절에 사용하십시요.
 
PARALLEL
             /*+ PARALLEL (table [ [, n |, DEFAULT |, ] [, n | DEFAULT ] ] ) +/
-         병렬 처리에 사용될 서버 프로세스의 갯수를 설정합니다.
-         병렬 처리 조건에 위배될 시, 힌트는 사용되지 않습니다.
-         임시 테이블에 대한 PARALLEL_HINT 사용 시, 힌트는 사용되지 않습니다.
 
PARALLEL_INDEX
             /*+ PARALLEL_INDEX (table [ [index] [, index]...]
[ [, n |, DEFAULT |, ] [, n | DEFAULT ] ] ) +/
-         파티션 인덱스의 인덱스 범위 스캔 작업의 병렬 처리에 할당될 서버 프로세스의 갯수를 지정합니다.
 
PQ_DISTRIBUTE
             /*+ PQ_DISTRIBUTE (table [,] outer_distribution, inner_distribution) +/
-         병렬 조인 시, Producer 프로세스와 Consumer 프로세스 간의 데이터 전달 방식을 지정합니다.
 
PUSH_PRED
             /*+ PUSH_PRED (table) +/
-         결과값에 대한 조인 방식 서술의 강제적 수행을 실행합니다.
 
PUSH_SUBQ
             /*+ PUSH_SUBQ +/
-         머지가 불가능한 서브 쿼리들의 우선 실행 계획을 실행 계획 수립시 먼저 참조하도록 합니다.
-         서브 쿼리의 사용 객체가 Remote 테이블이거나, 머지 조인의 사용 시 힌트는 실행되지 않습니다.
 
REWRITE
             /*+ REWRITE [ ( [materialized_view] [materialized_view]...) ] +/
-         실행 계획의 가격에 상관없이 Materialized View 를 사용하여 쿼리 재생성을 하도록 합니다.
-         Materialized View 를 지정할 시, 지정한 Materialized View 의 가격에 상관없이 무조건 쿼리 재생성을 실행합니다.
-         Materialized View 를 지정하지 않을 시, 오라클은 사용 가능한 모든 Materialized View 를 참조하여 그 중 가장 가격이 낮은 Materialized View 를 사용하여 쿼리 재생성을 합니다.
-         Materialized View 를 지정하지 않는 힌트의 사용이 권장됩니다.
 
ROW_ID
             /*+ ROWID (table) +/
-         지정한 테이블의 스캔을 ROWID 방식으로 수행하게 합니다.
 
RULE
             /*+ RULE +/
-         실행 계획을 Rule-Based 방식으로 실행하게 합니다.
-         해당 쿼리 블럭에 다른 힌트 또한 사용되었을 경우, 다른 힌트들은 사용되지 않습니다.
 
STAR
             /*+ STAR +/
-         Star 쿼리 계획이 사용 가능하다면, 실행하게 합니다.
-         Star 쿼리 계획이란 가장 큰 테이블이 마지막 순서로 조인되며, 조인될 시 가장 큰 테이블 내의 Concatenated 인덱스에 대해 Nested Loop 조인 방식으로 실행되는 것을 말합니다.
-         최소한 세개 이상의 테이블이 사용되며, 제일 큰 테이블의 Concatenated 인덱스의 생성에 최소한 세 개 이상의 컬럼이 사용되어야 하며, 액세스나 조인 방식에 충돌이 없어야만 이 힌트는 사용됩니다.
 
STAR_TRANSFORMATION
             /*+ STAR_TRANSFORMATION +/
-         옵티마이저가 Star 변형 작업에 최적화된 실행 계획을 수립, 실행하도록 합니다.
-         힌트를 사용하지 않을 시, 옵티마이저는 일반적인 작업에 최적화된 실행 계획을 수행합니다.
-         힌트를 사용하였어도 변형 작업에 맞추어진 실행 계획을 실행한다는 보장은 없습니다. 다른 일반적인 힌트의 사용과 마찬가지로 비교 분석 후, 오라클의 판단에 따라 다른 실행 계획이 실행될 수 있습니다.
 
UNNEST
             /*+ UNNEST +/
-         서브 쿼리 블럭에 대해 인증성 만을 검사하게 합니다.
-         인증이 되었다면 그 이상의 검증 작업없이 서브쿼리에 대한 UNNESTING 의 설정을 가능하게 합니다.
 
USE_CONCAT
             /*+ USE_CONCAT +/
-         WHERE 절의 OR 조인 을 UNION ALL 로 변경하여 수행하게 합니다.
-         일반적으로 이러한 변경은 결과값의 병합 수행의 가격이 수행하지 않을 시의 가격 보다 낮을 때에만 실행됩니다.
 
USE_HASH
             /*+ USE_HASH (table [table]...) +/
-         Hash 조인 방식으로 각 테이블을 조인하게 합니다.
 
USE_MERGE
             /*+ USE_MERGE (table [table]...) +/
-         Sort-Merge 방식으로 각 테이블을 조인하게 합니다.
 
USE_NL
             /*+ USE_NL (table [table]...) +/
- Nested-Loop 방식으로 각 테이블을 조인하게 합니다.

'DEVELOPMENT > Database' 카테고리의 다른 글

DB link 생성  (0) 2012.05.17
index 생성  (0) 2012.05.17
MySQL의 기본 설정 파일(my.cnf)의 위치 확인  (0) 2011.11.29
mysql 소스 설치  (0) 2011.11.29
ORACLE 명령문  (0) 2011.08.02


-테이블 삭제
DROP TABEL [테이블명] CASCADE CONSTRAINT;

- 기본키 삭제
ALTER TABLE [테이블명] DROP PRIMARY KEY;

- 기본키 삭제
ALTER TABLE [테이블명] DROP PRIMARY KEY;

- 인덱스 삭제
DROP INDEX [인덱스명];

-제약조건 삭제
ALTER TABLE [테이블명] DROP CONSTRAINT [제약조건명] CASCADE;

- UNIQUE  생성
CREATE UNIQUE INDEX [UNIQUE 명] ON [테이블명]([컬럼명..]);

- 기본키 생성
ALTER TABLE [테이블명] ADD CONSTRAINT [기본키명] PRIMARY KEY(컬럼명)


- 휴지통 비우기
PURGE RECYCLEBIN;

- 테이블 완전 삭제 (휴지통에 저장되지 않음)
DROP TABLE [테이블명] CASCADE CONSTRAINT PURGE;

- 휴지통에 있는 테이블 복원
FLASHBACK TABLE [테이블명] TO BEFORE DROP;

- 컬럼명 변경
ALTER TABLE [테이블명] RENAME COLUMN [변경전 컬럼명] TO [변경후 컬럼명]

INSERT INTO [대상테이블]
SELECT * FROM [테이블]

- 임시 테이블 생성 후 데이터 복사
CREATE TABLE [임시 테이블명] AS SELECT * FROM [테이블명]


RENAME MI_DB_NSC_LDS_20110802 TO MI_DB_NSC_LDS;

'DEVELOPMENT > Database' 카테고리의 다른 글

MySQL의 기본 설정 파일(my.cnf)의 위치 확인  (0) 2011.11.29
mysql 소스 설치  (0) 2011.11.29
MERGE INTO 사용법  (0) 2011.07.09
mysql 5.5 db 생성 및 사용자 권한 주기  (0) 2011.03.23
오라클 모니터링 SQL  (0) 2011.02.25

테이블에서 특정조건의 데이터가 있을 경우 업데이트, 없을 경우 인서트 해야 하는 상황이 종종 발생하는데,
이럴 경우, 오라클 9i 이상에서는 MERGE INTO 쿼리를 이용하여 한번에 해결할 수 있다.

1. 서로 다른 테이블일 경우,
MERGE INTO insert_table_name alias
USING select_table_name alias
ON (select_table 조건절)
 WHEN MATCHED THEN  -- 조건에 맞다면..
 UPDATE SET col1=val1,..

 WHEN NOT MATCHED THEN  -- 조건에 맞지 않는다면,
 INSERT (col1, col2,..)
 VALUES(val1, val2,..)

위의 경우, 테이블명을 명시했기 때문에, UPDATE(INSERT) 에 테이블명을 따로 쓰지 않는다.

2. 하나의 테이블일 경우,
USING 테이블명에 DUAL을 써 준다. 나머지 부분은 같다. 

'DEVELOPMENT > Database' 카테고리의 다른 글

mysql 소스 설치  (0) 2011.11.29
ORACLE 명령문  (0) 2011.08.02
mysql 5.5 db 생성 및 사용자 권한 주기  (0) 2011.03.23
오라클 모니터링 SQL  (0) 2011.02.25
Mysql 버전별 DB, USER 생성하기  (0) 2010.12.29


--1. Buffer Cache Hit Ratio

SELECT ROUND(((1-(SUM(DECODE(name, 'physical reads', value,0))/
(SUM(DECODE(name, 'db block gets', value,0))+
(SUM(DECODE(name, 'consistent gets', value, 0))))))*100),2) || '%' "Buffer Cache Hit Ratio"
FROM V$SYSSTAT;

--2. Library Cache Hit Ratio

SELECT (1-SUM (reloads)/SUM(pins))*100 "Library Cache Hit Ratio"
From V$LIBRARYCACHE;


--3. Data Dictionary Cache Hit Ratio

SELECT (1-SUM(getmisses)/SUM(gets))*100 "Data Dictionary Hit Ratio"
FROM V$ROWCACHE;

 

-- 테이블 스페이스 사용량

SELECT a.tablespace_name,
             a.total "Total(Mb)",
             a.total - b.free "Used(Mb)",
             nvl(b.free,0) "Free(Mb)",
             round((a.total - nvl(b.free,0))*100/total,0)  "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(+)
order by   a.tablespace_name;


--오라클서버의 메모리

select * from v$sgastat

select pool, sum(bytes) "SIZE"
from v$sgastat
where pool = 'shared pool'
group by pool

 

--cpu를 많이 사용하는 쿼리문과 프로세스아이디,시리얼번호,머신 알아내기

select c.sql_text
,b.SID
, b.SERIAL#
,b.machine
,b.OSUSER
,b.logon_time --이 쿼리를 호출한 시간
from v$process a, v$session b, v$sqltext c
where a.addr = b.paddr
and b.sql_hash_value = c.hash_value
--and a.spid = '675958'
order by c.PIECE


 
--cpu를 많이 사용하는 쿼리문과 프로세스아이디,시리얼번호,머신 알아내기

select c.sql_text
from v$process a, v$session b, v$sqltext c
where a.addr = b.paddr
and b.sql_hash_value = c.hash_value
and a.spid = '171'
order by c.PIECE

 

--프로세스 아이디를 이용하여 쿼리문 알아내기

select c.sql_text
,b.SID
, b.SERIAL#
,b.machine
,b.OSUSER
,b.logon_time --이 쿼리를 호출한 시간
from v$process a, v$session b, v$sqltext c
where a.addr = b.paddr
and b.sql_hash_value = c.hash_value
and a.spid = '1708032' --1912870/
order by c.PIECE

--세션 죽이기(SID,SERAIL#)

--ALTER SYSTEM KILL SESSION '8,4093'

--오라클 세션과 관련된 테이블*/

--select count(*) from v$session where machine ='머신이름' and schemaname ='스키마이름'

 

--현재 커서 수 확인

SELECT sid, count(sid) cursor
FROM V$OPEN_CURSOR
WHERE user_name = 'ilips'
GROUP BY sid
ORDER BY cursor DESC

SELECT sql_text, count(sid) cnt
FROM v$OPEN_CURSOR
GROUP BY sql_text
ORDER BY cnt DESC

select * from v$session_wait

select sid, serial#, username, taddr, used_ublk, used_urec
 from v$transaction t, v$session s
 where t.addr = s.taddr;

select *  from sys.v_$open_cursor

 

--V$LOCK 을 사용한 잠금 경합 모니터링

SELECT s.username, s.sid, s.serial#, s.logon_time,
    DECODE(l.type, 'TM', 'TABLE LOCK',
          'TX', 'ROW LOCK',
       NULL) "LOCK LEVEL",
    o.owner, o.object_name, o.object_type
FROM v$session s, v$lock l, dba_objects o
WHERE s.sid = l.sid
AND o.object_id = l.id1
AND s.username IS NOT NULL

 

--락이 걸린 세션 자세히 알아보기

select a.sid, a.serial#,a.username,a.process,b.object_name,
decode(c.lmode,2,'RS',3,'RX',4,'S',5,'SRX',8,'X','NO') "TABLE LOCK",
decode (a.command,2,'INSERT',3,'SELECT',6,'UPDATE',7,'DELETE',12,'DROP TABLE',26,'LOCK TABLE','UNknown') "SQL",
decode(a.lockwait, NULL,'NO wait','Wait') "STATUS"
from v$session a,dba_objects b, v$lock c
where a.sid=c.sid and b.object_id=c.id1
and c.type='TM'

 

--락이 걸린 세션 간단히 알아보기

select a.sid, a.serial#, b.type, c.object_name, a.program, a.lockwait,
       a.logon_time, a.process, a.osuser, a.terminal
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';

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


--락이 걸린 세션을 찾아 내어 세션을 죽이려고 해도 죽지 않는 경우
--아래 쿼리문으로 OS단의 PROCESS ID를 찾아내어 OS에서 죽인다
--kill -9 프로세스아이디

select substr(s.username,1,11) "ORACLE USER", p.pid "PROCESS ID",
s.sid "SESSION ID", s.serial#, osuser "OS USER",
p.spid "PROC SPID",s.process "SESS SPID", s.lockwait "LOCK WAIT"
from v$process p, v$session s, v$access a
where a.sid=s.sid and
p.addr=s.paddr and
s.username != 'SYS'

--위 쿼리문의 결과가 있다면 락이 걸린 세션이 있다는것이므로 아래의 쿼리문으로 세션을 죽인다

ALTER SYSTEM KILL SESSION '11,39061'

 

 

alter session으로 죽지않는 프로세스 죽이기

1.oracle이 설치된 서버에 텔넷으로 root로 접속한다
2.su -오라클계정
3.sqlplus '/as sysdba''
4.connect system/sys
5.ALTER SYSTEM KILL SESSION '137,1723'