캠핑과 개발

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

##MySQL에서 테이블 생성 스크립트를 보고 싶을때 사용

show create table [table명]

 

##MySQL에서 DB에 생성된 모든 테이블을 보고 싶을때 

show tables

like절 사용가능

show tables like '%tba_%'


[출처] [MySQL] Table Schema 보기|작성자 juner84

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

ORACLE 테이블 스페이스 관리 명령  (0) 2014.04.02
[ 오라클 ] 테이블 락 조회/ 해제 방법  (0) 2013.04.23
mysql DB 백업  (0) 2012.05.17
MySQL table 용량 확인  (0) 2012.05.17
DB link 생성  (0) 2012.05.17

# mysqldump 사용법

mysqldump [옵션] -u root -p [DB이름] > [백업파일명].sql

 

[백업파일명].sql 파일을 열어보면 각각의 데이타베이스를 create 시키는부분과 각각의 데이타베이스마다 테이블을 create 시키는부분, 그리고 테이블에 데이터를 insert 시키는 부분들이 모두 있음

 

mysqldump 옵션(출처 :http://dev.mysql.com/doc/refman/5.1/en/mysqldump.html)

-A, --all-databases : 모든 DB를 덤프 

--add-locks : 덤프 전에 lock 덤프 후에 unlock 

--add-drop-table : 덤프이후에 출력물의 앞에 drop table명령 추가 복구할 때 사용키 위해서 

-B, --databases : 여러 DB를 동시에 덤프 할 때 사용 

-f, --force : 에러를 무시 

-h, --host : 지정한 호스트의 데이터를 덤프 

-t, --no-create-info : 데이터만 덤프 

-d, --no-data : 데이터를 제외하고 스키마만 덤프 

-p : 사용자의 암호를 지정 

-P : 포트번호 지정 

-u : 사용자명 지정

 

# DB 복구

mysql -u root -p [복구할 DB명] < [백업파일명].sql

※ 미리 DB를 만들어 두어야 함

복구시 가끔 한글이 깨지는 경우 존재 그럴땐 --default-character-set=euckr 옵션사용

mysql -u root -p --default-character-set=euckr [복구할 DB명] < [백업파일명].sql


[출처] [Mysql] mysqldump로 DB백업 받기|작성자 juner84

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

[ 오라클 ] 테이블 락 조회/ 해제 방법  (0) 2013.04.23
MySQL Table Schema 확인  (0) 2012.05.17
MySQL table 용량 확인  (0) 2012.05.17
DB link 생성  (0) 2012.05.17
index 생성  (0) 2012.05.17

DB를 사용하다 보면 table별 용량 확인이 필요할 때가 있다.

mysql에서 meta정보를 확인하기 위해서는 information_schema를 이용하면 된다.

이번 포스트에서는 table용량 확인을 위한 sql을 정리하기로 하자....



[DB 용량확인]

SELECT table_schema "Database Name", 

            SUM(data_length + index_length) / 1024 / 1024 "Size(MB)" 

FROM information_schema.TABLES 

GROUP BY table_schema;


[table 용량확인]

SELECT 

    concat(table_schema,'.',table_name),   

    concat(round(table_rows/1000000,2),'M') rows,   

    concat(round(data_length/(1024*1024*1024),2),'G') DATA,   

    concat(round(index_length/(1024*1024*1024),2),'G') idx,   

    concat(round((data_length+index_length)/(1024*1024*1024),2),'G') total_size,   

    round(index_length/data_length,2) idxfrac    

FROM information_schema.TABLES  

    where table_name = '테이블명'  ;



[출처] [MySQL] database table용량 확인|작성자 juner84

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

MySQL Table Schema 확인  (0) 2012.05.17
mysql DB 백업  (0) 2012.05.17
DB link 생성  (0) 2012.05.17
index 생성  (0) 2012.05.17
Oracle Hint  (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


## // MySQL의 default configuration 파일의 위치는 한 곳에 지정되거나
## // 어딘가에 명확히 명시되어서 실행되지 않는 것이 일반적이다.
## // 이런 경우, 현재 mysql server가 어느 위치에 있는 my.cnf 파일을 읽었는지 궁금한 경우가 많다.
## // 또한 my.cnf 파일은 RPM으로 MySQL library만 설치해도 /etc/my.cnf 파일이 생성되므로
## // mysql server가 DBA가 준비해둔 설정 파일을 읽었는지, 아니면 위처럼 의도하지 않게 
## // 생성된 my.cnf 파일을 읽고 있는지 의심이 되는 경우가 매우 허다한데, 
## // 이런 경우에는 아래와 같이 mysql server 프로세스가 기본적으로 찾게 되는 my.cnf 파일의
## // 경로를 우선순위대로 확인해볼 수 있다.

${MYSQL_HOME}/bin/mysqld --verbose --help | grep -A 1 'Default options'

Default options are read from the following fi
les in the given

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

index 생성  (0) 2012.05.17
Oracle Hint  (0) 2012.05.17
mysql 소스 설치  (0) 2011.11.29
ORACLE 명령문  (0) 2011.08.02
MERGE INTO 사용법  (0) 2011.07.09


다운 : http://www.mysql.com/downloads/mysql/5.1.html#downloads

Compressed TAR Archive 다운

1. mysql 사용자 등록
설치를 하기전에 mysql 을 실행할때 (./mysql_safe &)  mysqld 데몬을 실행할 mysql 이라는 사용자를 생성하여야 한다.

[root@localhost bin]# groupadd mysql
[root@localhost bin]# useradd -g mysql mysql -M

순서는 group 먼저 생성후 user 생성...
-M 옵션은 사용자 홈디렉토리를 만들지 않겠다는것


2. configure
[root@localhost mysql-5.1.57]# ./configure --prefix=/usr/local/mysql --localstatedir=/usr/local/mysql/data --enable-shared --with-mysqld-user="mysql" --with-charset=utf8
.
.
.
.
Thank you for choosing MySQL!

Remember to check the platform specific part of the reference manual
for hints about installing MySQL on your platform.
Also have a look at the files in the Docs directory.

[root@localhost mysql-5.1.57]#
./configure 시 옵션에대하여 살펴 보면...

--prefix=/usr/local/mysql
설치될 경로

--localstatedir=/usr/local/mysql/data
 mysql의 DB data 저장될 위치를 지정, 디폴트 설정은 /usr/local/var

--enable-shared
shared 옵션을 사용하는 것으로 지정.

--with-mysqld-user="mysql"
mysql을 실행할 계정명 지정. mysql로 지정함.

--with-charset=euckr
한글을 지원하기 위한 문자셋을 지정함.

--with-raid
raid를 지원하게 컴파일 함.

--with-openssl-includes= openssl_헤드위치지정     
openssl을 지원하기 위한 옵션 지정

--with-unix-socket-path=/usr/local/mysql/tmp/mysql.sock
소켓관련 패스 재설정

--with-client-ldflags=-all-static --with-mysqld-ldflags=-all-static
컴파일 옵션으로 'CXX=gcc'를 사용할 때 오류를 피하기 위해 공유 라이브러리를 사용하지 않음


CC=gcc CXX=gcc ./configure
'libg++' or `libstdc++' 없이 gcc만으로 컴파일을 한다.


이외에도 더 많은 옵션이 있다...

--prefix=/usr/local/mysql
--localstatedir=/usr/local/mysql/data
--enable-shared
--with-mysqld-user="mysql"
--with-charset=utf8

이정도만 지정해도 기본적으로 사용이 가능한 모양임...

3. make를 통한 컴파일

[root@localhost mysql-5.1.57]# make

컴파일러 (여기에서는 gcc) 가 설치 되어있지 않으면 당연하게도 컴파일이 안된다.
컴파일러가 설치 되어있는지 확인하고 make 해준다.


4. make install로 컴파일된 바이너리 파일을 설치/복사 하여준다.
[root@localhost mysql-5.1.57]# make install

configure -> make -> make install 을 통해서 mysql 의 설치가 되었다.


5. mysql을 관리하는 mysql system table 생성
configure 에서 --localstatedir=/usr/local/mysql/data  라고 경로를 지정했으므로 요 위치에  mysql 과 test 라는 db가 생성된다.
[root@localhost bin]# pwd
/usr/local/mysql/bin
[root@localhost bin]# ls -al
합계 16516
drwxr-xr-x  2 root root    4096 2011-05-10 16:10 .
drwxr-xr-x 10 root root    4096 2011-05-10 16:11 ..
-rwxr-xr-x  1 root root   24544 2011-05-10 16:10 innochecksum
-rwxr-xr-x  1 root root    1424 2011-05-10 16:10 msql2mysql
-rwxr-xr-x  1 root root  791599 2011-05-10 16:10 my_print_defaults
-rwxr-xr-x  1 root root 2151481 2011-05-10 16:10 myisam_ftdump
-rwxr-xr-x  1 root root 2507505 2011-05-10 16:10 myisamchk
-rwxr-xr-x  1 root root 2188320 2011-05-10 16:10 myisamlog
-rwxr-xr-x  1 root root 2242622 2011-05-10 16:10 myisampack
-rwxr-xr-x  1 root root  637894 2011-05-10 16:10 mysql
-rwxr-xr-x  1 root root  793479 2011-05-10 16:10 mysql_client_test
-rwxr-xr-x  1 root root    6141 2011-05-10 16:10 mysql_config
-rwxr-xr-x  1 root root    4169 2011-05-10 16:10 mysql_convert_table_format
-rwxr-xr-x  1 root root    3245 2011-05-10 16:10 mysql_find_rows
-rwxr-xr-x  1 root root    1226 2011-05-10 16:10 mysql_fix_extensions
-rwxr-xr-x  1 root root    5894 2011-05-10 16:10 mysql_fix_privilege_tables
-rwxr-xr-x  1 root root   14362 2011-05-10 16:10 mysql_install_db
-rwxr-xr-x  1 root root    8033 2011-05-10 16:10 mysql_secure_installation
-rwxr-xr-x  1 root root   17438 2011-05-10 16:10 mysql_setpermission
-rwxr-xr-x  1 root root  688935 2011-05-10 16:10 mysql_tzinfo_to_sql
-rwxr-xr-x  1 root root   87453 2011-05-10 16:10 mysql_upgrade
-rwxr-xr-x  1 root root  392162 2011-05-10 16:10 mysql_waitpid
-rwxr-xr-x  1 root root    3818 2011-05-10 16:10 mysql_zap
-rwxr-xr-x  1 root root  111597 2011-05-10 16:10 mysqlaccess
-rwxr-xr-x  1 root root   39569 2011-05-10 16:10 mysqladmin
-rwxr-xr-x  1 root root  223719 2011-05-10 16:10 mysqlbinlog
-rwxr-xr-x  1 root root   10645 2011-05-10 16:10 mysqlbug
-rwxr-xr-x  1 root root   68840 2011-05-10 16:10 mysqlcheck
-rwxr-xr-x  1 root root   24162 2011-05-10 16:10 mysqld_multi
-rwxr-xr-x  1 root root   16772 2011-05-10 16:10 mysqld_safe
-rwxr-xr-x  1 root root  184007 2011-05-10 16:10 mysqldump
-rwxr-xr-x  1 root root    7351 2011-05-10 16:10 mysqldumpslow
-rwxr-xr-x  1 root root   32463 2011-05-10 16:10 mysqlhotcopy
-rwxr-xr-x  1 root root   61125 2011-05-10 16:10 mysqlimport
-rwxr-xr-x  1 root root   70042 2011-05-10 16:10 mysqlshow
-rwxr-xr-x  1 root root   98506 2011-05-10 16:10 mysqlslap
-rwxr-xr-x  1 root root  338120 2011-05-10 16:10 mysqltest
-rwxr-xr-x  1 root root  737505 2011-05-10 16:10 perror
-rwxr-xr-x  1 root root  756375 2011-05-10 16:10 replace
-rwxr-xr-x  1 root root  744052 2011-05-10 16:10 resolve_stack_dump
-rwxr-xr-x  1 root root  729755 2011-05-10 16:10 resolveip
[root@localhost bin]#

[root@localhost bin]# ./mysql_install_db
Installing MySQL system tables...
OK
Filling help tables...
OK

To start mysqld at boot time you have to copy
support-files/mysql.server to the right place for your system

PLEASE REMEMBER TO SET A PASSWORD FOR THE MySQL root USER !
To do so, start the server, then issue the following commands:

/usr/local/mysql/bin/mysqladmin -u root password 'new-password'
/usr/local/mysql/bin/mysqladmin -u root -h localhost.localdomain password 'new-password'

Alternatively you can run:
/usr/local/mysql/bin/mysql_secure_installation

which will also give you the option of removing the test
databases and anonymous user created by default.  This is
strongly recommended for production servers.

See the manual for more instructions.

You can start the MySQL daemon with:
cd /usr/local/mysql ; /usr/local/mysql/bin/mysqld_safe &

You can test the MySQL daemon with mysql-test-run.pl
cd /usr/local/mysql/mysql-test ; perl mysql-test-run.pl

Please report any problems with the /usr/local/mysql/bin/mysqlbug script!

[root@localhost bin]#


6. msyql 실행
[root@localhost bin]# ./mysqld_safe &
[1] 11878
[root@localhost bin]# 110510 19:48:18 mysqld_safe Logging to '/usr/local/mysql/data/localhost.localdomain.err'.
110510 19:48:18 mysqld_safe Starting mysqld daemon with databases from /usr/local/mysql/data
110510 19:48:18 mysqld_safe mysqld from pid file /usr/local/mysql/data/localhost.localdomain.pid ended

[1]+  Done                    ./mysqld_safe
[root@localhost bin]#

마지막줄  mysqld_safe mysqld from pid file /usr/local/mysql/data/localhost.localdomain.pid ended 에 주목!!

요메시지가 나오면 정상이 아닌거다!!!!

로그를 보면....

[root@localhost bin]# cd /usr/local/mysql/data/
[root@localhost data]# cat localhost.localdomain.err
110510 19:48:18 mysqld_safe Starting mysqld daemon with databases from /usr/local/mysql/data
/usr/local/mysql/libexec/mysqld: Can't find file: './mysql/plugin.frm' (errno: 13)
110510 19:48:18 [ERROR] Can't open the mysql.plugin table. Please run mysql_upgrade to create it.
110510 19:48:18 [ERROR] /usr/local/mysql/libexec/mysqld: Can't create/write to file '/usr/local/mysql/data/localhost.localdomain.pid' (Errcode: 13)
110510 19:48:18 [ERROR] Can't start server: can't create PID file: Permission denied
110510 19:48:18 mysqld_safe mysqld from pid file /usr/local/mysql/data/localhost.localdomain.pid ended
[root@localhost data]#
빨간글씨에 주목...  /usr/local/mysql/data 이곳의 소유권이 root 이기 때문에 일어나는 문제...
앞서 말했듯이 mysql 은 특정 사용자명을 만들어서 (여기에서는 "mysql" 이라고 사용자 생성, 사용자생성과 configure 옵션 참조) 실행시키는데...
root 가 소유자인 data디렉토리에 db data 를 저장 하려고 하니 퍼미션에러가 나는것이다.
권한 변경보다는 소유자를 변경하는편이 보안상 좋다.

[root@localhost data]# chown -R mysql:mysql /usr/local/mysql/data

-R 은 하위 디렉토리 까지 권한을 변경하겠다는 뜻

[root@localhost bin]# ./mysqld_safe &
[1] 11935
[root@localhost bin]# 110510 19:54:18 mysqld_safe Logging to '/usr/local/mysql/data/localhost.localdomain.err'.
110510 19:54:18 mysqld_safe Starting mysqld daemon with databases from /usr/local/mysql/data

[root@localhost bin]#
[root@localhost bin]# ps -ef | grep mysqld
root     11935  2422  0 19:54 pts/0    00:00:00 /bin/sh ./mysqld_safe
mysql    11983 11935  0 19:54 pts/0    00:00:00 /usr/local/mysql/libexec/mysqld --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --user=mysql --log-error=/usr/local/mysql/data/localhost.localdomain.err --pid-file=/usr/local/mysql/data/localhost.localdomain.pid
root     11987  2422  0 19:55 pts/0    00:00:00 grep --color=auto mysqld
[root@localhost bin]#


mysql 을 띄우고 프로세스 까지 확인!

7. 관리자 암호 설정
[root@localhost bin]# ./mysqladmin -u root password 12345
[root@localhost bin]#

8. mysql 접속
[root@localhost bin]#
[root@localhost bin]# ./mysql -u root -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 5
Server version: 5.1.57 Source distribution

Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved.
This software comes with ABSOLUTELY NO WARRANTY. This is free software,
and you are welcome to modify and redistribute it under the GPL v2 license

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| test               |
+--------------------+
3 rows in set (0.00 sec)

mysql>

종료 :
mysqladmin -uroot -p shutdown || kill mysqld

재시작 :
mysqld_safe & safe_mysqld &

동작 여부 :
ps -ef | grep mysql


[출처] http://pippen80.cafe24.com/269

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

Oracle Hint  (0) 2012.05.17
MySQL의 기본 설정 파일(my.cnf)의 위치 확인  (0) 2011.11.29
ORACLE 명령문  (0) 2011.08.02
MERGE INTO 사용법  (0) 2011.07.09
mysql 5.5 db 생성 및 사용자 권한 주기  (0) 2011.03.23