절차형이 아니고 집합적적으로 생각하라.


정적 파티션과 동적파티션

정적파티션이 흔히 말하는 파티셔닝 테이블이다.


Skew 현상
데이터의 대량 삭제시 인덱스구조가 한쪽으로 쏠리는 현상

정기적으로 리빌드해주는것을 추천


블럭체이닝

다이나믹SQL , 스태틱SQL

스태틱SQL은 매번 SQL을 파싱하여 최적화하는 단계를 거침

다이나믹 SQL 은 컬럼등을 변수처리하여 파싱 및 최적화 단계를 건너뜀


Redo log

DB 장애등의 원복시 사용, Rollback 때도 아마 사용


http://www.techonthenet.com/sql/index.php

http://www.techonthenet.com/oracle/index.php

공부해올것


Posted by 빨강토끼
,

DB 솔루션은 개발자가 직접 작업을 컨트롤 하지 못한다.

다만 SQL 이라는 언어를 통하여 DB 솔루션과 대화를 하며 개발자가 원하는 데이터를 요청하고

응답 받을 있다.

 

이해를 쉽게 하기 위하여 도서관을 DB 솔루션이라고 가정하고

도서를 대여하기 원하는 우리를 개발자로 가정을 하고 설명을 하겠다.

그리고 도서관은 우리가 직접 서고로 찾아가서 책을 찾지 못하고

사서에게 자신이 원하는 책을 말하고 사서가 책을 서고에서 찾아서 도서를 대여해 준다.

 

우리는 도서관에 가서 원하는 책을 찾으려고 한.

우리가 원하는 책을 가장 빨리 사서를 통하여 찾는 방법은 바로

도서관의 책에 부여하는 도서 일련번호를 바로 말하는 것이다..

 

도서관은 도서들만의 유일한 코드를 가지고 있고

도서일련번호순서대로 도서를 관리하고 있으므로

도서일련번호만 말하면 사서는 바로 책을 잦아서 우리에게 대여를 해줄 있다.

이것이 쉽게 말하면 오라클의 rowid 이해할 있다.

 

다음으로는 대분류(장르) 소분류(세부장르) 구별된 사항과 책의 이름을 말하는 것이다.

물론 출판사나 저자의 이름도 유용하다.

 

장르, 세부장르, 출판사, 저자 들은 인덱스로 이해할 있다.

 

책의 색깔이나 페이지수 등은 책의 특징이라고 있다.

 

그렇다면  PK 무엇일까?

도서일련번호와는 다르게 도서관에서 분류 이해를 쉽게 하기 위하여

역시 책마다 유일하게 정의할 있도록 도서코드

( 예를 들어 대분류-소분류-출판사-출판사별책순서) 부여해 놓은 것이라고 있다.


# 도서코드

 o 대분류

 o 소분류

 o 도서이름

 o 저자

 o 출판사

 o 표지색상

 o 페이지수

 o 출판일

 o 대출횟수


 

그러면 옵티마이저는 무엇일까?

우리가 사서에게 대여를 원하는 책을 말할때

이렇게 수가 있겠다.

(당연히 책의 일련번호나 도서코드를 모르는 상태에서)

 

"빨간색 책인데요. 패이지수는 250페이지입니다.

도서이름은 인간관계론 입니다자기개발서적이구요.

아참! 저자는 데일 카네기입니다."


SELECT * FROM 도서

WHERE 표지색상='빨간색' 

  AND 페이지수=250 

  AND 도서이름='인간관계론'

  AND 소분류='자기개발'

  AND 저자='데일 카네기'


말을 듣고 만일 사서가 무식하게 도서관의 모든 책을 하나씩 보면서

  1. 표지색상: 빨간색
  2. 페이지수 : 250 페이지
  3. 도서이름 : 인간관계론
  4. 소분류 : 자기개발
  5. 저자 : 데일 카네기

위와 같은 순서로 책을 찾는다면 우리는 엄청난 시간을 사서가 책을 찾아오기까지 기다려야  것이다.

 

하지만 영리한 사서는 아마도 아래와 같은 순서대로 찾을 찾으려고 할것이다.

  1. 소분류 : 자기개발
  2. 저자 : 데일 카네기
  3. 도서이름 : 인간관계론
  4. 표지색상 : 빨간색
  5. 페이지수 : 250 페이지

 

보다 경험이 많은 사서는

  1. 소분류 : 자기개발
  2. 표지색상 : 빨간색 (빨간색 책은 몇권 안되므로)
  3. 도서이름 : 인간관계론 (저자보다 책이름이 크게 보임)
  4. 저자 : 데일 카네기
  5. 페이지수 :250 페이지

 

첫번째 사서는 교육시간에 배운 매뉴얼대로 찾은 것이고 (룰기반 옵티마이저)

두번째 사서는 오랜 경험으로 나름의 방법을 사용하는 찾는것 이다.(비용기반 옵티마이저)


그렇지만 결국에는 아무리 도서관 사서가 똑똑해도 우리가 도서를 대여할 정확하게 내가 찾고자 하는

책을 설명해줘야 된다는 것이다.

 

" 책이 제목이 인간.. 머였는데 두꺼웠어요. 아마 200 페이지는 넘을 거에요.

빨간색이였던건 기억나요. 저자는 외국인 이였어요."

 

SELECT * FROM BOOK

WHERE 도서이름 LIKE '인간%'

  AND 페이지수 > 200

  AND 표지색상 = 'red'


 

이렇게 말하면 사서도 고생 여러분도 고생이다.

Posted by 빨강토끼
,

DB서버 리부팅후 oracle 에 접속을 하려고 하면

아래와 같은 메시지가 나오면서 접속이 안될때가 있습니다.


ERROR:

ORA-01034: ORACLE not available

ORA-27101: shared memory realm does not exist 

Linux Error: 2: No such file or directory


오라클이 비정상 종료로 인한문제라고 합니다.

nolog 로 접속하여 startup 해주면 되는데

방법은 아래와 같습니다.


[db]# sqlplus /nolog

SQL> conn sys/ as sysdba

...

SQL>startup

...

...

Database mounted.


그런데 이러고 나서 접속을 하려고 하면

또다시 아래와 같은 메시지가 나오면서 접속이 안될때가 있습니다.


ora-12541 tns 리스너가 없습니다


oracle만 실행되고 리스너가 실행안된경우입니다.


리스너 상태를 살패본후 리스너가 만일 구동중이 아니면 리스너를 start 해주면 됩니다.


[db]# lsnrctl

LSNRCTL>status


Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC)))

TNS-12541: TNS:no listener

 TNS-12560: TNS:protocol adapter error

  TNS-00511: No listener

   Solaris Error: 146: Connection refused

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=DB서버명)(PORT=1521)))

TNS-12541: TNS:no listener

 TNS-12560: TNS:protocol adapter error

  TNS-00511: No listener

   Solaris Error: 146: Connection refused


위와 같이 나오면 리스너가 실행되지 않고 있는것 입니다.

start 해주시면 됩니다.


LSNRCTL>start



Posted by 빨강토끼
,

골든을 설치하고 tns 로 연결을 하려할경우

먼저


에서 

오라클 클라이언트(Oracle Client)를 다운받아 설치하던지, 

인스턴스클라이언트(Instant Client)를 다운받아 설치해야됩니다.


우선 오라클 클라이언트를 설치하는 경우엔 인스턴스클라이언트보다는 설정이 쉬운반번

무겁고 불필요한것들까지 설치된다는 부담이 있습니다.


인스턴스클라이언트를 설치하는 경우엔 가볍지만 환경화일이나 레지스트리를 설정해줘야하는 작업이 필요합니다.


1. 오라클 클라이언트를  설치하는 경우



http://www.oracle.com/technetwork/database/enterprise-edition/downloads/112010-win32soft-098987.html

위 링크로 들어가서 



위에 마크된 링크를 클릭하여서 다운로드후 압축을 푼후에 설치하시면


D:\app\red\product\11.2.0\client_1 식의 폴더가 여러분의 PC에 만들어지신것을 발견하실 수 있습니다.


해당 폴더로 들어가신후 바로 밑에 network 라는 폴더를 만들고 또 그 안으로 들어가서 admin 이라는 폴더를 만듭니다.


그리고 나서 첨부된 파일(sqlnet.ora , tnsnames.ora)을 복사해 넣으면 기본적인 환경이 완료됩니다.

tnsnames.ora 파일을 여러분 환경에 맞추어 수정해 사용하시면 됩니다.


2. 인스턴스 클라이언트를 설치하는 경우


http://www.oracle.com/technetwork/indexes/downloads/index.html

위 링크로 들어가서




위에 마크된 링크를 클릭하여서 다운로드후(basic 을 받으시면됩니다.) 압축을 풀어줍니다.


본글에서는 아래와 같은 경로에 압축을 풀었다는것을 가정합니다.

D:\Program\instantclient


위와 비슷한 경로의 압축이 풀려진 폴더로 이동후에 바로 밑에 network 라는 폴더를 만들고 

또 그 안으로 들어가서 admin 이라는 폴더를 만듭니다.


그리고 나서 첨부된 파일(sqlnet.ora , tnsnames.ora)

sqlnet.ora


tnsnames.ora

을 복사해 넣습니다.


그 다음으로는 PC의 환경설정과 레지스트리를 수정해야됩니다.


제어판 > 시스템 > 고급 > 환경변수 열어 아래와 같이 등록합니다.

PATH = D:\Program\instantclient;
TNS_ADMIN =D:\Program\instantclient\NETWORK\

3. 레지스트 등록

HKEY_LOCAL_MACHINE > SOFTWARE 열어 오른쪽 마우스를 클릭하여 새로만들기 > 키 선택합니다.
키명을 Oracle 변경하고 오른쪽 마우스를 클릭하여 문자열 값을 선택하고 아래와 같이 반복하여 문자열을 생성합니다.

# 문자열 명 : 문자열 값 패턴입니다.

NLS_LANG : Korean_Korea.KO16KSC5601
ORACLE_HOME :D:\Program\instantclient
SQLPATH : D:\Program\instantclient
ORACLE_SID : ORCL


그리고 난후 tnsnames.ora 파일을 여러분 환경에 맞추어 수정해 사용하시면 됩니다.

Posted by 빨강토끼
,

먼저 SQL Developer 를 다운/설치(압축만풀면ok)
http://www.oracle.com/technetwork/developer-tools/sql-developer/overview/index.html


Mysql Connector/J 를 다운로드합니다.

http://www.mysql.com/downloads/connector/j/


도구 > 환경설정 > 데이터베이스 > 타사 JDBC 드라이버 다운받은

mysql-connector-java...jar 를 추가합니다.


새접속에서 Mysql 탭에서 연결정보 입력하시면 됩니다.


http://www.techrepublic.com/blog/programming-and-development/configuring-sql-developer-for-mysql/564


Posted by 빨강토끼
,

맨날 까먹어서 정리함.

더 빠른 방법이 있으면 댓글 달아주세요.


조건

auth_dt 라는 필드가 인덱스가 걸려있음


select * from point a where a.auth_dt=(select max(auth_dt) from point b);


-- 더빠른 방법


select /*+ INDEX_DESC (a auth_idx) */

from point a

where rownum = 1;

Posted by 빨강토끼
,

http://bangganji.tistory.com/77


http://planmaster.tistory.com/161

Posted by 빨강토끼
,

http://blog.naver.com/PostView.nhn?blogId=tyboss&logNo=70033321734&redirect=Dlog&widgetTypeCall=true


http://sangu12.egloos.com/2784067


http://blog.naver.com/PostView.nhn?blogId=sneri&logNo=110018379120&redirect=Dlog&widgetTypeCall=true


http://suyou.tistory.com/16

Posted by 빨강토끼
,

SELECT A.SEGMENT_NAME,
              ROUND(SUM(A.BYTES)/1024/1024) "SIZE_MB",
              A.SEGMENT_TYPE
FROM DBA_SEGMENTS A,
            DBA_TABLES B
WHERE A.SEGMENT_NAME = B.TABLE_NAME
      AND A.SEGMENT_TYPE IN ('TABLE','TABLE PARTITION')
      AND A.OWNER = '유저아이디'
GROUP BY A.SEGMENT_NAME, A.SEGMENT_TYPE
ORDER BY 2 DESC;

Posted by 빨강토끼
,

> mysqladmin - u root -p create 생성할DB명


> mysql -u root -p

mysql> grant select, insert, update, delete, create. drop
      ->on 생성한DB명.* to '생성할유저명'@'localhost' identified by '사용할암호'

mysql> grant select, insert, update, delete, create. drop
      ->on 생성한DB명.* to '생성할유저명'@'%' identified by '사용할암호'


'%' 는 모든 외부연결을 허용합니다.



Posted by 빨강토끼
,