'분류 전체보기'에 해당되는 글 2491건

  1. 2009.06.04 오라클 RDBMS의 구조(1)[시스템 글로벌 영역 1
  2. 2009.06.04 tomcat 사용 : java.lang.OutOfMemoryError: Java heap space 2
  3. 2009.06.04 java.lang.OutOfMemoryError
  4. 2009.06.04 emctl start dbconsole / 오라클 em 안될때
  5. 2009.06.04 ora-06502 :pl/sql : numeric or value error : character string buffer too small 5
  6. 2009.06.02 Windows 2003 서버 FTP 서비스 설치
  7. 2009.06.02 JEUS설치하기
  8. 2009.06.02 jeus 설치
  9. 2009.05.30 프로세스별 패킷탐지
  10. 2009.05.30 리눅스 웹 서버와 실전 웹해킹
  11. 2009.05.30 [리눅스 웹 서버와 실전 웹해킹] chapter 9. 인터넷 익스플로어는 강력한 웹 해킹 도구
  12. 2009.05.30 [리눅스 웹 서버와 실전 웹해킹] chapter 10. 변수값의 이동경로 파악하기
  13. 2009.05.30 [리눅스 웹 서버와 실전 웹해킹] chapter 11. 게시판의 문제점
  14. 2009.05.30 기타 재미있는 툴들 : 해킹?
  15. 2009.05.30 sql 함수 사용 방법
  16. 2009.05.30 JAVA basic(scjp 1[1].5)
  17. 2009.05.30 oracle 스크립트 모음
  18. 2009.05.18 ** resin 설치법 **
  19. 2009.05.14 ppt -> pdf 변환
  20. 2009.05.14 Ora-12571 에러 해결 방법 2
  21. 2009.05.13 css 버튼 모음
  22. 2009.05.12 sql codes 모든 sql codes
  23. 2009.05.11 공유 풀 영역 튜닝
  24. 2009.05.11 v$sqlarea 뷰
  25. 2009.05.11 *오라클서버의 메모리에 관한 테이블*/
  26. 2009.05.11 Google 데이터 API란 무엇입니까?
  27. 2009.05.11 php rss parser
  28. 2009.05.09 국민권익위원회
  29. 2009.05.06 오라클 10g 함수 10g Release 1 (10.1)
  30. 2009.05.06 resin 4.0 documentation
02.Oracle2009. 6. 4. 18:14
반응형

1. 오라클 RDBMS의 구조(1)[시스템 글로벌 영역]


http://www.dbcore.net/~corenet/education/speciallec/admin/chap2-1.html

 http://www.dbcore.net/~corenet/education/speciallec/admin/chap2-2.html

 

 

1.1 시스템 글로벌 영역(SGA)


** SGA란? **


- SGA는 간단하게 오라클 서버 메모리 영역이라고 할 수 있습니다.


- SGA는 Oracle의 인스턴스에 대한 데이터와 제어 정보를 가지는 공유 메모리 영역의 집합 입니다


- 사용 목적에 따라 오라클 파라미터 파일(init.ora)의 조정으로 SGA의 각 부분의 크기를 조절 할 수 있습니다.

(initSID.ora 파일을 열어 보시면 large_pool_size=8388608, shared_pool_size=50331648 이렇게 사이즈가 지정되어 있습니다.)


- Oracle9i부터 오라클 서버의 종료 없이 SGA의 구성을 SGA_MAX_SIZE 파라미터 값 범위 내에서만 각각의 크기를 동적으로 변경 가능 합니다.


- Oracle 서버를 동시에 사용하고 있는 사용자는 시스템 글로벌 영역의 데이타를 공유 합니다.


- 전체 시스템 글로벌 영역을 실제 메모리 크기가 허용하는 범위에서 가장 크게 잡으면 디스크I/O를 줄이고 메모리에 가능한 많은 데이터를 저장할 수 있으므로 최적의 성능을 낼 수 있습니다.


- SGA는 공유 풀(Shared Pool), 데이터베이스 버퍼캐쉬(DataBase Buffer Cache), 리두로그 버퍼(Redo Log Buffer)이 세가지와 Large Poll과 Java Pool로 구성되어 있습니다.


SGA-bluegury2.jpg


                                                                                                                                   

** 공유 풀(Shared Pool) **


- Shared Pool은 Library Cache와 데이터 사전 캐쉬(Data Dictionary Cache)로 구성되어 있습니다.


- Shared Pool은 하나의 데이터베이스에 행해지는 모든 SQL문을 처리하기 위하여 사용 됩니다.


- Shared Pool은 문장을 실행하기 위해 그 문장과 관련된 실행 계획과 구문분석 정보가 들어 있습니다.


- Shared Pool의 사이즈는 SHARED_POOL_SIZE 파라미터 값으로 결정 합니다.


1) Library Cache

- 라이브러리 캐쉬는 가장 최근에 사용된 SQL 문장의 명령문과, 구문 분석 트리, 실행계획 정보를 가지고 있습니다.

- Shared SQL과 Shared PL/SQL 영역으로 구분되어 있습니다.

- Shared SQL 영역 : SQL문장에 대한 실행계획과 파싱 트리를 저장하고 공유 합니다.

    동일한 문장이 다음번에 실행되면 Shared SQL 영역에 저장되어 있는 실행계획과 파싱 트리를

    그대로 이용하기 때문에 SQL 문장의 처리 속도는 향상 됩니다.

- Shared PL/SQL 영역 : 가장 최근에 실행한 PL/SQL 문장을 저장하고 공유 합니다.

     파싱 및 컴파일 된 프로그램 및 프로시져(함수, 패키지, 트리거)가 저장 됩니다.


2) Data Dictionary Cache

- 테이블, 컬럼, 사용자 이름, 사용 권한 같은 가장 최근에 사용된 데이터 사전의 정보를 저장하고 있습니다.

- 구문 분석 단계에서 서버 프로세스는 SQL문에 지정된 오브젝트 이름을 찾아내고 접근 권한을 검증하기 위해 Dictionary Cache의 정보를 찾아봅니다.


                                                                                                                                   

** 데이터베이스 버퍼 캐쉬(DataBase Buffer Cache) **


데이터베이스 버퍼 캐쉬는 가장 최근에 사용된 데이터 블럭을 저장하는 메모리 공간 입니다. 이 버퍼는 아직까지 디스크에 완전히 쓰여지지 않는 수정된 데이터를 보유할 수도 있습니다.

LRU 알고리즘에 의해 가장 오래전에 사용된 것은 디스크에 저장하고 메모리에는 가장 최근에 사용된 데이터를 저장 함으로, 디스크 입출력이 줄어 들고, 데이터베이스 시스템의 성능이 증가 됩니다.


※LRU 알고리즘 : 최근에 사용된 블록을 유지하기 위해 오래된 것을 제거하는 알고리즘.


DB_BLOCK_SIZE : 데이터베이스 버퍼 캐쉬 내의 블록의 크기


Oracle 8i까지는 DB_BLOCK_SIZE와 DB_BLOCK_BUFFERS를 곱해서 데이터베이스 버퍼 캐쉬의 크기를 결정 했습니다. 하지만 Oracle 9i부터는 DB_BLOCK_BUFFERS를 Deprecated 시키고, DB_CACHE_SIZE 라는 파라미터가 Oracle 9i에 새롭게 도입이 되었습니다.


★ 오라클 9i에 변경된 Database Buffer Cache 관련 파라미터에 대해서 자세히 알아보겠습니다.


1) Deprecated Buffer Cache Parameters


다음의 세 가지 파라미터는 예전 비전과의 호환을 위해 존재하는 것으로, Oracle 9i부터는 의미가 없어 집니다.

- DB_BLOCK_BUDDERS

- BUFFER_POOL_KEEP

- BUFFER_POOL_RECYCLE


Oracle 9i는 위의 파라미터들이 정의되어 있으면 위에 값들을 사용하게 됩니다.


하지만, Oracle 9i에 생성된 새로운 파라미터들을 사용하는 것이 좋으며, 만일 위 파리미터(DB_BLOCK_BUFFERS, BUFFER_POOL_KEEP, BUFFER_POOL_RECYCLE) 값들을 사용한다면 Oracle 9i의 새로운 기능인 Dynamic SGA 특징을 사용할 수 없습니다.


또한 initSID.ora 화일에 위 파라미터들과 새로운 파라미터를 동시에 기술한다면 에러가 발생합니다.


2) New Buffer Cache Sizing Parameters


다음의 세 가지 파라미터가 추가 되었습니다.


DB_CACHE_SIZE : 디폴트 버퍼 캐쉬, 반드시 존재해야 하며, 0으로 설절할 수 없습니다.


DB_KEEP_CACHE_SIZE : Keep Buffer Cache의 크기, 재활용될 가능성이 높은 블록을 고정적으로 저장하는데 사용 합니다.


DB_RECYCLE_CACHE_SIZE : 재활용 버퍼 캐시 크기, 재활용 될 가능성이 낮은 블록을 즉시 제거 하는데 사용 합니다.


이전 버전과 다른 점은 이전 버전의 경우 각각의 파라미터 (DB_BLOCK_BUFFERS, BUFFER_POOL_KEEP, BUFFER_POOL_RECYCLE)에 정의된 값들이 buffer개수 (즉, 실제 메모리 크기를 구하려면 db_block_size를 곱했어야 했는데.)였는데 반해 이제는 구체적인 메모리 크기를 지정 합니다.


Oracle 9i부터는 Multiple Block Size(2k, 4k, 8k, 16k, 32k)를 지원 합니다.


DB_BLOCK_SIZE에 의해 정해진 block size가 primary block size가 됩니다. (SYSTEM tablespace는 이 block size를 이용합니다.)


Oracle 9i에 새로 생긴 파라미터는 아래와 같이 ALTER SYSTEM 명령으로 동적변경이 가능합니다


SQL> ALTER SYSTEM SET DB_CACHE_SIZE=96M;

SQL> ALTER SYSTEM SET DB_KEEP_CACHE_SIZE=16M;

SQL> ALTER SYSTEM SET DB_RECYCLE_CACHE_SIZE=16M;


이 강좌는 오라클 불틴 No 12090을 참고해서 작성 했습니다.


                                                                                                                                   

** 리두 로그 버퍼(Redo Log Buffer) **


- 리두 로그 버퍼는 데이터베이스에서 일어난 모든 변화를 저장하는 메모리 공간입니다.


- DB에서 발생한 모든 변화는 LGWR에 의해 리두 로그 파일에 저장 합니다.


- 리두 로그 버퍼는 Database의 변경 사항 정보를 유지하는 SGA에 있는 Circular(순환) 버퍼 입니다.


- Redo Log Buffer의 크기는 오라클 파라미터 LOG_BUFFER에서 지정합니다.


                                                                                                                                   

** Java Pool과 Large Pool **


1) Java Pool

 - Java Pool은 자바로 작성된 프로그램을 실행할 때 실행 계획을 저장하는 영역 입니다.


 - Java Pool은 JAVA_POOL_SIZE 파라미터로 관리되며, 기본 크기 24MB가 할당 됩니다.


2) Large Pool

 - Large Pool은 Oracle 백업 및 복원 작업에 대한 대용량 메모리 할당, I/O 서버 프로세스 및 다중 스레드 서버와 Oracle XA에 대한 세션 메모리를 제공하는 SGA의 선택적인 영역입니다.


 - Large Pool은 LARGE_POOL_SIZE 파라미터로 관리되며, 기본 크기는 0byte 입니다.


                                                                                                                                   

 

  

 

  ================================================
    * Oracle Community OracleClub.com
    * http://www.oracleclub.com
    * http://www.oramaster.net
    * 운영자 : 김정식 (oramaster _at_ empal.com)
  ================================================ 
Posted by 1010
01.JAVA/Java2009. 6. 4. 18:06
반응형

Tomcat을 사용하다가 java application 실행 시
java.lang.OutOfMemoryError: Java heap space 에러 생겼을 때 해결방법.


생기는 경우의 수가 많이 있을 것 같지만, 이번에 아래의 스크립트로 해겼되었으므로 적어놔야 겠다.

----

이번 경우는 Confluence Wiki 설치 중, 어느 부분에서 페이지가 넘어가지 못하고 먹통이 되었다가 결국 아래의 에러가 발생했다. 

java.lang.OutOfMemoryError: Java heap space

Confluence Wiki와 같은 Java 어플리케이션은 JVM에서 구동된다. 따라서 시작 시 JVM에서 일정량의 메모리를 할당하여 어플리케이션에서 사용된다. 기본적으로 Java 가상머신은 서버에 얼마나 많은 물리적인 메모리가 설치되있더라도 오직 64MB의 메모리만을 할당된다고 한다.
따라서 Confluence Wiki같은 중간규모 이상의 어플리케이션은 늘리필요가 있다고 한다.

늘리는 방법을 찾느냐 조금 시간이 걸렸다.
Linux, Java, Tomcat에 능통한 사람이면 금방 찾을 수 있지만, 전혀 찾을 수 없었다.
그래서 여기저기 해결방법을 짜집기 하다가 힌트를 얻었고 스크립트를 작성하였다.

** tomcat 5.5 기준임 **

/usr/local/tomcat/bin 에 tomcat.sh를 하나 만들자. (/usr/local/ 는 사람마다 다를 수 있슴)

> cd  /usr/local/tomcat/bin
> vi tomcat5.sh

tomcat5.sh 파일내용

#!/bin/sh
# file:tomcat.sh
CLASSPATH=/usr/java/jdk1.5.0_15/lib
JAVA_HOME=/usr/java/jdk1.5.0_15
CATALINA_OPTS="-Djava.awt.headless=true"
JAVA_OPTS="-Xms512m -Xmx512m"

export CLASSPATH
export JAVA_HOME
export CATALINA_OPTS
export JAVA_OPTS

case "$1" in
start)
echo "Starting tomcat5..."
/usr/local/tomcat/bin/startup.sh
;;
stop)
echo "Stopping tomcat5..."
/usr/local/tomcat/bin/shutdown.sh
;;
*)
echo "Usage tomcat.sh start/stop"
exit 1;;
esac

tomcat 시작

> tomcat.sh stop
> tomcat.sh start
 
Posted by 1010
01.JAVA/Java2009. 6. 4. 18:04
반응형

java.lang.OutOfMemoryError: PermGen space

요즘 들어 부쩍 java.lang.OutOfMemoryErorr로 인해 이클립스가 뻗어버리는 일이 많이 발생했었다. 하지만 Heap Monitor를 보면 200M 조차 사용하지 않는다. 이런 경우, 대부분은 PermGen 영역이 모자란 것이 원인일 수 있다.

{workspace}/.metadata/.log를 확인해보면 PermGen space라고 기록되어 있을 것이다.

Eclipse를 사용할 때는 JVM에 -Xmx 옵션은 대부분은 넣어서 사용하리라 생각한다. 하지만 Java는 메모리 영역을 사실상 두 부분으로 구분하여 사용한다. 일반 Java Heap space와 클래스와 같이 Permenant Generation 대상 데이터를 두기 위한 PermGen space이다.

대부분의 자바 애플리케이션에서는 기본 PermGen Size로 충분하겠지만 이클립스의 경우 클래스가 꽤 많아지면서 모자란 경우가 있는듯 하다. javanese의 경우 Callisto를 깔아놓고 JDT, CDT를 왔다갔다 하면서 사용하다보니 Heap은 별로 쓰지도 않는데 PermGen space가 종종 모자라는 경우가 있다. 아마 Web관련 Tool을 많이 사용하는 분도 같은 현상이 나타날 수 있을 것이다.

PermGen space는 -XX:MaxPermSize 옵션으로 설정할 수 있다.

eclipse -vm /usr/lib/jvm/java-1.5.0-sun/bin/java -vmargs -XX:MaxPermSize=128m -Xms128m -Xmx512m

OutOfMemory 에러가 발생한다면 -Xmx만 늘려주지말고 PermSize도 확인해보라.

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

java.lang.OutOfMemoryError 

                     2005-05-31     송학렬    ㈜아이티플러스 기술지원부

이 문서는 기술지원 또는 개발 시 java.lang.OutOfMemoryError 를 만났을 때 원인 파악 및 해결방안 입니다.

java.lang.OutOfMemoryError 에는 크게 2가지 패턴이 있다고 볼 수 있습니다.(전적으로 개인적인 생각이지만..^^)

Java heap 메모리가 정말로 Full 되서 나는 종류가 있고 그렇지 않은데도 나는 종류가 있습니다.

그 둘 중에 어는 것 인지부터 가려내는 것이 가장 먼저 선행되어야 합니다.

Java 가상머신에는 메모리 구조가 여러단계로 나뉘어 져 있으므로 어느 영역에 의해 java.lang.OutOfMemoryError 가 나는지 알기 위해 JAVA OPTION으로 싸이트가 안정화 되기 전까진 verbosegc 또는 -XX:+PrintGCDetails  옵션을 추가해 놓는 것이 java.lang.OutOfMemoryError 났을 때를 대비해 좋은 습관이라 할 수 있습니다.

-verbosegc 또는  -XX:+PrintGCDetails  옵션으로 로그에 남는 heap 메모리 정보를 본 후 java.lang.OutOfMemoryError 가 날 때 heap이 꽉 차서 나는 것인지 아닌지 부터 판단합니다.

1.     Heap Memory Full 차지 않았을 때 1)     Perm 영역이 full 되는 경우

Permanent generation is full…

increase MaxPermSize (current capacity is set to: 134217728 bytes)

[Full GC[Unloading class sun.reflect.GeneratedSerializationConstructorAccessor31282]

 810207K->802132K(1013632K), 8.3480617 secs]

<GC: 2 4  2465625.831280 10348 0 31 113802808 105534632 286326784 0 0 35782656 715849728 715848840 715849728 134217720 134023296 134217728 8.348677 8.348677 >

Passwd Check =============

<2005. 5. 19. 오전 9 32 23 KST> <Error> <HTTP> <BEA-101017> <[ServletContext(id=2536415,name=/,context-path=)] Root cause of ServletException.

java.lang.OutOfMemoryError

위와 같은 case 인 경우네는 Java 가상머신중에 Perm 영역이 full 차는 경우 입니다. 

Perm 영역에는 class object 및 관련된 meta data가 로드되는 곳인데 싸이트가 매우 많은 수의 class를 사용하는 경우 늘려줘야 하는 case도 있습니다.

얼마가 적정한 사이즈란 정답이 없는 것 같고 max가 계속 늘어나지 않고 일정한 사이즈를 유지 하면 됩니다.

             위 에러가 났을때는 -XX:MaxPermSize=256m  옵션으로 사이즈를 적당하게 늘려주는게 방

             법이며 늘려주었는데도 불구하고 Full 차는 시간만 늘어날 뿐 계속 사이즈가 늘어난다면 이 영역은 일반 비즈니스 프로그램으로 핸들링 할 수 없는 영역이므로 WAS 제품의 버그 및 jdk 버그로 보는 것이 일반적입니다.

       

2)     MAXDSIZ 사이즈 관련

  - Exception in thread “CompileThread0″ java.lang.OutOfMemoryError: requested 32756 bytes for ChunkPool::allocate

Possible causes:

         - not enough swap space left, or

         - kernel parameter MAXDSIZ is very small.

-          java.lang.OutOfMemoryError: unable to create new native thread

 

위 두 에러가 나는 이유는 Data 사이즈가 Full 차서 더 이상 메모리 할당을 할 수 없다는 java.lang.OutOfMemoryError 입니다.

Jdk도 내부적으로 c 라이브러리를 쓰고 jni를 통해서 c프로그램을 호출할 수 도 있는 환경에서 Data 영역이상으로 메모리 사용 시 위 에러를 만날 수 있습니다.

Heap 영역에는 java heap C heap이 있는데 C heap Data 메모리 영역에 영향을 미치는 것으로 보이며 보통 C의 전역 변수들이 잡히는 영역입니다.

위 현상을 만났을 때는 hp os MAXDSIZ가 너무 작게 잡혀있지 않은지 확인 후 적당한 크기로 늘려 줘야 합니다.

Glance 에서 shift+m 을 누른 후 jvm pid를 누르면 java가 사용하는 Data 사이즈를 모니터링 할 수 있습니다.

모니터링을 통해 적정한 사이즈로 MAXDSIZ를 늘려주어야 하며 만일 늘려 준게 에러 발생의 시간만 지연 시킬 뿐 계속 사용량이 늘어난다면 이는 사용하는 c라이브러리 쪽에 메모리 릭 버그가 있는 것이므로 c라이브러리를 체크 하셔야 합니다.

java.lang.OutOfMemoryError: unable to create new native thread

이 경우는 프로그램에서 Thread pool 프로그램 실수로 필요이상으로 쓰레드가 생성되는 경우도 과도하게 메모리를 사용할 수 있으므로 jvm 쓰레드 덤프를 통해 과도한 쓰레드가 생성되지 않았는지도 확인해 보셔야 합니다.

2.     Heap Full 찾을 때

이 경우는 java가 사용하는 heap 영역이 Full 되서 java.lang.OutOfMemoryError 가 나는 경우 인데 두 가지 패턴이 있습니다.

순간적으로 대량의 데이터를 메모리에 올리는 프로그램이 실행되어 문제를 야기 할수 있으며 다른 한 가지는 조금씩 메모리 릭이 발생하여 점차적으로 메모리가 쌓여 가는 경우 입니다.

두 가지 중에  어느 것인지 구별하는 것이 중요하며 이를 위해서도 마찬가지로 -verbosegc 또는  -XX:+PrintGCDetails  로그를 통해 순간적으로 메모리가 차는 것인지 조금씩 메모리가 차는 것인지를 확인하셔야 합니다.

1) 특정 프로그램의 특정시점의 과도한 메모리 사용에 의한 경우

                특정 프로그램이 과도하게 heap 메모리 이상 메모리를 사용하면서

java.lang.OutOfMemoryError가 발생하는 경우는 이 에러가 발생하는 시점의 쓰레드 덤프를 통해 어느 프로그램인지 쉽게 찾을 수 있습니다.

쓰레드 덤프에 메모리를 쓸만한 프로그램은 어느 정도의 자바프로그램 경험이 있으면 찾을 수 있습니다.

Ex)

“ExecuteThread: ‘36′ for queue: ‘default’” daemon prio=10 tid=0×0048e7b0 nid=48 lwp_id=4139729 runnable [0x23f32000..0x23f30500]

          at java.net.SocketInputStream.socketRead(Native Method)

          at java.net.SocketInputStream.read(Unknown Source)

          at oracle.net.ns.Packet.receive(Unknown Source)

          at oracle.net.ns.NetInputStream.getNextPacket(Unknown Source)

          at oracle.net.ns.NetInputStream.read(Unknown Source)

          at oracle.net.ns.NetInputStream.read(Unknown Source)

          at oracle.net.ns.NetInputStream.read(Unknown Source)

          at oracle.jdbc.ttc7.MAREngine.unmarshalUB1(MAREngine.java:718)

          at oracle.jdbc.ttc7.MAREngine.unmarshalSB1(MAREngine.java:690)

          at oracle.jdbc.ttc7.Oall7.receive(Oall7.java:373)

          at oracle.jdbc.ttc7.TTC7Protocol.doOall7(TTC7Protocol.java:1405)

          at oracle.jdbc.ttc7.TTC7Protocol.fetch(TTC7Protocol.java:889)

          - locked <0×35e8e3b0> (a oracle.jdbc.ttc7.TTC7Protocol)

          at oracle.jdbc.driver.OracleResultSetImpl.next(OracleResultSetImpl.java:242)

          - locked <0×36f66c98> (a oracle.jdbc.driver.OracleResultSetImpl)

          at weblogic.jdbc.pool.ResultSet.next(ResultSet.java:180)

          at Dcard.AAA.ejb.monitor.member.wbbb.WACBean.getInfoList(WACBean.java:5789)

java.lang.OutOfMemoryError 가 날 상황에 쓰레드 덤프를 두 세번 떠서 같은 쓰레드 번호로 위 같은 로직이 오래 결려있다면 이는 프로그램에서 while(rs.next()) 를 오랜 기간 돌면서 메모리에 DB로부터 읽어서 올리고 있다는 것을 의미 합니다 대량 데이터 조회가 일어나는 경우인 것 입니다.

이런 식으로 특정 프로그램의 특정 시점에 과도한 메모리 사용으로 인한 java.lang.OutOfMemoryError 에러는 쓰레드 덤프를 통해 찾을 수 있습니다.

물론 2번에서 설명 할 heap dump를 통해서도 찾을 수 있습니다.

2) 메모리 릭에 의해 조금씩 메모리가 쌓인 경우

JVM위 에서 실행중인 프로그램중에 어떤 것이 GC 대상에서 제외되는 영역에 data를 조금씩 쌓고 있다는 얘기입니다.

GC 대상에서 제외되는 영역은 다음과 같은 곳이 있습니다.

- Http Session에 넣는 데이터..(세션 타임아웃 또는 invilidate 씨 까지 제외됨)

- Static 변수

- 서블릿 또는 jsp의 멤버변수 ( WAS 기동 후 최초 호출 시 인스턴스 화 되어 WAS가 내려 갈 때 까지 사라지지 않음 )

- EJB의 멤버변수( pool안에서 객체가 존재하는 한 GC대상에서 제외)

          위 같은 영역에 프로그램에서 data add 하는 구조를 메모리 릭 이라고 할 수 있습니다.

           IBM 또는 SUN JDK 인 경우에는 heapdump를 통해서 분석하여 어느 데이터가 메모리를 많이 잡고 있는지를 알 수 있습니다.

           Heapdump 사용법 및 분석 법은 다음을 참조 하시면 됩니다.

 http://www.alphaworks.ibm.com/aw.nsf/FAQs/heaproots

http://www-1.ibm.com/support/docview.wss?uid=swg21190476

http://www-1.ibm.com/support/docview.wss?rs=180&context=SSEQTP&q1=heapdump+solaris&uid=swg21190608&loc=en_US&cs=utf-8&lang=en

http://www.skywayradio.com/tech/WAS51/IBMHeapDump/

출처 : http://www.javaservice.net/~java/bbs/read.cgi?m=etc&b=jdk&c=r_p&n=1117521098&p=1&s=t#1117521098

var viewer_image_url = “http://blogimgs.naver.com/blog20/blog/layout_photo/viewer/”; var photo = new PhotoLayer(parent.parent.parent); photo.Initialized(); window.onunload = function() { photo.oPhotoFrame.doFrameMainClose(); }.bind(this);

Posted by 1010
01.JAVA/Java2009. 6. 4. 14:44
반응형
C:\Documents and Settings\Administrator>emctl start dbconsole
Environment variable ORACLE_SID not defined. Please define it.

C:\Documents and Settings\Administrator>set ORACLE_SID=orcl

C:\Documents and Settings\Administrator>emctl start dbconsole
OC4J Configuration issue. C:\oracle\product\10.2.0\db_1/oc4j/j2ee/OC4J_DBConsole
_192.168.1.66_orcl not found.

C:\Documents and Settings\Administrator>emctl start dbconsole
EM Configuration issue. C:\oracle\product\10.2.0\db_1/192.168.1.66_orcl not foun
d.

C:\Documents and Settings\Administrator>emctl start dbconsole
Oracle Enterprise Manager 10g Database Control Release 10.2.0.1.0
Copyright (c) 1996, 2005 Oracle Corporation. All rights reserved.
http://ts:1158/em/console/aboutApplication
Starting Oracle Enterprise Manager 10g Database Control ...OracleDBConsoleorcl
서비스를 시작합니다..
OracleDBConsoleorcl 서비스를 시작할 수 없습니다.

시스템 오류가 발생했습니다.

시스템 오류 3이(가) 생겼습니다.

지정된 경로를 찾을 수 없습니다.


C:\Documents and Settings\Administrator>emctl start dbconsole
Oracle Enterprise Manager 10g Database Control Release 10.2.0.1.0
Copyright (c) 1996, 2005 Oracle Corporation. All rights reserved.
http://ts:1158/em/console/aboutApplication
Starting Oracle Enterprise Manager 10g Database Control ...OracleDBConsoleorcl
서비스를 시작합니다.................
OracleDBConsoleorcl 서비스가 잘 시작되었습니다.


C:\Documents and Settings\Administrator>


해결방법

C:\WINDOWS\system32\drivers\etc

의 host화일을 수정한다

현재 사용중인 pc 의 이름과 ip를 매칭시켜주면된다.


192.168.1.66 ts

이런식으로 추가하여준다.
Posted by 1010
02.Oracle2009. 6. 4. 10:49
반응형
 

ORA-06502 PL/SQL: numeric or value error: character string buffer too small

 

해당 에러가 발생하는 것은 데이타가 자릿수를 초과한경우 임


데이터크기를 어느정도 맞춘상태에서 작업한 상황이라 이건 말도 안되는 경우라 생각했는데..

프로시져에서 REPLACE를 이용해 데이터를 변경하는 부분에서 변경될 데이터를 담을 변수의 크기의 공간이 적다는 것을 발견했네요...


항상 조심했어야 했는데.. 나름대로 충분하다고 계산된 것이 replace 문자를 넣는 바람에 초과된걸 계산안했더니 오류를 발생하네요(사실 초과된지도 몰랐는데ㅠ.ㅠ)


암튼 조심조심해야 겠네요..

Posted by 1010
98..Etc/Server2009. 6. 2. 18:32
반응형

인터넷 정보 서비스 및 FTP 서비스 설치

FTP는 IIS(Microsoft Internet Information Services)에 의존하기 때문에 IIS와 FTP 서비스가 컴퓨터에 설치되어 있어야 합니다. IIS와 FTP 서비스를 설치하려면 다음과 같이 하십시오.

참고: Microsoft Server 2003 제품군에서는 IIS를 설치할 때 FTP 서비스가 기본적으로 설치되지 않습니다. 컴퓨터에 IIS를 이미 설치했다면 Control PanelAdd or Remove Programs 도구를 사용하여 FTP 서비스를 설치해야 합니다.

  1. Start를 누르고 Control Panel을 가리킨 다음 Add or Remove Programs를 누릅니다.
  2. Add/Remove Windows Components를 누릅니다.
  3. Components 목록에서 Internet Information Services (IIS)를 누르고(이 때 확인란은 선택하지 않음) Details를 누릅니다.
  4. 다음 확인란을 아직 선택하지 않았으면 선택합니다.

    Common Files
    File Transfer Protocol (FTP) Service
    Internet Information Services Manager

  5. 설치할 그 밖의 다른 IIS 관련 서비스나 하위 구성 요소 옆에 있는 확인란을 선택한 다음 OK를 누릅니다.
  6. Next를 누릅니다.
  7. 메시지가 나타나면 Windows Server 2003 CD-ROM을 컴퓨터의 CD-ROM 또는 DVD-ROM 드라이브에 넣거나 해당 파일 위치의 경로를 제공한 다음 OK를 누릅니다.
  8. Finish를 누릅니다.

이제 IIS와 FTP 서비스가 설치되었습니다. FTP 서비스를 사용하려면 먼저 구성해야 합니다.

FTP 서비스 구성

익명 연결만을 허용하도록 FTP 서비스를 구성하려면 다음과 같이 하십시오.

  1. Internet Information Services Manager를 시작하거나 IIS 스냅인을 엽니다.
  2. Server_name(여기서 Server_name은 서버 이름임)을 확장합니다.
  3. FTP Sites를 확장합니다.
  4. Default FTP Site를 마우스 오른쪽 단추로 누른 다음 Properties를 누릅니다.
  5. Security Accounts 탭을 누릅니다.
  6. 아직 선택하지 않았다면 Allow Anonymous Connections 확인란을 선택한 다음 Allow only anonymous connections 확인란을 선택합니다.

    Allow only anonymous connections 확인란을 선택한 경우 익명 연결만을 허용하도록 FTP 서비스를 구성합니다. 사용자는 사용자 이름과 암호를 사용해서 로그온할 수 없습니다.
  7. Home Directory 탭을 누릅니다.
  8. 아직 선택하지 않았다면 ReadLog visits 확인란을 선택한 다음 아직 선택 취소하지 않았다면 Write 확인란을 선택 취소합니다.
  9. OK를 누릅니다.
  10. Internet Information Services Manager를 종료하거나 IIS 스냅인을 닫습니다.

이제 들어오는 FTP 요청을 받아들이도록 FTP 서버가 구성되었습니다. 사용 가능하게 만드려는 파일을 액세스용 FTP 게시 폴더에 복사하거나 이동합니다. 기본 폴더는 drive:\Inetpub\Ftproot(여기서 drive는 IIS가 설치되어 있는 드라이브임)입니다.



출처 : http://support.microsoft.com/default.aspx?scid=kb;ko;323384

Posted by 1010
98..Etc/70.JEUS2009. 6. 2. 12:54
반응형

안녕하세요~ 은양입니다.


이번시간에 할 내용은 JEUS설치하기입니다.


http://www.tmax.co.kr 여기에서 받으시면 되구요.. JEUS6.0까지 나온듯 한데...


여기에서 사용할 버젼은 JEUS5.0입니다.



자, 그럼 설치를 시작해 볼까요..?


이미지를 클릭하시면 원본크기로 보실수 있습니다.

처음 실행파일을 실행하면 나오는 화면인데요..


그냥 아무생각없이 NEXT..



이미지를 클릭하시면 원본크기로 보실수 있습니다.



동의하시고.. NEXT!!


이미지를 클릭하시면 원본크기로 보실수 있습니다.

제우스 설치폴더 지정하는건데요..


그냥 기본폴더를 사용하겠습니다. NEXT!!


이미지를 클릭하시면 원본크기로 보실수 있습니다.

Full Install 선택하시고.. NEXT!!


이미지를 클릭하시면 원본크기로 보실수 있습니다.


그러면 위와같이 윈도우 시작시 서비스 시작할꺼냐고 묻는데요...  "NO" 선택하죠..


이미지를 클릭하시면 원본크기로 보실수 있습니다.

JDK 설치폴더를 지정합니다..

당연히 JDK먼저 설치후에 JEUS를 설치해야겠죠..? ^^

NEXT!!


이미지를 클릭하시면 원본크기로 보실수 있습니다.

패스워드를 물어보네요

AJAXMASTER 라고 해볼께요.. 뭐, 패스워드는 아무렇게나 넣어도 상관없습니다.

단, 7자 이상...

NEXT


이미지를 클릭하시면 원본크기로 보실수 있습니다.

여태까지 입력했던 사항 확인하시구요

Install ~~


이미지를 클릭하시면 원본크기로 보실수 있습니다.

자.. 설치가 진행중입니다..


이미지를 클릭하시면 원본크기로 보실수 있습니다.

완료되면 QuickStart할거냐고 물어보는데.. 그냥 나중에 보죠..

NO!!


이미지를 클릭하시면 원본크기로 보실수 있습니다.


자, 여기까지 됐다면.. JEUS는 성공적으로 설치가 되었습니다.



실제 폴더로 한번 가볼까요..


이미지를 클릭하시면 원본크기로 보실수 있습니다.

TmaxSoft 밑에 JEUS5.0 폴더 밑에 webhome 밑에 app_home밑에 한번 가보시죠...

여기가 앞으로 실제 작업을 하게될 폴더입니다.


자, 이제 설치를 하였으니 실행을 시켜야겠죠...


시작-실행-cmd 로 명령프롬프트 콘솔창을 실행시키겠습니다.


이미지를 클릭하시면 원본크기로 보실수 있습니다.


실행시킨후에 JEUS라고 쳐보겠습니다.


이미지를 클릭하시면 원본크기로 보실수 있습니다.

그러면, 위와같이 뭐라고뭐라고 막 실행한후에 마지막부분에


JeusServer is Ready라는 문구를 볼수 있을겁니다.  여기까지 되었다면 정상적으로 Jeus Server까지 실행이 된것이죠...^^




자, 이제 인터넷 익스플로워를 하나 띄운후에요....


다음과 같이 입력해 봅니다.


http://localhost:9744/webadmin


이미지를 클릭하시면 원본크기로 보실수 있습니다.

그러면 위와같은 화면이 보일텐데요..


USER NAME에는 administrator을 넣구요

PASSWORD에는 위에서 설치할때 주었던 패스워드 기억나시죠....

저는 AJAXMASTER라고 했었는데요.. 그것을 넣어주면 됩니다.. 그리고 OK!!


이미지를 클릭하시면 원본크기로 보실수 있습니다.


성공적으로 로그인이 되었다면 위와같은 화면을 볼수 있을겁니다.


여기에서 제우스 노드트리에 보면 자기 컴퓨터 이름이 보이는데요..  오른쪽 버튼을 눌러보면


JEUS 노드제어라는것이 있습니다.  이것을 클릭..!!


이미지를 클릭하시면 원본크기로 보실수 있습니다.

그러면 위와같이 가능한 노드가 나오는데요.. 자기 컴퓨터 이름 체크하후에 "확인" 버튼을 눌러줍니다.


이미지를 클릭하시면 원본크기로 보실수 있습니다.

위와같이 성공적으로 부트되었다는 메세지가 뜨죠..?


이제 실제 접속을 해보겠습니다.


http://localhost:8088/


이미지를 클릭하시면 원본크기로 보실수 있습니다.

어떻습니까... 위와같은 화면이 보이시나요? ㅋ


자, 이제 저위에 제우스웹관리자에서 다운 및 종료를 해보시구요...


실제 이과정은 Command 창에서 실행할 수 있습니다.



도스창을 하나더 실행시키구요.. 다음과 같이 입력합니다.

jeusadmin 자기컴퓨터이름  <== 요렇게 입력하면되죠..

이미지를 클릭하시면 원본크기로 보실수 있습니다.


이 화면에서.. 다음과 같이 아이디,암호를 입력합니다.

이미지를 클릭하시면 원본크기로 보실수 있습니다.

아이디는 administrator이구요

패스워드는 AJAXMASTER이겠죠..


이상태에서 boot라고 입력하면 이전에 띄워놓았던 도스창화면이 막 바뀌면서 실제 부트가 될것입니다.


그리고, 부트가 완료되면


이미지를 클릭하시면 원본크기로 보실수 있습니다.


위와같이 boot done이라는 메세지가 보이게 되는거죠....


종료하고 싶을때는 "down"이라고 치시면 되구요..  완료후에 나갈때는 "exit" 하면 됩니다.



자, 여기까지 한후에 다시 http://localhost:8088/로 테스트 해보시구요..


오늘은 여기까지만 하구요.. 다음시간에는 DB를 하나 만든후에 Connection Pool 연결하는 방법에 대해서

소개해드리겠습니다. 그럼 이만..ㅃㅃ

출처 : http://club.paran.com/club/home.do?clubid=eypgworld-bbsView.do?menuno=2922748-clubno=1078741-bbs_no=0QWZk

Posted by 1010
98..Etc/70.JEUS2009. 6. 2. 12:50
반응형

jeus 설치


.jeus 나 sh 를 사용해 해당 파일을 실행.

5 : 테스트나 일반적 용도시

6 : 웹서비스 할 때, HP-UX는 꼭 Jesu 6버전...버그 있어서


JDK는 무조건 1.5 (1.4도 상관없으나, 1.6은 지원 안함)

1.5가 성능이 좋음.

유닉스 시스템이 많다.


설치시 2가지 중요..

dependency와 dB 로그 최소 10 G 이상의 DB공간

UTF-8 : 가장많이 사용하나 ,,, 일본어와 중국어 는 깨지는 수가 있음. 일본어는 그나마 괜찮음.

ex) LANG=ko_KR.euckr ; export LANG
LC_ALL=ko_KR.euckr ; export LC_ALL


ProFrame 설치하면 JEUS 설정 파일이 수정된다.

백업하라.

cp -rp dest source

cp -rp config config.20080804

rp 레커시브하게 권한으로? 백업?

항상 백업하라. 날짜를 붙이면 편하다.


설치시 설치 폴더에서 simpleInstall.sh를 실행하라.


Oracle 버전에 따라 수정해야한다.

MS-SQL은 지원하지 않는다.(드라이버에 버그)


1.Install Directory
proframe_dir=/home/proframe/proframe -> ProFrame 설치경로. 압축해제시 나온 proframe 디렉토리의 Full Path를 입력
jeus_dir=/home/proframe/jeus5 -> 설치해 놓은 JEUS 의 설치경로( ${JEUS_HOME} 과 동일)
2. DB 관련 설정
# DB Info
DB_VENDOR=oracle -> DB 의 Vendor 를 설정한다. DB 에 따라서 사용되는 Query 및 DB 접속정보가 결정된다.
db_oracle_9i=false -> 사용하려는 DB 가 Oracle 9i 인 경우에는 true 로 설정하고, 그 외에는 false 로 둔다.
dbserverip=192.168.0.0 -> DB Server 의 IP
dbserverport=1521 -> DB 의 Service Port
dbserverid=proframe -> ProFrame 4 Java용으로 DB 에 생성한 User
dbserverpwd=proframe -> ProFrame 4 Java용으로 DB 에 생성한 User 의 Password
dbserversid=ora10 -> DB Server 의 ID. Oracle 의 경우 SID, 다른 DB 의 경우 Service Name 또는 Server Name
3. ProFrame WAS 의 포트정보 설정
# ProFrame Port Info
pfm_admin_port=9876 -> ProFrame 4 Java의 admin이 사용할 Port. http://서버IP:9876/proframeAdmin으로 접속한다.
devsvr_port=33323 -> ProFrame 4 Java의 통합개발서버가 사용할 Port.
ProBuilder에서 Project 생성시 사용하는 Port
ippr_port=5020 -> ProFrame 4 Java의 통합개발서버가 변경사항 발생시 Notify 를 주는 port
4. 그 외의 설정들은 특별한 문제가 없다면 기본값을 그대로 사용한다.




1.개발 아키텍쳐 개요


2.통합 개발 환경 관리 - 통합 개발 서버



메모리 1G 이상..

하드디스크 1G이상 ..여유공간.


145번 패치 설치

현재 160번 까지 나옴.


33323

test10 / test10

PROJECT_TEST10



5.오브젝트 생성


PO : pattern Object



1.로컬 디버거

로컬에서 디버깅을 할수 있다..

하지만 로컬 디버깅 할 소스와 파일들을 모두 다운 받아 재구성 해야한다. (패치나와도 다시해야함)


제우스 설정과 , 환경설정 파일 다운 받는다.

Windows\System32\dirvers\etc\hosts 파일을 열어 프로프레임 설치 서버 IP 와 HostName입력




DBIO

  • DataBase Input/Output
    - 데이터베이스를 쉽고 일관된 API로 접근할 수 있도록 해주며 업무컴포넌트 개
    발시에 데이터베이스 벤더에 관계없이 코딩할 수 있도록 해준다.

DTO


- Data Transfer Object
- Java Object, DBIO 를 호출하기 위한 IN, OUT 객체로 사용된다.


BO

- Business Object
- 비즈니스 기능을 수행하는 재사용성의 단위로서 Service Object에서 레퍼런스
호출 되며 정보 처리 및 계산 그리고 DBIO 호출 후 데이터 가공 등을 수행한다.



DTO

Data Transfer Object
- Java Object, DBIO 를 호출하기 위한 IN, OUT 객체로 사용된다.


SO

- Service Object - 외부에 오퍼레이션을 노출할 수 있는 리소스 단위로서 단위
트랜잭션 수행의 단위이며 IPPR을 통해 분기되어 호출된다.주로 Business
Object를 Orchestration(통합)하는 Flow 중심 어플리케이션이다.


PROMAPPER

입출력 전문을 정의하고 전문클래스를 생성하고 전문데이타를 받아서 객체로 변
환하거나 객체를 전문데이타로 변환하는 등의 일을 수행한다.




EMB

Enterprise Module Bus의 약자로 서비스 모듈이 만들어지면, 그 모듈들을 조합하
여 다양한 새로운 서비스를 만들 수 있는 서비스 기반의 아키텍처이다.


메가 플로우 마이크로 플로우, 인터 soa intra soa



Deployment Descriptor

  • Service Object 작성이 끝나면 Deployment Descripter를 실행해야 한다.
    - 개발 어플리케이션에 대한 명세


어플리케이션

  • 업무적으로 연관있는 서비스를 그룹핑하여 패키징, Deploy하는 단위.
    (EJB Class 의 DD 명세를 작성하는 것과 의미적으로 유사하다.)
    어플리케이션을 생성하고





2.서비스 작성 절차

1 Service 설계 - 서비스 처리에 대한 설계서 작성
- DTO Class에서 사용하는 멤버 변수의 이름을 메타 시스템에 등록
- DTO Class 구조정의


2.DTO 객체정의

3 DBIO 정의


4 BO 정의


5 SO 정의


DTO(Data Transfer Object)


1. 개요
- DTO는 클래스 호출을 위하여 의미 있는 값을 전달할 수 있는 구조를 정의
2. 메타등록
- 사용할 변수는 사전에 메타에 등록되어야 한다. 보통 DB CRUD를 위해 사용되므
로 DB에 정의된 칼럼을 사전에 메타 시스템에 등록하여 사용하는 것을 권장한다.
- 메타를 등록하려면 ProframeAdmin 에 접속한 후
Integrated Development Server > Meta Management 화면을
이용하면 된다.



4. DBIO(DataBase Input/Output)

  1. 개요
    - ProFrame에서 제공하는 데이터베이스 접근에 관한 표준적인 방법으로 데이터베
    이스의 데이터를 Control 하는 Class이다.
    2. 특징
    ⓐ DB 접근 방식을 표준화한다. ⓑ DB 접근 시 일괄된 에러 처리를 지원한다.
    ⓒ DBMS 벤더에 대한 의존성을 배제할 수 있다.
    ⓓ 중복된 데이터 베이스 프로그램을 최소화한다.
    ⓔ 업무로직과 DB 접근 로직에 신경 쓰지 않고 업무로직에 전념할 수 있다.
    ⓕ Tool을 이용하여 생산성 향상시키고 오류 가능성을 줄여준다.


Persist SELET/UPDATE/INSERT/DELETE 단일테이블

View SELECT(조인, 서브쿼리) 여러 테이블

Execute INSERT/UPDATE/DELETE Persist 에서 지원할 수 없는 범위에서 수행


5.BO(Business Object)

1. 개요
- 비즈니스 기능을 수행하는 재사용성의 단위로서 Service Object 에서 레퍼런스 호
출되며, 정보 처리 및 계산 그리고 DBIO 호출 후 데이터 가공 등을 수행한다.
2. BO 작성하기
- 패키지탐색기 > 오른쪽 마우스클릭 > 새로작성 > Business Object
- Add on Operation : public 메소드 생성
- BO의 입출력 DTO를 선택
- 생성된 public method를 더블 클릭하여 EMB 디자이너 창으로 이동
- EMB 디자이너 창에서 Palette을 열어서 inner 모듈 등록
- Object Pool을 검색하여 등록된 DBIO를 Drag&Drop
- DBIO 선택 후 속성창에서 DBIO Call을 설정


6.SO(Service Object)

  1. 개요
    - 외부에 오퍼레이션을 노출할 수 있는 리소스 단위로서 단위 트랜잭션 수행의 단위
    이며 IPPR을 통해 분기되어 호출, BO를 Orchestration 하는 Flow 중심 어플리케
    이션이다.
    2. SO 작성하기
    - 패키지탐색기 > 오른쪽 마우스클릭 > 새로작성 > Service Object
    - Add on Operation : public 메소드 생성
    - SO의 입출력 DTO를 선택
    - 생성된 public method를 더블 클릭하여 EMB 디자이너 창으로 이동
    - EMB 디자이너 창에서 Palette을 열어서 inner 모듈 등록
    - Object Pool을 검색하여 등록된 BO를 Drag&Drop

SO가 비즈니스 로직을 오케스트레이션 함 SOA 에서 사용 웹 서비스

BO를


7.Application Deploy

  1. Deployment 절차
    - 작성된 리소스를 모두 커밋
    - Service Object 작성이 끝나면 Deployment Descripter를 실행
    - Deployment Descripter를 한 후에 작업한 프로젝트 Meta-INF에
    proframe-application.xml을 커밋

절차 시험엔 안나옴.

 커밋 : 로컬의 수정 사항을 서버로 전송.

체크인  :  DB 가꼬감.

체크 아웃 :

동기화 : 최신 버전으로 맞춘다.


8.Service Test(1/2)

ppt 4번 ..

Posted by 1010
반응형
프로그램은 익히 들어서 알고 계신분도 있겟지만, 이름을 종종 까먹어서 물어보는 사람이 있으니 올려놓습니다.

실시간 프로세스 별 트래픽 감시가 가능합니다.
그 외는 MS에서 만들었으니 믿고 써봅시다 ㅋ

화면은 이렇게 생겼고, 툴은 MS사의 링크를 걸어두었으니 사이트에서 받아서 쓰면 됩니다.


(국내최고의 툴인 오픈캡쳐를 통한 캡쳐와 설명글을 삽입)

그리고 마지막으로 버그트럭에서 matt님께서 이 툴의 장점에 대해서 자세히 설명한 내용도 있어서 살짝 첨부합니다.

=================================================
제일 감동적인 부분은 뭐니 뭐니 해도 프로세스 별로 캡쳐가 뜬다는 것이고, 그렇게 저장된 파일은 wireshark에서도 읽힌다는. 뭔가
pcap에다 추가적인 필드를 만들어서 사용하는 듯 함.
프로세스 별로 캡쳐가 되고, 캡쳐시에 퍼포먼스 로드가 거의 없어서 그냥 켜놓고 패킷 캡쳐 해 놓고 샘플 모으기에 좋습니다.
RPC 트래픽도 잘 파싱해서 보여주니 더 좋군요. 전 고객들 문제 해결을 위해서 주로 wireshark덤프를 요구하고는 하는데 아예 이
기회에 NetMon으로 덤프해 달라고 해야하겠네요.
프로세스 정보까지 보이니 디버깅용으로 최적인듯...

파서도 웬만한 건 다 들어 있어서 따로 파서를 짜야 할 필요는 없을 것 같은데, expert라고 C++이나 C#으로 플러그인을 짤 수
있는 기능이 있네요.
요놈이 꽤 요긴할 것 같다는...

Network Monitor API라는 것을 쓰면 그냥 NetMon엔진을 쓸 수 있군요.
http://blogs.technet.com/netmon/archive/2008/10/29/intro-to-the-netwo...

pcap이나 winpcap쓰는 것보다는 더 간편할 것 같네요. 파서도 듬뿍 지원하고 파서 스크립트를 짜면 대부분의 패킷 파싱도 코딩하지
않고 해결 가능하고... 뭐 만들 일 있으면 WinPCAP대신 NetMon API로 가는 것도 괜찮을 것 같네요.
   http://www.microsoft.com/downloads/details.aspx?displaylang=en&FamilyI…  클릭수 : 76
Posted by 1010
61.Linux2009. 5. 30. 17:22
반응형
15 [리눅스 웹 서버와 실전 웹해킹] chapter 12. 기타 재미있는 툴들 esniper 05-24 297
14 [리눅스 웹 서버와 실전 웹해킹] chapter 11. 게시판의 문제점 esniper 05-24 120
13 [리눅스 웹 서버와 실전 웹해킹] chapter 10. 변수값의 이동경로 파악하기 esniper 05-24 98
12 [리눅스 웹 서버와 실전 웹해킹] chapter 9. 인터넷 익스플로어는 강력한 웹 해킹 도구 esniper 05-24 142
11 [리눅스 웹 서버와 실전 웹해킹] chapter 8. 웹프로그래밍으로 기초 쌓기 esniper 05-24 141
10 [리눅스 웹 서버와 실전 웹해킹] chapter 7. 웹 해킹 처음 시작하기 esniper 05-24 178
9 [리눅스 웹 서버와 실전 웹해킹] chapter 6. 관리 및 보안 esniper 05-24 48
8 [리눅스 웹 서버와 실전 웹해킹] chapter 5. 웹 서버 설정 esniper 05-24 50
7 [리눅스 웹 서버와 실전 웹해킹] chapter 4. 웹 서버 설치 esniper 05-24 60
6 [리눅스 웹 서버와 실전 웹해킹] chapter 3. 주요 명령어 esniper 05-24 74
5 [리눅스 웹 서버와 실전 웹해킹] chapter 2. 리눅스 서버 설치 esniper 05-24 50
4 [리눅스 웹 서버와 실전 웹해킹] chapter 1. 리눅스 처음 시작하기 esniper 05-24 76
3 [리눅스 웹 서버와 실전 웹해킹] 부록 CD 파일 다운로드 esniper 05-24 62
2 [리눅스 웹 서버와 실전 웹해킹] [책소개] 리눅스 웹 서버와 실전 웹해킹 (그대로 따라하는) esniper 05-23 154
1 국내 저작권 만료된 도서를 pdf로 공개합니다. esniper 05-21 150


출처 : http://simples.kr/bbs/board.php?bo_table=13_2
Posted by 1010
61.Linux2009. 5. 30. 17:21
반응형
chapter 9. 인터넷 익스플로어는 강력한 웹 해킹 도구
9.1 웹소스는 모두 내꺼
9.2 쿠키와 세션
9.3 자바스크립트와 메모리에 남는 변수





출처 : http://simples.kr/bbs/board.php?bo_table=13_2&wr_id=13
Posted by 1010
61.Linux2009. 5. 30. 17:19
반응형

chapter 10. 변수값의 이동경로 파악하기
10.1 POST, GET 이란?
10.2 유료결재의 원리
10.3 NetCat을 이용한 웹 해킹





출처 : http://simples.kr/bbs/board.php?bo_table=13_2&wr_id=14
Posted by 1010
61.Linux2009. 5. 30. 17:18
반응형
chapter 11. 게시판의 문제점
11.1 파일 업로드 문제
11.2 절대 경로와 태그허용
11.3 config 파일의 문제


Posted by 1010
반응형

chapter 12. 기타 재미있는 툴들
12.1 공유 폴더 문제점
12.2 매신저, Flash 파일
12.3 nmap 스캔, 검색엔진 이용
12.4 기타 툴들





출처 : http://simples.kr/bbs/board.php?bo_table=13_2&wr_id=16

Posted by 1010
02.Oracle/DataBase2009. 5. 30. 14:21
반응형
LIST

1. 문자 함수
 1-1) CHR
 1-2) CONCAT 함수
 1-3) INITCAP 함수
 1-4) LOWER 함수
 1-5) LPAD 함수
 1-6) LTRIM 함수
 1-7) NLS_INITCAP 함수
 1-8) NLS_LOWER 함수
 1-9) NLSSORT 함수
 1-10) NLS_UPPER 함수
 1-11) REPLACE 함수
 1-12) RPAD 함수
 1-13) RTRIM 함수
 1-14) SOUNDEX 함수
 1-15) SUBSTR 함수
 1-16) TRANSLATE 함수
 1-17) TREAT 함수
 1-18) TRIM 함수
 1-19) UPPER 함수
 1-20) ASCII 함수
 1-21) INSTR 함수
 1-22) LENGTH 함수


2. 날짜 처리함수(datetime function)
 2-1) ADD_MONTHS 함수
 2-2) CURRENT_DATE 함수
 2-3) URRENT_TIMESTAMP 함수
 2-4) DBTIMEZONE 함수
 2-5) EXTRACT(datetime) 함수
 2-6) FROM_TZ 함수
 2-7) LAST_DAY 함수
 2-8) LOCALTIMESTAMP 함수 
 2-9) MONTHS_BETWEEN 함수
 2-10) NEW_TIME 함수
 2-11) NEXT_DAY 함수
 2-12) NUMTODSINTERVAL 함수
 2-13) NUMTOYMINTERVAL 함수
 2-14) ROUND(date) 함수
 2-15) SESSIONTIMEZONE 함수
 2-16) SYS_EXTRACT_UTC 함수
 2-17) SYSDATE 함수
 2-18) SYSTIMESTAMP 함수
 2-19) TO_DSINTERVAL 함수
 2-20) TO_TIMESTAMP 함수
 2-21) TO_TIMESTAMP_TZ 함수
 2-22) TO_YMINTERVAL 함수
 2-23) TRUNC(date) 함수
 2-24) TZ_OFFSET 함수


3.데이터 형 변환 함수(conversion function)
 3-1) ASCIISTR 함수
 3-2) BIN_TO_NUM 함수
 3-3) CAST 함수
 3-4) CHARTOROWID 함수
 3-5) COMPOSE 함수 
 3-6) CONVERT 함수
 3-7) HEXTORAW 함수
 3-8) NUMTODSINTERVAL 함수
 3-9) NUMTOYMINTERVAL 함수
 3-10) RAWTOHEX 함수
 3-11) RAWTONHEX 함수
 3-12) ROWIDTOCHAR 함수
 3-13) ROWIDTONCHAR 함수
 3-14) TO_CHAR(character) 함수
 3-15) TO_CLOB 함수
 3-16) TO_DSINTERVAL 함수
 3-17) TO_LOB 함수
 3-18) TO_MULTI_BYTE 함수
 3-19) TO_NCHAR(character) 함수
 3-20) TO_NCHAR(datetime) 함수
 3-21) TO_NCHAR(number) 함수
 3-22) TO_NCLOB 함수
 3-23) TO_NUMBER 함수
 3-24) TO_SINGLE_BYTE 함수
 3-25) TO_YMINTERVAL 함수
 3-26) TRANSLATE ... USING 함수
 3-27) UNISTR 함수


4. 기타함수(miscellaneous single row function)
 4-1) BFILENAME 함수
 4-2) COALESCE 함수
 4-3) DECODE 함수
 4-4) DEPTH 함수
 4-5) DUMP 함수
 4-6) EMPTY_BLOB 함수
 4-7) EMPTY_CLOB 함수
 4-8) EXISTSNODE 함수
 4-9) EXTRACT(XML) 함수
 4-10) EXTRACTVALUE 함수
 4-11) GREATEST 함수
 4-12) LEAST 함수
 4-13) NLS_CHARSET_DECL_LEN 함수
 4-14) NLS_CHARSET_ID 함수
 4-15) NLS_CHARSET_NAME 함수
 4-16) NULLIF 함수
 4-17) NVL2 함수
 4-18) PATH 함수
 4-19) SYS_CONNECT_BY_PATH 함수
 4-20) SYS_CONTEXT 함수
 4-21) SYS_DBURIGEN 함수
 4-22) SYS_EXTRACT_UTC 함수
 4-23) SYS_GUID 함수
 4-24) SYS_XMLAGG 함수
 4-25) SYS_XMLGEN 함수
 4-26) UID 함수
 4-27) USER 함수
 4-28) USERENV 함수
 4-29) VSIZE 함수
 4-30) XMLAGG 함수
 4-31) XMLCOLATTVAL 함수
 4-32) XMLCONCAT 함수
 4-33) XMLFOREST 함수
 4-34) XMLELEMENT 함수


5.그룹함수  Aggregate 함수
 5-1) AVG* 함수
 5-2) CORR* CORR* 함수
 5-3) COUNT* 함수
 5-4) COVAR_POP 함수
 5-5) COVAR_SAMP 함수
 5-6) CUME_DIST 함수
 5-7) DENSE_RANK 함수
 5-8) FIRST 함수
 5-9) GROUP_ID 함수
 5-10) Grouping 함수
 5-11) GROUPING_ID 함수
 5-12) LAST 함수
 5-13) MAX 함수
 5-14) MIN 함수
 5-15) PERCENTILE_CONT 함수
 5-16) PERCENTILE_DISC 함수
 5-17) PERCENT_RANK 함수
 5-18) RANK 함수
 5-19) REGR_(linear regression) function* 함수
 5-20) STDDEV 함수
 5-21) STDDEV_POP 함수
 5-22) STDDEV_SAMP 함수
 5-23) SUM 함수
 5-24) VAR_POP 함수
 5-25) VAR_SAMP 함수
 5-26) VARIANCE 함수
 5-27) Grouping sets 함수


6. Analytic 함수
 6-1) AVG* 함수
 6-2) CORR* CORR* 함수
 6-3) COUNT* 함수
 6-4) COVAR_SAMP 함수
 6-5) CUME_DIST 함수
 6-6) DENSE_RANK 함수
 6-7) FIRST 함수
 6-8) FIRST_VALUE 함수
 6-9) LAG 함수
 6-10) LAST_VALUE 함수
 6-11) LEAD 함수
 6-12) NTILE 함수
 6-13) RATIO_TO_REPORT 함수
 6-14) ROW_NUMBER 함수


7. 객체 참조 함수
 7-1) REF 타입


8. PseudoColumn을 의미하는 것
 8-1) ROWID 컬럼
 8-2) ROWNUM 컬럼


 1-1) CHR 함수
--------------------------------------------------------------------------------

입력된 수의 바이너리 코드에 해당하는 문자를 반환한다.

【예제】
SQL> select chr(75)||chr(79)||chr(82)||chr(69)||chr(65)
   2    from dual;

CHR(7)
-------
KOREA

SQL>

1-2) CONCAT 함수
--------------------------------------------------------------------------------

 입력되는 두 문자열을 연결하여 반환한다.
 입력되는 두 문자열의 타입이 다를 경우 다음과 같이 반환된다.

첫 번째 문자열 타입  두 번째 문자열 타입  반환되는 문자열 타입 CLOB  NCLOB  NCLOB NCLOB  NCHAR  NCLOB NCLOB  CHAR  NCLOB NCHAR  CLOB  NCLOB


【예제】
SQL> select concat('Republic of',' KOREA') from dual;

CONCAT('REPUBLICO
-----------------
Republic of KOREA

SQL> 


1-3) INITCAP 함수
--------------------------------------------------------------------------------

initcap('string‘) 함수는 입력 문자열 중에서
각 단어의 첫 글자를 대문자로 나머지는 소문자로 변환한 스트링을 반환한다

【예제】
SQL> select initcap('beautiful corea') from dual;

INITCAP('BEAUTI
---------------
Beautiful Corea

SQL>


1-4) LOWER 함수
--------------------------------------------------------------------------------

lower(string) 함수는 입력된 문자열을 소문자로 반환한다.

【예제】
SQL> select lower('Beautiful COREA') from dual;

LOWER('BEAUTIFU
---------------
beautiful corea

SQL> 


1-5) LPAD 함수
--------------------------------------------------------------------------------

lpad(char1,n,char2) 함수는
지정된 길이 n에서 문자 char1으로 채우고
남은 공간은 왼쪽부터 char2로 채워서 출력한다.

【형식】
lpad (char1, n [, char2] )

【예제】
SQL> select lpad ('Corea', 12, '*') from dual;

LPAD('COREA'
------------
*******Corea

SQL>


1-6) LTRIM 함수
--------------------------------------------------------------------------------

 LTRIM(문자열, 문자)함수는 문자열중
좌측으로부터 특정문자와 일치하는 문자를 제거하고 출력한다.

【형식】
ltrim(char [,set] )

【예제】
SQL> select LTRIM('xyxXxyLAST WORD','xy') from dual;

LTRIM('XYXXX
------------
XxyLAST WORD

SQL>


1-7) NLS_INITCAP 함수
--------------------------------------------------------------------------------

nls_initcap(‘string’) 함수는 입력 문자열 중에서
 각 단어의 첫 글자를 대문자로
           나머지는 소문자로 변환한 스트링을 반환한다.
 단어의 white space나 character가 알파뉴메릭이 아니더라도 상관없다.
nlsparam는 ‘nls_sort = sort'와 같은 형식을 가지며,
 여기서 sort는 linguistic sort sequence나 binary중의 하나이다.

【형식】
nls_initcap ( char [,'nlsparam'] )

【예제】
SQL> select nls_initcap('beautiful corea', 'nls_sort=binary')
  2  from dual;

NLS_INITCAP('BE
---------------
Beautiful Corea

SQL> select nls_initcap('beautiful corea','nls_sort=XDutch')
  2  from dual;

NLS_INITCAP('BE
---------------
Beautiful Corea

SQL>


1-8) NLS_LOWER 함수
--------------------------------------------------------------------------------

nls_lower(‘string’) 함수는 입력 문자열을 모두 소문자로 변환한 스트링을 반환한다. 
 단어의 white space나 character가 알파뉴메릭이 아니더라도 상관없다.
nlsparam는 ‘nls_sort = sort'와 같은 형식을 가지며,
 여기서 sort는 linguistic sort sequence나 binary중의 하나이다.

【형식】
nls_lower ( char [,'nlsparam'] )

【예제】
SQL> select nls_lower('CITTA''','nls_sort=XGerman') from dual;

NLS_LO
------
citta'

SQL>


1-9) NLSSORT 함수
--------------------------------------------------------------------------------

nlssort(‘string’) 함수는 입력 문자열을 소팅하여 스트링을 반환한다.
  단어의 white space나 character가 알파뉴메릭이 아니더라도 상관없다.
nlsparam는 ‘nls_sort = sort'와 같은 형식을 가지며,
 여기서 sort는 linguistic sort sequence나 binary중의 하나이다.

【형식】
nlssort ( char [,'nlsparam'] )

【예제】
SQL> select * from emp
  2    order by nlssort(name, 'nls_sort=XDanish');

        ID NAME           SALARY      BONUS
---------- ---------- ---------- ----------
      1101 Cho               250        125
      1102 Joe               240        100
      1104 jijoe             220        100
      1103 kim               250        100

SQL>


1-10) NLS_UPPER 함수
--------------------------------------------------------------------------------

nls_upper(‘string’) 함수는 입력 문자열을 모두 소문자로 변환한 스트링을 반환한다.
  단어의 white space나 character가 알파뉴메릭이 아니더라도 상관없다.
nlsparam는 ‘nls_sort = sort'와 같은 형식을 가지며,
 여기서 sort는 linguistic sort sequence나 binary중의 하나이다.

【형식】
nls_upper ( char [,'nlsparam'] )

【예제】
SQL> select nls_upper('gro?e') from dual;

NLS_U
-----
gro?e

SQL> select nls_upper('gro?e','nls_sort=XGerman')
  2  from dual;

NLS_UP
------
grosse

SQL>


1-11) REPLACE 함수
--------------------------------------------------------------------------------

이 함수는 문자열에서 지정한 문자를 다른 문자로 치환한다.
  치환될 문자를 지정하지 않으면 해당 문자를 삭제한다.

【형식】
replace (char, search_string [, replacement_string] )

【예제】
SQL> select replace('aaabb','a','b') from dual;

REPLA
-----
bbbbb

SQL> select replace('aaabb','a') from dual;

RE
--
bb

SQL>


1-12) RPAD 함수
--------------------------------------------------------------------------------

rpad(char1,n,char2) 함수는 지정된 길이 n에서 문자 char1으로 채우고
남은 공간은 오른쪽부터 char2로 채워서 출력한다.

【형식】
rpad (char1, n [, char2] )

【예제】
SQL> select rpad('Corea',12,'*') from dual;

RPAD('COREA'
------------
Corea*******

SQL>


1-13) RTRIM 함수
--------------------------------------------------------------------------------

 RTRIM(문자열, 문자)함수는 문자열중
 우측으로부터 특정문자와 일치하는 문자를 제거하고 출력한다.

【형식】
rtrim(char [,set] )

【예제】
SQL> select RTRIM('BROWINGyxXxy','xy') "RTRIM example" from dual;

RTRIM exam
----------
BROWINGyxX

SQL>


1-14) SOUNDEX 함수
--------------------------------------------------------------------------------

soundex(‘char’) 함수는 char과 같은 발음의 이름을 표현한다.

【예제】
SQL> select name from emp;

NAME
----------
Cho
Joe
kim
jijoe

SQL> select name from emp
  2  where soundex(name) = soundex('jo');

NAME
----------
Joe

SQL>


1-15) SUBSTR 함수
--------------------------------------------------------------------------------

substr(str,m,n) 함수는 문자열 str 중에서 특정 위치 m으로부터 특정 길이n 만큼의 문자를 출력한다.
  m이 0이나 1이면 문자열의 첫글자를 의미하고,
  n이 생략되면 문자열의 끝까지를 의미한다.
  m이 음수이면 뒤쪽으로부터의 위치를 의미한다.

 SUBSTRB는 character 대신 byte를 사용하고,
 SUBSTDC는 unicode를 사용하며,
 SUBSTR2는 UCS2 codepoint를 사용하고,
 SUBSTR4는 UCS4 codepoint를 사용한다.

【형식】
{SUBSTR|SUBSTRB|SUBSTRC|SUNBSTD2|SUBSTR4}
  ( string, position [,substring_length] )

【예제】
SQL> select substr('abcdesfg', 3,2) from dual;

SU
--
cd

SQL> select substr('abcdefg',3) from dual;

SUBST
-----
cdefg

SQL> select substr('abcdefg', -3,2) from dual; ☜ 뒤에서 3번째부터 2글자를 의미한다.
SU
--
ef

SQL>


1-16) TRANSLATE 함수
--------------------------------------------------------------------------------

TRANSLATE (‘char’,‘from_string’,‘to_string’) 함수는
 char 내에 포함된 문자중 from_string에 지정한 모든 각각의 문자를
                         to_string문자로 각각 변경한다.

【형식】
TRANSLATE ('char','from_string','to_string')

【예제】
SQL> select translate('ababccc','c','d') from dual;

TRANSLA
-------
ababddd

SQL> select translate('2KRW229',
  2  '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ',
  3  '9999999999XXXXXXXXXXXXXXXXXXXXXXXXXX') from dual;

TRANSLA
-------
9XXX999

SQL> select translate('2KRW229',
  2  '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ','0123456789')
  3  from dual;

TRAN
----
2229

SQL>


1-17) TREAT 함수
--------------------------------------------------------------------------------

TREAT 함수는 선언된 타입을 변경함으로써, 수퍼타입을 서브타입인 것처럼 처리할 수 있도록 한다.

【형식】
TREAT ( expr AS [ REF] [schema . ] type )

【예제】
SQL> select x.p.empno from person_table p;
select x.p.empno from person_table p
       *
ERROR at line 1:
ORA-00904: "X"."P"."EMPNO": invalid identifier
 
SQL> select treat(x.p as employee).empno empno,
  2               x.p.last_name last_name
  3   from person_table x;
 
     EMPNO LAST_NAME
---------- --------------------
           Seoul
      1234 Inchon
      5678 Arirang
 
SQL>

【예제】
SQL> select name, TREAT(VALUE(p) AS employee_t).salary salary
  2   FROM person p;

NAME                        SALARY
----------------------   ---------
Bob   
Joe                         100000
Tim                           1000

SQL>


1-18) TRIM 함수
--------------------------------------------------------------------------------

 이 함수는 LTRIM과 RTRIM 함수를 결합한 형태로
  문자값의 왼쪽 또는 오른쪽 부분에 정의한 문자를 절삭하여 출력한다.
LEADING은 LTRIM처럼 문자열 왼쪽의 문자를 지정하여 절삭하고,
 TRAILING은 RTRIM처럼 문자열 오른쪽 문자를 지정하여 절삭한다.
 BOTH는 왼쪽과 오른쪽 문자를 지정하여 절삭한다.

【형식】
TRIM ([{{{LEADING|TRAILING|BOTH} [trim_char] } | trim_char} FROM]
      trim_source )

【예제】
SQL> select trim (0 from 000123400) from dual;

TRIM
----
1234

SQL> select trim(trailing 'a' from 'abca') from dual;

TRI
---
abc

SQL> select trim(leading 'a' from 'abca') from dual;

TRI
---
bca

SQL> select trim(both 'a' from 'abca') from dual;

TR
--
bc

SQL>


1-19) UPPER 함수
--------------------------------------------------------------------------------

upper(string) 함수는 입력된 문자열을 대문자로 반환한다.

【예제】
SQL> select upper('Beautiful COREA') from dual;

UPPER('BEAUTIFU
---------------
BEAUTIFUL COREA

SQL>


1-20) ASCII 함수
--------------------------------------------------------------------------------

ASCII
ascii(‘char’) 함수는 주어진 char의 첫 글자의 아스키 값을 반환한다.
 char의 타입은 char, varchar2, nchar, nvarchar2중의 하나이어야 한다.

【예제】
SQL> select ascii('Korea') from dual;

ASCII('KOREA')
--------------
            75

SQL> select ascii('K') from dual;

ASCII('K')
----------
        75

SQL>


1-21) INSTR 함수
--------------------------------------------------------------------------------

이 함수는 문자 스트링 중에서
지정한 문자가 가장 처음 나타나는 위치를 숫자로 출력한다.

【형식】
{INSTR|INSTRB|INSTRC|INSTR2|INSTR4}
  ( string, substring [, position [,occurrence] ] )

【예제】
SQL> select instr('Corea','e') from dual;

INSTR('COREA','E')
------------------
                 4

SQL> select instr('corporate floor','or',3,2) from dual;

INSTR('CORPORATEFLOOR','OR',3,2)
--------------------------------
                              14

SQL> select instrb('corporate floor','or',5,2) from dual;

INSTRB('CORPORATEFLOOR','OR',5,2)
---------------------------------
                               14

SQL>


1-22) LENGTH 함수
--------------------------------------------------------------------------------

 LENGTH(char) 함수는 char의 길이를 반환한다.
LENGTHB는 character 대신 byte를 사용하고,
LENGTHC는 unicode를 사용하며,
LENGTH2는 UCS2 codepoint를 사용하고,
LENGTH4는 UCS4 codepoint를 사용한다.

【형식】
{LENGTH| LENGTHB| LENGTHC| LENGTH2| LENGTH4} (char)

【예제】
SQL> select length('Corea') from dual;

LENGTH('COREA')
---------------
              5

SQL> select lengthb('Corea') from dual;

LENGTHB('COREA')
----------------
               5

SQL>



2-1) ADD_MONTHS 함수
--------------------------------------------------------------------------------

ADD_MONTHS
 ADD_MONTHS(d, n)는 날짜 d에 n 개월을 더한 일자를 반환한다.

【예제】
SQL> select current_date today, add_months(current_date,1) "next month"
  2  from dual;

TODAY     next mont
--------- ---------
29-JUL-04 29-AUG-04

SQL>


2-2) CURRENT_DATE 함수
--------------------------------------------------------------------------------


 이 함수는 현재 session의 날짜 정보를 반환한다.
【예제】
SQL> select current_date from dual;

CURRENT_D
---------
31-JUL-04

SQL> select sessiontimezone from dual;

SESSIONTIMEZONE
--------------------------------------------------------------------------
+09:00

SQL> alter session set NLS_DATE_FORMAT='DD-MON-YYYY HH24:MI:SS';

Session altered.

SQL> select current_date from dual;

CURRENT_DATE
--------------------
31-JUL-2004 09:31:57

SQL> alter session set time_zone='-5:0';

Session altered.

SQL> select sessiontimezone from dual;

SESSIONTIMEZONE
--------------------------------------------------------------------------
-05:00

SQL>


2-3) URRENT_TIMESTAMP 함수
--------------------------------------------------------------------------------

 이 함수는 현재 session의 날짜와 시간 정보를 반환한다.
 current_timestamp는 time zone까지 출력되지만,
 localtimestamp는 time zone은 출력되지 않는다.
【예제】
SQL> select current_timestamp, localtimestamp,
  2  current_date from dual;

CURRENT_TIMESTAMP
--------------------------------------------------------------------------
LOCALTIMESTAMP
--------------------------------------------------------------------------
CURRENT_D
---------
04-AUG-04 11.17.40.768776 AM +09:00
04-AUG-04 11.17.40.768776 AM
04-AUG-04

SQL>


2-4) DBTIMEZONE 함수
--------------------------------------------------------------------------------


데이터베이스 timezone을 반환한다.
【예제】
SQL> select dbtimezone from dual;

DBTIME
------
-07:00

SQL> select sessiontimezone from dual;

SESSIONTIMEZONE
--------------------------------------------------------------------------
+09:00

SQL>


2-5) EXTRACT(datetime) 함수
--------------------------------------------------------------------------------

특정 날짜/시간 값이나 날짜 값을 가진 표현식으로부터
  원하는 날짜 영역을 추출하여 출력한다.

【형식】
EXTRACT ({year|month|day|hour|minute|second|
         timezone_hour|timezone_minute|
         timezone_region|timezone_abbr}
 FROM {datetime_value_expr|interval_value_rxpr})

【예제】
SQL> select extract(year from date '2004-8-2') from dual;

EXTRACT(YEARFROMDATE'2004-8-2')
-------------------------------
                           2004

SQL>


2-6) FROM_TZ 함수
--------------------------------------------------------------------------------

이 함수는 timestamp 값을 timestamp with time zone 값으로 변환한다.

【형식】
FROM_TZ ( timestamp_value, time_zone_value)

【예제】
SQL> select from_tz(timestamp '2004-8-11 08:00:00','3:00') from dual;

FROM_TZ(TIMESTAMP'2004-8-1108:00:00','3:00')
--------------------------------------------------------------------------
11-AUG-04 08.00.00.000000000 AM +03:00

SQL>


2-7) LAST_DAY 함수
--------------------------------------------------------------------------------

 이 함수는 지정한 달의 마지막 날을 출력한다.

【형식】
LAST_DAY ( date )

【예제】
SQL> select sysdate, last_day(sysdate) "last day",
  2  last_day(sysdate)- sysdate "Days Left"
  3  from dual;

SYSDATE   last day   Days Left
--------- --------- ----------
04-AUG-04 31-AUG-04         27

SQL>


2-8) LOCALTIMESTAMP 함수
--------------------------------------------------------------------------------

이 함수는 timestamp의 현재 날짜와 시각을 출력한다.
 current_timestamp는 time zone까지 출력되지만,
 localtimestamp는 time zone은 출력되지 않는다.

【형식】
localtimestamp [(timestamp_precision)]

【예제】
SQL> select current_timestamp, localtimestamp,
  2  current_date from dual;

CURRENT_TIMESTAMP
--------------------------------------------------------------------------
LOCALTIMESTAMP
--------------------------------------------------------------------------
CURRENT_D
---------
04-AUG-04 11.17.40.768776 AM +09:00
04-AUG-04 11.17.40.768776 AM
04-AUG-04

SQL>
 
【예제】오류가 발생하는 이유를 잘 이해하자.
SQL> CREATE TABLE local_test(col1 TIMESTAMP WITH LOCAL TIME ZONE);

Table created.

SQL> INSERT INTO local_test VALUES
  2  (TO_TIMESTAMP(LOCALTIMESTAMP, 'DD-MON-RR HH.MI.SSXFF'));
(TO_TIMESTAMP(LOCALTIMESTAMP, 'DD-MON-RR HH.MI.SSXFF'))
              *
ERROR at line 2:
ORA-01830: date format picture ends before converting entire input string

SQL> INSERT INTO local_test VALUES
  2  (TO_TIMESTAMP(LOCALTIMESTAMP, 'DD-MON-RR HH.MI.SSXFF PM'));

1 row created.

SQL> select * from local_test;

COL1
--------------------------------------------------------------------------
04-AUG-04 11.33.58.183398 AM

SQL>



2-9) MONTHS_BETWEEN 함수
--------------------------------------------------------------------------------

 MONTHS_BETWEEN(date1,date2) 함수는 date1과 date로 나타내는
 날짜와 날짜 사이의 개월 수를 출력한다.

【예제】
SQL> select months_between
  2  (to_date('02-02-2004','MM-DD-YYYY'),
  3   to_date('01-01-2003','MM-DD-YYYY') ) "Months"
  4  FROM dual;

    Months
----------
13.0322581

SQL>


2-10) NEW_TIME 함수
--------------------------------------------------------------------------------

NEW_TIME(date,zone1,zone2) 함수는 date, zone1 시간대를 zone2 시간대로 출력한다.
여기서 사용되는 zone은 다음 중의 하나이다.

 AST,ADT : Atlantic Standard or Daylight Time
 BST,BDT : Bering Standard or Daylight Time
 CST,CDT : Central Standard or Daylight Time
 EST,EDT : Eastern Standard or Daylight Time
 GMT : Greenwich Mean Time
 HST,HDT : Alaska-Hawaii Standard or Daylight Time
 MST,MDT : Mountain Standard or Daylight Time
 NST : Newfoundland Standard Time
 PST,PDT : Pacific Standard or Daylight Time
 YST,YDT : Yukon Standard or Daylight Time

【예제】
SQL> alter session set nls_date_format =
  2  'DD-MON-YYYY HH24:MI:SS';

Session altered.

SQL> select NEW_TIME(TO_DATE(
  2  '11-10-04 01:23:33', 'MM-DD-YY HH24:MI:SS'),
  3  'AST', 'PST') FROM DUAL;

NEW_TIME(TO_DATE('11
--------------------
09-NOV-2004 21:23:33

SQL>



2-11) NEXT_DAY 함수
--------------------------------------------------------------------------------

NEXT_DAY(date,char) 함수는 date로부터 char로 명시한 가장 최근의 날짜를 출력한다.

【예제】
SQL> select next_day('02-AUG-2004','MONDAY') from dual;

NEXT_DAY('02-AUG-200
--------------------
09-AUG-2004 00:00:00

SQL>



2-12) NUMTODSINTERVAL 함수
--------------------------------------------------------------------------------

 NUMTODSINTERVAL(n,'char_expr') 함수는 n을 interval day to second로 변환하여 출력한다.
 char_expr은 다음 중의 하나이다.
  ‘DAY’
  ‘HOUR’
  ‘MINUTE’
  ‘SECOND’

【예제】
SQL> select numtodsinterval(100,'MINUTE') from dual;

NUMTODSINTERVAL(100,'MINUTE')
--------------------------------------------------------------------------
+000000000 01:40:00.000000000

SQL>

【예제】
SQL> connect scott/tiger
Connected.
SQL> select ename, hiredate,
  2  numtodsinterval(100,'day')+hiredate from emp;

ENAME      HIREDATE  NUMTODSIN
---------- --------- ---------
SMITH      17-DEC-80 27-MAR-81
ALLEN      20-FEB-81 31-MAY-81
WARD       22-FEB-81 02-JUN-81
JONES      02-APR-81 11-JUL-81
MARTIN     28-SEP-81 06-JAN-82
BLAKE      01-MAY-81 09-AUG-81
CLARK      09-JUN-81 17-SEP-81
SCOTT      19-APR-87 28-JUL-87
KING       17-NOV-81 25-FEB-82
TURNER     08-SEP-81 17-DEC-81
ADAMS      23-MAY-87 31-AUG-87
JAMES      03-DEC-81 13-MAR-82
FORD       03-DEC-81 13-MAR-82
MILLER     23-JAN-82 03-MAY-82

14 rows selected.

SQL>


2-13) NUMTOYMINTERVAL 함수
--------------------------------------------------------------------------------

NUMTOYMINTERVAL(n,'char_expr') 함수는 n을 interval year to month로 변환하여 출력한다.
 char_expr은 다음 중의 하나이다.
  ‘YEAR’
  ‘MONTH’

【예제】
SQL> select numtoyminterval(30,'month') from dual;

NUMTOYMINTERVAL(30,'MONTH')
---------------------------------------------------------------------------
+000000002-06

SQL>

【예제】
SQL> connect scott/tiger
Connected.
SQL> select ename,hiredate,
  2  numtoyminterval(30,'month')+hiredate from emp;

ENAME      HIREDATE  NUMTOYMIN
---------- --------- ---------
SMITH      17-DEC-80 17-JUN-83
ALLEN      20-FEB-81 20-AUG-83
WARD       22-FEB-81 22-AUG-83
JONES      02-APR-81 02-OCT-83
MARTIN     28-SEP-81 28-MAR-84
BLAKE      01-MAY-81 01-NOV-83
CLARK      09-JUN-81 09-DEC-83
SCOTT      19-APR-87 19-OCT-89
KING       17-NOV-81 17-MAY-84
TURNER     08-SEP-81 08-MAR-84
ADAMS      23-MAY-87 23-NOV-89
JAMES      03-DEC-81 03-JUN-84
FORD       03-DEC-81 03-JUN-84
MILLER     23-JAN-82 23-JUL-84

14 rows selected.

SQL>



2-14) ROUND(date) 함수
--------------------------------------------------------------------------------

이 함수는 날짜를 주어진 형식으로 반올림하는 함수이다.
 날짜 형식이 없으면 가장 가까운 날을 출력한다.

【형식】
ROUND( date [,fmt] )

【예제】
SQL> select localtimestamp, round(sysdate,'year') from dual;

LOCALTIMESTAMP
--------------------------------------------------------------------------
ROUND(SYS
---------
04-AUG-04 01.26.24.197977 PM
01-JAN-05

SQL> select localtimestamp,round(sysdate,'day') from dual;

LOCALTIMESTAMP
--------------------------------------------------------------------------
ROUND(SYS
---------
04-AUG-04 01.29.57.839269 PM
08-AUG-04

SQL> select localtimestamp,round(sysdate) from dual;

LOCALTIMESTAMP
--------------------------------------------------------------------------
ROUND(SYS
---------
04-AUG-04 01.30.11.552050 PM
05-AUG-04

SQL>


2-15) SESSIONTIMEZONE 함수
--------------------------------------------------------------------------------

이 함수는 현재 세션의 시간대역을 출력한다.

【예제】
SQL> select sessiontimezone, current_timestamp from dual;

SESSIONTIMEZONE
--------------------------------------------------------------------------
CURRENT_TIMESTAMP
--------------------------------------------------------------------------
+09:00
04-AUG-04 01.37.13.355873 PM +09:00

SQL> select sessiontimezone, tz_offset(sessiontimezone) from dual;

SESSIONTIMEZONE
--------------------------------------------------------------------------
TZ_OFFS
-------
+09:00
+09:00

SQL>


2-16) SYS_EXTRACT_UTC 함수
--------------------------------------------------------------------------------

sys_extract_utc(datetime_with_timezone) 함수는
UTC(coordinated universal time: Greenwich mean time) 시각을 반환한다.

【예제】
SQL> select systimestamp, sys_extract_utc(systimestamp) from dual;

SYSTIMESTAMP
--------------------------------------------------------------------------
SYS_EXTRACT_UTC(SYSTIMESTAMP)
--------------------------------------------------------------------------
06-AUG-04 02.41.39.258976 PM +09:00
06-AUG-04 05.41.39.258976 AM


SQL>


2-17) SYSDATE 함수
--------------------------------------------------------------------------------

이 함수는 오늘 현재 날짜와 시각을 출력한다.

【예제】
SQL> select sysdate, current_timestamp from dual;

SYSDATE
---------
CURRENT_TIMESTAMP
--------------------------------------------------------------------------
04-AUG-04
04-AUG-04 01.51.39.767156 PM +09:00

SQL> select to_char
  2  (sysdate, 'MM-DD-YYYY HH24:MI:SS') from dual;

TO_CHAR(SYSDATE,'MM
-------------------
08-04-2004 13:53:18

SQL>


2-18) SYSTIMESTAMP 함수
--------------------------------------------------------------------------------

이 함수는 시스템의 날짜를 출력한다.

【예제】
SQL> select sysdate,systimestamp,localtimestamp from dual;

SYSDATE
---------
SYSTIMESTAMP
--------------------------------------------------------------------------
LOCALTIMESTAMP
--------------------------------------------------------------------------
04-AUG-04
04-AUG-04 01.58.06.346528 PM +09:00
04-AUG-04 01.58.06.346552 PM

SQL>


2-19) TO_DSINTERVAL 함수
--------------------------------------------------------------------------------

이 함수는 문자열을 interval day to second 형식으로 변환하는 함수이다.

【형식】
to_dsinterval ( char [ ‘nlsparam’] )

【예제】
SQL> select sysdate,
  2  sysdate+to_dsinterval('003 17:00:00') as "3days 17hours later"
  3  from dual;

SYSDATE   3days 17h
--------- ---------
04-AUG-04 08-AUG-04

SQL>


2-20) TO_TIMESTAMP 함수
--------------------------------------------------------------------------------

이 함수는 문자열을 timestamp 형식으로 변환하여 출력한다

【형식】
to_timestamp ( char [,fmt ['nlsparam'] ] )

【예제】
SQL> select to_timestamp('2004-8-20 1:30:00', 'YYYY-MM-DD HH:MI:SS')
  2  from dual;

TO_TIMESTAMP('2004-8-201:30:00','YYYY-MM-DDHH:MI:SS')
--------------------------------------------------------------------------
20-AUG-04 01.30.00.000000000 AM

SQL>



2-21) TO_TIMESTAMP_TZ 함수
--------------------------------------------------------------------------------

이 함수는 문자열을 timestamp with time zone 형식으로 변환하여 출력한다.

【형식】
to_timestamp_tz ( char [,fmt ['nlsparam'] ] )

【예제】
SQL> select to_timestamp_tz('2004-8-20 1:30:00 -3:00',
  2  'YYYY-MM-DD HH:MI:SS TZH:TZM') from dual;

TO_TIMESTAMP_TZ('2004-8-201:30:00-3:00','YYYY-MM-DDHH:MI:SSTZH:TZM')
--------------------------------------------------------------------------
20-AUG-04 01.30.00.000000000 AM -03:00

SQL>


2-22) TO_YMINTERVAL 함수
--------------------------------------------------------------------------------

TO_YMINTERVAL ( char ) 함수는 문자열을 interval year to month 형식으로 변환하는 함수이다.

【예제】
SQL> select sysdate,
  2  sysdate+to_yminterval('01-03') "15Months later"
  3  from dual;

SYSDATE   15Months
--------- ---------
04-AUG-04 04-NOV-05

SQL>


2-23) TRUNC(date) 함수
--------------------------------------------------------------------------------

이 함수는 날짜를 절삭하여 출력한다.

【형식】
TRUNC ( date [.fmt] )

【예제】
SQL> select trunc(to_date('27-AUG-04','DD-MON-YY'), 'YEAR')
  2  from dual;

TRUNC(TO_
---------
01-JAN-04

SQL>


2-24) TZ_OFFSET 함수
--------------------------------------------------------------------------------

이 함수는 time zone의 offset 값을 출력한다.

【형식】
TZ_OFFSET ( {‘time_zone_name’ | SESSIONTIMEZONE | DBTIMEZONE |
             ‘{+|-} hh:mi’ } )

【예제】
SQL> select sessiontimezone, tz_offset('ROK') from dual;

SESSIONTIMEZONE
---------------------------------------------------------------------------
TZ_OFFS
-------
+09:00
+09:00

SQL>



3-1) ASCIISTR 함수
--------------------------------------------------------------------------------

 asciistr('string')의 string의 아스키 문자로 반환한다.
Ä
【예제】
SQL> select ascii('ABÄCDE') from dual;
☜ ABÄCDE의 두번째 Ä는 A에 움라우트(Umlaut)가 붙은 글씨이다.

ASCIIS
------
ABDCDE
           
SQL>



3-2) BIN_TO_NUM 함수
--------------------------------------------------------------------------------

 이 함수는 2진수 벡터를 10진수로 변환한다.

SQL> select bin_to_num(1,0,1,0) from dual;

BIN_TO_NUM(1,0,1,0)
-------------------
                 10

SQL>


3-3) CAST 함수
--------------------------------------------------------------------------------

 데이터형식이나 collection 형식을 다른 데이터형식이나 다른 collection 형식으로 변환한다.

【예제】데이터형식인 경우
SQL> select current_date from dual;

CURRENT_D
---------
30-JUL-04

SQL> select cast(current_date as timestamp) from dual;

CAST(CURRENT_DATEASTIMESTAMP)
---------------------------------------------------------------------------
30-JUL-04 12.29.15.000000 PM

SQL>


3-4) CHARTOROWID 함수
--------------------------------------------------------------------------------

 이 함수는 char, varchar2, nchar, ncharvar2형 데이터 타입을 rowid 형 데이터 타입으로 변경한다.
【예제】
SQL> select name from emp
  2  where rowid = chartorowid('AAAHZ+AABAAAMWiAAF');

NAME
----------
jijoe

SQL> select rowid,name from emp;

ROWID              NAME
------------------ ----------
AAAHZ+AABAAAMWiAAA Cho
AAAHZ+AABAAAMWiAAB Joe
AAAHZ+AABAAAMWiAAC kim
AAAHZ+AABAAAMWiAAF jijoe

SQL>


여기서 rowid의 의미는 다음과 같다.
AAAHZ+  AAB  AAAMWi  AAA 객체번호  테이블스페이스번호  블록번호  행번호



3-5) COMPOSE 함수
--------------------------------------------------------------------------------

 입력된 스트링을 unicode로 나타낸다.

【예제】
SQL> select compose('aa' || unistr('\0308') ) from dual;

CO
--
aa

SQL>


3-6) CONVERT 함수
--------------------------------------------------------------------------------

입력된 문자열을 지정한 코드로 변환한다.
공용 문자셋은 살펴보자.
US7ASCII  US 7-bit ASCII 문자 WE8DEC  서유럽 8비트 문자 WE8HP  HP 서유럽 레이져젯 8비트 문자 F7DEC  DEC 프랑스 7비트 문자 WE8EBCDIC500  IBM 서유럽 EBCDIC 코드 페이지 500 WE8PC850  IBM PC 코드 페이지 850 WE8ISO8859P1  ISO 8859 서유럽 8비트 문자

【예제】
SQL> select convert('arirang','we8pc850') from dual;

CONVERT
-------
arirang

SQL>


3-7) HEXTORAW 함수
--------------------------------------------------------------------------------

HEXTORAW(char) 함수는 char, varchar2, nchar, nvarchar2 따위의 문자로 주어지는
 hexadecimal digit을 raw 값으로 변환한다.

【예제】
SQL> create table test(raw_col RAW(10));

Table created.

SQL> insert into test VALUES (HEXTORAW('7D'));

1 row created.

SQL> select * from test;

RAW_COL
--------------------
7D

SQL>



3-8) NUMTODSINTERVAL 함수
--------------------------------------------------------------------------------

 NUMTODSINTERVAL(n,'char_expr') 함수는 n을 interval day to second로 변환하여 출력한다.
 char_expr은 다음 중의 하나이다.
  ‘DAY’
  ‘HOUR’
  ‘MINUTE’
  ‘SECOND’

【예제】
SQL> select numtodsinterval(100,'MINUTE') from dual;

NUMTODSINTERVAL(100,'MINUTE')
--------------------------------------------------------------------------
+000000000 01:40:00.000000000

SQL>

【예제】
SQL> connect scott/tiger
Connected.
SQL> select ename, hiredate,
  2  numtodsinterval(100,'day')+hiredate from emp;

ENAME      HIREDATE  NUMTODSIN
---------- --------- ---------
SMITH      17-DEC-80 27-MAR-81
ALLEN      20-FEB-81 31-MAY-81
WARD       22-FEB-81 02-JUN-81
JONES      02-APR-81 11-JUL-81
MARTIN     28-SEP-81 06-JAN-82
BLAKE      01-MAY-81 09-AUG-81
CLARK      09-JUN-81 17-SEP-81
SCOTT      19-APR-87 28-JUL-87
KING       17-NOV-81 25-FEB-82
TURNER     08-SEP-81 17-DEC-81
ADAMS      23-MAY-87 31-AUG-87
JAMES      03-DEC-81 13-MAR-82
FORD       03-DEC-81 13-MAR-82
MILLER     23-JAN-82 03-MAY-82

14 rows selected.

SQL>



3-9) NUMTOYMINTERVAL 함수
--------------------------------------------------------------------------------

NUMTOYMINTERVAL(n,'char_expr') 함수는 n을 interval year to month로 변환하여 출력한다.
 char_expr은 다음 중의 하나이다.
  ‘YEAR’
  ‘MONTH’

【예제】
SQL> select numtoyminterval(30,'month') from dual;

NUMTOYMINTERVAL(30,'MONTH')
---------------------------------------------------------------------------
+000000002-06

SQL>

【예제】
SQL> connect scott/tiger
Connected.
SQL> select ename,hiredate,
  2  numtoyminterval(30,'month')+hiredate from emp;

ENAME      HIREDATE  NUMTOYMIN
---------- --------- ---------
SMITH      17-DEC-80 17-JUN-83
ALLEN      20-FEB-81 20-AUG-83
WARD       22-FEB-81 22-AUG-83
JONES      02-APR-81 02-OCT-83
MARTIN     28-SEP-81 28-MAR-84
BLAKE      01-MAY-81 01-NOV-83
CLARK      09-JUN-81 09-DEC-83
SCOTT      19-APR-87 19-OCT-89
KING       17-NOV-81 17-MAY-84
TURNER     08-SEP-81 08-MAR-84
ADAMS      23-MAY-87 23-NOV-89
JAMES      03-DEC-81 03-JUN-84
FORD       03-DEC-81 03-JUN-84
MILLER     23-JAN-82 23-JUL-84

14 rows selected.

SQL>




3-10) RAWTOHEX 함수
--------------------------------------------------------------------------------

RAWTOHEX(raw) 함수는 raw 값을 hexadecimal 값으로 변환한다.

【예제】
SQL> create table test(raw_col RAW(10));

Table created.

SQL> insert into test VALUES (HEXTORAW('7D'));

1 row created.

SQL> select * from test;

RAW_COL
--------------------
7D

SQL> select rawtohex(raw_col) from test;

RAWTOHEX(RAW_COL)
--------------------
7D

SQL>


3-11) RAWTONHEX 함수
--------------------------------------------------------------------------------

RAWTONHEX(raw) 함수는 raw 값을 nvarchar2형 hexadecimal 값으로 변환한다.

【예제】
SQL> create table test(raw_col RAW(10));

Table created.

SQL> insert into test VALUES (HEXTORAW('7D'));

1 row created.

SQL> select * from test;

RAW_COL
--------------------
7D

SQL> select rawtonhex(raw_col) from test;

RAWTONHEX(RAW_COL)
--------------------
7D

SQL>


3-12) ROWIDTOCHAR 함수
--------------------------------------------------------------------------------

RAWIDTOCHAR(rowid) 함수는 rowid 값을 varchar2 형식의 데이터로 변환한다.

【예제】
SQL> select rowid from test;

ROWID
------------------
AAAHbHAABAAAMXCAAA

SQL> select rowid from test
  2  where rowidtochar(rowid) like '%AABAA%';

ROWID
------------------
AAAHbHAABAAAMXCAAA

SQL>

여기서 rowid의 의미는 다음과 같다.
AAAHbH  AAB  AAAMXC  AAA 객체번호  테이블스페이스번호  블록번호  행번호



3-13) ROWIDTONCHAR 함수
--------------------------------------------------------------------------------

RAWIDTONCHAR(rowid) 함수는 rowid 값을 nvarchar2 형식의 데이터로 변환한다.

【예제】
SQL> select rowid from test;

ROWID
------------------
AAAHbHAABAAAMXCAAA

SQL> select rowid from test
  2  where rowidtochar(rowid) like '%AABAA%';

ROWID
------------------
AAAHbHAABAAAMXCAAA

SQL> select lengthb(rowidtonchar(rowid)), rowidtonchar(rowid)
  2  from test;

LENGTHB(ROWIDTONCHAR(ROWID)) ROWIDTONCHAR(ROWID
---------------------------- ------------------
                          36 AAAHbHAABAAAMXCAAA

SQL>


여기서 rowid의 의미는 다음과 같다.
AAAHbH  AAB  AAAMXC  AAA 객체번호  테이블스페이스번호  블록번호  행번호



3-14) TO_CHAR(character) 함수
--------------------------------------------------------------------------------

 이 함수는 nchar, nvarchar2, clob, nclob 형식의 데이터를
데이터베이스 character set으로 변환한다. 즉, 문자로 변환한다.

【형식】
 TO_CHAR( nchar| clob | nclob)

【예제】
SQL> select to_char('01110') from dual;

TO_CH
-----
01110

SQL>



3-15) TO_CLOB 함수
--------------------------------------------------------------------------------

이 함수는 LOB 컬럼에 있는 NCLOB나 또는 다른 문자 스트링을 CLOB로 변환한다.

【형식】
 TO_CLOBR({ lob_column | char})

【예제】
SQL> select to_clob('corea') from dual;

TO_CLOB('COREA')
--------------------------------------------------------------------------
corea

SQL>



3-16) TO_DSINTERVAL 함수
--------------------------------------------------------------------------------

이 함수는 문자열을 interval day to second 형식으로 변환하는 함수이다.

【형식】
to_dsinterval ( char [ ‘nlsparam’] )

【예제】
SQL> select sysdate,
  2  sysdate+to_dsinterval('003 17:00:00') as "3days 17hours later"
  3  from dual;

SYSDATE   3days 17h
--------- ---------
04-AUG-04 08-AUG-04

SQL>


3-17) TO_LOB 함수
--------------------------------------------------------------------------------

 TO_LOB(long_column) 함수는 LONG, LONG RAW 컬럼의 데이터를 LOB 값으로 변환한다.

【예제】
SQL> create table test2(zz clob);

Table created.

SQL> insert into test2
  2  (select to_lob(p.raw_col) from test p);

SQL>


3-18) TO_MULTI_BYTE 함수
--------------------------------------------------------------------------------

TO_MULTI_BYTE(char) 함수는 싱글 바이트 문자를 포함한 모든 문자열을 다중바이트 문자열로 변환한다.

【예제】
SQL> select dump(to_multi_byte('Corea')) from dual;

DUMP(TO_MULTI_BYTE('COREA'))
-----------------------------------------------------
Typ=1 Len=10: 163,195,163,239,163,242,163,229,163,225

SQL>



3-19) TO_NCHAR(character) 함수
--------------------------------------------------------------------------------

 이 함수는 문자스트링, clob, nclob 형식의 데이터를 national character set,
 즉 nchar으로 변환한다. 이는 translate ... using 문의 경우와 같다.

【형식】
TO_NCHAR({char|clob|nclob} [,fmt [,'nlsparam']])

【예제】
SQL> select to_nchar('Corea') from dual;

TO_NC
-----
Corea

SQL>


3-20) TO_NCHAR(datetime) 함수
--------------------------------------------------------------------------------

 이 함수는 date, timestamp, timestamp with time zone, timestamp with local time zone,
 interval month to year, interval day to second 형식의 데이터를
 nchar 형식의 데이터로 변환한다.

【형식】
TO_NCHAR({datetime|interval} [,fmt [,'nlsparam']])

【예제】
SQL> select to_nchar(sysdate) from dual;

TO_NCHAR(SYSDATE)
------------------------------
05-AUG-04

SQL>



3-21) TO_NCHAR(number) 함수
--------------------------------------------------------------------------------

 이 함수는 숫자를 nvarchar2 형식의 데이터로 변환한다.

【형식】
TO_NCHAR(n [,fmt [,'nlsparam']])

【예제】
SQL> select to_nchar(1234) from dual;

TO_N
----
1234

SQL> select to_nchar(rownum) from test;

TO_NCHAR(ROWNUM)
----------------------------------------
1

SQL>



3-22) TO_NCLOB 함수
--------------------------------------------------------------------------------

이 함수는 clob, 문자열 형식의 데이터를 nclob 형식의 데이터로 변환한다.

【형식】
TO_NCLOB({char|lob_column})

【예제】
SQL> select to_nclob('Corea') from dual;

TO_NCLOB('COREA')
--------------------------------------------------------------------------
Corea

SQL>



3-23) TO_NUMBER 함수
--------------------------------------------------------------------------------

이 함수는 숫자를 포함하는 char, varchar2, nchar, nvarchar2 형식의
 문자 데이터를 number 형식의 숫자 데이터로 변환한다.

【형식】
TO_NUMBER(char [,fmt [,'nlsparam']])

【예제】
SQL> select to_number('1234') from dual;

TO_NUMBER('1234')
-----------------
             1234

SQL>


3-24) TO_SINGLE_BYTE 함수
--------------------------------------------------------------------------------

TO_SINGLE_BYTE(char) 함수는 다중 바이트 문자열을 single byte 문자로 변환한다.

【예제】
SQL> select dump(to_multi_byte('Corea')) from dual;

DUMP(TO_MULTI_BYTE('COREA'))
-----------------------------------------------------
Typ=1 Len=10: 163,195,163,239,163,242,163,229,163,225

SQL> select dump(to_single_byte('Corea')) from dual;

DUMP(TO_SINGLE_BYTE('COREA'))
------------------------------
Typ=1 Len=5: 67,111,114,101,97

SQL> select to_single_byte(chr(65)) from dual;

T
-
A

SQL>



3-25) TO_YMINTERVAL 함수
--------------------------------------------------------------------------------

TO_YMINTERVAL ( char ) 함수는 문자열을 interval year to month 형식으로 변환하는 함수이다.

【예제】
SQL> select sysdate,
  2  sysdate+to_yminterval('01-03') "15Months later"
  3  from dual;

SYSDATE   15Months
--------- ---------
04-AUG-04 04-NOV-05

SQL>


3-26) TRANSLATE ... USING 함수
--------------------------------------------------------------------------------

이 함수는 텍스트 형식의 데이터를 지정한 문자 형식의 데이터로 변환한다.

【형식】
TRANSLATE ( text USING {CHAR_CS|NCHAR_CS} )

【예제】
SQL> select translate('Corea' USING char_cs) from dual;

TRANS
-----
Corea

SQL> select to_nchar('Corea') from dual;

TO_NC
-----
Corea

SQL>


3-27) UNISTR 함수
--------------------------------------------------------------------------------

UNISTR('string') 함수는 스트링 형식의 데이터를 nchar 형식의 데이터로 변환한다.

【예제】
SQL> select unistr('abc\00e5\00f1\00f6') from dual;

UNISTR
------
abc??o

SQL> select unistr('Corea') from dual;

UNIST
-----
Corea

SQL>



4-1) BFILENAME 함수
--------------------------------------------------------------------------------

 서버 파일 시스템 상에 실제로 위치한 LOB 바이너리 파일의 위치한 BFILE locator를 반환한다.
【형식】
bfilename ('디렉토리‘,’파일이름‘)

【예제】BFILE을 insert하는 예
SQL> connect system/manager

SQL> host mkdir /export/home/oracle/bfile

SQL> create directory bfile_dir as '/export/home/oracle/bfile';

Directory created.

SQL> grant read on directory bfile_dir to jijoe;

Grant succeeded.

SQL> connect jijoe/joe_password

SQL> create table bfile_doc (id number, doc bfile);

SQL> insert into bfile_doc

   1    values(1111,bfilename('bfile_dir','unix.hwp'));

1 row created.

SQL>


4-2) COALESCE 함수
--------------------------------------------------------------------------------

이 함수는 나열된 값 중에서 NULL이 아닌 첫 번째 값을 반환한다. 

【예제】
SQL> select coalesce('','','arirang','kunsan') from dual;

COALESC
-------
arirang

SQL>



4-3) DECODE 함수
--------------------------------------------------------------------------------

DECODE는 일반적인 프로그래밍 언어의 IF문을 SQL 문자 또는 PL/SQL 안으로 끌어들여 사용하기 위하여 만들어진 오라클 함수이다.
따라서 일반 프로그래밍 언어의 IF문이 수행 할 수 있는 기능을 포함하고 있다.
  select시의 decode 사용은 from 절만 빼고 어디에서나 사용할 수 있다.
  일반 프로그래밍과 decode 함수를 서로 비교하여 보자.
IF문 Decode 함수 IF A=B THEN RETURN 'T';END IF; DECODE(A,B,'T') IF A=B THENRETURN 'T';ELSIF A=C THENRETURN 'F';ELSERETURN 'X';END IF; DECODE(A,B,'T',C,'F','X')
【형식】
DECODE(검색컬럼,조건1,결과값1,
                  조건2,결과값2,...,기본값);

【예제】
SQL> connect jijoe/jijoe_password
SQL> create table aa(
  2  pid        number(12) primary key,
  3  addr varchar2(20),
  4  name varchar2(10));

SQL> insert into aa values(1234,'kunsan','jijoe')
SQL> insert into aa values(3456,'seoul','sunny')

SQL> select * from aa;

       PID ADDR                 NAME
---------- -------------------- ----------
      1234 kunsan               jijoe
      3456 seoul                sunny

SQL> select decode(pid,1234,name) name from aa;

NAME
----------
jijoe


SQL>
【예제】
SQL> desc ddd
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 NO                                                 NUMBER(4)
 NAME                                               VARCHAR2(10)
 HIRDATE                                            DATE
 DEPTNO                                             NUMBER(5)

SQL> select * from ddd;

        NO NAME       HIRDATE       DEPTNO
---------- ---------- --------- ----------
         1 student1   01-JAN-04         10
         2 student2   01-FEB-04         10
         3 student3   01-MAR-04         20
         4 student4   01-MAY-04         30

SQL> select count(decode(to_char(hirdate,'MM'),'01',1)) "JAN",
  2         count(decode(to_char(hirdate,'MM'),'02',1)) "FEB",
  3         count(decode(to_char(hirdate,'MM'),'03',1)) "MAR",
  4         count(*) "Total"
  5  from ddd
  6  where to_char(hirdate,'MM') >= '01' AND
  7        to_char(hirdate,'MM') <= '06';

       JAN        FEB        MAR      Total
---------- ---------- ---------- ----------
         1          1          1          4

SQL>



4-4) DEPTH 함수
--------------------------------------------------------------------------------

DEPTH( correlation_integer) 함수는 UNDER_PATH나 EQUALS_PATH 조건과 함께 사용되는 보조함수이다.
 이 함수는 UNDER_PATH 조건에 상관관계의 수치를 반환한다.

【예제】
SQL> select * from resource_view;
SQL> select path(1), depth(2)
  2  from resource_view
  3  where under_path(res, '/sys/schemas/PUBLIC/www.w3.org/2001', 1)=1
  4    and under_path(res, '/sys/schemas/PUBLIC/www.w3.org/2001', 2)=1;

PATH(1)                                      DEPTH(2)
------------------------------------------ ----------
/xml.xsd                                            1
        

SQL>


4-5) DUMP 함수
--------------------------------------------------------------------------------

지정한 데이터의 위치와 길이 따위를 지정한 형식으로 반환한다.
【형식】
DUMP(expr [,반환형식[,시작위치[,길이]]] )

【예제】
SQL> select dump('Corea', 1016) from dual;

DUMP('COREA',1016)
-----------------------------------------------------
Typ=96 Len=5 CharacterSet=KO16KSC5601: 43,6f,72,65,61

SQL> select dump('Corea', 8,3,2) "Octal" from dual;

Octal
---------------------
Typ=96 Len=5: 162,145

SQL> select dump('Corea',16,3,2) "ASCII" from dual;

ASCII
-------------------
Typ=96 Len=5: 72,65

SQL>


4-6) EMPTY_BLOB 함수
--------------------------------------------------------------------------------

EMPTY_BLOB () 함수는 LOB 변수를 초기화하기 위하여 쓰이거나,
 또는 INSERT 문이나 UPDATE 문에서 empty LOB 위치를 반환한다.

【예시】
UPDATE print_media SET ad_photo = EMPTY_BLOB();


4-7) EMPTY_CLOB 함수
--------------------------------------------------------------------------------

EMPTY_CLOB () 함수는 LOB 변수를 초기화하기 위하여 쓰이거나,
 또는 INSERT 문이나 UPDATE 문에서 empty LOB 위치를 반환한다.

【예시】
UPDATE print_media SET ad_photo = EMPTY_CLOB();


4-8) EXISTSNODE 함수
--------------------------------------------------------------------------------

이 함수는 node의 존재여부를 확인하여 그 결과를 반환한다.
 0은 노드가 남아 있지 않은 경우이고,
 1은 아직 노드가 존재하는 경우이다.

【형식】
EXISTSNODE(XMLType_instance, XPath_string [,namespace_string] )

【예제】
SQL> select * from resource_view;
SQL> select res,any_path
  2  from resource_view
  3  where existsnode(res, 'xdbconfig.xml') =0;

26 rows selected.
SQL>



4-9) EXTRACT(XML) 함수
--------------------------------------------------------------------------------

이 함수는 existsnode와 유사한 함수이다.

【형식】
EXTRACT(XMLType_instance, XPath_string [,namespace_string] )

【예제】
SQL> select * from resource_view;
SQL> select extract(res,'xdbconfig.xml')
  2  from resource_view;
 
26 rows selected.
SQL>



4-10) EXTRACTVALUE 함수
--------------------------------------------------------------------------------

이 함수는 existsnode와 유사한 함수로써 node의 스칼라 값을 반환한다.

【형식】
EXTRACTVALUE(XMLType_instance, XPath_string [,namespace_string] )

【예제】
SQL> select * from resource_view;
SQL> select extractvalue(res,'xdbconfig.xml')
  2  from resource_view;
 
26 rows selected.
SQL>


4-11) GREATEST 함수
--------------------------------------------------------------------------------

GREATEST (expr,...) 함수는 expr 중에서 가장 큰 값을 반환한다.

【예제】
SQL> select greatest(20,10,30) from dual;

GREATEST(20,10,30)
------------------
                30

SQL>


4-12) LEAST 함수
--------------------------------------------------------------------------------

LEAST (expr,...) 함수는 expr 중에서 가장 작은 값을 반환한다.

【예제】
SQL> select least(20,10,30) from dual;

GREATEST(20,10,30)
------------------
                10

SQL> select least('bb','aa','cc') from dual;

GR
--
aa

SQL>


4-13) NLS_CHARSET_DECL_LEN 함수
--------------------------------------------------------------------------------

NLS_CHARSET_DECL_LEN (byte_count , char_set_id) 함수는 nchar로 선언된 폭을 반환한다.

【예제】
SQL> select nls_charset_decl_len
  2  (200, nls_charset_id('ja16eucfixed')) from dual

NLS_CHARSET_DECL_LEN(200,NLS_CHARSET_ID('JA16EUCFIXED'))
--------------------------------------------------------
                                                     100

SQL>



4-14) NLS_CHARSET_ID 함수
--------------------------------------------------------------------------------

nls_charset_id('text') 함수는 문자셋 이름에 대응하는 ID 번호를 반환한다.
 여기서 text는 서버에서 지원되는 CHAR_CS나 NCHAR_CS이다.

【예제】
SQL> select nls_charset_id('ja16euc') from dual;

NLS_CHARSET_ID('JA16EUC')
-------------------------
                      830

SQL>


4-15) NLS_CHARSET_NAME 함수
--------------------------------------------------------------------------------

nls_charset_name('number') 함수는 문자섹 ID 번호에 대응하는 문자의 이름을 반환한다.

【예제】
SQL> select nls_charset_name(830) from dual;

NLS_CHA
-------
JA16EUC

SQL> select nls_charset_name(1) from dual;

NLS_CHAR
--------
US7ASCII

SQL>



4-16) NULLIF 함수
--------------------------------------------------------------------------------

NULLIF(expr1, expr2) 함수는
 expr1과 expr2를 비교하여
       같으면 null을 반환하고,
       같지 않으면 expr1을 반환한다.

이는 CASE 문으로 쓰면 다음과 같다.
  CASE WHEN expr1 = expr2 THEN NULL ELSE expr1 END

【예제】
SQL> select nullif('aa','AA') from dual;

NU
--
aa

SQL> select nullif('aa','aa') from dual;

NU
--


SQL>



4-17) NVL2 함수
--------------------------------------------------------------------------------

NVL2(expr1, expr2, expr3) 함수는
   expr1이 null이 아니면 expr2를 반환하고,
   expr1이 null이면 expr3을 반환한다.

【예제】
SQL> select nvl2('','Corea','Korea') from dual;

NVL2(
-----
Korea

SQL> select nvl2('aa','Corea','Korea') from dual;

NVL2(
-----
Corea

SQL>



4-18) PATH 함수
--------------------------------------------------------------------------------

PATH(correlation_path) 함수는 under_path나 equals_path의 보조함수로서,
 자원의 관계경로를 반환한다.

【예제】
SQL> select * from resource_view;
SQL> select path(1), depth(2)
  2  from resource_view
  3  where under_path(res, '/sys/schemas/PUBLIC/www.w3.org/2001', 1)=1?
  4    and under_path(res, '/sys/schemas/PUBLIC/www.w3.org/2001', 2)=1;

PATH(1)                                      DEPTH(2)
------------------------------------------ ----------
/xml.xsd                                            1
        

SQL>



4-19) SYS_CONNECT_BY_PATH 함수
--------------------------------------------------------------------------------

SYS_CONNECT_BY_PATH(column, char) 함수는 계층적 쿼리에서만 유효하며,
 column의 절대 경로를 char로 지정한 문자로 분리하여 반환한다.

【예제】
SQL> select sys_connect_by_path(name, '/') from emp
  2  start with name='jijoe'
  3  connect by prior id=1101;

SYS_CONNECT_BY_PATH(NAME,'/')
-----------------------------
/jijoe

SQL> select * from emp;

        ID NAME           SALARY      BONUS
---------- ---------- ---------- ----------
      1101 Cho               250        125
      1102 Joe               240        100
      1103 kim               250        100
      1104 jijoe             220        100

SQL>


4-20) SYS_CONTEXT 함수
--------------------------------------------------------------------------------

 이 함수는 namespace와 관계되는 parameter의 값을 반환한다.

【형식】
SYS_CONTEXT('namespace','parameter' [,length])

【예제】
SQL> select sys_context('userenv','session_user') from dual;

SYS_CONTEXT('USERENV','SESSION_USER')
-------------------------------------
JIJOE

SQL> select sys_context('userenv','lang') from dual;

SYS_CONTEXT('USERENV','LANG')
-----------------------------
US

SQL>

 userenv에서 사용될 parameter는 다음과 같다.
AUDITED_CURSORID AUTHENTICATION_DATA BG_JOB_ID
CLIENT_IDENTIFIER CLIENT_INFO  CURRENT_SCHEMA
CURRENT_SCHEMAID CURRENT_SQL  CURRENT_USER
CURRENT_USERID  DB_DOMAIN  DB_NAME
ENTRY_ID  EXTERNAL_NAME  FG_JOB_ID
GLOBAL_CONTEXT_MEMORY HOST   INSTANCE
IP_ADDRESS  ISDBA   LANG
LANGUAGE  NETWORK_PROTOCOL NLS_CALENDAR
NLS_CURRENCY  NLS_DATE_FORMAT  NLS_DATE_LANGUAGE
NLS_SORT  NLS_TERRITORY  OS_USER
PROXY_USER  PROXY_USERID  SESSION_USER
SESSION_USERID  SESSIONID  TERMINAL



4-21) SYS_DBURIGEN 함수
--------------------------------------------------------------------------------

이 함수는 입력된 argument에 대한 DBURIType의 URL을 반환한다.

【형식】
SYS_DBURIGEN({column|attribute} [rowid],... [,'text()'])

【예제】
SQL> select sys_dburigen(id,name) from emp
  2  where name='jijoe';

SYS_DBURIGEN(ID,NAME)(URL, SPARE)
------------------------------------------------------------------------
DBURITYPE('/PUBLIC/EMP/ROW[ID=''1104'']/NAME', NULL)

SQL> select * from emp;

        ID NAME           SALARY      BONUS
---------- ---------- ---------- ----------
      1101 Cho               250        125
      1102 Joe               240        100
      1103 kim               250        100
      1104 jijoe             220        100

SQL>


4-22) SYS_EXTRACT_UTC 함수
--------------------------------------------------------------------------------

sys_extract_utc(datetime_with_timezone) 함수는
UTC(coordinated universal time: Greenwich mean time) 시각을 반환한다.

【예제】
SQL> select systimestamp, sys_extract_utc(systimestamp) from dual;

SYSTIMESTAMP
--------------------------------------------------------------------------
SYS_EXTRACT_UTC(SYSTIMESTAMP)
--------------------------------------------------------------------------
06-AUG-04 02.41.39.258976 PM +09:00
06-AUG-04 05.41.39.258976 AM


SQL>


4-23) SYS_GUID 함수
--------------------------------------------------------------------------------

sys_guid() 함수는 globally unique identifier를 반환한다.

【예제】
SQL> select sys_guid() from dual;

SYS_GUID()
--------------------------------
E0F6C6D5767C01ADE034080020B588F4

SQL>


4-24) SYS_XMLAGG 함수
--------------------------------------------------------------------------------

이 함수는 sys_xmlgen 문에서 만든 XML 문을 기본적으로 ROWSET 태그를 새로 추가 시킨다.

【형식】
SYS_XMLAGG( expr [fmt] )

【예제】
SQL> select sys_xmlagg(sys_xmlgen(name)) from emp
  2  where name like 'j%';

SYS_XMLAGG(SYS_XMLGEN(NAME))
--------------------------------------------------------------------------
<ROWSET>
  <NAME>jijoe</NAME>
</ROWSET>


SQL>


4-25) SYS_XMLGEN 함수
--------------------------------------------------------------------------------

이 함수는 지정한 행이나 열을 XML 문으로 만들어 반환한다.

【형식】
SYS_XMLGEN( expr [fmt] )

【예제】
SQL> select sys_xmlgen(name) from emp
  2  where name like 'j%';

SYS_XMLGEN(NAME)
--------------------------------------------------------------------------
<NAME>jijoe</NAME>

SQL>


4-26) UID 함수
--------------------------------------------------------------------------------

UID 함수는 사용자의 유일한 ID를 정수로 반환한다.

【예제】
SQL> select uid from dual;

       UID
----------
        93

SQL>


4-27) USER 함수
--------------------------------------------------------------------------------

이 함수는 사용자의 이름을 반환한다.

【예제】
SQL> select user,uid from dual;

USER                                  UID
------------------------------ ----------
JIJOE                                  93

SQL>



4-28) USERENV 함수
--------------------------------------------------------------------------------

USERENV('parameter') 함수는 사용자의 환경에 관한 정보를 반환한다.

 parameter는 다음과 같은 것이 있다.
CLIENT_INFO ENTRYID  ISDBA  LANG
LANGUAGE SESSIONID TERMINAL

【예제】
SQL> select userenv('language') from dual;

USERENV('LANGUAGE')
----------------------------------------------------
AMERICAN_AMERICA.KO16KSC5601

SQL>



4-29) VSIZE 함수
--------------------------------------------------------------------------------

VSIZE('expr') 함수는 expr이 표시되는 바이트 수를 반환한다.

【예제】
SQL> select name, vsize(name) from emp
  2  where name like 'jijoe';

NAME       VSIZE(NAME)
---------- -----------
jijoe                5

SQL>

$ cat .profile
..........
NLS_LANG=AMERICAN_AMERICA.KO16KSC5601  ☜ 한글 문자셋으로 설정
export NLS_LANG
NLS_LANG=AMERICAN_AMERICA.UTF8  ☜ UNICODE로 설정
export NLS_LANG
$


테이블에서 저장된 데이터가 한글 문자셋인지 유니코드인지 식별하려면 다음과 같이 확인해 볼 수 있다.

    select 한글컬럼명, vsize(한글컬럼명) from 테이블명;

여기서 한글 컬럼에 한글이 3글자라면, vsize 결과가
    9이면 unicode이고,
    6이면 한글 문자셋으로 저장된 것임을 알 수 있다.

【예제】
SQL> select * from test;
 
        ID NAME
---------- ----------------------------------------
      1113 아리랑
      1112 쓰리랑
 
SQL> select name, vsize(name) from test;
 
NAME                                     VSIZE(NAME)
---------------------------------------- -----------
아리랑                                             6
쓰리랑                                             6
 
SQL>



4-30) XMLAGG 함수
--------------------------------------------------------------------------------

이 함수는 xmlelement에 의해서 XML 태그를 만든 문장을 모으는 기능이다.

【형식】
XMLAGG( XMLType_instance [order_by_clause])

【예제】
 SQL> select xmlagg(xmlelement("name",e.name)) from emp e;

XMLAGG(XMLELEMENT("NAME",E.NAME))
--------------------------------------------------------------------------
<name>Cho</name>
<name>Joe</name>
<name>kim</name>
<name>jijoe</name>

SQL>



4-31) XMLCOLATTVAL 함수
--------------------------------------------------------------------------------

이 함수는 XML fragment를 만드는 기능이다

【형식】
XMLCOLATTVAL( value_expr [AS c_alias],...)

【예제】
SQL> select xmlcolattval(e.name,e.id,e.salary) from emp e;

XMLCOLATTVAL(E.NAME,E.ID,E.SALARY)
--------------------------------------------------------------------------
<column name="NAME">Cho</column>
<column name="ID">1101</column>
<column name="S

<column name="NAME">Joe</column>
<column name="ID">1102</column>
<column name="S

<column name="NAME">kim</column>
<column name="ID">1103</column>
<column name="S

<column name="NAME">jijoe</column>
<column name="ID">1104</column>
<column name=


SQL> select * from emp;

        ID NAME           SALARY      BONUS
---------- ---------- ---------- ----------
      1101 Cho               250        125
      1102 Joe               240        100
      1103 kim               250        100
      1104 jijoe             220        100

SQL>



4-32) XMLCONCAT 함수
--------------------------------------------------------------------------------

XMLCONCAT( XMLType_instance,...) 함수는 XMLType instance를 series로 넣어 만드는 기능이다.

【예제】
SQL> select xmlconcat(
  2    xmlelement("name",e.name),xmlelement("bonus",e.bonus))
  3  from emp e;

XMLCONCAT(XMLELEMENT("NAME",E.NAME),XMLELEMENT("BONUS",E.BONUS))
--------------------------------------------------------------------------
<name>Cho</name>
<bonus>125</bonus>

<name>Joe</name>
<bonus>100</bonus>

<name>kim</name>
<bonus>100</bonus>

<name>jijoe</name>
<bonus>100</bonus>

SQL>


4-33) XMLFOREST 함수
--------------------------------------------------------------------------------

이 함수는 각각의 argument parameter를  XML로 변환한다.

【형식】
XMLFOREST( value_expr [AS c_alias],...)

【예제】
SQL> select xmlelement("emp",
  2  xmlforest(e.id, e.name, e.bonus)) from emp e;

XMLELEMENT("EMP",XMLFOREST(E.ID,E.NAME,E.BONUS))
--------------------------------------------------------------------------
<emp>
  <ID>1101</ID>
  <NAME>Cho</NAME>
  <BONUS>125</BONUS>
</emp>

<emp>
  <ID>1102</ID>
  <NAME>Joe</NAME>
  <BONUS>100</BONUS>
</emp>

<emp>
  <ID>1103</ID>
  <NAME>kim</NAME>
  <BONUS>100</BONUS>
</emp>

<emp>
  <ID>1104</ID>
  <NAME>jijoe</NAME>
  <BONUS>100</BONUS>

</emp>

SQL> select * from emp;

        ID NAME           SALARY      BONUS
---------- ---------- ---------- ----------
      1101 Cho               250        125
      1102 Joe               240        100
      1103 kim               250        100
      1104 jijoe             220        100

SQL>
 


4-34) XMLELEMENT 함수
--------------------------------------------------------------------------------

이 함수는 XML 태그를 붙이는 기능이다

【예제】
SQL> select xmlelement("name",e.name) from emp e
  2  where name like 'j%';

XMLELEMENT("NAME",E.NAME)
--------------------------------------------------------------------------
<name>jijoe</name>

SQL>



5-1) AVG* 함수
--------------------------------------------------------------------------------

조건을 만족하는 행(row)의 평균을 값을 반환하며,
 aggregate 함수나
 analytic 함수로 사용된다.

【형식】
AVG( [DISTINCT | ALL] 컬럼명)
   [ [OVER] (analytic 절)]

【예제】aggregate 예
SQL> select * from emp;

        ID NAME           SALARY      BONUS
---------- ---------- ---------- ----------
      1101 Cho               250        125
      1102 Joe               240        100
      1103 kim               250        100
      1104 jijoe             220        100

SQL> select avg(salary) from emp;

AVG(SALARY)
-----------
        240

SQL>
【예제】analytic 예
SQL> select avg(distinct salary) over(partition by bonus)
  2  from emp;

AVG(DISTINCTSALARY)OVER(PARTITIONBYBONUS)
-----------------------------------------
                               236.666667
                               236.666667
                               236.666667
                                      250


SQL> select avg(salary) over(partition by bonus order by id
    2 rows between 1 preceding and 1 following) as avg  from emp;

       AVG
----------
       245
236.666667
       235
       250

SQL>



5-2) CORR* 함수
--------------------------------------------------------------------------------

집합 쌍의 상관관계 계수를 반환한다.

【형식】
CORR( expr1, expr2 ) [ [OVER] (analytic 절)]

【예제】
SQL> select corr(avg(bonus),max(bonus))
  2  from employees
  3  group by dept_no;

CORR(AVG(BONUS),MAX(BONUS))
---------------------------
                          1

SQL>


5-3) COUNT* 함수
--------------------------------------------------------------------------------


 쿼리한 행의 수를 반환한다.
【형식】
COUNT([*|DISTINCT|ALL] 컬럼명) [ [OVER] (analytic 절)]

【예제】
SQL> select count(*) from emp;

  COUNT(*)
----------
         4

SQL> select count (distinct dept_no) from employees;

COUNT(DISTINCTDEPT_NO)
----------------------
                     2

SQL> select count (all dept_no) from employees;

COUNT(ALLDEPT_NO)
-----------------
                4

SQL> select salary,count(*)
  2  over (order by salary)
  3  from emp;

    SALARY COUNT(*)OVER(ORDERBYSALARY)
---------- ---------------------------
       220                           1
       240                           2
       250                           4
       250                           4

SQL>



5-4) COVAR_POP 함수
--------------------------------------------------------------------------------

이 함수는 number 쌍의 집합에 대한 population covariance를 반환한다.

【형식】
COVAR_POP(expr1, expr2 [ OVER (analytic 절)] )

【예제】
SQL> select covar_pop(bonus,salary) from emp;

COVAR_POP(BONUS,SALARY)
-----------------------
                   62.5

SQL> select * from emp;

        ID NAME           SALARY      BONUS
---------- ---------- ---------- ----------
      1101 Cho               250        125
      1102 Joe               240        100
      1103 kim               250        100
      1104 jijoe             220        100

SQL>


5-5) COVAR_SAMP 함수
--------------------------------------------------------------------------------

이 함수는 number 쌍의 집합에 대한 sample covariance를 반환한다.

【형식】
COVAR_SAMP(expr1, expr2 [ OVER (analytic 절)] )

【예제】
SQL> select covar_samp(bonus,salary) from emp;

COVAR_SAMP(BONUS,SALARY)
------------------------
              83.3333333

SQL> select * from emp;

        ID NAME           SALARY      BONUS
---------- ---------- ---------- ----------
      1101 Cho               250        125
      1102 Joe               240        100
      1103 kim               250        100
      1104 jijoe             220        100

SQL>


5-6) CUME_DIST 함수
--------------------------------------------------------------------------------

이 함수는 그룹 값 내에서 어떤 값의 cumulative distribution(누적분포)을 계산한다.

【형식】
CUME_DIST(expr,... WITHIN GROUP (ORDER BY
     expr [DESC | ASC] [NULLS {FIRST|LAST}],...)
또는
CUME_DIST() over ([query_partition_clause] order_by_clause)

【예제】
SQL> select cume_dist(230) within group
  2  (order by salary ) from emp;

CUME_DIST(230)WITHINGROUP(ORDERBYSALARY)
----------------------------------------
                                      .4

SQL> select * from emp;

        ID NAME           SALARY      BONUS
---------- ---------- ---------- ----------
      1101 Cho               250        125
      1102 Joe               240        100
      1103 kim               250        100
      1104 jijoe             220        100

SQL>



5-7) DENSE_RANK 함수
--------------------------------------------------------------------------------


그룹 내에서 순위를 반환한다.

【예제】
SQL> select * from employees;

        ID    DEPT_NO NAME           SALARY      BONUS
---------- ---------- ---------- ---------- ----------
      1101         10 Cho               250        125
      1102         20 Joe               240        100
      1103         10 kim               250        100
      1104         20 jijoe             220        100

SQL> select dense_rank(230, .05) within group
  2  (order by salary, bonus) "Dense Rank"
  3  from employees;

Dense Rank
----------
         2

SQL>



5-8) FIRST 함수
--------------------------------------------------------------------------------

first나 last 함수는 행을 서열화 시켜서 첫 번째나 마지막 행을 추출한다.
【형식】
집합함수 KEEP (
 DENSE_RANK FIRST ORDER BY
    expr [DESC|ASC][NULL{FIRST|LAST}],...)
【예제】
SQL> select
  2  min(salary) keep (dense_rank first order by salary) "Worst",
  3  max(salary) keep (dense_rank last order by salary) "Best"
  4  from employees
  5  order by id;

     Worst       Best
---------- ----------
       220        250

SQL> select * from employees;

        ID    DEPT_NO NAME           SALARY      BONUS
---------- ---------- ---------- ---------- ----------
      1101         10 Cho               250        125
      1102         20 Joe               240        100
      1103         10 kim               250        100
      1104         20 jijoe             220        100

SQL>



5-9) GROUP_ID 함수
--------------------------------------------------------------------------------

GROUP() 함수는 group by로 분리되어 복제된 번호로 복제 횟수를 구분하도록 출력한다.
번호가 0부터 시작되므로 n번 복제되었으면 n-1의 번호가 출력된다.

【예제】
SQL> select dept_no, group_id() from employees
  2  group by dept_no;

   DEPT_NO GROUP_ID()
---------- ----------
        10          0
        20          0

SQL> select * from employees;

        ID    DEPT_NO NAME           SALARY      BONUS
---------- ---------- ---------- ---------- ----------
      1101         10 Cho               250        125
      1102         20 Joe               240        100
      1103         10 kim               250        100
      1104         20 jijoe             220        100

SQL>



5-10) Grouping 함수
--------------------------------------------------------------------------------

Grouping 함수는 Rollup이나 cube 연산자랑 함께 사용하여
 grouping 함수에서 기술된 컬럼이 그룹핑시 사용되었는지 보여주는 함수이다.
특별히 연산의 기능은 없으며,
  rollup이나 cube 연산 후 출력된 결과에 대한 사용자의 이해를 높이기 위해 사용된다.
  즉, grouping 함수를 이용할 경우 출력되는 결과값 중 null 값이 있다면,
      이 null 값이 rollup이나 cube 연산의 결과로 생성된 값인지,
      원래 테이블상에 null 값으로 저장된 것인지 확인할 수 있다.

. grouping 함수는 인수로 하나의 값만을 가진다.
. grouping 함수에 사용된 인수는 group by 절에 기술된 값 중에 하나와 반드시 일치해야 한다.
. grouping 함수의 결과값으로 0 또는 1을 반환한다.
    0은 해당인수로 쓰인 값이 rollup이나 cube 연산에 사용되었음을 나타나고,
    1은 사용되지 않았음을 의미한다.
【형식】
SELECT   컬럼명,그룹함수(컬럼명), GROUPING(컬럼명)
FROM  테이블명
WHERE  조건
GROUP BY [ROLLUP | CUBE] 그룹핑하고자하는 컬럼명,...
HAVING  그룹조건
ORDER BY 컬럼명 또는 위치번호

【예제】
SQL> select grade,deptno,sum(salary),GROUPING(deptno)
  2  from aaa
  3  group by rollup(grade,deptno);

     GRADE     DEPTNO SUM(SALARY) GROUPING(DEPTNO)
---------- ---------- ----------- ----------------
         1         10         100                0
         1         20         500                0
         1         30         300                0
         1                    900                1
         2         10         400                0
         2         20         200                0
         2         30         600                0
         2                   1200                1
                             2100                1

9 rows selected.

SQL>


5-11) GROUPING_ID 함수
--------------------------------------------------------------------------------

GROUPING_ID(expr,...) 함수는 행과 관련되는 GROUPING 비트 벡터에 대응되는 수치를 반환한다.

【예제】
SQL> select * from employees;

        ID    DEPT_NO NAME           SALARY      BONUS
---------- ---------- ---------- ---------- ----------
      1101         10 Cho               250        125
      1102         20 Joe               240        100
      1103         10 kim               250        100
      1104         20 jijoe             220        100

SQL> select sum(salary), grouping_id(dept_no)
  2  from employees
  3  group by dept_no;

SUM(SALARY) GROUPING_ID(DEPT_NO)
----------- --------------------
        500                    0
        460                    0

SQL>


5-12) LAST 함수
--------------------------------------------------------------------------------

first나 last 함수는 행을 서열화 시켜서 첫 번째나 마지막 행을 추출한다.
【형식】
집합함수 KEEP (
 DENSE_RANK LAST ORDER BY
    expr [DESC|ASC][NULL{FIRST|LAST}],...)
【예제】
SQL> select
  2  min(salary) keep (dense_rank first order by salary) "Worst",
  3  max(salary) keep (dense_rank last order by salary) "Best"
  4  from employees
  5  order by id;

     Worst       Best
---------- ----------
       220        250

SQL> select * from employees;

        ID    DEPT_NO NAME           SALARY      BONUS
---------- ---------- ---------- ---------- ----------
      1101         10 Cho               250        125
      1102         20 Joe               240        100
      1103         10 kim               250        100
      1104         20 jijoe             220        100

SQL>



5-13) MAX 함수
--------------------------------------------------------------------------------

이 함수는 최대 값을 반환한다.

【형식】
MAX ([{DISTINCT|ALL}] expr) [OVER(analytic_clause)]

【예제】
SQL> select max(salary) over (partition by dept_no)
  2  from employees;

MAX(SALARY)OVER(PARTITIONBYDEPT_NO)
-----------------------------------
                                250
                                250
                                240
                                240

SQL> select max(salary) from employees;

MAX(SALARY)
-----------
        250

SQL>


5-14) MIN 함수
--------------------------------------------------------------------------------

이 함수는 최소 값을 반환한다.

【형식】
MIN ([{DISTINCT|ALL}] expr) [OVER(analytic_clause)]

【예제】
SQL> select min(salary) over (partition by dept_no)
  2  from employees;

MIN(SALARY)OVER(PARTITIONBYDEPT_NO)
-----------------------------------
                                250
                                250
                                220
                                220

SQL> select min(salary) from employees;

MIN(SALARY)
-----------
        220

SQL>



5-15) PERCENTILE_CONT 함수
--------------------------------------------------------------------------------

이 함수는 연속 모델에 대한 inverse distribution function이다.

【형식】
PERCENTILE_CONT(expr) WITHIN GROUP (ORDER BY expr [{DESC|ASC}])
  [OVER (query_partition_cluause)]

【예제】
SQL> select dept_no,percentile_cont(0.5) within group
  2  (order by salary DESC)
  3  from employees GROUP BY dept_no;

   DEPT_NO PERCENTILE_CONT(0.5)WITHINGROUP(ORDERBYSALARYDESC)
---------- --------------------------------------------------
        10                                                250
        20                                                230

SQL> select * from employees;

        ID    DEPT_NO NAME           SALARY      BONUS
---------- ---------- ---------- ---------- ----------
      1101         10 Cho               250        125
      1102         20 Joe               240        100
      1103         10 kim               250        100
      1104         20 jijoe             220        100

SQL>



5-16) PERCENTILE_DISC 함수
--------------------------------------------------------------------------------

이 함수는 불연속 모델에 대한 inverse distribution function이다.

【형식】
PERCENTILE_DISC(expr) WITHIN GROUP (ORDER BY expr [{DESC|ASC}])
  [OVER (query_partition_cluause)]

【예제】
SQL> select dept_no,percentile_disc(0.5) within group
  2  (order by salary DESC)
  3  from employees GROUP BY  dept_no;

   DEPT_NO PERCENTILE_DISC(0.5)WITHINGROUP(ORDERBYSALARYDESC)
---------- --------------------------------------------------
        10                                                250
        20                                                240

SQL> select * from employees;

        ID    DEPT_NO NAME           SALARY      BONUS
---------- ---------- ---------- ---------- ----------
      1101         10 Cho               250        125
      1102         20 Joe               240        100
      1103         10 kim               250        100
      1104         20 jijoe             220        100

SQL>



5-17) PERCENT_RANK 함수
--------------------------------------------------------------------------------

이 함수는 CUME_DIST 함수와 유사하게 percent_rank 값을 반환한다.

【형식】
PERCENT_RANK(expr,...) WITHIN GROUP (ORDER BY expr [{DESC|ASC}]
  [NULLS {FIRST|LAST}],...)
또는
PERCENT_RANK() OVER( [query_partition_clause] order_by_clause)

【예제】
SQL> select percent_rank(230,0.05) within group
  2  (order by salary,bonus) from employees;

PERCENT_RANK(230,0.05)WITHINGROUP(ORDERBYSALARY,BONUS)
------------------------------------------------------
                                                   .25

SQL> select * from employees;

        ID    DEPT_NO NAME           SALARY      BONUS
---------- ---------- ---------- ---------- ----------
      1101         10 Cho               250        125
      1102         20 Joe               240        100
      1103         10 kim               250        100
      1104         20 jijoe             220        100

SQL>



5-18) RANK 함수
--------------------------------------------------------------------------------

이 함수는 그룹 내에서 위치를 반환한다.

【형식】
RANK(expr,...) WITHIN GROUP (ORDER BY expr [{DESC|ASC}]
  [NULLS {FIRST|LAST}],...)
또는
RANK() OVER( [query_partition_clause] order_by_clause)

【예제】
SQL> select rank(230,0.05) within group
  2 (order by salary,bonus) from employees;

RANK(230,0.05)WITHINGROUP(ORDERBYSALARY,BONUS)
----------------------------------------------
                                             2
SQL> select * from employees;

        ID    DEPT_NO NAME           SALARY      BONUS
---------- ---------- ---------- ---------- ----------
      1101         10 Cho               250        125
      1102         20 Joe               240        100
      1103         10 kim               250        100
      1104         20 jijoe             220        100

SQL>



5-19) REGR_(linear regression) function* 함수
--------------------------------------------------------------------------------

선형 회귀(linear regression) 함수 ordinary-least squares regression line을 찾도록 한다.
 사용되는 회귀함수는 자음 중 하나이다.
 REGR_SLOPE REGR_INTERCEPT REGR_COUNT
 REGR_R2 REGR_AVGX REGR_AVGY
 REGR_SXX REGR_SYY REGR_SXY

【형식】
REGR { REGR_SLOPE|REGR_INTERCEPT|REGR_COUNT|REGR_R2|REGR_AVGX|
       REGR_AVGY|REGR_SXX|REGR_SYY|REGR_SXY}
    (expr1,expr2) [OVER (analytic_clause)]

【예제】
SQL> select regr_slope(salary,bonus) from employees

REGR_SLOPE(SALARY,BONUS)
------------------------
              .533333333

SQL> select * from employees;

        ID    DEPT_NO NAME           SALARY      BONUS
---------- ---------- ---------- ---------- ----------
      1101         10 Cho               250        125
      1102         20 Joe               240        100
      1103         10 kim               250        100
      1104         20 jijoe             220        100

SQL>



5-20) STDDEV 함수
--------------------------------------------------------------------------------

이 함수는 standard deviation을 반환한다.

【형식】
STDDEV [{DISTINCT|ALL}] (expr) [OVER (analytic_clause)]

【예제】
SQL> select stddev(salary) from emp;

STDDEV(SALARY)
--------------
    14.1421356

SQL> select * from emp;

        ID NAME           SALARY      BONUS
---------- ---------- ---------- ----------
      1101 Cho               250        125
      1102 Joe               240        100
      1103 kim               250        100
      1104 jijoe             220        100

SQL>



5-21) STDDEV_POP 함수
--------------------------------------------------------------------------------

이 함수는 population standard deviation을 반환한다.

【형식】
STDDEV_POP (expr) [OVER (analytic_clause)]

【예제】
SQL> select stddev_pop(salary) from emp;

STDDEV_POP(SALARY)
------------------
        12.2474487

SQL> select * from emp;

        ID NAME           SALARY      BONUS
---------- ---------- ---------- ----------
      1101 Cho               250        125
      1102 Joe               240        100
      1103 kim               250        100
      1104 jijoe             220        100

SQL>


5-22) STDDEV_SAMP 함수
--------------------------------------------------------------------------------

이 함수는 cumulative sample standard deviation을 반환한다.

【형식】
STDDEV_SAMP (expr) [OVER (analytic_clause)]

【예제】
SQL> select stddev_samp (salary) from emp;

STDDEV_SAMP(SALARY)
-------------------
         14.1421356

SQL> select * from emp;

        ID NAME           SALARY      BONUS
---------- ---------- ---------- ----------
      1101 Cho               250        125
      1102 Joe               240        100
      1103 kim               250        100
      1104 jijoe             220        100


SQL>



5-23) SUM 함수
--------------------------------------------------------------------------------

이 함수는 합계를 반환한다.

【형식】
SUM ([{DISTINCT|ALL}] expr) [OVER (analytic_clause)]

【예제】
SQL> select sum(salary) from emp;

SUM(SALARY)
-----------
        960

SQL> select * from emp;

        ID NAME           SALARY      BONUS
---------- ---------- ---------- ----------
      1101 Cho               250        125
      1102 Joe               240        100
      1103 kim               250        100
      1104 jijoe             220        100

SQL>



5-24) VAR_POP 함수
--------------------------------------------------------------------------------

이 함수는 population variance를 반환한다.

【형식】
VAR_POP (expr) [OVER (analytic_clause)]

【예제】
SQL> select var_pop(salary) from emp;

VAR_POP(SALARY)
---------------
            150

SQL> select * from emp;

        ID NAME           SALARY      BONUS
---------- ---------- ---------- ----------
      1101 Cho               250        125
      1102 Joe               240        100
      1103 kim               250        100
      1104 jijoe             220        100


SQL>



5-25) VAR_SAMP 함수
--------------------------------------------------------------------------------

이 함수는 sample variance를 반환한다.

【형식】
VAR_SAMP (expr) [OVER (analytic_clause)]

【예제】
SQL> select var_samp(salary) from emp;

VAR_SAMP(SALARY)
----------------
             200

SQL> select * from emp;

        ID NAME           SALARY      BONUS
---------- ---------- ---------- ----------
      1101 Cho               250        125
      1102 Joe               240        100
      1103 kim               250        100
      1104 jijoe             220        100


SQL>



5-26) VARIANCE 함수
--------------------------------------------------------------------------------

이 함수는 variance를 반환한다.

【형식】
VARIANCE ([{DISTINCT|ALL}] expr) [OVER (analytic_clause)]

【예제】
SQL> select variance(salary) from emp;

VARIANCE(SALARY)
----------------
             200

SQL> select * from emp;

        ID NAME           SALARY      BONUS
---------- ---------- ---------- ----------
      1101 Cho               250        125
      1102 Joe               240        100
      1103 kim               250        100
      1104 jijoe             220        100

SQL>



5-27) Grouping sets 함수
--------------------------------------------------------------------------------

Grouping sets 함수는 Group by의 확장된 형태로 하나의 쿼리문에서 원하는 그룹핑 조건을 여러 개 기술할 수 있으며,
 grouping sets 함수 사용이 불가능한 이전 버전에서
 복잡한 union all 연산자를 사용하여 기술하던 것을 간단하게
 한 문장 안에서 해결할 수 있어 검색시 효율성이 증대 된다.
 다시 말해서, grouping sets 함수를 사용하면,
              group by ... union all을 사용한 것보다
              SQL 문이 간단해지고 또한 실행시 성능이 빨라진다.
【형식】
SELECT   컬럼명,그룹함수(컬럼명), GROUPING(컬럼명)
FROM  테이블명
WHERE  조건
GROUP BY [ROLLUP | CUBE] 그룹핑하고자하는 컬럼명, ...
  [GROUPING SETS (컬럼명,컬럼명, ...), ...]
HAVING  그룹조건
ORDER BY 컬럼명 또는 위치번호

【예제】
SQL> select grade,deptno,sum(salary)
  2  from aaa
  3  group by grouping sets(grade,deptno);

     GRADE     DEPTNO SUM(SALARY)
---------- ---------- -----------
         1                    900
         2                   1200
                   10         500
                   20         700
                   30         900

SQL> select grade,deptno,sum(salary)
  2  from aaa
  3  group by grouping sets((grade,name),(deptno,name));

     GRADE     DEPTNO SUM(SALARY)
---------- ---------- -----------
         1                    100
         1                    300
         1                    500
         2                    200
         2                    400
         2                    600
                   10         100
                   20         200
                   30         300
                   10         400
                   20         500
                   30         600

12 rows selected.
SQL>
【예제】Union all을 사용한 경우
SQL> select grade,deptno,sum(salary)
  2  from aaa
  3  group by grade,deptno
  4  union all
  5  select grade,deptno,sum(salary)
  6  from aaa
  7  group by grade,deptno;

     GRADE     DEPTNO SUM(SALARY)
---------- ---------- -----------
         1         10         100
         1         20         500
         1         30         300
         2         10         400
         2         20         200
         2         30         600
         1         10         100
         1         20         500
         1         30         300
         2         10         400
         2         20         200
         2         30         600

12 rows selected.

SQL>

composite columns란 rollup, cube, grouping sets 절과 같은 기능을 사용하면
표현되는 각 컬럼이 하나가 아닌 복수 개의 컬럼으로 정의되는 경우이다.
 


6-1) AVG* 함수
--------------------------------------------------------------------------------

조건을 만족하는 행(row)의 평균을 값을 반환하며,
 aggregate 함수나
 analytic 함수로 사용된다.

【형식】
AVG( [DISTINCT | ALL] 컬럼명)
   [ [OVER] (analytic 절)]

【예제】aggregate 예
SQL> select * from emp;

        ID NAME           SALARY      BONUS
---------- ---------- ---------- ----------
      1101 Cho               250        125
      1102 Joe               240        100
      1103 kim               250        100
      1104 jijoe             220        100

SQL> select avg(salary) from emp;

AVG(SALARY)
-----------
        240

SQL>
【예제】analytic 예
SQL> select avg(distinct salary) over(partition by bonus)
  2  from emp;

AVG(DISTINCTSALARY)OVER(PARTITIONBYBONUS)
-----------------------------------------
                               236.666667
                               236.666667
                               236.666667
                                      250


SQL> select avg(salary) over(partition by bonus order by id
    2 rows between 1 preceding and 1 following) as avg  from emp;

       AVG
----------
       245
236.666667
       235
       250

SQL>



6-2) CORR* CORR* 함수
--------------------------------------------------------------------------------

집합 쌍의 상관관계 계수를 반환한다.

【형식】
CORR( expr1, expr2 ) [ [OVER] (analytic 절)]

【예제】
SQL> select corr(avg(bonus),max(bonus))
  2  from employees
  3  group by dept_no;

CORR(AVG(BONUS),MAX(BONUS))
---------------------------
                          1

SQL>


6-3) COUNT* 함수
--------------------------------------------------------------------------------


 쿼리한 행의 수를 반환한다.
【형식】
COUNT([*|DISTINCT|ALL] 컬럼명) [ [OVER] (analytic 절)]

【예제】
SQL> select count(*) from emp;

  COUNT(*)
----------
         4

SQL> select count (distinct dept_no) from employees;

COUNT(DISTINCTDEPT_NO)
----------------------
                     2

SQL> select count (all dept_no) from employees;

COUNT(ALLDEPT_NO)
-----------------
                4

SQL> select salary,count(*)
  2  over (order by salary)
  3  from emp;

    SALARY COUNT(*)OVER(ORDERBYSALARY)
---------- ---------------------------
       220                           1
       240                           2
       250                           4
       250                           4

SQL>



6-4) COVAR_SAMP 함수
--------------------------------------------------------------------------------

이 함수는 number 쌍의 집합에 대한 sample covariance를 반환한다.

【형식】
COVAR_SAMP(expr1, expr2 [ OVER (analytic 절)] )

【예제】
SQL> select covar_samp(bonus,salary) from emp;

COVAR_SAMP(BONUS,SALARY)
------------------------
              83.3333333

SQL> select * from emp;

        ID NAME           SALARY      BONUS
---------- ---------- ---------- ----------
      1101 Cho               250        125
      1102 Joe               240        100
      1103 kim               250        100
      1104 jijoe             220        100

SQL>



6-5) CUME_DIST 함수
--------------------------------------------------------------------------------

이 함수는 그룹 값 내에서 어떤 값의 cumulative distribution(누적분포)을 계산한다.

【형식】
CUME_DIST(expr,... WITHIN GROUP (ORDER BY
     expr [DESC | ASC] [NULLS {FIRST|LAST}],...)
또는
CUME_DIST() over ([query_partition_clause] order_by_clause)

【예제】
SQL> select cume_dist(230) within group
  2  (order by salary ) from emp;

CUME_DIST(230)WITHINGROUP(ORDERBYSALARY)
----------------------------------------
                                      .4

SQL> select * from emp;

        ID NAME           SALARY      BONUS
---------- ---------- ---------- ----------
      1101 Cho               250        125
      1102 Joe               240        100
      1103 kim               250        100
      1104 jijoe             220        100

SQL>


6-6) DENSE_RANK 함수
--------------------------------------------------------------------------------


그룹 내에서 순위를 반환한다.

【예제】
SQL> select * from employees;

        ID    DEPT_NO NAME           SALARY      BONUS
---------- ---------- ---------- ---------- ----------
      1101         10 Cho               250        125
      1102         20 Joe               240        100
      1103         10 kim               250        100
      1104         20 jijoe             220        100

SQL> select dense_rank(230, .05) within group
  2  (order by salary, bonus) "Dense Rank"
  3  from employees;

Dense Rank
----------
         2

SQL>


6-7) FIRST 함수
--------------------------------------------------------------------------------

first나 last 함수는 행을 서열화 시켜서 첫 번째나 마지막 행을 추출한다.
【형식】
집합함수 KEEP (
 DENSE_RANK FIRST ORDER BY
    expr [DESC|ASC][NULL{FIRST|LAST}],...)
【예제】
SQL> select
  2  min(salary) keep (dense_rank first order by salary) "Worst",
  3  max(salary) keep (dense_rank last order by salary) "Best"
  4  from employees
  5  order by id;

     Worst       Best
---------- ----------
       220        250

SQL> select * from employees;

        ID    DEPT_NO NAME           SALARY      BONUS
---------- ---------- ---------- ---------- ----------
      1101         10 Cho               250        125
      1102         20 Joe               240        100
      1103         10 kim               250        100
      1104         20 jijoe             220        100

SQL>


6-8) FIRST_VALUE 함수
--------------------------------------------------------------------------------

이 함수는 서열화된 값에서 첫 번째를 출력한다.

【형식】
FIRST_VALUE ( expr ) OVER ( analytic_절)

【예제】
SQL> select salary,first_value(name)
  2  over (order by salary asc)
  3  from (select * from employees
  4        where dept_no = 20
  5        order by salary);

    SALARY FIRST_VALU
---------- ----------
       220 jijoe
       240 jijoe

SQL> select * from employees;

        ID    DEPT_NO NAME           SALARY      BONUS
---------- ---------- ---------- ---------- ----------
      1101         10 Cho               250        125
      1102         20 Joe               240        100
      1103         10 kim               250        100
      1104         20 jijoe             220        100

SQL>


6-9) LAG 함수
--------------------------------------------------------------------------------

이 함수는 analytic 함수로서,
self join하지 않고 하나의 테이블에서 동시에 한 행(row) 이상을 접근할 수 있도록 한다.

【형식】
LAG ( value_expr [,offset] [,default] )
     OVER ([query_partition_clause] order_by_clause )

【예제】
SQL> select name,salary,LAG(salary,1,0)    
  2   OVER (ORDER BY salary) FROM employees;

NAME           SALARY LAG(SALARY,1,0)OVER(ORDERBYSALARY)
---------- ---------- ----------------------------------
jijoe             220                                  0
Joe               240                                220
Cho               250                                240
kim               250                                250

SQL> select * from employees;

        ID    DEPT_NO NAME           SALARY      BONUS
---------- ---------- ---------- ---------- ----------
      1101         10 Cho               250        125
      1102         20 Joe               240        100
      1103         10 kim               250        100
      1104         20 jijoe             220        100

SQL>



6-10) LAST_VALUE 함수
--------------------------------------------------------------------------------

이 함수는 서열화된 값에서 마지막 번째를 출력한다.

【형식】
LAST_VALUE ( expr ) OVER ( analytic_절)

【예제】
SQL> select salary,last_value(name)
  2  over (order by salary asc)
  3  from (select * from employees
  4        where dept_no = 20
  5        order by salary);

    SALARY LAST_VALUE
---------- ----------
       220 jijoe
       240 Joe

SQL> select * from employees;

        ID    DEPT_NO NAME           SALARY      BONUS
---------- ---------- ---------- ---------- ----------
      1101         10 Cho               250        125
      1102         20 Joe               240        100
      1103         10 kim               250        100
      1104         20 jijoe             220        100

SQL>



6-11) LEAD 함수
--------------------------------------------------------------------------------

이 함수는 analytic 함수로서, self join하지 않고
하나의 테이블에서 동시에 한 행(row) 이상을 접근할 수 있도록 한다.

【형식】
LEAD ( value_expr [,offset] [,default] )
     OVER ([query_partition_clause] order_by_clause )

【예제】
SQL> select name,salary,LEAD(salary,1,0)   
  2   OVER (ORDER BY salary) FROM  employees;

NAME           SALARY LEAD(SALARY,1,0)OVER(ORDERBYSALARY)
---------- ---------- -----------------------------------
jijoe             220                                 240
Joe               240                                 250
Cho               250                                 250
kim               250                                   0

SQL> select * from employees;

        ID    DEPT_NO NAME           SALARY      BONUS
---------- ---------- ---------- ---------- ----------
      1101         10 Cho               250        125
      1102         20 Joe               240        100
      1103         10 kim               250        100
      1104         20 jijoe             220        100

SQL>


6-12) NTILE 함수
--------------------------------------------------------------------------------

이 함수는 analytic 함수로서, 데이터를 주어진 bucket 수 expr로 분리한다.

【형식】
NTILE ( expr ) OVER ([query_partition_clause] order_by_clause )

【예제】
SQL> select name,salary,NTILE(3) OVER (ORDER BY salary DESC)
  2  FROM  employees;

NAME           SALARY NTILE(3)OVER(ORDERBYSALARYDESC)
---------- ---------- -------------------------------
Cho               250                               1
kim               250                               1
Joe               240                               2
jijoe             220                               3

SQL> select * from employees;

        ID    DEPT_NO NAME           SALARY      BONUS
---------- ---------- ---------- ---------- ----------
      1101         10 Cho               250        125
      1102         20 Joe               240        100
      1103         10 kim               250        100
      1104         20 jijoe             220        100

SQL>



6-13) RATIO_TO_REPORT 함수
--------------------------------------------------------------------------------

이 함수는 analytic 함수로서, 데이터 합에 대한 구성비를 계산한다.

【형식】
RATIO_TO_REPORT ( expr ) OVER ([query_partition_clause])

【예제】
SQL> select name,salary,RATIO_TO_REPORT(salary) OVER ()
  2   FROM  employees;

NAME           SALARY RATIO_TO_REPORT(SALARY)OVER()
---------- ---------- -----------------------------
Cho               250                    .260416667
Joe               240                           .25
kim               250                    .260416667
jijoe             220                    .229166667

SQL> select * from employees;

        ID    DEPT_NO NAME           SALARY      BONUS
---------- ---------- ---------- ---------- ----------
      1101         10 Cho               250        125
      1102         20 Joe               240        100
      1103         10 kim               250        100
      1104         20 jijoe             220        100

SQL>



6-14) ROW_NUMBER 함수
--------------------------------------------------------------------------------

이 함수는 analytic 함수로서, 각 행(row)에 unique 번호를 부여한다.

【형식】
ROW_NUMBER () OVER ([query_partition_clause] order_by_clause )

【예제】
SQL> SELECT ROW_NUMBER() OVER (ORDER BY salary DESC),name
  2    FROM  employees;

ROW_NUMBER()OVER(ORDERBYSALARYDESC) NAME      
----------------------------------- ----------
                                  1 Cho       
                                  2 kim       
                                  3 Joe       
                                  4 jijoe     

SQL> select * from employees;

        ID    DEPT_NO NAME           SALARY      BONUS
---------- ---------- ---------- ---------- ----------
      1101         10 Cho               250        125
      1102         20 Joe               240        100
      1103         10 kim               250        100
      1104         20 jijoe             220        100

SQL>



7-1) REF 타입
--------------------------------------------------------------------------------
테이블의 어떤 컬럼이 독립된 다른 객체 테이블을 참조하는 데이터 타입을 의미한다.
일반적으로 테이블을 만들때 사용하는 외부키(foreign-key)를 이용한 참조관계와 유사하다.
REF 타입의 컬럼 데이터를 읽을 때는 반드시 DEREF 함수를 사용한다.
REF 타입으로 정의된 컬럼에는 실제 데이터가 저장되는 것이 아니고 참조되는 객체가 존재하는 포인트정보만 가지고 있기 때문에 객체가 삭제 된다면, 해당 컬러은 정상적으로 검색되지 못한다.
이러한 현상을 REF의 Dangling 현상이고 한다.
이러한 dangling 현상을 방지하기 위해서는 삭제된 객체 정보를 참조하는 행의 컬럼 정보를 analyze 명령어를 이용하여 null 값으로 변경해 주어야 한다.
【예제】
SQL> connect jijoe/jijoe_password
connected

SQL> create type person_type as object(
  2  first_name         varchar2(10),
  3  last_name          varchar2(10),
  4  phone              varchar(12),
  5  birthday           varchar2(12));
  6  /

Type created.

SQL> create type emp_type as object (
  2  empno      number,
  3  emp        person_type);
  4  /

Type created.

SQL> create table emp2 of emp_type
  2  oidindex emp_oid;

Table created.

SQL> insert into emp2 values(
  2  emp_type(1000,person_type('junik','joe','123-1234','20-jul-04')));

1 row created.

SQL> create table dept(
  2  empno      number(4),
  3  ename      varchar2(15),
  4  mgr        REF emp_type SCOPE IS emp2);

Table created.

SQL> insert into dept
  2  select empno, 'SCOTT', REF(e)
  3  from emp2 e
  4  where empno=1000;

1 row created.


【예제】
SQL> select ename,empno from dept;

ENAME                EMPNO
--------------- ----------
SCOTT                 1000

SQL> select mgr, DEREF(mgr) from dept;

MGR
--------------------------------------------------------------------------------
DEREF(MGR)(EMPNO, EMP(FIRST_NAME, LAST_NAME, PHONE, BIRTHDAY))
--------------------------------------------------------------------------------
0000220208DFA05B27A63701D9E034080020B588F4DFA05B27A63601D9E034080020B588F4
EMP_TYPE(1000, PERSON_TYPE('junik', 'joe', '123-1234', '20-jul-04'))


SQL>

【예제】
SQL> select empno,ename,mgr
  2  from dept
  3  where mgr is dangling;

no rows selected

SQL> analyze table dept validate REF update set dangling to NULL;

Table analyzed.

SQL>


8-1) ROWID 컬럼
--------------------------------------------------------------------------------

오라클에서 내부적으로 사용되는 컬럼을 pseudocolumn이라고 하며,
ROWID, ROWNUM등이 있다.
ROWID는 데이터베이스에서 컬럼이 위치한 장소이다.

【예제】
SQL> select rowid from test;

ROWID
------------------
AAAHbHAABAAAMXCAAA

SQL> select rowid from test
  2  where rowidtochar(rowid) like '%AABAA%';

ROWID
------------------
AAAHbHAABAAAMXCAAA

SQL> select lengthb(rowidtonchar(rowid)), rowidtonchar(rowid)
  2  from test;

LENGTHB(ROWIDTONCHAR(ROWID)) ROWIDTONCHAR(ROWID
---------------------------- ------------------
                          36 AAAHbHAABAAAMXCAAA

SQL>


여기서 rowid의 의미는 다음과 같다.
AAAHbH  AAB  AAAMXC  AAA 객체번호  테이블스페이스번호  블록번호  행번호



8-2) ROWNUM 컬럼
--------------------------------------------------------------------------------

오라클에서 내부적으로 사용되는 컬럼을 pseudocolumn이라고 하며,
ROWID, ROWNUM등이 있다.
ROWNUM은 테이블에서 select 되어진 일련 번호임
【예제】
SQL> select rownum,ename from emp;
 
    ROWNUM ENAME
---------- ----------
         1 CLARK
         2 MILLER
         3 JONES
         4 ALLEN
         5 MARTIN
         6 CHAN
 
6 rows selected.
 
SQL> delete from emp where ename='JONES';
 
1 row deleted.
 
SQL> select rownum,ename from emp;
 
    ROWNUM ENAME
---------- ----------
         1 CLARK
         2 MILLER
         3 ALLEN
         4 MARTIN
         5 CHAN
 
SQL>

Posted by 1010
01.JAVA/Java2009. 5. 30. 14:03
반응형
JAVA basic(scjp 1[1].5)
Posted by 1010
02.Oracle/DataBase2009. 5. 30. 13:59
반응형




세부폴더
------------------
constraints
miscellaneous
monitoring
rac
resource_manager
script_creation
security

자세한 내용은 관련 URL 입니다

http://www.oracle-base.com/dba/DBACategories.php 

Posted by 1010
98..Etc/Resin2009. 5. 18. 18:20
반응형
** resin 설치법 **

1. www.caucho.com ->download
	(http://www.caucho.com/download/index.xtp)
	다운받은 뒤 압축 풀어서 c:\resin 갖다놓기!

2. jar파일 옮겨놓기!
	jsdk23.jar파일을 복사
	(경로) c:\program files\java\jdk1.5\jre\lib\ext에서 jsdk23.jar복사->
		c:\resin\lib 붙여넣기

** resin.conf파일설정 **
1. 커넥션풀 설정하기(ctrl+F:찾기기능 이용)//데이터베이스 연결
	
	<resource-ref>
	  <res-ref-name>jdbc/oracle</res-ref-name>
	  <res-type>javax.sql.DataSource</res-type>
	  <init-param driver-name="oracle.jdbc.driver.OracleDriver"/>
	  <init-param url="jdbc:oracle:thin:@127.0.0.1:1521:orcl"/>
	  <init-param user="system"/>
	  <init-param password="admin"/>
	  <init-param max-connections="20"/>
	  <init-param max-idle-time="30"/>
	</resource-ref>

2. port 설정하기
  <!-- the http port -->
  <http port='80'/> 
  : port='8080'충돌날 경우 다른 포트로 수정
  : port='80'의 경우 http://localhost/경로명 
 
 3. 기준폴더 변경
	<doc-dir>c:\dada</doc-dir>
	dada폴더 밑에 WEB-INF\classes 폴더 생성
	
    3.1 servlet폴더,jsp폴더 각각주기
	<web-app id='myservlet'/>
	dada\myservlet\WEB-INF\classes 폴더생성
	
	<web-app id='jsp'/>

※ 주소창 > http://localhost/myservlet/servlet/HelloServlet

기본적으로 doc바로 아래에 .http .jsp .txt 그림파일 등등 놓는다.
		doc\WEB-INF\classes .java 파일을 놓는다.
		->폴더안에 폴더를 만들 경우 패키지를 추가해야된다.

** tip! **
c:\program files\editplus\template.jsp 만들기
editplus 프로그램 실행 후, 도구-사용자도구구성-jsp추가

	템플릿안에,
	<%@page contentType="text/html;charset=KSC5601"%>
	저장!

** war압축 **
프로그램 실행 할 때 필요한 폴더를 생성한 후 .jsp넣고 WEB-INF\classes 폴더안에 .java
그림파일은 ..\images폴더 생성후 그림파일 넣어서 실행>cmd 
c:\생성한 폴더> jar -cvf(압축풀기:-xvf) 이름.war (엔터) 
압축한 폴더는
c:\resin\webapps 안에 넣어주고
http://localhost/폴더명/첫실행파일명(index.jsp로 저장하지 않은경우)
Posted by 1010
반응형
 

PDF-Pro 4는 모든 종류의 문서로 부터 PDF를 만드는 기능에 덧붙여, 열람, 편집, 주석, 전자 서명, 폼 입력과 같은 다양한 PDF 관련 작업을 쉽고 빠르게 할 수 있게 해 주는  데스크톱용 소프트웨어 입니다.

PDF-Pro 4는 다양한 문서를 인쇄하는 방식과 동일하게 PDF로 변환할 수 있게 해 주는 가상 프린터, 여러 문서를 한번에 PDF로 변환해주는 배치 컨버터, PDF 문서를 병합, 추출, 암호화 할 수 있는 툴, PDF 문서를 열고, 수정하며, 주석을 달 수 있는 에디터로 구성되어 있습니다.

Posted by 1010
02.Oracle/DataBase2009. 5. 14. 16:11
반응형

참고할만한 사이트

http://cexx.org/lspfix.htm


ORA-12571: TNS:packet writer failure


문제발견 : 하나의 클라이언트가 데이타베이스 접속을 못한다.

                그래서 업무를 수행하지 못한다.


문제해결 : 첨부된 실행파일을 실행한후 Finish 버튼을 누르면 해결된다.


이거땜시 하루 정도는 고생한거 같다. ㅜ.ㅜ

Posted by 1010
반응형
각각의 다운로드 버튼을 클릭하셔서 받으시던지 모두 받으시려면 제일 하단의 "모두 다운로드" 이용하세요.
gBtn1 다운로드 (DOWN)
gBtn2 다운로드 (DOWN)
gBtn3 다운로드 (DOWN)
gBtn4 다운로드 (DOWN)
gBtn5 다운로드 (DOWN)
gBtn6 다운로드 (DOWN)
gBtn7 다운로드 (DOWN)
gBtn8 다운로드 (DOWN)
gBtn9 다운로드 (DOWN)
gBtn10 다운로드 (DOWN)
gBtn11 다운로드 (DOWN)
gBtn12 다운로드 (DOWN)
gBtn13 다운로드 (DOWN)
gBtn14 다운로드 (DOWN)
gBtn15 다운로드 (DOWN)
gBtn16 다운로드 (DOWN)
gBtn17 다운로드 (DOWN)
gBtn18 다운로드 (DOWN)
gBtn19 다운로드 (DOWN)
gBtn20 다운로드 (DOWN)
gBtn21 다운로드 (DOWN)
모두 다운로드 (DOWNLOAD ALL)
출처 : http://poshopzil.com
Posted by 1010
02.Oracle/DataBase2009. 5. 12. 16:23
반응형
Posted by 1010
02.Oracle/DataBase2009. 5. 11. 15:49
반응형
공유 풀 영역 튜닝

서버 튜닝

server tuning은 최적의 성능을 얻기 위해 DB 버퍼 캐시, 로그 버퍼와 같은 메모리 영역과 기타 프로세스 영역의 크기를 적당하게 할당하여 성능을 향상시키는 방법을 말한다.
서버튜닝을 통하여 성능을 향상시킬 수 있는 내용은 다음과 같다.
• DB 메모리 영역의 튜닝을 통한 성능 향상
• 물리적 디스크로부터 입출력 수행에 따른 성능 저하 개선
• 백그라운드 프로세스의 활성하를 통한 DB 성능 개선

1)공유 풀 영역튜닝
2)
데이터버퍼 캐시 영역튜닝
3)리두로그 버퍼 튜닝


공유 풀 영역튜닝

공유 풀(shared pool)은 사용자가 실행한 SQL 문의 구문 분석 정보가 저장되는 영역으로 라이브러리 캐시 영역과 데이터 사전 캐시로 구성되어 있다.

라이브러리 캐시는 오라클 DB가 메모리에서 데이터를 얼마나 자주 변경했는지, 어떤 SQL 문이 자주 실행되는지 등의 실행 결과와, 사용자가 실행한 SQL 문의 텍스트 정보가 저장되어 있다.
데이터 사전 캐시 영역은 테이블/뷰의 이름, 테이블을 구성하는 컬럼의 이름과 타입, 이들에 대한 사용자 권한 등과 같은 정보를 저장하는 영역이다.


라이브러리 캐시 튜닝

라이브러리 캐시 튜닝의 목적은 동일한 SQL이나 PL/SQL은 라이브러리 캐시에 한번만 저장될 수 있도록 하자는 것이다. 즉, 동일한 SQL이나 PL/SQL의 텍스트, 파싱(parsing) 결과, 실행계획 등이 각각 메모리에 저장되도록 하는 것이 아니라 하나의 SQL이나 PL/SQL의 정보들만 메모리에 저장되도록 하고 나머지는 이미 메모리에 저장된 정보를 이용할 수 있도록 하자는 것이다.

이를 위해서는 표준화된 코딩 규칙에 따라 SQL과 PL/SQL을 개발함으로써 모든 사용자가 공유할 수 있도록 하고, 이미 라이브러리 캐시에 저장되어 있는 정보가 제거 되지 않도록 하면 된다.

동일한 SQL 문이란 다음과 같은 조건을 만족하는 두 개의 SQL 문을 의미한다.

	• 대문자/소문자 동일
	• 띄어쓰기 규칙 동일
	• 공백(space)의 개수 동일
	• SQL 문에 사용된 변수의 데이터 타입과 변수 이름이 동일
공유 푸 영역을 검색할 때는 V$SQLAREA, V$SQLTEXT 데이터 사전을 사용한다.
검색 결과에서 PARSE_CALLS 항목을 유의해볼 필요가 있다.

동일한 SQL 문에 대해서는 구문 분석이 이루어 지지 않음을 알 수 있다.

SQL> conn system/manager
connected
SQL> select ename,sal from scott.emp where sal >=3000;
 
ENAME             SAL
---------- ----------
SCOTT            3000
KING             5000
FORD             3000
 
SQL> select ename,sal from scott.emp where sal >=3000;
 
ENAME             SAL
---------- ----------
SCOTT            3000
KING             5000
FORD             3000
 
SQL> select sql_text,version_count,loads,invalidations,parse_calls,sorts
  2  from v$sqlarea
  3  where sql_text not like '%$%'
  4             and command_type in (2,3,6,7)
  5             and upper(sql_text) like '%SCOTT.EMP%'
  6             order by sql_text;
 
SQL_TEXT
--------------------------------------------------------------------------------
VERSION_COUNT      LOADS INVALIDATIONS PARSE_CALLS      SORTS
------------- ---------- ------------- ----------- ----------
select ename,sal from scott.emp where sal>=3000
            1          1             0           2          0
 
 
SQL> select sql_text,version_count,loads,invalidations,parse_calls,sorts
  2  from v$sqlarea
  3  where sql_text not like '%$%'
  4             and command_type in (2,3,6,7)
  5             and upper(sql_text) like '%SCOTT.EMP%'
  6             order by sql_text;
 
SQL_TEXT
--------------------------------------------------------------------------------
VERSION_COUNT      LOADS INVALIDATIONS PARSE_CALLS      SORTS
------------- ---------- ------------- ----------- ----------
select ename,sal from scott.emp where sal>=3000
            1          1             0           3          0
 
 
SQL>

사용하고 있는 DB의 라이브러리 캐시 영역에 대한 분석은 라이브러리 캐시에 대한 튜닝의 계힉을 세우기 위해 아주 중요하다. 공유 풀 영역에 대한 분석을 위한 데이터 사전 뷰는 다음과 같다.
V$sgastat 모든 SQL 구조의 크기에 대한 정보를 제공
V$librarycache 라이브러리 캐시에 있는 항목의 유형에 대한 통계정보들을 제공
V$sql
V$sqlarea 현재 어떤 SQL 문들이 사용자들에게 공유되고 있는지에 대한 정보
V$sqltext 현재 어떤 SQL 문들이 사용자들에게 공유되고 있는지에 대한 정보
V$db_object_cache 패키지를 포함한 캐시된 객체들

V$librarycache 뷰를 사용한 분석

히트율 분석 v$librarycache 데이터 사전의 GETS 컬럼과 GETTHIS 컬럼에 대한 백분율
GETS는 사용자가 실행한 SQL 구문이 분석되어 라이브러리 캐시 영역에 로더 되려고 했던 횟수
GETTHIS는 그 중에서 실제로 load된 수를 의미함
reload비율 v$librarycache 데이터 사전으로부터 라이브러리 캐시의 reload 비율을 분석한다.
reload비율은 PINS 컬럼에 대한 RELOADS 컬럼에 대한 비율임
PINS 컬럼은 라이브러리 캐시의 정보가 사용된 횟수를 의미하고,
RELOADS 컬럼은 라이브러리 캐시의 정보가 메모리로부터 제거디어 다시 로딩된 횟수를 의미한다. 만약 0.01이하라면 SHARED_POOL_SIZE 값을 늘려야 한다.
무효화 invalidation(무효화)는 v$librarycache 데이터 사전으로부터 SQL문에서 참조된 객체가 다른 사용자에의해 삭제된 상태가 얼마나 발생했는지를 나타내는 것으로 INVALIDATION 컬럼의 값이 계속 증가하는 값이면 공유 풀 영역이 작아 성능이 저하됨을 나타낸다.

SQL> select * from v$sgastat;
 
POOL         NAME                            BYTES
------------ -------------------------- ----------
             fixed_sga                      778796
             buffer_cache                184549376
             log_buffer                     524288
shared pool  subheap                         52652
shared pool  KQR L SO                       213068
shared pool  KQR M PO                      3021240
shared pool  KQR M SO                       483516
shared pool  KQR S PO                       669044
shared pool  KQR S SO                        12628
shared pool  sql area                     13678560
shared pool  KGLS heap                     2622804
 
POOL         NAME                            BYTES
------------ -------------------------- ----------
shared pool  joxs heap                        4220
shared pool  row cache                     3707272
shared pool  PX subheap                     131068
shared pool  parameters                      27604
shared pool  repository                     145944
shared pool  ASH buffers                   4194304
shared pool  free memory                  10909496
shared pool  PL/SQL DIANA                  1225720
shared pool  PL/SQL MPCODE                 2761632
shared pool  library cache                11884516
shared pool  miscellaneous                23639736
 
POOL         NAME                            BYTES
------------ -------------------------- ----------
shared pool  pl/sql source                   18244
shared pool  PLS non-lib hp                  10404
shared pool  XDB Schema Cac                3797208
shared pool  alert threshol                   4220
shared pool  joxlod exec hp                 337180
shared pool  joxlod pcod hp                  56004
shared pool  partitioning d                 347548
shared pool  table definiti                   1988
shared pool  trigger defini                   2668
shared pool  trigger inform                   2008
shared pool  trigger source                   5832
 
POOL         NAME                            BYTES
------------ -------------------------- ----------
shared pool  type object de                 251344
shared pool  event statistics per sess     3860360
shared pool  fixed allocation callback         352
large pool   PX msg pool                    902160
large pool   free memory                   3292144
java pool    joxs heap                      354816
java pool    free memory                   2578496
java pool    joxlod exec hp                5455296
 
41 rows selected.
 
SQL> select namespace,gethitratio from v$librarycache;
 
NAMESPACE       GETHITRATIO
--------------- -----------
SQL AREA         .980316179
TABLE/PROCEDURE  .817467385
BODY             .997121957
TRIGGER          .984754522
INDEX            .112746633
CLUSTER          .987701768
OBJECT                    1
PIPE                      1
JAVA SOURCE               1
JAVA RESOURCE             1
JAVA DATA                 0
 
11 rows selected.
 
SQL> select sum(pins) PINS, sum(reloads) RELOADS, sum(reloads/pins) RATIO
  2  from v$librarycache where pins != 0;
 
      PINS    RELOADS      RATIO
---------- ---------- ----------
   3000107       7964 .014909064
 
SQL>
SQL> select namespace,gethitratio, invalidations 
  2  from v$librarycache;
 
NAMESPACE       GETHITRATIO INVALIDATIONS
--------------- ----------- -------------
SQL AREA         .980312259          2065
TABLE/PROCEDURE  .817544718             0
BODY             .997125699             0
TRIGGER          .984762397             0
INDEX            .112746633             0
CLUSTER          .987701768             0
OBJECT                    1             0
PIPE                      1             0
JAVA SOURCE               1             0
JAVA RESOURCE             1             0
JAVA DATA                 0             0
 
11 rows selected.
 
SQL>
공유 풀 크기의 변경

위에서 설명한 것과 같은 다양한 튜닝 도구들에 의해 공유 풀 영역의 튜닝이 필요하다면 공유 풀의 크기를 변경해야 한다.
공유 풀 크기의 변경은 다음 사항을 고려하여 정해야 한다.
1) 저장된 객체(테이블, 뷰,프로시저등)들을 위해 필요한 공간얼마나 되는지 산정한다.
2) 자주 사용되는 (4회이상) 응용 프로그램의 메모리를 조회해 본다.
3) 한 사용자의 open 커서당 공유 풀은 250바이트 정도 할당하는 것이 좋으며, 최고조일 때의 전체 메모리는 (오픈커서수 x 25바이트)로 산정한다.
이제 매개변수 shared_pool_size는 (1+2+3+30% 정도의 여유공간)로 잡는다. 공유 풀 영역의 크기를 설정하기 위해 다음 매개변수의 값을 설정한다.

  
	SHARED_POOL_SIZE=[크기];
	SHARED_POOL_REVERSED_SIZE=[크기];
【예제】
SQL> select sum(sharable_mem) from v$db_object_cache;
 
SUM(SHARABLE_MEM)
-----------------
         35909092        ☜  가용 설정 공간
 
SQL> select sum(sharable_mem) from v$db_object_cache
  2  where owner is not null;
 
SUM(SHARABLE_MEM)
-----------------
         16046514  	 ☜  1) 공유객체를 위한 공간
 
SQL> select sum(sharable_mem) from v$sqlarea
  2  where executions > 4;
 
SUM(SHARABLE_MEM)
-----------------
          9785693       ☜  2) 자주 사용되는 으용 프로그램 공간
 
SQL> select sum(250*users_opening) from v$sqlarea;
 
SUM(250*USERS_OPENING)
----------------------
                 10500       ☜  3) 오픈된 커서의 수에 따른 할당된 메모리 크기
 
SQL> 
이 예제에서 가용 메모리=35909092로 되어 있다.
계산하여 보면 { 1)+2)+3)}*30%추가=25842707 * 1.3= 335955191임
그러므로 가용메모리 설정 값 35909092이 계산 값 335955191보다 크므로 여유가 있음

데이터 사전 캐시 튜닝

라이브러리 캐시와 함께 공유 풀의 데이터 사전 캐시에서의 튜닝의 목적은 히트율을 높이는 것이다. 데이터 사전 캐시를 모니터링하기 위해 V$ROWCACHE 뷰를 사용한다.
GETS 컬럼은 사용자가 자료사전을 쿼리했을 때 data dictionary영역으로 자료를 요청했던 횟수
GETMISSES는 자료 요청을 했지만 data dictionary로부터 자료를 얻지 못했던 횟수

대부분 자료사전을 빠르게 검색하기 위해서 GETS에 대한 GETMISSES의 백분율이 2% 미만이어야하고, 아주 큰 자료사전이라면 15%미만이어야 좋은 성능을 기대할 수 있음

이 값들이 15% 이상이면 매개변수 shared_pool_size 크기를 늘리는 것을 고려해 보아야 한다. DB 캐시 영역의 크기는 shared_pool_size 매개변수를 사용하여 변경할 수 있다.
utlbstat, utlestat 유틸리티의 분석결과인 report.txt나 statspack 패키지의 분석 결과인 report.txt에서 다음 사항을 참고해도 좋다.

name GET_REQS GET_MISS SCAN_REQSMOD_REQS COUNT CUR_USAGE
dc_objects
dc_synonyms

【예제】
SQL> select parameter, gets, getmisses, getmisses/gets
  2  from v$rowcache 
  3  where gets != 0;
 
PARAMETER                              GETS  GETMISSES GETMISSES/GETS
-------------------------------- ---------- ---------- --------------
dc_segments                          157452       5536     .035159922
dc_tablespaces                       127769          8     .000062613
dc_tablespace_quotas                   5896          7     .001187246
dc_files                                 72          4     .055555556
dc_users                             661602         80     .000120919
dc_rollback_segments                  46198         21     .000454565
dc_objects                           118673       9587     .080785014
dc_global_oids                       461691        175     .000379041
dc_constraints                         1899        634     .333859926
dc_object_ids                        599331       3945     .006582339
dc_sequences                            181         28     .154696133
dc_usernames                          29648         48     .001618996
dc_histogram_defs                    168054      62822      .37382032
dc_table_scns                           133        133              1
dc_profiles                            5472          1     .000182749
global database name                      4          2             .5
outstanding_alerts                     5597       1100     .196533857
dc_awr_control                         6079          1     .000164501
dc_histogram_data                     31078       6155     .198050068
dc_histogram_data                     13713        488      .03558667
dc_users                              63178         60     .000949698
 
21 rows selected.
 
SQL> 

Posted by 1010
02.Oracle/DataBase2009. 5. 11. 15:48
반응형
v$sqlarea 뷰
공유 풀 영역을 검사할 때 v$sqlarea나 v$sqltext을 사용

【예제】 
SQL> conn system/manager
connected
SQL> select ename,sal from scott.emp where sal >=3000;
 
ENAME             SAL
---------- ----------
SCOTT            3000
KING             5000
FORD             3000
 
SQL> select ename,sal from scott.emp where sal >=3000;
 
ENAME             SAL
---------- ----------
SCOTT            3000
KING             5000
FORD             3000
 
SQL> select sql_text,version_count,loads,invalidations,parse_calls,sorts
  2  from v$sqlarea
  3  where sql_text not like '%$%'
  4             and command_type in (2,3,6,7)
  5             and upper(sql_text) like '%SCOTT.EMP%'
  6             order by sql_text;
 
SQL_TEXT
--------------------------------------------------------------------------------
VERSION_COUNT      LOADS INVALIDATIONS PARSE_CALLS      SORTS
------------- ---------- ------------- ----------- ----------
select ename,sal from scott.emp where sal>=3000
            1          1             0           2          0
 
 
SQL> select sql_text,version_count,loads,invalidations,parse_calls,sorts
  2  from v$sqlarea
  3  where sql_text not like '%$%'
  4             and command_type in (2,3,6,7)
  5             and upper(sql_text) like '%SCOTT.EMP%'
  6             order by sql_text;
 
SQL_TEXT
--------------------------------------------------------------------------------
VERSION_COUNT      LOADS INVALIDATIONS PARSE_CALLS      SORTS
------------- ---------- ------------- ----------- ----------
select ename,sal from scott.emp where sal>=3000
            1          1             0           3          0
 
 
SQL>


SQL> select executions, disk_reads, buffer_gets from v$sqlarea; EXECUTIONS DISK_READS BUFFER_GETS ---------- ---------- ----------- 9 0 9 1 2 47 2 11 94 0 0 0 3 4 56 0 0 0 0 0 0 9 8 73 1 0 4 737 0 2211 1 2 15 EXECUTIONS DISK_READS BUFFER_GETS ---------- ---------- ----------- 1 2 15 1 1 15 8 104 471 1 0 0 1 0 0 1 0 0 0 0 0 1 0 0 1 2 55 2 0 0 11 0 0 EXECUTIONS DISK_READS BUFFER_GETS ---------- ---------- ----------- 0 0 0 7 0 14 9 0 27 9 0 45 4 2 55 12 3 24 737 2 2212 3 0 9 1 0 3 30 2 92 1 0 3 EXECUTIONS DISK_READS BUFFER_GETS ---------- ---------- ----------- 6 8 44 3 1 6 2 0 6 4 2 30 6 5 43 4 2 42 1 0 3 1 0 3 10 8 56 4 75 316 1 0 966 EXECUTIONS DISK_READS BUFFER_GETS ---------- ---------- ----------- 0 0 0 9 10 130 4 1 28 0 0 0 118 7 478 55 26 294 1 0 2 1 0 2 0 0 0 1 0 3 1 0 17 EXECUTIONS DISK_READS BUFFER_GETS ---------- ---------- ----------- 0 0 0 77 10 573 1 39 582 192 5 1070 1 0 2 43 1 43 0 0 0 26 1 129 17 3 60 1 4 15 1 0 0 EXECUTIONS DISK_READS BUFFER_GETS ---------- ---------- ----------- 3 9 35 1 0 3 1 3 25 26 0 88 26 0 121 15 1 39 1 1 37 4567 0 4567 2 3 69 9 0 45 1 1 33 EXECUTIONS DISK_READS BUFFER_GETS ---------- ---------- ----------- 3 3 28 0 0 0 4 0 12 76 13 1368 175 3 525 26 1 112 1 69 2397 26 0 112 0 0 0 1 4 43 1 117 2816 EXECUTIONS DISK_READS BUFFER_GETS ---------- ---------- ----------- 76 0 76 77 1 585 1 4 81 1 0 46 0 0 0 12 15 120 12 14 84 12 59 192 9 1 43 1 0 23 12 10 86 EXECUTIONS DISK_READS BUFFER_GETS ---------- ---------- ----------- 0 0 0 26 1 121 44 1 245 9 6 142 0 0 0 39 8 90 8 12 118 37 7 74 2 0 6 3 1 3 55 29 557 EXECUTIONS DISK_READS BUFFER_GETS ---------- ---------- ----------- 8 0 26 3 0 6 7 0 3514 25 0 50 194 13 582 26 1 119 16214 1 113754 1 6 55 1 6 58 1 7 55 1 6 55 EXECUTIONS DISK_READS BUFFER_GETS ---------- ---------- ----------- 9 11 72 31 3 62 1 6 55 1 6 55 1 6 55 1 7 58 7 11 283 1 6 55 1 1 27 3 0 3 0 0 0 EXECUTIONS DISK_READS BUFFER_GETS ---------- ---------- ----------- 4566 0 9132 1 2 37 1 12 80 1 0 7 1 12 112 1 0 7 1 0 7 1 0 7 9 0 27 7 4 69 1 11 211 EXECUTIONS DISK_READS BUFFER_GETS ---------- ---------- ----------- 1 0 7 1 0 7 1 0 7 1 0 7 1 0 7 0 0 0 7 490 3514 0 0 0 1 368 1317 1 0 7 1 0 7 EXECUTIONS DISK_READS BUFFER_GETS ---------- ---------- ----------- 1 0 7 1 0 7 1 0 7 1 0 7 1 0 7 1 0 7 190 36 552 1 0 7 0 1 92 0 1 82 0 1 92 EXECUTIONS DISK_READS BUFFER_GETS ---------- ---------- ----------- 0 1 91 13 1 65 0 1 94 0 4 93 0 2 84 0 1 84 737 10 905 737 2 2299 737 1 2286 0 1 82 116 12 361 EXECUTIONS DISK_READS BUFFER_GETS ---------- ---------- ----------- 737 143 310752 737 13 855 121 3 408 737 13 867 737 3 849 737 2 861 4 2 30 9 1 54 1 32 674 12 4 62 4 0 107 EXECUTIONS DISK_READS BUFFER_GETS ---------- ---------- ----------- 3 2 57 118 24 688 189 rows selected. SQL> 【예제】 SQL> select substr(sql_text,1,40) "SQL", count(*), 2 sum(executions) "총실행회수" 3 from v$sqlarea 4 where sql_text like '%emp%' 5 group by substr(sql_text, 1,40) 6 having count(*) >0 7 order by 2; SQL COUNT(*) 총실행회수 --------------------------------------------- ---------- ---------- select substr(sql_text,1,40) "SQL", coun 1 5 select count(*) from emp 1 1 select ename from emp where ename=:test 1 2 INSERT INTO wrh$_sql_plan sp (sn 1 1 select t.ts#,t.file#,t.block#,nvl(t.bobj 1 20013 select obj#, dataobj#, part#, hiboundlen 1 144 6 rows selected. SQL> 【예제】 SQL> show user USER is "SYS" SQL> desc v$sqlarea Name Null? Type ----------------------------------------- -------- ---------------------------- SQL_TEXT VARCHAR2(1000) SQL_FULLTEXT CLOB SQL_ID VARCHAR2(13) SHARABLE_MEM NUMBER PERSISTENT_MEM NUMBER RUNTIME_MEM NUMBER SORTS NUMBER VERSION_COUNT NUMBER LOADED_VERSIONS NUMBER OPEN_VERSIONS NUMBER USERS_OPENING NUMBER FETCHES NUMBER EXECUTIONS NUMBER PX_SERVERS_EXECUTIONS NUMBER END_OF_FETCH_COUNT NUMBER USERS_EXECUTING NUMBER LOADS NUMBER FIRST_LOAD_TIME VARCHAR2(38) INVALIDATIONS NUMBER PARSE_CALLS NUMBER DISK_READS NUMBER DIRECT_WRITES NUMBER BUFFER_GETS NUMBER APPLICATION_WAIT_TIME NUMBER CONCURRENCY_WAIT_TIME NUMBER CLUSTER_WAIT_TIME NUMBER USER_IO_WAIT_TIME NUMBER PLSQL_EXEC_TIME NUMBER JAVA_EXEC_TIME NUMBER ROWS_PROCESSED NUMBER COMMAND_TYPE NUMBER OPTIMIZER_MODE VARCHAR2(10) OPTIMIZER_COST NUMBER OPTIMIZER_ENV RAW(2000) OPTIMIZER_ENV_HASH_VALUE NUMBER PARSING_USER_ID NUMBER PARSING_SCHEMA_ID NUMBER PARSING_SCHEMA_NAME VARCHAR2(30) KEPT_VERSIONS NUMBER ADDRESS RAW(8) HASH_VALUE NUMBER OLD_HASH_VALUE NUMBER PLAN_HASH_VALUE NUMBER MODULE VARCHAR2(64) MODULE_HASH NUMBER ACTION VARCHAR2(64) ACTION_HASH NUMBER SERIALIZABLE_ABORTS NUMBER OUTLINE_CATEGORY VARCHAR2(64) CPU_TIME NUMBER ELAPSED_TIME NUMBER OUTLINE_SID VARCHAR2(40) LAST_ACTIVE_CHILD_ADDRESS RAW(8) REMOTE VARCHAR2(1) OBJECT_STATUS VARCHAR2(19) LITERAL_HASH_VALUE NUMBER LAST_LOAD_TIME DATE IS_OBSOLETE VARCHAR2(1) IS_BIND_SENSITIVE VARCHAR2(1) IS_BIND_AWARE VARCHAR2(1) IS_SHAREABLE VARCHAR2(1) CHILD_LATCH NUMBER SQL_PROFILE VARCHAR2(64) SQL_PATCH VARCHAR2(30) SQL_PLAN_BASELINE VARCHAR2(30) PROGRAM_ID NUMBER PROGRAM_LINE# NUMBER EXACT_MATCHING_SIGNATURE NUMBER FORCE_MATCHING_SIGNATURE NUMBER LAST_ACTIVE_TIME DATE BIND_DATA RAW(2000) TYPECHECK_MEM NUMBER SQL> select count(*) from v$sqlarea; COUNT(*) ---------- 1469 SQL>
Posted by 1010
02.Oracle/DataBase2009. 5. 11. 15:02
반응형

*오라클서버의 메모리에 관한 테이블*/
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'

/*hash_value 가지고 SQL 문장 찾아내는 쿼리 */
select sql_text from v$sqltext where hash_value= 317853294


/*오라클 세션과 관련된 테이블*/
select count(*) from v$session where machine ='머신이름' and schemaname ='스키마이름'

/*인엑티브 상태의 세션들-로그온타입이 과도하게 지나도록 없어지지 않는것은 세션을 죽이도록 한다
단 machine이 머신이름 에 해당하는 것만 죽이도록 한다
prev_hash_value 로 해쉬밸류를 알아내어 쿼리문을 확인할 수 있다
*/ 
select sid,serial#,username,status,logon_time,prev_hash_value,machine
from v$session
where machine ='머신이름' and schemaname ='스키마이름' and status = 'INACTIVE'

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

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

SELECT COUNT(*) FROM V$SESSION WHERE MACHINE ='머신이름' AND SCHEMANAME ='스키마이름'  AND STATUS = 'ACTIVE'
   
--현재 스키마이름 스키마로 실행중인(active) 프로세스를 알아내는 쿼리문
select SID, SERIAL#, SQL_HASH_VALUE, PREV_HASH_VALUE,ROW_WAIT_OBJ#, LOGON_TIME, MACHINE
from v$session
where schemaname ='스키마이름' and status = 'ACTIVE'
  
--위에서 알아내 hash_value 값을 이용하여 해당 프로세스가 실행중인 쿼리문 알아내기
select * from v$sqltext where hash_value = 2626426688-
order by piece

select * from v$session
where machine ='머신이름' and schemaname ='스키마이름' and status = 'ACTIVE' and ROW_WAIT_OBJ# > 0


/******************************************************************************************/
 현재 커서 수 확인하는 Query
/******************************************************************************************/
 

SELECT sid, count(sid) cursor
FROM V$OPEN_CURSOR
WHERE user_name = '유저이름'
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



  
  
 
  
   116, 15217
  
    select sql_text from v$sqltext
 where hash_value= 3252988466 --1389452958 
 order by piece
  
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
 
 
  select user_name, sql_text, count(*) cnt from sys.v_$open_cursor
 where user_name = '유저이름' and sid = 114
  group by user_name, sql_text
  order by cnt desc

 alter system kill session '27,127'

--ALTER SYSTEM KILL SESSION '45, 3977'
--이런식으로 통계정보를 생성하신 후에

 analyze table emp compute statistics;

 alter table customers pctfree 5 ;

select * from dba_tables
where table_name = 'RP_PART_MST'



/*******************************************************************************
* LOCK 관련
*******************************************************************************/

--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'

/**********************************************************************************************/





select *
  from v$session
  where sid in (80,100)

SELECT l.SESSION_ID,
    LPAD('  ', DECODE(l.xidusn,0,3,0))
    ||l.oracle_username "User Name",
    o.owner, o.object_name, o.object_type
    FROM v$locked_object l, dba_objects o
WHERE l.object_id = o.object_id
ORDER by o.object_id, 1 desc


--아래 table 은 존재하지 않네...

SELECT sw.username "WAITING_USER", bu.username "LOCKING_USER",
    dw.lock_type, dw.mode_held, dw.mode_requested,
    dw.waiting_session, dw.holding_session
FROM dba_waiters dw, v$session sw, v$session bu
WHERE dw.waiting_session = sw.sid
ANd dw.holding_session = bu.sid   
   


SELECT s.username, s.sid, s.serial#
FROM dba_blockers db, v$session s
WHERE db.holding_session = s.sid 


SELECT vo.session_id,do.object_name, do.owner, do.object_type,do.owner, vo.xidusn, vo.locked_mode
FROM v$locked_object vo , dba_objects do
WHERE vo.object_id = do.object_id

SELECT do.object_name, do.owner, do.object_type,do.owner, vo.xidusn, vo.session_id, vo.locked_mode
FROM v$locked_object vo , dba_objects do
WHERE vo.object_id = do.object_id



Select *
FROM
  all_col_comments
WHERE
  table_name = '테이블이름'
 
 
/************************************************
alter session으로 죽지않는 프로세스 죽이기
1.oracle이 설치된 서버에 텔넷으로 root로 접속한다
2.su -오라클계정
3.sqlplus '/as sysdba''
4.connect system/sys
5.ALTER SYSTEM KILL SESSION '137,1723'

**************************************************/ 

 

 

database.sarang.net 에서 펌

Posted by 1010
반응형

Google 데이터 API란 무엇입니까?

Google 데이터 API는 웹의 데이터를 읽고 쓰기 위한 간단한 표준 프로토콜을 제공합니다.

이러한 API는 두 가지 표준 XML 기반 신디케이션 형식 중 하나(Atom 또는 RSS)를 사용하며, Atom 게시 프로토콜과, 쿼리를 처리하기 위한 확장 프로그램(Atom의 표준 확장 모델 사용)으로 구성된 피드 게시 시스템을 가집니다.

대부분의 Google 서비스는 Google 데이터 API를 지원합니다. 다음 데이터 API를 사용하여 클라이언트 응용프로그램이 Google 서비스와 상호 작용할 수 있습니다.

Posted by 1010
반응형
출처 : http://www.ihelpers.co.kr
원저자 : 손상모

앞에서 배운 지식을 바탕으로 간단한 RSS Reader를 제작해 보도록 하겠습니다. 먼저 아래의 데모를 한번씩들 실행하여 보시기 바랍니다. 그리고 구독하고 있는 채널이 있다면 다른 RSS URL로 테스트도 해 보시구요. 아마도 해당 강좌를 보신 후에는 이 보다 멋진 RSS Reader(Aggregator)를 작성하실 수 있을 것입니다.

1. 데모보기

Simple RSS Reader - http://www.ihelpers.co.kr/lib/jmrss/simplereader.php?URL=http://rss.joins.com/joins_news_list.xml

2. URL 통신
저번 시간에는 RSS 파싱하는 방법에 대하여 소개를 하였습니다. 이번에는 RSS Reader 구현을 위한 URL 통신 방법과 그외의 핵심 기능에 대하여 알아보도록 하겠습니다.

그럼 URL로 RSS 구문을 어떻게 가지고 올까요?

저의 경우는 대부분의 경우는 HTTP 모듈을 사용하나, PHP에서는 fopen 함수를 사용하여 복잡한 과정 없이 웹상의 정보를 로컬디렉토리의 파일정보 처리하는 것 처럼 너무도 쉽게 구현 할수  있습니다.

HTTP의 헤더정보를 같이 좀더 세부적인 처리를 원하는 분은 소스코드에 포함된 "httpclass.php" 클래스를 분석해 보시기 바랍니다. 해당 강좌의 모든 코드는 HTTP 모듈을 사용하였습니다.

//$fd = fopen("http://www.ihelpers.co.kr", "r");
$fd = fopen("http://xmlmanager.egloos.com", "r");
while (!feof($fd)) {
$buffer .= fgets($fd, 4086);
}
fclose($fd);
echo $buffer;
?>
3. RSSReader Class
RSSReader 클래스는 RSSParser 클래스,URLCache 클래스,httpclass 클래스 사용하며, 특히 RSSParser 클래스를 상속받아 사용하고 있습니다. 클래스를 만들면서도 상속에 대한 문제점으로 사용여부를 두고 갈등을 했었지만, RSSParser에 포함된 GET 함수들을 모두 다시 작성할 생각을 하니 너무 귀찮아서 PHP에서 처음으로 상속을 사용해 보았습니다. 혹시 아직도 PHP에서 Class 나 상속기능을 사용해 보지 않으신 분은 참고하여 보시면 일정 부분 도움이 될것입니다.

RSSReader 변수(Property)

  • url - RSS URL정보
  • isCache - Cache 사용여부 ( true,false )
  • CacheDir - Cache 디렉토리
  • cacheInterval - Cache 갱신 주기
  • ErrNum - 에러번호
  • ErrMsg - 에러메세지
RSSReader 함수(method)
  • RSSReader - 생성자로써 URL정보,Cache사용여부,Cache 갱신주기, Cache 디렉토리를 변수로써 입력 받는다.
  • setCache - Cache 사용여부 설정
  • setCacheDir - Cache 디렉토리 설정
  • setCacheInterval - Cache 갱신 주기 설정
  • Read

    RSS Reader 클래스에서 가장 주요 업무인 HTTP 통신과 RSS 구문 분석을 수행하는 함수이니 RSSReader 클래스에서 가장 중요한 함수라고 할 수 있을 것입니다. Read 함수는 내부적으로 _getResponse를 호출하여 HTTP 통신을 수행하고, 부모 클래스의 parse 함수를 통하여 RSS 구문을 분석하여 줍니다.

  • _getResponse

    Cache 사용여부를 판단하고 Cache를 사용할 경우는 Cache된 파일의 최종수정시간과 설정된 갱신 주기를 비교하여 Cache의 갱신 및 조회여부를 판단하여 URL정보를 읽어오게 됩니다. Cache를 사용하지 않을 경우는 당연히 직접 자료를 조회하게 됩니다.

    if($status == 0){ // 캐쉬정보가 이전것일때
    $response = $cache->get($this->url);
    $http->AddHeader("If-Modified-Since",$response['last-modified']);
    $http->AddHeader("ETag",$response['etag']);
    }
    $http->Get($path);


    if($http->Response['code'] == 304){
    } elseif($http->Response['code'] == 200 || $http->Response['code'] == 304){
    $response = $http->Response;
    $cache->set($this->url,$response);
    } else {
    $this->Error(0,"Response Not Success");
    return false;
    }
    return $response;
  • 위의 코드는 조금 재미있게 볼 수 있을 것 같습니다. Cache 정보가 이전 것이라면 URL통신을 하여 새로운 정보를 가지고 와야 할 것입니다. 그 때 etag 와 last-modified를 포함하여 웹서버와 통신하여 URL 정보가 Cache된 정보와 비교하여 갱신이 되지 않았다면,웹서버는 상태코드로 304 를 리턴해 줍니다. 웹서버에 정보가 갱신이 되지 않았다면 RSS Reader쪽은 Cache정보를 갱신할 필요가 없고 웹서버에서는 URL에 해당하는 문서의 갱신상태만 파악하면 되기 때문에 좀 더 빠르게 통신을 할 수 있게 됩니다.

/*///////////////////////////////////////////////////////////////

작성자  : 손상모<smson@ihelpers.co.kr>
최초작성일 : 2004.10.27

변경내용  :

 2006.05.30 - 302 Object Moved 문제점 처리
 2006.05.30 - encoding 문제점 처리

http://www.ihelpers.co.kr

/////////////////////////////////////////////////////////////////*/

require_once("RSSParser.php");
require_once("URLCache.php");
require_once("httpclass.php");

/**
* RSS Reader Class
*
* RSS Format 읽기 기능 ( URLCache와 httpclass 이용 )
*
* @author Sang Mo,Son <smson@ihelpers.co.kr>
* @version 0.9 beta
* @access  public
*/
class RSSReader extends RSSParser {

 var $url;

 var $ErrNum;
 var $ErrMsg;

 var $isCache;

 var $CacheDir;

 var $cacheInterval;
   
 /**
     * Constructor
     *
     * @access public
  * @param string url
  * @param boolean Cache 유무
  * @param int  Cache 유효시간
     * @return void
     */
 function RSSReader($url,$isCache = true,$cacheInterval = 3600,$CacheDir = "./cache"){
  $this->url = $url;
  $this->isCache = $isCache;
  $this->cacheInterval = $cacheInterval;
  $this->CacheDir = $CacheDir;
  parent::RSSParser();
 }

 /**
     * Cache 유무 설정
     *
     * @access public
  * @param boolean Cache 유무
     * @return void
     */
 function setCache($isCache){
  $this->isCache = $isCache;
 }

 /**
     * Cache 디렉토리 설정
     *
     * @access public
  * @param string Cache 디렉토리
     * @return void
     */
 function setCacheDir($CacheDir){
  $this->CacheDir = $CacheDir;
 }

 /**
     * Cache 유효시간 설정
     *
     * @access public
  * @param int  Cache 유효시간
     * @return void
     */
 function setCacheInterval($cacheInterval){
  $this->cacheInterval = $cacheInterval;
 }

 /**
     * RSS 읽기
     *
     * @access private
     * @return boolean
     */
 function Read(){
  $response = $this->_getResponse();
  if($response){
   if(preg_match("/<\?xml.+encoding=\"(.+)\".+\?>/i",$response['body'],$match)){
    if(strtoupper($match[1]) == "UTF-8"){
     $response['body'] = iconv("UTF-8","EUC-KR",$response['body']);
     $response['body'] = str_replace("utf-8", "EUC-KR", $response['body']);
    }
   }
//   echo $response['body'];
   $this->parse($response['body']);
   return true;
  } else {
   return false;
  }
 }

 /**
     * RSS의 URL 또는 Cache 정보
     *
     * @access private
     * @return array response array
     */
 function _getResponse(){

  $aurl = parse_url($this->url);
  $host = $aurl["host"];
  $port = $aurl["port"];
  $path = $aurl["path"];
  if(!empty($aurl["query"])){
   $path = sprintf("%s?%s",$path,$aurl["query"]);
  }
  if(empty($port)){ $port = 80; }
  if(empty($path)){ $path = "/"; }


  if($this->isCache){
   $cache = new URLCache();
   $cache->setInterval($this->cacheInterval);
   $cache->setCacheDir($this->CacheDir);

   $status = $cache->checkCache($this->url);

   if($status == 1){     // 캐쉬정보가 새로운 것이라면
    $response = $cache->get($this->url);
    return $response;
   } else {
    $http = new HTTP($host,$port,10);
    if(!$http->Err){
     if($status == 0){   // 캐쉬정보가 이전것일때
      $response = $cache->get($this->url);
      $http->AddHeader("If-Modified-Since",$response['last-modified']);
      $http->AddHeader("ETag",$response['etag']);
     }
     $http->Get($path);

     if($http->Response['code'] == 302){
      $this->url = $http->Response['location'];
      $response = $this->_getResponse();
      return $response;
     } else {
      if($http->Response['code'] == 304){
      } elseif($http->Response['code'] == 200 || $http->Response['code'] == 304){
       $response = $http->Response;
       $cache->set($this->url,$response);
      } else {
       $this->Error(0,"Response Not Success");
       return false;
      }
      return $response;
     }
    } else {
     $this->Error(0,"Socket Connect Fail");
     return false;
    }
    $http->Close();
   }
  } else {

   $http = new HTTP($host,$port,10);
   if(!$http->Err){
    $buf = $http->Get($path);

    if($http->Response['code'] == 302){
     $this->url = $http->Response['location'];
     $response = $this->_getResponse();
     return $response;
    } else {
     if($http->Response['code'] == 200 || $http->Response['code'] == 304){
      return $http->Response;
     } else {
      $this->Error(0,"Response Not Success");
      return false;
     }
    }
   } else {
    $this->Error(0,"Socket Connect Fail");
    return false;
   }
   $http->Close();
  }
 }

    /**
     * 에러
     *
     * @access public
  * @param int  error number
  * @param string error message
     * @return void
     */
 function Error($errnum,$errmsg){
  $this->ErrNum = $errnum;
  $this->ErrMsg = $errmsg;
 }
}

4. URLCache에 대하여

브라우저가 Cache를 사용하지 않아 매번 접속시마다 변경이 잘 되지 않는 이미지를 다운로드 받아야 한다면 이처럼 웹이 발전되지 않았을 것입니다.

아마도 제작한 RSS Reader에서 Cache를 사용하지 않는다면, 채널을 구독하고 있는 사용자들의 주기적인 접속은 웹서버에 대한 공격으로 변신하여 웹서버 관리자의 얼굴을 하얗게 변하게 할 것입니다. 10,000명의 구독자에 의하여 프로그램이 1분 단위로 채널에 접속하여 정보의 갱신여부만 확인한다고 생각하면 이 만큼의 시스템 자원 낭비가 어디 있겠습니까?

RSS Reader의 경우는 시간이 많이 소요되는 Network 통신을 해야 하기에, 이 문제를 최소화 할 수 있는 Cache의 사용은 RSS Reader 프로그램 개발시에 상당히 중요한 부분이라고 생각합니다. Cache 사용은 "URL Cache를 사용하여 웹을 더욱 빠르게"  강좌와 소스코드에 포함되어 있는 URLCache 클래스를 참고하여 주십시요.

5. Simple RSS Reader

강좌 시작에서 본 간단한 RSS Reader 코드입니다.


include "RSSReader.php";
$url = $_GET["URL"];
$rss = new RSSReader($url,false);
echo "
echo "< style>\n?;
echo " echo " echo "
if(!empty($url)){
$response = $rss->Read();
if($response){
 $channel = $rss->getChannel();
 while (list($key, $value) = each ($channel)) {
  echo "\n?;
 }
  echo "
  $count = 0;
 foreach($rss->getItems() as $items){

  if($count == 0){
   $titles = $items;
   echo "    while (list($key, $value) = each ($titles)) {
    printf("
    }
    echo "    }
   echo "
   while (list($key, $value) = each ($items)) {
   printf("
   }
   echo "
   $count++;
  }
  echo "  }
}
echo "\n?;
?>

[ simplereader.php ]

6. 소스코드
Posted by 1010
98..Etc/Etc...2009. 5. 9. 11:00
반응형
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Untitled Document</title>
<meta http-equiv="Content-Type" content="text/html; charset=euc-kr">
<script language="JavaScript" type="text/JavaScript">
var resultCode = "";
var resultMessage = "";
if (!(resultCode == null || resultCode == "" || resultCode == "0")) {
alert(resultMessage);
}
<!--
function MM_reloadPage(init) { //reloads the window if Nav4 resized
if (init==true) with (navigator) {if ((appName=="Netscape")&&(parseInt(appVersion)==4)) {
document.MM_pgW=innerWidth; document.MM_pgH=innerHeight; onresize=MM_reloadPage; }}
else if (innerWidth!=document.MM_pgW || innerHeight!=document.MM_pgH) location.reload();
}
MM_reloadPage(true);
function reset(fileName){
var form = document.cybpsn;
form.fileName.value = null;
}
// 이 chk는 제목 및 내용에서 초기 안내설명을 지우기 위해 사용된다.
// 클릭하면 내용이 지워지는데 ,초기 클릭 후 내용 작성중 다시 클릭을 하면 작성한 내용이 지워지는것을 방지하기 위해서 만들었다.
var chk = 0;
var chk2 = 0;
// 초기값이 0이다.0일때만 지워지고,그 이후로는 chk값이 증가하므로 reset이 되지 않는다.
function resetTitle(){
if(chk == 0){
var form = document.myform;
form.title.value = "";
form.title.reset;
}
chk++;
}
function resetCont(){
if(chk2 == 0){
var form = document.myform;
form.cyb_cont.value = "";
form.cyb_cont.reset;
}
chk2++;
}
String.prototype.trim = function() {
// Use a regular expression to replace leading and trailing
// spaces with the empty string
return this.replace(/(^\s*)|(\s*$)/g, "");
}
function submitForm(){
var form = document.myform;
if (!check()) {
return;
}
form.target = "_self";
form.action = "/acrc/civilinfo/H_NoticeC.do?command=moveToHNotice02";
form.submit();
}
function check() {
var form = document.myform;
if (form.title.value.trim() == "" || chk == 0) {
alert("제목을 입력하십시오");
form.title.focus();
return false;
}
if(form.cyb_cont.value.trim() == "" || chk2 == 0) {
alert("내용을 입력하십시오");
form.cyb_cont.focus();
return false;
}
if(textareaLength('cyb_cont') > 2000) {
alert("내용은 2000자 까지만 입력하실수 있습니다");
form.cyb_cont.focus();
return false;
}
return true;
}
function textareaLength(element) {
var el = document.getElementById(element);
return el.value.length;
}
function disableForm(){
var form = document.myform;
form.title.disabled = true;
form.cyb_cont.disabled = true;
form.disabled = true;
document.infoYn.prvInfoYn.value = "N";
}
function enableForm(){
var form = document.myform;
form.title.disabled = false;
form.cyb_cont.disabled = false;
form.disabled = false;
document.infoYn.prvInfoYn.value = "Y";
}
//-->
</script>
<link href="/acrc/css/contents_style.css" rel="stylesheet" type="text/css">
</head>
<body onload="">
<!---- 본문 테이블 시작 --->
<table width=663 border="0" cellspacing="0" cellpadding="0">
<tr>
<td height="16" colspan="3"><table width="663" border="0" align="center" cellpadding="10"
cellspacing="1" bgcolor="#CCCCCC">
<tr>
<td bgcolor="#FAFAFA">
<table width="564" border="0" align="center" cellpadding="0" cellspacing="0">
<tr>
<td width="507" class="line">ㆍ사실확인을 위해 <font color="#FF0000">*</font>
는 반드시 입력하여 주시기 바랍니다. <br>
ㆍ접수된 신고 건은 보안을 위해 <strong><font color="#2C74C5">홈페이지에 자료를 남기지 않으므로 수정이나 삭제를 <br>
&nbsp;&nbsp;할 수 없으니 신중하게 작성하여 주십시오.</td>
</tr>
</table>
</td>
</tr>
</table></td>
</tr>
<tr>
<td height="8" colspan="3"> </td>
</tr>
<tr>
<td height="16" colspan="3"> <table width="663" border="0" cellpadding="0" cellspacing="0">
<tr>
<td width="16"><img src="../img/tit_sub_bar01_left.gif" width="16" height="24"></td>
<td width="596" bgcolor="42A9C2"><strong><font color="#FFFFFF">신고접수</font></strong></td>
<td width="51" bgcolor="42A9C2"><div align="right"><img src="../img/tit_sub_bar01_right.gif" width="16" height="24"></div></td>
</tr>
<tr>
<td colspan="3"><img src="../img/blank.gif" width="10" height="4"></td>
</tr>
</table></td>
</tr>
<tr>
<td colspan="3"> <form name="myform" method="post" enctype="multipart/form-data">
<input type="hidden" name="cyb_type_cd" value="04002">
<input type="hidden" name="code_nm" value="신고상담">
<input type="hidden" name="fileCheck" value="fileCheck">
<table width="663" border="0" cellpadding="0" cellspacing="0">
<tr>
<td class="tb_subject"> <table width="663" border="0" cellspacing="0" cellpadding="0">
<tr>
<td width="106" height="27" class="tb_main02">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;제목
<font color="#FF0000">*</font></td>
<td width="566" height="27" class="tb_main"><input name="title" type="text" class="input_text" size="84" value=" * 신고 내용을 잘 나타낼 수 있는 단어로 제목을 작성해 주십시오."
onClick="javaScript:resetTitle();" maxlength="100"></td>
</tr>
<tr>
<td width="106" height="27" class="tb_main02">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;신고내용<font color="#FF0000">
*</font></td>
<td height="27" class="tb_main"><textarea name="cyb_cont" cols="82" rows="15" class="input_text51"
onClick="javaScript:resetCont();" maxlength="2000"> * 부패행위 내용을 6하 원칙에 따라 구체적으로 기술하여 주십시오.
- 누가 : 신고와 관련된 공직자의 소속, 직위, 성명 등을 기재
- 언제 : 부패행위가 발생한 시점을 기재
- 어디서 : 부패행위가 발생한 장소를 기재
- 무엇을ㆍ어떻게 : 혐의대상자의 권한남용,법령위반 행위를 기재
- 왜(~을 위하여) : 자신 또는 제3자가 받은 이익의 내용 등을 기재
</textarea></td>
</tr>
<tr>
<td width="106" height="27" class="tb_main02">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;증거서류1</td>
<td height="27" class="tb_main"> <input type="file" name="formFiles[0]" id="formFiles1" class="input_text" size="68">
</td>
</tr>
<tr>
<td width="106" height="27" class="tb_main02">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;증거서류2</td>
<td height="27" class="tb_main"> <input name="formFiles[1]" type="file" id="formFiles2" class="input_text" size="68">
</td>
</tr>
<tr>
<td width="106" height="27" class="tb_main03">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;증거서류3</td>
<td height="27"> <input name="formFiles[2]" type="file" id="formFiles3" class="input_text" size="68">
</td>
</tr>
</table></td>
</tr>
</table>
</form></td>
</tr>
<tr>
<td width="95" valign="bottom">&nbsp; </td>
<td width="609" valign="bottom"> <img src="../img/btn_next.gif" id="subBtn" width="45" height="20" border="0">
버튼을 누르시고 신고자,혐의대상자 정보를 입력하여 주십시오.</td>
<td width="39"><div align="right">
<p class="btn"><a href="javaScript:submitForm();"><img src="../img/btn_next.gif" id="subBtn" width="45" height="20" border="0"></a></p>
</div></td>
</tr>
<tr>
<td colspan="3">&nbsp;</td>
</tr>
</table>
<!---- 본문 테이블 끝 --->
<script>
parent.pageUrlFrameCalcHeight();
</script>
</body>
</html>
Posted by 1010
02.Oracle/DataBase2009. 5. 6. 13:21
반응형

Skip Headers

오라클 10g 함수
10g Release 1 (10.1)
Go to Documentation Home
HOME
Go to Book List
ORA_home
Go to Table of Contents
연구회
Go to Index
자료실
Go to Master Index
ORA_10G
Go to Feedback page
MAIL

Go to previous page
Previous
Go to next page
Next

SQL Functions

1. 수치함수
2. 문자값을 반환하는 문자 함수
3. NLS 문자 함수
4. 수치값을 반환하는 문자함수
5. 일시 함수
6. 일반적인 비교 함수
7. 변환 함수
8. LARGE OBJECT(LOB) 함수
9. 수집 함수
10. 계층 함수
11. XML 함수
12. 인코딩 함수와 디코딩 함수
13. NULL 함수
14. 환경 함수 와 식별자 함수
15. 집계 함수
16. 분석 함수
17. Object 참조 함수
18. 모델 함수
19. 기타 단일행 함수

일행 함수

단일행 함수는 쿼리 테이블 또는 뷰의 모든 행에 대하여 단일 결과 행을 반환한다. 이 함수는 select lists,where 구문,START WITH, CONNECT BY 구문, HAVING구문을 지정할수 있다.

1. 수치함수

처음메뉴로

함수명 설명
002.ABS  절대값을 반환한다.
003.ACOS

n의 역코사인(arc cosine)값을 반환한다.

007.ASIN  n의 역사인(arc sine)값을 반환한다.
008.ATAN  n의 역탄젠트(arc tangent)값을 반환한다.
009.ATAN2  ATAN2(n,m)은 atan2(n/m)과 같으며, n/m의 역탄젠트(arc tangent)값을 반환한다.
013.BITAND  인수1과 인수2의 비트에 대한 AND연산을 수행하여 정수를 반환한다.
016.CEIL  인수에서 지정한 수치를 올림하여 정수를 구하는 함수이다.
026.COS  n(라디안으로 표현되는 각도)의 코사인값을 반환한다.
027.COSH

n(라디안으로 표현되는 각도)의 쌍곡 코사인값(hyperbolic cosine)을 반환한다

044.EXP  e의 n 제곱 값을 반환한다.
050.FLOOR  지정한 숫자보다 작거나 같은 정수 중에서 최대값을 반환한다
067.LN  입력값의 자연 로그 값을 반환한다.
070.LOG  LOG(m,n)에서 밑을 m으로 한 n의 로그 값을 반환.
078.MOD  n2을 n1으로 나눈 나머지값을 반환.
080.NANVL  입력 값 n2가 Nan(숫치가 아닌)라면, 대체 값 n1을 반환. n2가 NaN이 아니라면, n2를 반환
102.POWER  n2의 n1승 값을 반환.
118.REMAINDER  n2를 n1으로 나눈 나머지를 반환
120.ROUND (number)  n값을 소수점 이하를 integer를 기준으로 반올림하여 반환한다
130.SIGN  n의 부호를 반환.
131.SIN  n의 사인(sine)값을 반환.
132.SINH  n의 쌍곡선 사인(hyperbolic sine)을 반환.
134.SQRT  n의 제곱근을 반환.
159.TAN  n의 사인(tangent)값을 반환.
160.TANH  n의 쌍곡선 탄젠트(hyperbolic tangent)을 반환.
185.TRUNC (number)  인수 n1을 소수점 자리 파라미터 n2 이하를 절삭.
199.WIDTH_BUCKET  동일한 넓이를 갖는 히스토그램을 생성.

 
2. 문자값을 반환하는 문자 함수

처음메뉴로

함수명 설명
018.CHR  10진수 n 에 대응하는 아스키코드를 반환.
022.CONCAT

char1과 char2를 연결하여 반환한다

057.INITCAP  입력 문자열 중에서 각 단어의 첫 글자를 대문자로 나머지는 소문자로 변환하여 반환한다
071.LOWER  입력된 문자열을 소문자로 변환한다
072.LPAD  지정된 자리수 n으로부터 expr1을 채우고,왼편의 남은 공간에 expr1을 채운다.
073.LTRIM  문자열 char 좌측으로부터 set으로 지정된 모든 문자를 제거한다.
081.NCHR  유니코드 문자를 반환.
087.NLS_INITCAP  각 단어의 처음 문자를 대문자로, 나머지 문자를 소문자로 변환하여 char를 반환한다
088.NLS_LOWER  모든 문자를 소문자로 변환하여 반환한다.
089.NLSSORT

입력 문자열을 소팅하여 스트링을 반환한다.

090.NLS_UPPER  입력 문자열을 모두 대문자로 변환한 문자열을 반환한다.
115.REGEXP_REPLACE   지정한 정규 표현을 만족하는 부분을, 지정한 다른 문자열로 치환합니다.
116.REGEXP_SUBSTR   지정한 정규 표현을 만족하는 부분 문자열을 반환.
119.REPLACE   파라미터로 주어지는 첫번째 문자열에서, 두번째 문자열을 모두 세번째 문자열로 바꾼 후 결과를 반환한다.
125.RPAD  인수 expr1 오른편으로 인수 expr2로 지정한 문자를 길이 필요에 따라 반복하여 n만큼 붙여준다
126.RTRIM  인수 char의 오른쪽 끝에서 부터 set으로 지정된 모든 문자를 제거한다.
133.SOUNDEX  char의 음성 표현을 가지는 문자열을 반환.
147.SUBSTR  문자열 Char에서 position 문자 위치로부터 substring_length 문자 길이만큼 문자열을 추출하여 반환.
181.TRANSLATE  from_string에서 각 문자를 to_string안의 대응하는 문자로 치환하여 expr을 반환.
183.TREAT  인수의 선언형을 변경.
184.TRIM  문자열부터 선행 또는 후행(양쪽)문자를 제거.
191.UPPER  모든 문자를 대문자로 변환.

3. NLS 문자 함수

처음메뉴로

함수명 설명
084.NLS_CHARSET_DECL_LEN  NCHAR열의 선언된 폭을 반환.
085.NLS_CHARSET_ID  문제셋 이름에 상응하는 ID번호를 반환.
086.NLS_CHARSET_NAME  ID번호 number에 상응하는 문자 세트의 이름을 반환.

4. 수치값을 반환하는 문자함수

처음메뉴로

함수명 설명
005.ASCII  주어진 char의 첫 문자의 아스키 값에 상응하는 10진수값을 반환한다.
058.INSTR  문자열중에서 지정한 문자가 처음 나타나는 위치를 숫자로 반환.
066.LENGTH  인수 char의 길이를 반환한다
114.REGEXP_INSTR   지정한 조건(정규 표현)을 만족하는 부분의 최초의 위치(무슨 문자인지)를 반환.

 
5. 일시 함수

처음메뉴로

함수명 설명
004.ADD_MONTHS  일자 date에 특정 개월수 integer를 더한 값을 반환한다
032.CURRENT_DATE

현재 세션의 날짜 정보를 Date 데이터 형으로 반환한다.

033.CURRENT_TIMESTAMP  현재 session의 날짜와 시간 정보를 반환한다
035.DBTIMEZONE  데이터 베이스 time zone의 값을 반환한다
045.EXTRACT (datetime)  특정 날짜,시간 값이나 날짜 값 표현식으로부터 지정된 날짜 영역의 값을 추출하여 반환한다
051.FROM_TZ  timestamp 데이터형과 time zone데이터 형을 TIMESTAMP WITH TIME ZONE 데이터형으로 변환.
062.LAST_DAY  해당 날짜가 속한 달의 마지막 날짜를 반환한다.
069.LOCALTIMESTAMP  timestamp의 현재 날짜와 시각을 출력한다.
079.MONTHS_BETWEEN

일자 date1과 date2 사이의 월을 계산한다

082.NEW_TIME  date,zone1시간대를 zone2 시간대로 출력.
083.NEXT_DAY  해당일을 기준으로 명시된 요일의 다음 날짜를 변환.
093.NUMTODSINTERVAL  n을 INTERVAL DAY TO SECOND 문자로 변경한다.
094.NUMTOYMINTERVAL  n을 INTERVAL YEAR TO MONTH문자로 변경한다
121.ROUND (date)  포맷 모델 fmt에 의해 지정한 단위로 반올림된 날짜를 반환한다
128.SESSIONTIMEZONE  현재 세션의 시간대역(time zone)을 반영한다
152.SYS_EXTRACT_UTC  협정 세계시간 UTC (Coordinated Universal Time—formerly Greenwich Mean Time)을 반환
157.SYSDATE  데이터 베이스가 있는 OS의 일자와 시간을 반환한다
158.SYSTIMESTAMP  시스템의 날짜를 반환한다
165.TO_CHAR (datetime)   사용자가 지정한 폼을 갖는 varchar2 형식의 데이터로 변환한다
169.TO_DSINTERVAL  INTERVAR DAY TO SECOND값으로 변환한다.
178.TO_TIMESTAMP  TIMESTAMP 데이터형의 값으로 변환한다.
179.TO_TIMESTAMP_TZ  TIMESTAMP WITH TIME ZONE 데이터형으로 변환한다.
180.TO_YMINTERVAL  INTERVAL YEAR TO MONTH 형태로 변경한다
186.TRUNC (date)    날짜를 년,월,일을 기준으로 반올림하거나 절삭한다.
187.TZ_OFFSET  문장이 실행된 일자에 근거한 인수에 상응하는 time zone offset을 반환한다
 
6. 일반적인 비교 함수

처음메뉴로

함수명 설명
052.GREATEST  하나 이상의 인수중에서 가장 큰 값을 반환.
065.LEAST  인수 EXPR의 리스트 중에서 가장 작은 값을 반환.

7. 변환 함수

처음메뉴로

함수명 설명
006.ASCIISTR  주어진 문자열의 아스키 문자열을 반환.
012.BIN_TO_NUM

비트(2진수) 벡터를 동등한 수치(10진수)로 변환.

015.CAST    데이터 형식이나 collection 형식을 다른 데이터 형식이나 collection 형식으로변환.
017.CHARTOROWID  CHAR, VARCHAR2, NCHAR, or NVARCHAR2 데이터형태의 값으로부터 ROWID형으로 변환.
021.COMPOSE  완전한 정규화된 형태의 유니코드를 반환.
023.CONVERT  문자세트를 다른 문자세트로 문자열을 변환.
037.DECOMPOSE  입력과 같은 문자 세트로 분해후의 UNICODE 문자열을 반환.
056.HEXTORAW  16진수를 raw값으로 변환.
093.NUMTODSINTERVAL

n을 INTERVAL DAY TO SECOND 문자로 변경.

094.NUMTOYMINTERVAL  n을 INTERVAL YEAR TO MONTH문자로 변경한다.
110.RAWTOHEX  RAW을 16진수의 문자로 변환.
111.RAWTONHEX  RAW을 NVARCHAR2 형태의 16진수로 변환.
123.ROWIDTOCHAR  rowid 값을 VARCHAR2형식으로 변환.
124.ROWIDTONCHAR  rowid값을 NVARCHAR2형식으로 변환.
127.SCN_TO_TIMESTAMP  시스템 변경 번호(SCN)로 평가되는 수치를 인수로 취하여, SCN과 관련된 가까운 timestamp를 반환.
161.TIMESTAMP_TO_SCN  timestamp와 관련된 시스템 변경 번호(system change number,SCN)을 반환.
162.TO_BINARY_DOUBLE  배정밀도 부동소수점을 반환.
163.TO_BINARY_FLOAT  단순정밀도(single-precision) 부동 소수점수(floating-point number)를 반환.
164.TO_CHAR (character)  데이터 베이스 문자 세트로 변환.
165.TO_CHAR (datetime)  지정된 포맷의 VARCHAR2 데이터 타입의 값으로 변환.
166.TO_CHAR (number)  VARCHAR2 데이터형의 값으로 변환.
167.TO_CLOB  NCLOB값을 CLOB값으로 변환.
168.TO_DATE  char을 날짜형 데이터 타입값으로 변환.
169.TO_DSINTERVAL  INTERVAR DAY TO SECOND값으로 변환.
170.TO_LOB  LONG또는 LONG ROW값을 LOB값으로 변환.
171.TO_MULTI_BYTE  multibyte 문자를 상응하는 single-byte 문자로 변환한 문자를 반환.
172.TO_NCHAR (character)  문자열,CLOB,NCLOB 값을 각국 문자 세트로 변환.
173.TO_NCHAR (datetime)  national character set으로 변환.
174.TO_NCHAR (number)  n을 national character set으로 변환.
175.TO_NCLOB  CLOB값을 NCLOB값으로 변환.
176.TO_NUMBER  expr을 NUMBER 데이터형의 값으로 변환.
177.TO_SINGLE_BYTE  multibyte문자를 그에 상응하는 single-byte문자로 변환하여 char을 반환.
178.TO_TIMESTAMP  CHAR,VARCHAR2,NCHAR,NVARCHAR2 데이터형의 char을 TIMESTAMP 데이터형의 값으로 변환.
179.TO_TIMESTAMP_TZ  CHAR,VARCHAR2,NCHAR,NVARCHAR2데이터형의 char을 TIMESTAMP WITH TIME ZONE 데이터형으로 변환.
180.TO_YMINTERVAL  CHAR,VARCHAR2,NCHAR,NVARCHAR2 데이터형의 문자열을 INTERVAL YEAR TO MONTH 형태로 변경
182.TRANSLATE ... USING  char을 데이터 베이스 문자세트와 각국어 문자 센트사이의 변환에 대한 지정된 문자 세트로 변경.
189.UNISTR  텍스트 문자열을 인수로 취하고, 각국어 문자 세트로 반환.
 
8. LARGE OBJECT(LOB) 함수

처음메뉴로

함수명 설명
011.BFILENAME  서버 파일 시스템의 물리 LOB 바이너리 파일과 연관된 BFILE locator를 반환.
042.EMPTY_BLOB, EMPTY_CLOB  LOB 변수를 초기화하기 위하여 쓰이거나, 또는 INSERT 문이나 UPDATE 문에서 empty LOB 위치를 반환.

9. 수집 함수

처음메뉴로

함수명 설명
014.CARDINALITY  nested table에서 원소의 수를 반환.
020.COLLECT  선택된 행으로부터 입력된 형태의 중첩 테이블을 생성.
103.POWERMULTISET  입력된 중첩(nested)테이블의 공백이 아닌 모든 부분집합(submultisets)을 소유한 중첩 테이블의 중첩된 테이블을 반환.
104.POWERMULTISET_BY_CARDINALITY  중첩 테이블과 cardinality(주어진 수학적 집합에서 요소들의 개수)를 취해서, 지정한 카디나리트의 중첩 테이블의 모든 비공백 부분집합(submultisets이라고 불리는)을 소유하는 중첩 테이블의 중첩테이블을 반환.
129.SET  중첩 테이블에서 중복을 배제하여 반환.

10. 계층 함수

처음메뉴로

함수명 설명
149.SYS_CONNECT_BY_PATH  루트로 부터 node로 열의 값 Path를 반환.

11. XML 함수

처음메뉴로

함수명 설명
039.DEPTH  상관 변수를 가지는 UNDER_PATH조건에 의해 지정된 PATH에서 레벨의 수를 반환.
043.EXISTSNODE  node의 존재여부를 확인하여 그 결과를 반환.
046.EXTRACT (XML)

XML 플래그먼트(fragment)를 포함한 XMLType 인스턴스를 반환.

047.EXTRACTVALUE  node의 스칼라 값을 반환.
098.PATH  지정된 자원에서 상대적인 경로를 반환.
151.SYS_DBURIGEN  특정 열 또는 행 오브젝트에 대한 DBURIType 데이터 타입의 URL을 생성.
155.SYS_XMLAGG  입력 받은 모든 문서를 하나의 XML문서를 통합.
156.SYS_XMLGEN  스칼라값,object type,xml type 인스턴스를 XML문서로 변형.
200.XMLAGG  XML fragment(조각)의 집합체를 취해서, 집계된 XML 문서를 반환.

 GROUP BY 질의에서 XML 데이타를 그룹으로 분류 또는 집계하는 함수.

201.XMLCOLATTVAL  XML 단편(fragment)을 생성하고, 각각의 XML 단편(fragment)이 속성 name을 포함한 name열을 가지는 결과 XML으로 확장.
202.XMLCONCAT  둘 이상의 XML 값을 연결하는 함수.
203.XMLELEMENT  XMLType 타입의 instance를 반환.

 관계형 값을 XML 요소로 변형시키는 함수.

204.XMLFOREST  각 인수의 파라미터를 XML로 변환하고, 변환된 인수를 연결한 XML 단편(fragment)을 반환.

 관계형 값 목록으로부터 XML 요소의 목록(일명: '포리스트(forest)')을 생성하는 함수.

205.XMLSEQUENCE  XMLType에 있는 top-level 노드의 varray를 반환.

 커서의 각 행에 대하여 XMLSequence 형태로써 XML문서를 반환.

206.XMLTRANSFORM  스타일 쉬트를 인스턴스로 적용하고, XMLType를 반환.
 
12. 인코딩 함수와 디코딩 함수

처음메뉴로

함수명 설명
036.DECODE  일반적인 프로그래밍 언어의 IF문을 SQL 문자 또는 PL/SQL안으로 끌여들여 사용하기 위하여 만들어진 오라클함수.
041.DUMP  지정한 데이터의 위치와 길이 등을 지정한 형식으로 반환.
097.ORA_HASH  주어진 표현에 대한 해쉬 값을 계산하는 함수.
198.VSIZE  expr의 내부 표현에서 바이트의 수를 반환.

13. NULL 함수

처음메뉴로

함수명 설명
019.COALESCE  나열된 값을 순차적으로 체크하여 NULL이 아닌 첫번째 인수를 반환.
068.LNNVL  조건의 한쪽 또는 양쪽 연산자가 NULL이 존재할 경우에, 조건문을 평가하기 위한 방법을 제공.
092.NULLIF  expr1과 expr2가 같으면, NULL값을 반환.
095.NVL  쿼리의 결과에서 NULL(공백으로 반환)값을 치환.
096.NVL2  지정한 표현이 NULL인지 여부에 근거하여 쿼리의 반환될 값을 판단할수 있다. expr1이 NULL이 아니라면, NVL2는 expr2를 반환한다. 만약 expr1인 NULL이라면, NVL2는 expr3을 반환.

14. 환경 함수 와 식별자 함수

처음메뉴로

함수명 설명
150.SYS_CONTEXT  문맥 namespace와 관련된 parameter의 값을 반환.
153.SYS_GUID  16바이트로 구성된 고유전역식별자(globally unique identifier,RAW 값)을 생성하여 반환.
154.SYS_TYPEID  피연산자(operand)의 대부분 지정한 형태의 typeid를 반환.
188.UID  세션 사용자의 유일한 식별하는 정수를 반환.(로그인 유저)
192.USER  VARCHAR2 형태를 가지는 세션 사용자(로그인 유저)의 이름을 반환.
193.USERENV  현재 세션에 대한 정보를 반환.

 
15. 집계 함수

처음메뉴로

Aggregate functions return a single result row based on groups of rows, rather than on single rows. Aggregate functions can appear in select lists and in ORDER BY and HAVING clauses. They are commonly used with the GROUP BY clause in a SELECT statement, where Oracle Database divides the rows of a queried table or view into groups. In a query containing a GROUP BY clause, the elements of the select list can be aggregate functions, GROUP BY expressions, constants, or expressions involving one of these. Oracle applies the aggregate functions to each group of rows and returns a single result row for each group.

If you omit the GROUP BY clause, then Oracle applies aggregate functions in the select list to all the rows in the queried table or view. You use aggregate functions in the HAVING clause to eliminate groups from the output based on the results of the aggregate functions, rather than on the values of the individual rows of the queried table or view.


Many (but not all) aggregate functions that take a single argument accept these clauses:

  • DISTINCT causes an aggregate function to consider only distinct values of the argument expression.

  • ALL causes an aggregate function to consider all values, including all duplicates.

For example, the DISTINCT average of 1, 1, 1, and 3 is 2. The ALL average is 1.5. If you specify neither, then the default is ALL.

All aggregate functions except COUNT(*) and GROUPING ignore nulls. You can use the NVL function in the argument to an aggregate function to substitute a value for a null. COUNT never returns null, but returns either a number or zero. For all the remaining aggregate functions, if the data set contains no rows, or contains only rows with nulls as arguments to the aggregate function, then the function returns null.

You can nest aggregate functions. For example, the following example calculates the average of the maximum salaries of all the departments in the sample schema hr:

SELECT AVG(MAX(salary)) FROM employees GROUP BY department_id;

AVG(MAX(SALARY))
----------------
           10925

This calculation evaluates the inner aggregate (MAX(salary)) for each group defined by the GROUP BY clause (department_id), and aggregates the results again.

The aggregate functions are:

함수명 설명
010.AVG  지정된 컬럼에 대한 조건을 만족하는 행중에서 Null을 제외한 평균을 반환.
020.COLLECT  선택된 행으로부터 입력된 형태의 중첩 테이블을 생성.
024.CORR  수치 쌍에 대한 상관 계수를 반환.
025.CORR_*  (CORR 참조) Pearson's 상관계수를 계산.
028.COUNT  쿼리에 의해 반환된 행의 수를 반환.
029.COVAR_POP  number조합의 세트의 모집단 공분산을 반환.
030.COVAR_SAMP  number쌍의 세트의 표본 공분산을 반환.
031.CUME_DIST  값의 그룹에 있는 값의 누적 분포치를 계산.
038.DENSE_RANK  ORDER BY절에 사용된 컬럼이나 표현식에 대하여 순위를 부여하는데 RANK()와 달리 동일 순위 다음의 순위는 동일 순위의 수와 상관없이 1 증가된 값을 돌려준다
048.FIRST  주어진 소트 지정에 대해서 FIRST 또는 LAST로서 순위를 주어서 행의 세트로부터 값의 세트에 운영하는 집계와 분석 함수.
053.GROUP_ID  지정된 GROUP BY 결과로부터 중복된 그룹을 구별.
054.GROUPING  ROLLUP이나 CUBE 연산자와 함께 사용하여 GROUPING 함수에 기술된 컬럼이 그룹핑 시 즉, ROLLUP이나 CUBE 연산시 사용이 되었는지를 보여 주는 함수.
055.GROUPING_ID  행과 관련되는 GROUPING 비트 벡터에 대응되는 수치를 반환.
061.LAST  행을 서열화 시켜서 마지막 행을 추출.
075.MAX  인수중에서 최대값을 반환.
076.MEDIAN  중앙값 또는 값의 정렬후에 중앙값이 보간된 값을 반환.
077.MIN  인수중에서 최소값을 반환.
099.PERCENT_RANK  그룹 수에 대한 값의 순위 퍼센트를 반환.
100.PERCENTILE_CONT  연속된 분포 모델을 가정한 역 분포 함수(inverse distribution function).
101.PERCENTILE_DISC  이산 분포 모형을 가정하는 역 분포 함수.
108.RANK  값의 그룹에서 값의 순위를 계산.
117.REGR_ (Linear Regression) Functions  선형회귀함수는 정규 최소 제곱 회귀 선상을 수치 쌍의 세트에 적합.
135.STATS_BINOMIAL_TEST  단지 두개의 유효한 값이 존재하는 이분 변수(두개의 배타적인 값을 가지는 변수)에 대해서 이용되는 정확 확률 테스트.
136.STATS_CROSSTAB  교차분석(crosstab)은 두개의 명목 변수를 분석하는 방법.
137.STATS_F_TEST  STATS_F_TEST함수는 두개의 분산이 유의한 차가 있는지 테스트.
138.STATS_KS_TEST  두개의 표본이 같은 모집단에 속하고 있는지 또는 같은 분포를 가지는 모집단에 속하고 있는지 테스트 하는 Kolmogorov-Smirnov함수.
139.STATS_MODE  가장 큰 빈도를 가지는 값을 반환.
140.STATS_MW_TEST  A Mann Whitney test는 2개의 독립 표본을 비교.
141.STATS_ONE_WAY_ANOVA  일원분산분석 함수(STATS_ONE_WAY_ANOVA)는 분산의 다른 2개 추정치 비교에 의해 통계적 유의성에 대한 평균(그룹 또는 변수에 대한)의 유의한 차를 검증.
142.STATS_T_TEST_*   t검정에서는, 평균치의 차이의 유의성을 측정.
143.STATS_WSR_TEST  대응쌍표본의 윌콕스 부호 순위 검증을 수행하며,표본간의 차이가 zero로부터 유의한 차이가 있는지 검정.
144.STDDEV  Number의 조합인 expr의 표본표준편차를 반환.
145.STDDEV_POP  모집단 표준 편차를 계산하고, 모집단 분산의 제곱근값을 반환.
146.STDDEV_SAMP  누적 표본 표준편차를 계산하고, 표본 분산의 제곱근값을 반환.
148.SUM  expr의 값의 합을 반환.
195.VAR_POP  Null값들을 제거한후에 Number 세트의 모집단 분산을 반환.
196.VAR_SAMP  null들을 제거한후에 number의 세트의 표본분산을 반환.
197.VARIANCE  expr의 분산을 반환.

 
16. 분석 함수

처음메뉴로

Analytic functions compute an aggregate value based on a group of rows. They differ from aggregate functions in that they return multiple rows for each group. The group of rows is called a window and is defined by the analytic_clause. For each row, a sliding window of rows is defined. The window determines the range of rows used to perform the calculations for the current row. Window sizes can be based on either a physical number of rows or a logical interval such as time.

Analytic functions are the last set of operations performed in a query except for the final ORDER BY clause. All joins and all WHERE, GROUP BY, and HAVING clauses are completed before the analytic functions are processed. Therefore, analytic functions can appear only in the select list or ORDER BY clause.

Analytic functions are commonly used to compute cumulative, moving, centered, and reporting aggregates.


analytic_function::=
Description of analytic_function.gif follows
Description of the illustration analytic_function.gif


analytic_clause::=
Description of analytic_clause.gif follows
Description of the illustration analytic_clause.gif


query_partition_clause::=
Description of query_partition_clause.gif follows
Description of the illustration query_partition_clause.gif


order_by_clause::=
Description of order_by_clause.gif follows
Description of the illustration order_by_clause.gif


windowing_clause ::=
Description of windowing_clause.gif follows
Description of the illustration windowing_clause.gif

The semantics of this syntax are discussed in the sections that follow.


analytic_function

Specify the name of an analytic function (see the listing of analytic functions following this discussion of semantics).


arguments

Analytic functions take 0 to 3 arguments. The arguments can be any numeric datatype or any nonnumeric datatype that can be implicitly converted to a numeric datatype. Oracle determines the argument with the highest numeric precedence and implicitly converts the remaining arguments to that datatype. The return type is also that datatype, unless otherwise noted for an individual function.



analytic_clause

Use OVER analytic_clause to indicate that the function operates on a query result set. That is, it is computed after the FROM, WHERE, GROUP BY, and HAVING clauses. You can specify analytic functions with this clause in the select list or ORDER BY clause. To filter the results of a query based on an analytic function, nest these functions within the parent query, and then filter the results of the nested subquery.

Notes on the analytic_clause:
  • You cannot specify any analytic function in any part of the analytic_clause. That is, you cannot nest analytic functions. However, you can specify an analytic function in a subquery and compute another analytic function over it.

  • You can specify OVER analytic_clause with user-defined analytic functions as well as built-in analytic functions. See CREATE FUNCTION .


query_partition_clause

Use the PARTITION BY clause to partition the query result set into groups based on one or more value_expr. If you omit this clause, then the function treats all rows of the query result set as a single group.

To use the query_partition_clause in an analytic function, use the upper branch of the syntax (without parentheses). To use this clause in a model query (in the model_column_clauses) or a partitioned outer join (in the outer_join_clause), use the lower branch of the syntax (with parentheses).

You can specify multiple analytic functions in the same query, each with the same or different PARTITION BY keys.

If the objects being queried have the parallel attribute, and if you specify an analytic function with the query_partition_clause, then the function computations are parallelized as well.

Valid values of value_expr are constants, columns, nonanalytic functions, function expressions, or expressions involving any of these.


order_by_clause

Use the order_by_clause to specify how data is ordered within a partition. For all analytic functions except PERCENTILE_CONT and PERCENTILE_DISC (which take only a single key), you can order the values in a partition on multiple keys, each defined by a value_expr and each qualified by an ordering sequence.

Within each function, you can specify multiple ordering expressions. Doing so is especially useful when using functions that rank values, because the second expression can resolve ties between identical values for the first expression.

Whenever the order_by_clause results in identical values for multiple rows, the function returns the same result for each of those rows. Please refer to the analytic example for SUM for an illustration of this behavior.


Restriction on the ORDER BY Clause

When used in an analytic function, the order_by_clause must take an expression (expr). The SIBLINGS keyword is not valid (it is relevant only in hierarchical queries). Position (position) and column aliases (c_alias) are also invalid. Otherwise this order_by_clause is the same as that used to order the overall query or subquery.


ASC | DESC

Specify the ordering sequence (ascending or descending). ASC is the default.


NULLS FIRST | NULLS LAST

Specify whether returned rows containing nulls should appear first or last in the ordering sequence.

NULLS LAST is the default for ascending order, and NULLS FIRST is the default for descending order.

Analytic functions always operate on rows in the order specified in the order_by_clause of the function. However, the order_by_clause of the function does not guarantee the order of the result. Use the order_by_clause of the query to guarantee the final result ordering.



windowing_clause

Some analytic functions allow the windowing_clause. In the listing of analytic functions at the end of this section, the functions that allow the windowing_clause are followed by an asterisk (*).


ROWS | RANGE

These keywords define for each row a window (a physical or logical set of rows) used for calculating the function result. The function is then applied to all the rows in the window. The window moves through the query result set or partition from top to bottom.

  • ROWS specifies the window in physical units (rows).

  • RANGE specifies the window as a logical offset.

You cannot specify this clause unless you have specified the order_by_clause.

The value returned by an analytic function with a logical offset is always deterministic. However, the value returned by an analytic function with a physical offset may produce nondeterministic results unless the ordering expression results in a unique ordering. You may have to specify multiple columns in the order_by_clause to achieve this unique ordering.


BETWEEN ... AND

Use the BETWEEN ... AND clause to specify a start point and end point for the window. The first expression (before AND) defines the start point and the second expression (after AND) defines the end point.

If you omit BETWEEN and specify only one end point, then Oracle considers it the start point, and the end point defaults to the current row.


UNBOUNDED PRECEDING

Specify UNBOUNDED PRECEDING to indicate that the window starts at the first row of the partition. This is the start point specification and cannot be used as an end point specification.


UNBOUNDED FOLLOWING

Specify UNBOUNDED FOLLOWING to indicate that the window ends at the last row of the partition. This is the end point specification and cannot be used as a start point specification.


CURRENT ROW

As a start point, CURRENT ROW specifies that the window begins at the current row or value (depending on whether you have specified ROW or RANGE, respectively). In this case the end point cannot be value_expr PRECEDING.

As an end point, CURRENT ROW specifies that the window ends at the current row or value (depending on whether you have specified ROW or RANGE, respectively). In this case the start point cannot be value_expr FOLLOWING.


value_expr PRECEDING or value_expr FOLLOWING

For RANGE or ROW:

  • If value_expr FOLLOWING is the start point, then the end point must be value_expr FOLLOWING.

  • If value_expr PRECEDING is the end point, then the start point must be value_expr PRECEDING.

If you are defining a logical window defined by an interval of time in numeric format, then you may need to use conversion functions.


If you specified ROWS:

  • value_expr is a physical offset. It must be a constant or expression and must evaluate to a positive numeric value.

  • If value_expr is part of the start point, then it must evaluate to a row before the end point.

If you specified RANGE:

  • value_expr is a logical offset. It must be a constant or expression that evaluates to a positive numeric value or an interval literal. Please refer to "Literals " for information on interval literals.

  • You can specify only one expression in the order_by_clause

  • If value_expr evaluates to a numeric value, then the ORDER BY expr must be a numeric or DATE datatype.

  • If value_expr evaluates to an interval value, then the ORDER BY expr must be a DATE datatype.

If you omit the windowing_clause entirely, then the default is RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW.

Analytic functions are commonly used in data warehousing environments. In the list of analytic functions that follows, functions followed by an asterisk (*) allow the full syntax, including the windowing_clause.

함수명 설명
010.AVG *  지정된 컬럼에 대한 조건을 만족하는 행중에서 Null을 제외한 평균을 반환.
024.CORR *  수치 쌍에 대한 상관 계수를 반환.
028.COUNT *  쿼리에 의해 반환된 행의 수를 반환.
029.COVAR_POP *  number조합의 세트의 모집단 공분산을 반환.
030.COVAR_SAMP *  number쌍의 세트의 표본 공분산을 반환.
031.CUME_DIST  값의 그룹에 있는 값의 누적 분포치를 계산.
038.DENSE_RANK  ORDER BY절에 사용된 컬럼이나 표현식에 대하여 순위를 부여하는데 RANK()와 달리 동일 순위 다음의 순위는 동일 순위의 수와 상관없이 1 증가된 값을 돌려준다
048.FIRST  주어진 소트 지정에 대해서 FIRST 또는 LAST로서 순위를 주어서 행의 세트로부터 값의 세트에 운영하는 집계와 분석 함수.
049.FIRST_VALUE *  값의 정렬된 세트에서 첫번째 값을 반환.
060.LAG   현재 행을 기준으로 이전 값을 참조하는 함수.
061.LAST  행을 서열화 시켜서 마지막 행을 추출.
063.LAST_VALUE *  윈도우에서 정렬된 값중에서 마지막 값을 반환.
064.LEAD   현재 행을 기준으로 이후의 값을 참조하는 함수.
075.MAX *  인수중에서 최대값을 반환.
077.MIN *  인수중에서 최소값을 반환.
091.NTILE  순서화된 데이터를 expr에 의해 지정된 bucket의 수로 분한하여, 각 행을 적절한 bucket 번호를 할당.

 출력 결과를 사용자가 지정한 그룹 수로 나누어 출력하는 함수.

099.PERCENT_RANK  그룹 수에 대한 값의 순위 퍼센트를 반환.
100.PERCENTILE_CONT  연속된 분포 모델을 가정한 역 분포 함수(inverse distribution function).
101.PERCENTILE_DISC  이산 분포 모형을 가정하는 역 분포 함수.
108.RANK  값의 그룹에서 값의 순위를 계산.
109.RATIO_TO_REPORT  값의 세트의 합에 대한 값의 비율을 계산.
117.REGR_ (Linear Regression) Functions *  선형회귀함수는 정규 최소 제곱 회귀 선상을 수치 쌍의 세트에 적합.
122.ROW_NUMBER   분할별로 정렬된 결과에 대해 순위를 부여하는 기능.

 1로 시작하는 order_by_clause에서 지정된 행의 순위 순서로, 적용되는 각 행에 unique 순서를 할당.

144.STDDEV *  Number의 조합인 expr의 표본표준편차를 반환.
145.STDDEV_POP *  모집단 표준 편차를 계산하고, 모집단 분산의 제곱근값을 반환.
146.STDDEV_SAMP *  누적 표본 표준편차를 계산하고, 표본 분산의 제곱근값을 반환.
148.SUM *  expr의 값의 합을 반환.
195.VAR_POP *  Null값들을 제거한후에 Number 세트의 모집단 분산을 반환.
196.VAR_SAMP *  null들을 제거한후에 number의 세트의 표본분산을 반환.
197.VARIANCE *  expr의 분산을 반환.
 
17. Object 참조 함수

처음메뉴로

함수명 설명
040.DEREF  인수 expr의 오브젝트 참조를 반환.
074.MAKE_REF  object 인식자가 주 키로 근거하고 있는 object 테이블에서 object view의 행 또는 object 표의 행에 대한 REF를 생성.
112.REF  인수로써 오브젝트 테이블 또는 오브젝트 뷰의 행과 연관된 상관 변수(테이블 별명)를 취한다
113.REFTOHEX  인수 expr을 16진수로 변환.
194.VALUE  object 테이블에 저장된 object instance를 반환.

18. 모델 함수

처음메뉴로

함수명 설명
034.CV  포뮬러의 좌측 항에 정의된 multi-cell reference를 우측 항으로 복사하는 기능을 제공.

 우측 항 계산을 위해 좌측 항의 값 이용하기.

059.ITERATION_NUMBER  델 규칙에 따라 완료된 반복을 나타내는 정수를 반환.
105.PRESENTNNV  cell_reference가 존재하고 NULL이 아닌 경우, model_clause이 실행되기 전에 expr1을 반환.
106.PRESENTV  cell_reference가 존재할때 expr1을 반환한다. 그 이외에는 expr2를 반환.
107.PREVIOUS  각 iteration의 초기에 cell_reference의 값을 반환.

19. 기타 단일행 함수

처음메뉴로

함수명 설명
152.SYS_EXTRACT_UTC  협정 세계시간 UTC (Coordinated Universal Time—formerly Greenwich Mean Time)을 추출.
190.UPDATEXML  XMLType인스턴스와 XPath값 쌍을 취하고, 업데이트된 값을 가지는 XMLType 인스턴스를 반환.


 
Posted by 1010
98..Etc/Resin2009. 5. 6. 10:55
반응형

resin 4.0 documentation


    Overview

    Resin is a high-performance, scalable Java/PHP application server. We release two versions of Resin: an open source version under the GPL, and a professional version with enhanced performance, clustering, and reliability features.

    Quick Start

    You can start using Resin by simply expanding the archive, and starting Resin with a Java command line.

    Installation

    Resin Web Server
    Apache
    IIS
    Plugin Dispatch
    Linux Boot

    Command-Line

    While most configuration options have been made available in resin.xml, this section describes some common command-line options.

    Configuration

    Resin is a powerful, customizable application server. This section discusses how to configure Resin.

    <cluster> - clustering, caching, load-balancing, and distributed sessions
    <database> - connection pool and database driver configuration
    <host> - virtual hosts
    Ports - HTTP, SSL, addresses and ports
    <resin> - top-level configuration container
    Resource tags - database, classloader, jms, bean, and IoC
    Rewrite - URL rewriting, dispatching, and load-balancing
    <server> - threading, keepalive, timeout, and jvm arguments
    session - servlet sessions
    variables - configuration variables
    <web-app> - servlet and filter configuration
    Index - alphabetical list of tags
    Relax Schema
    Environment
    Resin J2EE
    Resin web.xml
    resin.conf
    J2EE Common
    J2EE web.xml

    Guide: Admin

    Overview and introduction to Resin from an administration perspective.

    Admin

    The /resin-admin web-app provides an administration overview of a Resin server. Resin-Pro users can obtain information across the entire cluster, profile a running Resin instance, and obtain thread dumps and heap dumps.

    All Resin users should familiarize themselves with the thread dump, profile, and heap capabilities.

    Amber

    Amber is Resin's implementation of the JPA 1.0 persistence specification, focusing on simplicity and quality.

    BAM

    BAM (Brokered Agent Messaging) is a simplified messaging API designed around federated, addressable services, model-based messages, and supports both message and rpc-style communication. As an abstraction of the Jabber protocol, it supports instant messaging, queued (SEDA) services, publish/subscribe, interactive games, and event notification applications. BAM supports multiple protocols including local messaging, Hessian protocol and XMPP (Jabber).

    Caching

    Server caching can speed dynamic pages to near-static speeds. When pages created by database queries only change every 15 minutes, e.g. CNN or Wikipedia or Slashdot, Resin can cache the results and serve them like static pages. Because Resin's caching only depends on HTTP headers, it will work for any JSPs, servlet or PHP page.response.

    Resin's caching operates like a proxy cache, looking at HTTP headers to compare hash codes or digests or simply caching for a static amount of time. Since the proxy cache follows the HTTP standards, applications like Mediawiki will automatically see dramatic performance improvement with no extra work. You can even cache REST-style GET requests.

    Because the cache supports advanced headers like "Vary", it can cache different versions of the page depending on the browser's capabilities. Gzip-enabled browsers will get the cached compressed page while more primitive browsers will see the plan page. With "Vary: Cookie", you can return a cached page for anonymous users, and still return a custom page for logged-in users.

    Clustering

    As traffic increases beyond a single server, Resin's clustering lets you add new machines to handle the load and simultaneously improves uptime and reliability by failing over requests from a downed or maintenance server to a backup transparently.

    Database

    Resin provides a robust and tested connection pool that is used to obtain connections to databases.

    Deployment

    Resin provides a wide variety of custom packaging and deployment options.

    EJB 3.0

    Resin's EJB support is integrated with Resin IoC. This integration means plain Java beans can use EJB annotations and interception, EJBs can use Resin IoC annotations, and both kinds of beans can be configured directly from the resin-web.xml or discovered by classpath scanning.

    Embedding

    Resin's embedding API lets developers embed Resin as the web interface for an existing application, simplifies unit testing, and improves IDE integration capabilities. The ResinEmbed JavaDoc gives more details.

    Filters

    Hessian

    Hessian and Burlap are compact binary and XML protocols for applications needing performance without protocol complexity. Hessian is a small binary protocol. Burlap is a matching XML protocol. Providing a web service is as simple as creating a servlet. Using a service is as simple as a JDK Proxy interface.

    Hessian
    Hessian 1.0 spec
    Hessian 2.0 draft spec
    Java Binding
    Burlap

    IoC

    Resin is designed around the Java Dependency Injection specification (JSR-299), an inversion-of-control framework used for all configuration and resources including servlets, EJBs, messaging, remoting, and databases. Applications can take advantage of Java Injection using standard annotations and interfaces.

    Since Resin-IoC is used for servlets, WebBeans and EJBs, any application bean can use EJB annotations like @TransactionAttribute or WebBeans @InterceptionTypes or event @Observes capabilities, in addition to the dependency injection and IoC configuration.

    The dependency injection framework is type-safe, meaning the registry is organized around Java types, not a flat namespace, which gives more power and flexibility for component assembly. Since injection is annotation-based, most components can avoid XML configuration, while XML is still available for components.

    JSF

    As of Resin version 3.1.6 Resin supports JSF 1.2. JSF specification defines a base set components for capturing user input and displaying output. Resin implements the spec from the ground up to take advantage of Resin's unique, high performance features. The two most notable features that make Resin's JSF fast are use of serialization mechanism implemented in Hessian protocol for JSF state handling and a fast-jsf mode of JSP generation.

    Along with the features orientated at performance advantage Resin's JSF offers integration with Web Beans (JSR 299). If you are using JSF's managed bean facility you can go straight to minimizing the amount of XML configuration by using Web Beans defined ways instead (will be shown below).

    JSP

    JSP creates output (such as HTML) from template text and scripting actions. Template text is returned verbatim to the requesting client, and actions are used to fill in dynamic values and do things conditionallly.

    Introduction
    Compilation
    EL
    JSTL
    Directives
    Variables
    Actions
    Applications
    Schema for JSP-2.0 .tld files
    Velocity syntax
    JSP Templates

    Logging

    Resin can perform access logging, specify where JDK logging interface messages go, and redirect the stderr and stdout for your applications.

    Messaging

    Configuration for Resin's JMS provider implementation. The JDBC Queues and Topics provide a persistent messaging store. The Memory Queues and Topics provide a low-overhead memory-based store.

    Performance

    Benchmarks
    JVM Tuning
    Performance FAQ
    Performance Scrapbook
    Tuning

    Quercus/PHP

    Quercus is Caucho Technology's fast, open-source, 100% Java implementation of the PHP language. Performance is 4x mod_php and is comparable with PHP accelerator performance. Quercus uses Resin-IoC/WebBeans to integrate with Resin services.

    Security - Quercus gains security advantages from the JVM platform
    Module Status

    Remoting

    Resin's remoting lets applications write services as plain Java objects and export them with a choice of protocols, including Hessian, Burlap, CXF (SOAP), XFire. Because Resin activates the service as an IoC singleton, the service can use any of Resin's IoC capabilities, including dependency injection, AOP interception, EJB transactions, and event handling.

    For applications which need to use a custom protocol, making a new driver for a protocol is also straightforward.

    Scheduled Tasks

    Resin's <resin:ScheduledTask> capability lets you schedule events using a flexible cron-style trigger. The task can be any Runnable bean, a method specified by EL, or a URL.

    Security

    Server Push

    Resin's server-push (Comet) servlet API enables streaming communication such as reverse AJAX dynamic updates for browser/JavaScript applications. The API encapsulates of the threading and communications issues between the request threads and the rest of the application.

    Servlets

    Servlets are Java classes which service HTTP requests. The only requirement for writing a servlet is that it implements the javax.servlet.Servlet interface.

    Servlets are loaded from the classpath like all Java classes. Normally, users put servlets in WEB-INF/classes so Resin will automatically reload them when they change.

    JSP pages are implemented as Servlets, and tend to be more efficient for pages with lots of text.

    Third-party

    Resin's support for third-party libraries and packages is primarily documented at http://wiki.caucho.com. This section includes links to the most popular packages.

    Troubleshooting

    A list of symptoms and their possible resolution.

    Virtual Hosting

    A Resin server can serve many virtual hosts, each with its own servlets and documents. The configuration is flexible, allowing dynamic host deployment in a hosts directory or using explicit <host> tags for additional control and security, and compatibility with existing Apache sites, enabling easy upgrades and evaluation for PHP servers to Quercus.

    Watchdog

    For reliability and security, Resin servers are started and monitored by a separate Resin watchdog process. The watchdog continually checks the health of the Resin server and restarts the Resin instance if is becomes unresponsive.

    In most cases, the watchdog reads the resin.xml and configures itself automatically, so no extra configuration is required. Certain specialized configurations like ISPs can configure the watchdog to isolate JVMs for protection and security.

    WebApp

    A web application is a self-contained subtree of the web site. It uses Servlets, Filters, JSP, and the functionality provided by Resin and any other java code to provide a response to a client that makes an HTTP request.

    XML and XSLT

    Introduction
    JAXP
    XML Path Language (XPath)
    XSLT Filter
    XSLT
    XPath Functions
Posted by 1010