반응형

앞서 우분투에 Apache + PHP + Oracle 연동설치까지 하였다. 
JSP 연동을 위해 Tomcat 설치 후 연동 과정에 대해서 정리하도록 하겠다.

우선 Tomcat을 구동하기 위해서는 JDK가 설치가 되어 있어야 한다.
우분투 10.04에는 아마도 OpenJDK가 설치 되어 있을것이다. 이를 사용해도 무방하나
본인은 Sun JDK를 오랫동안 사용해 왔으므로 Sun JDK를 설치하도록 하겠다.

우분투 10.04에서는 # apt-get install sun-java6-jdk 하면 설치가 되지 않는다.
source list 에 Sun JDK 1.6 이 포함 되어 있지 않는것 같다.

Sun JDK 1.6 설치

1. Source List에 추가
# add-apt-repository "deb http://archive.canonical.com/ lucid partner"

2. Source List 업데이트
# apt-get update

3. Sun JDK 1.6 설치 
# apt-get install sun-java6-jdk

4. 설치 완료 확인
# javac
Usage: javac <options> <source files>
where possible options include:
  -g                         Generate all debugging info
  -g:none                    Generate no debugging info
  -g:{lines,vars,source}     Generate only some debugging info
  -nowarn                    Generate no warnings
  -verbose                   Output messages about what the compiler is doing
....  이런 식으로 출력되면 정상설치 된것이다.

TOMCAT 설치
tomcat 7.0.0 을 다운 받도록 하자.
http://apache.tt.co.kr/tomcat/tomcat-7/v7.0.0-beta/bin/apache-tomcat-7.0.0.tar.gz

이전 설치 과정을 잘 따라왔다면 이후 설치과정중 명령어들이 무슨 명령어인지 알것이다.
# cd /usr/local/src
# wget http://apache.tt.co.kr/tomcat/tomcat-7/v7.0.0-beta/bin/apache-tomcat-7.0.0.tar.gz
# tar xvzf apache-tomcat-7.0.0.tar.gz
# mv apache-tomcat-7.0.0 /usr/local/tomcat
# cd /usr/local

톰캣 관련 환경변수를 셋팅해 준다. /etc/profile 파일 마지막에 추가
# vi /etc/profile
export CATALINA_HOME=/usr/local/tomcat
export PATH=$PATH:$CATALINA_HOME/bin


# /usr/local/tomcat/bin/catalina.sh start
Using CATALINA_BASE:   /usr/local/tomcat
Using CATALINA_HOME:   /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME:       /usr/local/jdk

톰캣 구동이 완료 되었다. 로컬에서 http://localhost:8080 으로 접속해보자.


위와 같은 화면이 뜨면 정상설치가 된것이다. 여기서 뒤에 8080은 톰캣포트이다.
여기서 더 나아가 아파치와 톰캣의 연동 부분까지 진행해 나가도록 하겠다.

APACHE-TOMCAT CONNECTOR
1. 다운로드
# cd /usr/local/src
# wget http://apache.mirror.cdnetworks.com/tomcat/tomcat-connectors/jk/source/jk-1.2.30/tomcat-connectors-1.2.30-src.tar.gz 
2. 압축 해제
# tar xvzf tomcat-connectors-1.2.30-src.tar.gz
# cd tomcat-connectors-1.2.30-src
# cd native/
3. 컴파일 및 설치
# ./configure --with-apxs=/usr/local/apache2/bin/apxs
# make && make install
4. 설치 확인
# ls /usr/local/apache2/modules/mod_jk.so
/usr/local/apache2/modules/mod_jk.so  <== 파일이 존재하면 정상 설치 완료.

5. 아파치와 톰캣 연동 설정을 위하여 httpd.conf 와 workers.properties 파일을 수정 생성한다.
# vi /usr/local/apache2/conf/httpd.conf

LoadModule jk_module          modules/mod_jk.so
#Tomcat-connector
JkWorkersFile conf/workers.properties
JkLogFile logs/jk.log
JkLogLevel info
JkLogStampFormat "[%a %b %d %H:%M:%S %y]"
JkMount /*.jsp loadbalancer
JkMount /*.do loadbalancer
JkMount /*.html loadbalancer
JkMount /servlet/* loadbalancer
JkMount /* loadbalancer
JkMount /*.gif loadbalancer

#Load Module 맨뒤에 위와같이 추가한다.

6. workers.properties파일을 새로 생성한다.
# vi /usr/local/apache2/conf/workers.properties
worker.list=loadbalancer
worker.tomcat1.type=ajp13
worker.tomcat1.host=127.0.0.1
worker.tomcat1.port=8008
worker.tomcat1.lbfactor=1
worker.tomcat2.type=ajp13
worker.tomcat2.host=127.0.0.1
worker.tomcat2.port=8009
worker.tomcat2.lbfactor=1
worker.loadbalancer.type=lb
worker.loadbalancer.balanced_workers=tomcat1,tomcat2

7. 아파치와 톰캣을 재시동하고 8080포트를 빼고 접속한다.
-- 아파치와 톰캣 재시동..
# /usr/local/apache2/bin/apachectl restart
# /usr/local/tomcat/bin/catalina.sh stop  
# /usr/local/tomcat/bin/catalina.sh start 

http://localhost  로 접속


아파치와 톰캣의 연동이 정상적으로 완료되었다.
이제 톰캣이 자동 실행 되도록 셋팅하도록 하자.
/etc/init.d 에서   tomcat 파일을 생성

# vi /etc/init.d/tomcat


위와 같이 작성하고 실행 권한을 주도록 하자

내용작성후 실행권한을 부여하고 시작프로세스에 등록한다.  재시작하면 자동 실행 된다.

하지만 이전에 설치한 PHP는 인식하지 못하고 해당 페이지를 다운로드 받게 된다.
이 부분에 대한 셋팅에 방법에 대해서 기술 하도록 하겠다.

앞서 추가한 httpd.conf 에 추가한 부분에서
#JkMount /* loadbalancer
이 부분을 주석처리(앞에 #) 하거나 삭제하고 재가동 하면 JkMount부분에서 지정하지 않은 확장자는
모두 본래의 아파치 디렉토리에서 정상적으로 읽게 된다.
이정도에서 더 나아가 웹호스팅 처럼 웹서버를 활용하고자 한다면 더 추가해야 할 부분이 있다.
그냥 단일 웹서버로 사용하고자 한다면 여기까지 설정하고 사용하길 바란다.

서버에서 각 계정들에게 도메인을 개인 도메인을 할당하고 사용할수 있게 해보자.
이부분에 대한 포스팅도 다음으로 넘어가도록 하겠다 글이 너무 길어지기 때문에.





  1. 송호연 2010.08.25 06:23

    우와 감사합니다 ㅠㅠㅠㅠㅠ

    이거 때문에 제가 몇일을 고생했는지 몰라요 ;;;;;

    감사해요 !!! :)

    드디어 ㅋㅋㅋㅋ

    • Favicon of https://www.pmguda.com BlogIcon Ishaya seon 2010.08.31 18:12 신고

      ㅎㅎ 첫 댓글이시네요..
      저도 서버 셋팅하면서 엄청 고생하면서 자료찾고
      깔고 지우고 반복에 ㅠㅠ
      포스팅 하면서 대박~ 을 예상했으나...
      댓글이 없어서 상심하고 있었습니다.
      도움이 되셨다니 너무 기쁘네요..^^

  2. 정병열 2011.06.20 17:32

    덕분에 서버 세팅 잘 했습니다 ^^:; 좋은 자료 감사합니다!

반응형
Oracle 11g 설치

1. 오라클 11g를 설치하기 이전에 필요한 패키지들을 설치 하도록 하자.
   (아래 작업들은 root계정으로 실행하도록 하자.)

# apt-get install gcc binutils libaio1 lesstif2 lesstif2-dev make rpm libc6 build-essential gawk alien ksh libmotif3

2. 패키지의 설치가 끝났으면 오라클 설치를 위한 사용자 그룹과 유저를 만들도록 한다.

# addgroup oinstall
# addgroup dba
addgroup nobody
# useradd -m oracle -g oinstall -G dba /bin/bash
# usermod -g nobody nobody
# passwd oracle  (oracle 비밀번호 설정)

3. 오라클에서 필요한 메모리와 CPU 리소스를 위해 커널 파라미터를 수정한다.
    파일의 가장 아래쪽에 다음의 내용을 삽입한다.

# vi /etc/sysctl.conf

fs.file-max = 65535
= 2097152
kernel.shmmax = 2147483648
kernel.shmmni = 4096
kernel.sem = 32000 100 128
net.ipv4.ip_local_port_range = 1024 65000
net.core.rmem_default = 1048576
= 1048576
net.core.wmem_default = 262144
net.core.wmem_max = 262144

4. /etc/sysctl.conf 파일은 우분투 시스템이 부팅시 처음  읽어오는 정보이다.
   이를 적용하기 위해 sysctl.conf 설정을 읽어들이는 명령어를 실행한다.

# sysctl -p

5. /etc/security/limits.conf 파일에 다음 내용을 삽입한다.

# /etc/security/limits.conf

oracle soft nproc 2047
oracle hard nproc 16383
soft nofile 1023
oracle hard nofile 65535

6. /etc/pam.d/login 파일에 다음 라인을 추가한다.

# vi /etc/pam.d/login

session required /lib/security/pam_limits.so
session required pam_limits.so

7. 오라클 기동에 관련한 환경변수를 설정한다.

# ln -s /usr/bin/awk /bin/awk
# ln -s /usr/bin/rpm /bin/rpm
# ln -s /lib/libgcc_s.so.1 /lib/libgcc_s.so
# ln -s /usr/bin/basename /bin/basename /bin/basename

8. 오라클 11g가 설치될 폴더 생성하기

# mkdir /oracle
# mkdir /oracle/11g
# chown -R oracle:oinstall /oracle
# chmod -R 775 /oracle

9. 환경변수 설정을 위해 /etc/profile 의 파일 가장 마지막에 삽입한다.

# vi /etc/profile

export ORACLE_BASE=/oracle
export ORACLE_HOME=/oracle/11g
export ORACLE_SID=oracle
export PATH=$PATH:$ORACLE_HOME/bin

10. 환경변수가 제대로 등록되었는지 확인해보도록 한다.

# su - oracle
password:
# echo $ORACLE_BASE
/oracle
# echo $ORACLE_HOME
/oracle/11g
# echo $ORACLE_SID
oracle

제대로 출력되는 것을 확인 하면 이상무..

11. 오라클11g 압축 풀기.(오라클을 오라클 계정에 다운받도록 한다.)
# su - oracle
$ unzip linux_11gR1b5_database.zip - 파일명은 버전에 따라 달라질달라질 수 있습니다.
$ chown -R oracle:oinstall database

이제 오라클 설치의 기본적인 것은 완료 되었다. GUI 환경에서 설치를 진행하면 된다.
서버의 화면에서 설치를 진행해도 되고 본인같은 경우는 XDMCP 환경에서 설치를 진행하였다.
XDMCP 설정관련은 본인의 블로그에 작성되어 있다. 필요하면 참고 하도록 하자.
http://www.pmguda.com/726    <== XDMCP 설정관련 자료

12. 오라클 설치는 오라클 계정으로 하도록 하자.
# su - oracle
$ export LANC=C  //한글로 설치하면 글자가 깨짐으로 영어로 설치를 진행한다.
$ cd /home/oracle/database
$ ./runInstaller

아래 그림에서 보시는 것처럼
Oracle Base Location: /oracle
Oracle Home Location: /oracle/11g
Global DataBase Name: oracle
(다른 값을 넣을 경우에는 위에서 설정한 "export ORACLE_SID=oracle" 와 동일하게 설정을 맞춰주도록 하자. )

아래 창이 뜨기 전에 경고창이 하나 떳을 것이다 Inventory directory 가 잘못되있다는 경고창이니
무시하고 설정을 변경해 주도록 하자.
Inventory directory 는 /oracle/oraInventory로 설정
System group name 은 dba로 설정

나머지 과정은 Next로 설치를 진행하면 된다. 아래 Product-Specific Prerequisite Cheks 에서 오류항목은
User Verified로 체크하여 처리를 하자.

참고로 자신의 glibc 버전확인은 # getconf GNU_LIBC_VERSION   으로 하면 확인가능.
(glibc 관련 오류는 우분투 10.04의 버전이 더 높으나 비교에서 문제가 발생하는것이다.
최소 요구버전은 2.4.?? 이라면 우분투(10.04)의 버전은 2.11.1 인데 비교시에 4와 11을
4와 1로 비교하여 발생하는 버그이니 그냥 무시하도록 하는것이다. 오라클 개발자 신경좀 쓰자잉~)

오라클 관리담당자 등록부분이다 그냥 Next로 넘어가자


계속 Next로 설치를 진행하고 나면 다음 창이 나온다.
Scripts to be executed: 에 있는 2가지 스크립트 파일을 반드시 root 계정으로 실행하도록 한다.


설치가 완료되었다. 이제 마지막 설치 후 셋팅 부분이 남았다.

13. /etc/oratab 파일 을 수정하도록 한다.(오라클 계정으로 빨간색 Y부분이 원래 N으로 되어있다.)

$ vi /etc/oratab

oracle:/oracle/11g:Y

14. /oracle/11g/bin/dbstart 파일의 오라클 리스너의 절대 패스를 수정한다.
ORACLE_HOME_LISTNER= 부분을 ORACLE_HOME_LISTNER=/oracle/11gORACLE_HOME_LISTNER=/oracle/11g 로 설정

$ vi /oracle/11g/bin/dbstart

15. 절대 패스까지 설정했다면 이제 설치는 완료 됬다. 확인 및 오라클 자동 실행을 위한 셋팅을 알아보자.

oracle 계정으로 전환해서 정상 작동 테스트를 해보자.
$sqlplus /nolog
SQL> connect /as sysdba
SQL> startup
SQL> SELECT LTRIM('AAATEST','A') FROM DUAL;
SQL> TEST
SQL> shutdown

정상작동이 확인된 후에 자동실행 되도록 셋팅하도록 하자.(모든 작업은 root 권한으로)

/etc/init.d 에서   startoracle.sh 파일을 생성

# vi /etc/init.d/startoracle.sh
 


위와 같이 작성하고 실행 권한을 주도록 하자

내용작성후 실행권한을 부여하고 시작프로세스에 등록한다.  재시작하면 자동 실행 된다.



오라클 자동 실행까지 완료후 Apache, PHP 연동 관련 글은 다음 포스팅으로 넘기도록 하겠다.
글이 너무 길어진 관계로 오라클만 사용하려면 여기까지만 하면 된다.

  1. Favicon of http://suritam9.pe.kr BlogIcon 박영식 2011.02.15 14:26

    ./runInstaller 했는데, display 설정이 안되었다고 나오고 no protocol specified 란 메시지가 나오면, $ xclock 을 실행시켜야 합니다. 그러면 해결 되는 것 같습니다. 근데, 이것때문에 되는 건지는. -.-'''

    그리고, 언어가 LANC=C 로 해도 바뀌지 않으면 unset LANG를 사용해야 하는군요.

    • Favicon of https://www.pmguda.com BlogIcon Ishaya seon 2011.02.16 11:42 신고

      환경셋팅이 어떻게 되어있는지 잘 모르겠습니다만
      xWindow 관련 설정이 안되어 있으신건 아닐까요?
      위에 글 포스팅은 제목에 써져있는 환경으로 개인서버
      셋팅하면서 작성한 글이기에 문제는 없었습니다.

      -- 본문 발췌---
      GUI 환경에서 설치를 진행하면 된다.
      서버의 화면에서 설치를 진행해도 되고 본인같은 경우는 XDMCP 환경에서 설치를 진행하였다.
      XDMCP 설정관련은 본인의 블로그에 작성되어 있다. 필요하면 참고 하도록 하자.
      http://www.pmguda.com/726 <== XDMCP 설정관련 자료

반응형

Oracle 에서 테이블의 컬룸의 값들이 자동으로 증가하도록 테이블을 구성하는 방법

우선 원하는 테이블을 생성한다

CREATE TABLE ajaxchat (
  id int NOT NULL ,
  user varchar(255) NOT NULL,
  msg varchar(255) NOT NULL,
  time int NOT NULL,
  PRIMARY KEY  (id)
);

그후 Sequence 테이블을 작성 한다 .

SQL>CREATE SEQUENCE id
        START WITH 1
        INCREMENT BY 1
        MAXVALUE 100000 ;

 

 시작 값이 1일고 1씩 증가하고, 최대값이 100000만이 되는 시퀀스를 생성했습니다.

그리고 값을 저장 할 때 이런식으로 insert 시킨다


 SQL>INSERT INTO ajaxchat(id, user, msg,time ) VALUES(id.NEXTVAL, ’julia’ , sysdate,1);

    empno는 컬럼값을 입력할 때 일일이 다음 값을 기억하지 않아도 NEXTVAL을 사용하여
    자동으로 입력할 수 있습니다.




 시퀀스란?


유일(UNIQUE)한 값을 생성해주는 오라클 객체입니다.

◈ 시퀀스를 생성하면 기본키와 같이 순차적으로 증가하는 컬럼을 자동적으로 생성할수 있습니다.

◈ 보통 primary key 값을 생성하기 위해 사용합니다.

◈ 메모리에 Cache되었을 때 Sequence 값의 액세스 효율이 증가 합니다.

◈ Sequence는 테이블과는 독립적으로 저장되고 생성됩니다. 따라서 하나의 sequence를
    여러 테이블에서 쓸 수 있습니다.
 



시퀀스 생성





START WITH : 시퀀스의 시작 값을 지정합니다. n을 1로 지정하면 1부터 순차적으로
                     시퀀스번호가 증가 합니다.

INCREMENT BY : 시퀀스의 증가 값을 말합니다. n을 2로 하면 2씩 증가합니다.
                        START WITH를 1로 하고 INCREMENT BY를 2으로 하면 1, 3, 5,7,.. 이렇게
                       시퀀스  번호가 증가하게 됩니다.

MAXVALUE n | NOMAXVALUE : MAXVALUE는 시퀀스가 증가할수 있는 최대값을 말합니다.                                             NOMAXVALUE는 시퀀스의 값을 무한대로 지정합니다.

MINVALUE n | NOMINVALUE : MINVALUE는 시퀀스의 최소값을 지정 합니다.
                                      기본값은 1이며, NOMINVALUE를 지정할 경우 최소값은 무한대가 됩니다

 


 SQL>CREATE SEQUENCE emp_seq
        START WITH 1
        INCREMENT BY 1
        MAXVALUE 100000 ;

      sequence created.

     시작 값이 1일고 1씩 증가하고, 최대값이 100000만이 되는 시퀀스를 생성했습니다.


 SQL>INSERT INTO emp(empno, ename, hiredate ) VALUES(emp_seq.NEXTVAL, 'julia' , sysdate);

    empno는 컬럼값을 입력할 때 일일이 다음 값을 기억하지 않아도 NEXTVAL을 사용하여
    자동으로 입력할 수 있습니다.

  CURRVAL : 현재 값을 반환 합니다. .
   NEXTVAL : 현재 시퀀스값의 다음 값을 반환 합니다.


 SQL>SELECT emp_seq.CURRVAL FROM DUAL ;

        CURRVAL
        ---------
                  1

 SQL>SELECT emp_seq.NEXTVAL FROM DUAL ;

       NEXTVAL
     ---------
                 2
 



사용규칙 


  ◈ NEXTVAL, CURRVAL을 사용할 수 있는 경우
    - subquery가 아닌 select문
    - insert문의 select절
    - insert문의 value절
    - update문의 set절


  ◈ NEXTVAL, CURRVAL을 사용할 수 없는 경우
    - view의 select절
    - distinct 키워드가 있는 select문
    - group by, having, order by절이 있는 select문
    - select, delete, update의 subquery
    - create table, alter table 명령의 default값


시퀀스의 수정 및 삭제





START WITH는 수정할수 없습니다.
START WITH 절이 없다는 점을 빼고는 CREATE SEQUENCE와 같습니다.
 


 SQL>ALTER SEQUENCE emp_seq
         INCREMENT BY 2
         CYCLE;

      sequence altered.

      2씩 증가하고, 최대값을 넘으면 다시 처음부터 순환하도록 수정하였습니다.


      DROP 문을로 필요하지 않은 시퀀스는 삭제 할수 있습니다.

 SQL>DROP SEQUENCE PRD_SEQ;
        sequence dropped.
 

  ================================================
    * 오라클 정보공유 커뮤니티 oracleclub.com
    * http://www.oracleclub.com
    * http://www.oramaster.net
    * 운영자 : 김정식 (oramaster _at_ naver.com)
  ================================================
※ oracleclub 강좌를 다른 홈페이지에 퍼가실 경우에는 출처를 꼭 밝혀 주시면 고맙겠습니다.~^^

 

  1. 박군 2009.07.31 13:29

    컬럼 삭제하고 나서 다음 증가할때 비는 값은???

    • Favicon of https://www.pmguda.com BlogIcon Ishaya seon 2009.07.31 16:36 신고

      컬럼은 삭제해도 sequence 값은 그대로입니다.
      위에 시퀀스에 대한 설명 있으니 보시고 쓰세요.^^

반응형

IBM과 M&A 협상을 진행해 왔으나 인수가격 협상에서 갈등을 빚어오면서 협상이 결렬되었는데

오라클이 썬을 인수하는 결과가 나왔습니다.

IBM과의 인수 협상가에서 주당 10센트 가격차이로 인수되었다고 하네요. 오라클과 썬의 결합이라.

업계내에서 큰 파장을 몰고올 세기의 빅딜이 아닌가 생각됩니다.

오라클이 썬마이크로시스템즈를 74억불에 공식 인수(한화 약 9조8000억원)

썬의 공식 사이트에 올라온 글을 링크 걸어봅니다.  그리고 약간의 설명을 덧붙여 보자면

 주당 인수가격은 9.5달러이며, 이는 지난 주말 종가의 42%의 프리미엄이 얹어진 가격이다. 오라클은 썬마이크로 인수로 첫 해 영업이익이 약 15억달러가 증가할 것으로 전망했다.

갠적으로 여기서 궁금해 지는 것은 MySQL의 행보에 관한 것인데요..

MySQL이 전에 썬에 인수된바가 있고 이제 데이타베이스 부문에서 오라클과 겹치는 부분이 있는데요.

이미 MySQL은 인수 후에도 자신의 입지를 굳힌 상태고 지속적인 성장세를 보이기때문에

현 상태 유지로 별 변화는 없으리라 예측하는 것 같습니다. 

같은 부문의 겹치는 부분으로서 오라클의 정책이 현 MySQL에 어떤 영향을 미칠지가 궁금해지네요.

개인적으로 IBM 과 SUN의 인수협상을 보고서 내심 기대를 했었는데

오라클에 인수 결정이라는 소식을 듣고 놀라지 않을 수가 없었습니다.

그만큼 업계에 많은 영향을 미치던 거인의 행보에 관한 이야기이기 때문에

현재 JAVA 관련 일을 하고 있고 SUN 에 대한 개인적인 애착 또한 강했는데 좀 아쉽기도 합니다.

무엇보다도 SUN 로고가 달린 기타 물품들에 대한 애착이 강한것이지만 말입니다. ^^;

아직도 SUN로고가 달린 노트북 가방의 득템을 노리고 있는 저입니다.^^;; (조금 쨍피한 이야기네요.)
  1. Favicon of http://okgosu.tistory.com BlogIcon okgosu 2009.04.22 16:35

    저랑 비슷한 생각을 하고 계시네요^^ 관련 포스팅 트랙백 넣습니다~

    • Favicon of https://www.pmguda.com BlogIcon Ishaya seon 2009.04.22 20:08 신고

      저야 기사 보고 생각난거 쓴거 뿐인데요.

      고수님 글을 볼때마다 좀 더 글을 잘 정리해서

      올려야겠다는 생각이 드네요..^^

      글 잘 읽었습니다.^^

반응형


☞ 집합 쿼리(UNION, INTERSECT, MINUS)
 
  집합 연산자를 사용시 집합을 구성할 컬러의 데이터 타입이 동일해야 합니다.
 
◈ UNION : 합집합
◈ UNION ALL : 공통원소 두번씩 다 포함한 합집합
◈ INTERSECT : 교집합
◈ MINUS : 차집합


☞ UNION

 ◈ UNION은 두 테이블의 결합을 나타내며, 결합시키는 두 테이블의 중복되지 않은 값들을 반환 합니다.
 
 
SQL>SELECT deptno FROM emp
        UNION
        SELECT deptno FROM dept;
 
    DEPTNO
----------
        10
        20
        30
        40



☞ UNION ALL

◈ UNION과 같으나 두 테이블의 중복되는 값까지 반환 합니다.
 
SQL>SELECT deptno FROM emp
        UNION ALL
       SELECT deptno FROM dept;
 
   DEPTNO
---------
       20
       30
       30
       20
       30
       30
       10
       20
       10
       30
....



☞ INTERSECT

INTERSECT는 두 행의 집합중 공통된 행을 반환 합니다.
 
SQL>SELECT deptno FROM emp
        INTERSECT
        SELECT deptno FROM dept;
   
    DEPTNO
----------
        10
        20
        30



☞ MINUS

MINUS는 첫번째 SELECT문에 의해 반환되는 행중에서 두번째 SELECT문에 의해 반환되는 행에
    존재하지 않는 행들을 반환 합니다.
 
SQL>SELECT deptno FROM dept
        MINUS
        SELECT deptno FROM emp;
 
    DEPTNO
----------
        40

  ================================================
    * 오라클 정보공유 커뮤니티 oracleclub.com
    * http://www.oracleclub.com
    * http://www.oramaster.net
    * 강좌 작성자 : 김정식 (oramaster _at_ naver.com)
  ================================================
반응형

oracle DECODE 함수 사용법

 

* DECODE란 오라클에서만 지원하는 함수로서SELECT문장 내에서 비교연산을 수행해 주는 아주 편리한 함수입니다.

형식은 다음과 같이 사용하시면 됩니다.


DECODE(deptname, 'A',1,0)
-> deptname
'A'와 같으면 1을 갖고 아니면 0을 갖게 됩니다.

 

또는 SUM함수로 합계를 내줄 수 있습니다.
SUM(DECODE(deptname, 'A',1,0)
-> deptname
'A'와 같으면, 1을 누적하고,아니면 0을 갖게 됩니다.

 

2 DECODE문도 허용됩니다. 다음을 보도록 하겠습니다.

DECODE(deptname, 'A', DECODE(name,'KIM',1),0)
-> deptname
'A'와 같고, name 'KIM'이면, 1을 같고, 아니면, 0을 갖는다.

 

2 DECODE문을 쓸 때 두 개의 DECODE문은 AND연산으로 수행됨을
명심하길 바랍니다.

 

예제) 사원테이블(PA06MR0)에서 영문 성이 'KIM'으로 시작하는 사람과 'LEE'로 시작하는 사람의 합을 구하라. 단 입사년도가 올해(1998)인 사람의 합을 구하라.

 

SELECT EMPNAME, SUM(DECODE(SUBSTR(EMPNAME,1,3),'KIM',1,0)
                             + DECODE(SUBSTR(EMPNAME,1,3),'LEE',1,0)),
FROM tableName
WHERE SUBSTR(entondate,1,4) = '1998';
GROUP BY EMPNAME;

반응형

WITH TEST AS
(
    select 'A' grade, 10 cnt from dual union all
    select 'A' grade, 20 cnt from dual union all
    select 'A' grade, 15 cnt from dual union all 
    select 'B' grade, 20  from dual union all
    select 'B' grade, 30  from dual union all
    select 'D' grade, 15  from dual union all
    select 'F' grade, 10  from dual
)
SELECT
    grade 등급,
    cnt 학생수,
    sum(cnt) over () 갯수,
    row_number() over(partition by grade order by cnt) 로넘,
    rank() over(partition by grade order by cnt) 랭크,
    round((cnt / sum(cnt) over ())*100,2) 구성비,
    sum(cnt) over (partition by grade  order by grade) 누적학생수,
    sum(cnt) over (partition by grade,cnt  order by grade) 그레카운,
    sum(cnt) over (order by grade) 누적,
    round((sum(cnt) over (order by grade)/sum(cnt) over ())*100,2) 누적구성비
FROM TEST;

 

/*

  rank() over(partition by grade order by cnt) 랭크,

 

  표현식 over (partition by 컬럼1 order by 컬럼2)

 

  이 의미는

  "(컬럼1값이 같은놈들로 묶은것을 컬럼2로 정렬한) 각 파티션별로 표현식을 수행해준다."

*/

 

복잡하군... :(

[출처] Oracle over() 구문|작성자 18061975

반응형

CREATE or REPLACE FUNCTION sum_emp //sum_emp 이름으로 함수 생성
(v_deptno IN emp.deptno%TYPE) //입력받는값 변수에 empTB에 deptno랑 같은 타입으로받겟다
//v_deptno 란 변수에 emp.deptno 와 같은 타입으로 선언
return number 변수를 넘버타입으로 리턴
IS v_sum_sal emp.sal;%TYPE; //변수와 데이타 타입

BEGIN
 SELECT SUM(sal) //SUM(sal)은 살레코드의의 값을 다 더하겟다
 INTO v_sum_sal
 FROM emp
 WHERE dept=v_deptno; //입력받은 부서번호와 일치한다면
 RETURN (v_sum_sal); //리턴하라
END;
/
excute example)SELECT sum_emp(20) FROM dual;


CREATE or REPLACE PROCEDURE 이름
(v_deptno IN emp.deptno%TYPE,
 v_sum_sal OUT emp.sal%TYPE) //IN:mode is IN in function, OUT:argument result is return
IS
BEGIN
 SELECT SUM(sal)
 INTO v_sum_sal   //
 FROM emp
 WHERE deptno = v_deptno;//입력받은 값과 같은때 그걸 가주와서 섬에서 다 더하고 v_sum_sal 이란 변수에 너케따
END;
/
프로시져 실행
VARIABLE x number //프로시저를 실행시켜서 값이 나오면 저장시킬 변수를 일단 선언
execute  프로시져네임(10, :x)
//10번이 파라미터값으로 들어가고 x 에 v_sum_sal 에 결과값이 들어간다
PRINT x // v_sum_sal 의 값이 x 에 저장되 있으니 x  를 출력하라


IF  조건  THEN
    문장;
ELSE
    문장;]
END IF;


LOOP
    문장1;
    문장2;
    ···
    EXIT[WHEN 조건];   --EXIT 문
END LOOP;

CREATE or REPLACE PROCEDURE loop_basic1
IS
 v_num number(2) := 1;
 v_sum varchar(10) := NULL;
BEGIN
 LOOP
  v_sum := v_sum||'*';
  DBMS_OUTPUT.PUT_LINE(v_sum);
  v_num := v_num+1;
  EXIT WHEN v_num > 10;
 END LOOP;
END loop_basic1;
/

FOR 인덱스 IN [REVERSE] 하한..상한 LOOP
    문장1;
    문장2;
    ···
END LOOP;

CREATE or REPLACE PROCEDURE for_basic1
IS
 v_char varchar2(10) := NULL;
BEGIN
 FOR I IN 1..10 LOOP
  v_char := v_char||'*';
  DBMS_OUTPUT.PUT_LINE(v_char);
 END LOOP;
END for_basic1;
/


WHILE  조건  LOOP
    문장1;
    문장2;
    ···
END LOOP;

CREATE or REPLACE PROCEDURE while_basic1
IS
 v_num number(2) := 1;
 v_char varchar2(10) := NULL;
BEGIN
 WHILE v_num <= 10 LOOP
  v_char := v_char||'*';
  DBMS_OUTPUT.PUT_LINE(v_char);
  v_num := v_num+1;
 END LOOP;
END while_basic1;
/

반응형

- 논리적인 테이블


- 물리적으로도 연결되어 있기 때문에 원본과 VIEW가

  서로 상호적으로 데이터 변경 시 각자에 반영된다.


- SELECT를 단순하게 하기 위해 WIEW씀

  (내가 정의해서 저장해놓고 쓰고 싶을 때마다 호출하여 쓸 수 있다.)


- 보안상으로 VIEW씀


// 뷰 생성

CREATE VIEW EMP_VIEW(EMPNO, ENAME, JOB) AS

SELECT EMPNO, ENAME, JOB FROM EMP WHERE JOB='SALESMAN';


// 뷰 생성 OR 수정

  -> 없는 뷰 이름을 써주면 뷰가 생성되고 있는 뷰 이름을 써주면 뷰가 수정된다.

CREATE OR REPLACE VIEW EMP_VIEW(EMPNO, ENAME, JOB) AS

SELECT EMPNO, ENAME, JOB FROM EMP WHERE JOB='SALESMAN';


컬럼명은 달라도 되지만 나중에 알아봐야 하기 때문에 같은 이름으로

주는것을 지향한다.


CREATE 해야 나중에 종료 후에도 쓸 수 있다.


// 그룹 뷰 생성 시 꼭 별명을 써야한다. 아래 에러

CREATE VIEW V1(DEPTNO, AVG(SAL), SUM(SAL)) AS
SELECT DEPTNO, AVG(SAL), SUM(SAL) FROM EMP GROUP BY DEPTNO;


// 그룹 뷰 생성 시  생성 방법

CREATE VIEW V1(DEPTNO, 평균, 합) AS
SELECT DEPTNO, AVG(SAL) AS 평균, SUM(SAL) 합 FROM EMP GROUP BY DEPTNO;


// 내가 만든 VIEW의 내용 조회

SELECT VIEW_NAME, TEXT FROM USER_VIEWS;


VIEW_NAME                                                    TEXT
-------------------          --------------------------------------------------------
EMP_VIEW                       SELECT EMPNO, ENAME, JOB FROM EMP

                                       WHERE JOB='SALESMAN'

V1                                   SELECT DEPTNO, AVG(SAL) AS 평균, SUM(SAL) 합

                                       FROM EMP GROUP BY DEPTNO


// 복합 VIEW 생성

CREATE VIEW EMPVI(EMPNO, ENAME, JOB, DEPTNO, DNAME) AS
SELECT E.EMPNO, E.ENAME, E.JOB, D.DEPTNO, D.DNAME FROM EMP E, DEPT D
WHERE E.DEPTNO=D.DEPTNO AND JOB='SALESMAN';

[출처] View|작성자 bkh4536

반응형

한국오라클, 무료 DB 개발 툴 Oracle SQL Developer 출시


오라클, 개발자 지원 전략의 일환으로 DB 개발자용 개발 툴 출시
Oracle SQL Developer 통해 비용 절감 및 생산성 증대 실현

한국오라클은 Oracle SQL Developer(오라클 SQL 디벨로퍼, 기존 코드명 'Project Raptor')라는 새로운 무료 데이터베이스 개발 툴을 25일 출시한다고 밝혔다. Oracle SQL Developer를 사용하면 개발 사이클이 단순해지고 SQL 및 PL/SQL 코드 개발과 디버깅을 위해 다른 툴을 구입해야 할 필요가 없어져 비용 절감과 생산성이 증대된다.
Oracle SQL Developer는 객체 브라우징 및 생성, SQL 스테이트먼트 및 SQL 스크립트 실행, PL/SQL 코드 편집 및 디버깅, 데이터 보기 및 업데이트 등의 작업 실행 시 데이터베이스 개발자에게 효과적인 강력한 기능을 제공한다. 또한 다양한 사전제작 보고서 양식을 제공하여 개발자가 자신의 개발 프로젝트에 맞는 보고서를 작성할 수 있다. 아울러, 이 툴에는 데이터베이스 개발자가 코드작성에 쏟는 시간과 노력을 줄여주는 코드 포맷터 및 스니펫 등의 기능도 포함되어 있다.
오라클 데이터베이스 서버 테크놀로지 부문의 앤드류 맨델슨(Andrew Mendelsohn) 수석 부사장은 "10g 릴리스에서는 오라클 데이터베이스의 설치와 활용 및 관리가 더 쉬울 뿐만 아니라 관리자가 사용하기에 간편하도록 하는데 초점을 두었다."라며, "Oracle SQL Developer는 데이터베이스 개발자가 생산적으로 코드 및 디버깅 작업을 보다 효과적으로 수행할 수 있도록 하는 데 필요한 모든 것을 지원한다. 오라클 데이터베이스 고객들은 비용절감과 개발자 생산성 증대 측면에서 이익을 얻게 될 것"이라고 덧붙였다.

Oracle SQL Developer는 오라클 데이터베이스 10g 에디션 전 제품군과 Oracle9i 데이터베이스 릴리스 2에서 사용이 가능하다. 또한 리눅스, 맥킨토시, 윈도우 플랫폼 등에 사용할 수 있는 무료 개발툴로, 오라클 데이터베이스 라이센스를 소지한 모든 고객에게 지원된다. 오라클은 또 등록된 사용자에 한하여 Oracle SQL Developer 관련 주제를 다루는 무료 온라인 포럼도 제공하고 있다. 이 포럼은 오라클 데이터베이스 툴 전문가들이 진행과 모니터링을 담당한다. Oracle SQL Developer는 오라클의 개발자 커뮤니티인 오라클 테크놀로지 네트워크 (http://www.oracle.com/technology/global/kr/software/products/sql/index.html)에서 지금 다운 받아 사용할 수 있다.

oracle을 처음 사용하면서 여러가지 토드,오렌지등의 툴을 사용해 보았다.
물론 아직 제대로 사용해 보지 못하였기 때문에 각 툴들의 장단점이 있겠지만


Oracle SQL Developer는 무료로 배포되고 사용하기도 편한것 같습니다. 위에 파일은
사용법에 대한 자료입니다.

+ Recent posts