OS/LINUX2008. 3. 10. 21:55
반응형

XDMCP 설정

 

1. 리눅스 기본 설정 변경

/etc/inittab 파일에서 runlevel을 5로 설정합니다.
id:5:initdefault:

 

gdm 환경 설정

/etc/X11/gdm/gdm.conf 파일 수정

DisallowTCP=false

Enable=1

 

2. iptables 설정 변경

/etc/sysconfig/iptables 파일의 앞부분에 다음 문장을 추가시켜 주시기 바랍니다.
-A RH-Firewall-1-INPUT -p udp -m udp --dport 177 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 7100 -j ACCEPT


 

3. 리부팅

리부팅안하면.. xbrowser 에서 안잡힙니다.. -_-;

 

출처 http://blog.naver.com/blueruby?Redirect=Log&logNo=60027801391


반응형

'OS > LINUX' 카테고리의 다른 글

RPM Kernel 설치와 패치 방법  (0) 2008.03.12
rpm으로 커널 업그레이드 하기  (0) 2008.03.12
OpenVPN 사용하기  (0) 2008.03.03
REDHAT 9 설치후 기본 셋팅  (0) 2008.02.27
redhat 9.0 에서 한글이 깨질때..조치  (0) 2008.02.27
Posted by [PineTree]
OS/WINDOWS2008. 3. 9. 01:37
반응형
불여우에는 사용자들을 위한 여러가지 확장기능들과 플러그인들이 지원되는데
그 중에서 가장 유용하다고 생각하는 것들을 모아보았다.

물론, 특별한 기준은 없고, 실제로 사용해본 결과 활용도 측면에서 유의미하다고 생각되는 것들을 중심으로 정리했다.

1. Cooliris Previews
사 실 하나하나의 웹페이지들에는 상당수의 링크들(이 하이퍼링크야말로 오늘날의 웹을 만든 일등공신이라 할 수 있다)이 존재하게 된다. 이러한 링크들을 직접 눌러서 해당 페이지로 이동하지 않고, 링크위에 마우스를 올려놓기만 해도(옵션설정에 따라 조금 다름)
해당 페이지의 내용을 '미리보기'할 수 있는 프로그램.
속도도 그다지 나쁘지 않아 직접 이동하기는 그렇고 간단히 링크의 내용을 살펴보고만 싶을때 활용하면 좋을 듯.
하지만, 실제로는 그다지 자주 사용하게 될 프로그램은 아닌 것으로 판단됨.
왜냐하면, 초고속 인터넷 환경속에 있는 국내 사용자들의 경우에는 궁금하면 그냥 클릭해보면 되고
되돌아 올때에도 아래에 나오는 'Mouse Gesture'등을 이용해 마우스의 액션만으로 원래 페이지로 돌아오면 되기 때문.
조금은 화려하고 색다른 것을 원하는 사용자들에게 좋을 듯 하다.

[참고]
같은 회사 제품가운데 'Cooliris PicLens'라고 하는 이미지들을 '3D Wall'의 형태로 보여주는 프로그램도 굉장히 색다른 편.
하지만, 내 컴퓨터에서는 오류가 발생해 정확히 테스트해보지는 못했으나 사진 좋아하는 사람들은 하나쯤 설치해봐도 좋을 듯.

2. FastDic(필수)
특정 단어위에서 마우스 클릭을 하면, 해당 단어에 대한 '네이버사전'이나 '다음사전'의 창이 나타나는 프로그램.
Alt+클릭, Ctrl+클릭, Shift+클릭 등의 각각의 동작마다 서로 다른 사전을 지정할 수 있어 
사전을 자주 찾아보게 되는 사용자들에게는 아주 유용함.

3. Fasterfox(필수)
불여우의 페이지 로딩 속도를 전반적으로 향상시켜주는 프로그램.

4. Firefox Showcase
여러개의 탭이 열려있을 때, 각 탭에서 포함하고 있는 웹페이지들을 한꺼번에 보여줌으로
자신이 원하는 탭으로 빠르게 이동할 수 있도록 해주는 프로그램.
예전에는 어느 정도 필수 프로그램으로 사용자들에게 인정받았었지만...
사실 해당 기능을 사용하게 되는 경우는 실제 상황에서 그다지 발생하지 않게 됨.
게다가 다음에 소개할 'Tab Mix Plus' 프로그램을 설치하면 마우스를 탭위에 올려놓기만 해도(클릭하지 않고!!!)
해당 탭을 클릭한 것과 동일한 효과를 내주기 때문에 점점 더 Showcase의 필요성은 떨어지는 듯.

5. FireFTP
불여우내에서 그대로 활용할 수 있는 FTP Client 프로그램.
FTP를 자주 활용하는 사용자들에게는 유용하리라 생각.

6. Google Toolbar for Firefox(필수)
구글 검색을 주로 활용하며 Gmail까지 사용한다면 그야말로 필수적으로 깔아두어야할 프로그램.
기본적인 구글 검색뿐 아니라 '사이트내 검색', '이미지 검색', '뉴스 검색' 등을 한방에 활용할 수 있고
고정적인 툴바가 아니라 새로운 기능의 툴바용 버튼들을 언제든 추가하거나 삭제할 수 있는 자유로움까지 있어
일반 사용자들 역시 필수적으로 깔아서 활용하면 좋다고 생각함.

7. IE Tab(필수)
그야말로 더이상 무겁고 느리기만 한 '인터넷 익스플로러'를 사용하지 않아도 되게 해주는 고마운 녀석.
마우스 클릭 한번으로 현재 웹페이지의 렌더링 엔진을 모질라에서 IE로, IE에서 모질라로 빠르게 전환할 수 있는 프로그램으로
제일 좋은 것은 불여우 프로그램내에서 이 모든 것이 이루어진다는 점!!
실제로 불여우 사용에 제일 문제가 되는 인터넷뱅킹 역시도 전혀 문제없이 동작하는 것을 확인함.
이제 IE는 정말로 안녕~~~

8. Mouse Gestures(필수) 
간단한 마우스 액션으로 '이전 페이지로 가기', '다음 페이지로 가기', 탭간의 이동, 그림 확대/축소/감추기, 페이지 확대/축소 등을
자유자재로 할 수 있으며, 언제든 마우스 액션을 편집하여 자신이 원하는 형태로 수정할 수 있는 프로그램.
그야말로 필수!!!

9. Tab Mix Plus(필수)
탭 브라우징이 핵심적 기능 중 하나인 불여우에게 있어서는 꼭 필요한 프로그램.
탭위에 마우스만 올려놓아도 해당 탭을 선택한 것과 동일한 효과를 내주는 것에서부터 시작해서
마우스 가운데 버튼 클릭으로 해당 탭 닫기, 모든 링크를 탭으로 열기 등
탭과 관련된 대부분의 설정을 자유자재로 할 수 있는 프로그램.

10. Tab Effect
마치 '3D 데스크톱' 프로그램들 처럼 육면체 큐빅이 돌아가는 형태로 탭간의 이동 효과를 내주는 프로그램.
필수 프로그램은 아니고 화려하고 색다른 것을 좋아하는 사람들이 설치하면 좋을 듯.


이 외에도 웹페이지에 embed된 비디오, 오디오 파일 다운로드하는 기능,
한 페이지에 포함되어있는 여러가지 리소스를 한번에 다운받기 등 다양한 확장기능들이 너무나도 많으니
더 필요하신 분들께서는 직접 나들이해보시길...
참고로, 확장기능이 추가될때마다 자동으로 알려주는 RSS의 주소는 다음과 같다.
http://update.mozilla.or.kr/addons/?feed=rss2&application=firefox&addonType=extension
반응형
Posted by [PineTree]
ORACLE/Backup & Recovery2008. 3. 5. 20:02
반응형
PURPOSE
-------
The following documentation announces the obsolescence of the incremental exports:

1. "Oracle8i Utilities Release 2 (8.1.6)" (which is included as such in
   "Oracle Documentation Library, Release 8.1.7") says:

   Incremental, Cumulative, and Complete Exports

   Important: Incremental, cumulative, and complete Exports are obsolete
              features that will be phased out in a subsequent release.
              You should begin now to migrate to Oracle's Backup and
              Recovery Manager for database backups.

2. The
Note 120608.1 "[8.1.7.0] Generic Server README for Oracle8i Release 3"
   says:

   5.2.3 Incremental, Cumulative, and Complete Features No Longer Supported
   Incremental, cumulative, and complete Exports are obsolete features.
   They are no longer documented, nor is their use supported by Oracle
   Corporation.

RMAN incremental backup is the only corresponding feature to replace the EXPORT
incremental backup.

This document describes the differences between both.

SCOPE & APPLICATION
-------------------

For those DBAs that use EXPORT incremental backups, the document illustrates
the points they should be aware of when migrating from EXPORT incremental backups
strategy towards RMAN incremental backups.


Comparable features between EXPORT / RMAN
-----------------------------------------


              EXPORT                 |             RMAN
________________________________________________________________________________

                            Levels of increment
________________________________________________________________________________

3 levels                             | 5 levels 0,1,2,3,4 and 2 types
INCTYPE=COMPLETE FULL=Y             |   Level 0 (equivalent)
         baseline for all cumulative | 
         and incremental backups     |
                                     |
INCTYPE=CUMULATIVE FULL=Y           | CUMULATIVE INCREMENTAL 
         backs up changes since last |   backs up all blocks changed since most
         cumulative or complete      |   recent level n-1 or lower
                                     |
INCTYPE=INCREMENTAL  FULL=Y         | DIFFERENTIAL INCREMENTAL
         backs up changes since last |   backs up all blocks changed since most
         incremental, cumulative or  |   recent level n or lower
         complete                    |  

* A higher number of levels in RMAN may reduce recovery time in case of media recovery.

________________________________________________________________________________

                             What is backed up ?
________________________________________________________________________________

If only one row of a table is changed| All blocks changed since the last
the ENTIRE table is backed up in the | backup  <=  level n (for differential)
next incremental export (of any type)| All blocks changed since the last
                                     | backup  <=  level n-1 (for culumative)                               

* The EXPORT incremental backup relies on object level and RMAN on block level.
* The amount of data to be backed up is optimized in RMAN.
________________________________________________________________________________
                                
                                Reporting
________________________________________________________________________________

To display the list of available     | To display the list of available
incremental backups and content:     | incremental backups:
                                     |
SELECT * FROM                        | RMAN> list backupset of database;
SYS.INCEXP                           | 
  List of tables exported in all     |      
  incremental exports                |       
SYS.FIL                              |
  all incremental/cumulative exports |
SYS.INCVID                           |
  ID of the last valid export, used  |
  to determine the ID of next export |
                                     | To report files requiring a new backup if
                                     | a complete recovery would need more than the
                                     | specified number of incremental:
                                     |
                                     | RMAN> report need backup incremental n
                                     |       database;

* With RMAN report command, the DBA can anticipate the need of new backups to
  reduce recovery time.

________________________________________________________________________________

                                  Usage
________________________________________________________________________________

1/ Recreation of a database and      | The incremental RMAN backup allows media
   incremental imports in case of a  | recovery at different levels:
   database erased                   |   * database
                                     |   * tablespace
2/ Recreation of a dropped table     |   * datafile
                                   
* RMAN automatically selects the successive incremental backups to be restored
  and applied during a media recovery.


RELATED DOCUMENTS
-----------------
Oracle Documentation Library, Release 8.1.7 Oracle8i Utilities Release 2 (8.1.6)
Note 120608.1  [8.1.7.0] Generic Server README for Oracle8i Release 3
Note 50875.1   Getting Started with Server-Managed Recovery (SMR) and RMAN
Note 115118.1  Using an incremental export to recover a dropped table
반응형
Posted by [PineTree]
OS/LINUX2008. 3. 3. 20:01
반응형

1. 개요

   얼마 전에 누가 OpenVPN을 사용해 보라고 해서, 셋팅을 해서 사용해 해본 결과 쓸만 하고 또

   GPL 라이센스라 무료로 사용할 수 있고 한번도 뚤리적이 없을 정도로 안전하다고 합니다.

   사용법도 간단하여 원격 작업을 위한 터널을 만들어도 좋을 것 같아 여러분들과 공유 하고 싶어

   간단하게 사용법을 정리 하였습니다.

   원론적인 것 보다 실제로 사용 하는데 필요한 부분만 간단하게 정리 하였구요, 많이 활용하시기

   바랍니다.

 

   OpenVPN 사이트 ( http://openvpn.net )

 

 

 2. 설치

   1) FreeBSD

      -  커널 빌드 할때 아래의 옵션을 넣어 주세요. (Generic 커널에는 들어 있을 것 같음)

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

         device          tun
         device          tap

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

      - Ports를 이용 하여 설치

         /usr/ports/security/openvpn 에서 make install

      - 설치후 생성 되는 디렉토리/파일

        /usr/local/bin/openvpn  --> 실행파일

        /usr/local/share/doc/openvpn/easy-rsa  --> 키 생성을 하기 위한 디렉토리

        /usr/local/etc/rc.d/openvpn.sh  --> openvpn 구동을 위한 파일

 

   2) Linux (Fedora Core 3 에서 테스트)

     - 다운로드

        http://dag.wieers.com/packages/openvpn/
        --> openvpn-2.0.2-1.1.fc3.rf.i386.rpm (버전에 맞는 것을 다운 받음)

     - 설치

        rpm -Uvh openvpn-2.0.2-1.1.fc3.rf.i386.rpm

     - 설치후 생성 되는 디렉토리/파일

       /usr/sbin/openvpn

       /usr/share/doc/openvpn/easy-rsa

 

   3) Windows

      - 다운로드

        http://openvpn.net  에서  openvpn-2.0.5-install.exe 다운로드

        윈도우에서 사용 할 때는 그냥 openvpn 을 사용 하는 것 보다 OpenVPN-GUI 를 사용

        하면 구동 하기가 더 편리 합니다.

        (홈페이지에 Graphical User Interface 에 들어가면 다양한 종료가 있습니다.)

      - 설치

        일반적인 위도우 응용프로그램과 같이 설치 하면 됩니다.

      - 설치후 생성 되는 것

        TAP-Win32 Adapter 가 생깁니다. (바탕화면의 "내 네트워크 환경" 에서 속성 보면 됨)

        C:\Program Files\OpenVPN --> OpenVPN관련 파일 생성됨

     

 

   4) 기타

       디렉토리 구조만 조금씩 다른 뿐이지 어떤 OS 이던 똑 같은 구조로 동작 합니다.

       기타 다른 OS에서도 특별한 문제 없이 사용 할 수 있을 것입니다.

       http://openvpn.net/install.html   (여기를 참조 하시기 바랍니다.)

 

    *  특별히 다른 것은 없지만 이해를 돕기 위해 다음의 환경 셋팅 등에서도 3개의

       OS 위주로 설명을 합니다.

      

 

3. 환경 셋팅

  1) 설정 파일

     a. FreeBSD

        - 설정파일과 키값이 저장될 디렉토리 생성 

          # mkdir /usr/local/etc/openvpn

          # mkdir /usr/local/etc/openvpn/keys

        - /usr/local/etc/openvpn/openvpn.conf   (설정파일)

           다른 OS도 동일하게 생성 하므로 아래의 키생성에서 같이 설명함

           서버와 클라이언트에 따라서 다르게 설정함

      

        - 구동을 위한 환경 설정

          /etc/rc.conf 에 다음을 추가

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

            openvpn_enable="YES"
            openvpn_if="tap"
            openvpn_configfile="/usr/local/etc/openvpn/openvpn.conf"
            openvpn_dir="/usr/local/etc/openvpn"

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

 

        -  실행방법

           # cd /usr/loal/etc/rc.d

           # ./openvpn.sh start

 

    b. Linux

        - 설정파일과 키값이 저장될 디렉토리 생성 

          # mkdir /etc/openvpn

          # mkdir /etc/openvpn/keys

 

        - 구동을 위한 환경 설정

          # chkconfig --list | grep openvpn  --> 확인한 후

          # chkconfig --level 3 openvpn on

 

        - 실행

          # /etc/init.d/openvpn start

 

    c. Windows

       - 디렉토리 생성

         C:\Program Files\OpenVPN\config

         C:\Program Files\OpenVPN\config\keys

 

      -  실행 (cmd  쉘에서 실행)

         cmd> openvpn --config openvpn.conf

         * OpenVPN-GNU 를 설치 하면 트레이에서 시작하고 종료 할 수 있습니다.

            (OpenVPN 홈페이지에서 좌측에 "Graphical User Interface" 로 들어가서 받으세요.)

 

  2) 설정 파일 생성

     - 서버용 (openvpn.conf)

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

       dev tap
       proto tcp-server
       ifconfig 192.168.0.1 255.255.255.0   --> 서버의 vpn  주소
       verb 1
       mode server
       tls-server
      ca              keys/ca.crt
      cert            keys/server.crt
      key             keys/server.key
      dh              keys/dh1024.pem
      ifconfig-pool   192.168.0.101   192.168.0.200   --> 클라언트로 DHCP로 받을때 IP범위
      user    root
      group   wheel
      #inactive       600
      client-to-client

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

 

 

    - 클라이언트용 (openvpn.conf)

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

       remote 100.100.100.1     --> openvpn 서버 주소
       dev tap                       --> 사용 장치명
       proto tcp-client
       ifconfig 192.168.0.10 255.255.255.0     --> IP를 고정 할때 사용,

       verb 2                                                 없으면 DHCP방식으로 서버에서 받음
       tls-client
       ca      keys/ca.crt        --> 아래의 3개는 서버에서 생성 된 것을 받아와야
       cert    keys/client.crt
       key     keys/client.key    

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

 

 

  3) 키 생성

     - 아래의 디렉토리로 이동

        # cd /usr/local/share/doc/openvpn/easy-rsa  (FreeBSD)

        # cd /usr/share/doc/openvpn/easy-rsa (Linux)

 

     - vars 수정 (아래와 같이 적당히 수정, 중요한 것은 동일한 값을 가져야 한다는 것임)

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

        export KEY_DIR=/usr/local/etc/openvpn/keys
        export KEY_COUNTRY=KO
        export KEY_PROVINCE=NA
        export KEY_CITY=SEOUL
        export KEY_ORG="VPN-TEST"
        export KEY_EMAIL="vpn-admin@vpn-test.com"

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

 

     - 서버측의 키 생성 (bash 쉘에서 실행 하기 바람)

       # . vars

       # ./clean-all  --> index 생성을 위해서 함
       # ./build-ca   --> 변경 되면 모든 인증서가 파기되어야 함으로 최초 한 번만 실행
       # ./build-dh   --> 랜덤암호화를 위해 생성
       # ./build-key-server server     


      - 클라이언트 용 key 생성

        # . vars
        # ./build-req <사용자ID>   --> 키 생성
        # ./sign-req <사용자ID>    --> 키에 대하여 서명

 

      - build-req 실행 예

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

         # ./build-req client

        Country Name (2 letter code) [KO]:
        State or Province Name (full name) [NA]:
        Locality Name (eg, city) [SEOUL]:
        Organization Name (eg, company) [VPN-TEST]:
        Organizational Unit Name (eg, section) []:
        Common Name (eg, your name or your server's hostname) []:client-test
        Email Address [vpn-admin@vpn-test.com]:

        Please enter the following 'extra' attributes
        to be sent with your certificate request
        A challenge password []:
        An optional company name []:

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

      주의 사항 : 

          Common Name 은 로그 분석시 구별 되는 값 임으로 알 수 있는 이름으로 설정함

          Organizational Unit Name 까지 동일한 값으로 해야 인증키가 먹음

          challenge password 는 PPP인증등에서 사용 됨으로 설정 하지 않음

       

      -  키를 클라이언트로 복사 (client 라는 이름으로 생성 했을때)

        /usr/local/etc/openvpn/key 아래에 생성된 3개의 파일을 복사

        ca.crt ,      client.crt ,      client.key 

        * 사용자 키는 서버에서 생성해서 클라이언트로 복사해야 함, 따라서 모든 키생성은

           서버에서 해야 함.

 

 

4. 전체 구성

 

                   

 

 

  - 서버로 접속을 하여 키 인증등을 거쳐서 상호 VPN 터널을 완성 시킴

  - VPN서버가 방화벽 내부에 있다면 TCP1194로의 연결 만큼을 허용해 주어야 함

 

 

5. 기타 참고 사항

   - 물리적인 서버를 바꾸려면

     /usr/local/etc/openvpn/keys 키가 들어 있는 디렉토리를 통체로 옮겨서 사용 하면

     클라이언트의 키를 다시 발급 하지 않고 사용 할 수 있음

   - 기타 다양한 활용에 대해서는 openvpn.net 을 보면 많이 도움이 됩니다.

 

작성 : 마그마(필명) putter@naver

반응형

'OS > LINUX' 카테고리의 다른 글

rpm으로 커널 업그레이드 하기  (0) 2008.03.12
[linux] CentOS4 XManager 연결 가능하게 하기  (0) 2008.03.10
REDHAT 9 설치후 기본 셋팅  (0) 2008.02.27
redhat 9.0 에서 한글이 깨질때..조치  (0) 2008.02.27
[LINUX] rpmbuild  (0) 2008.02.11
Posted by [PineTree]
OS/SOLARIS2008. 2. 28. 22:31
반응형

출처

http://solarisschool.com/tip/view.html?board=tip1&no=17879&start=0&sselect=&mode=&qry_string=

 

 

솔라리스에서 삼바 서버는 지원한다.
이 문서는 선에서 지원하는 삼바서버를 참고로 한다. 소스로 삼바를 설치한다면
문서가 조금 달라질 것이다.


1. 삼바 서버 기본 환경

pkginfo 명령어로 삼바 서버가 설치되어 있는지 확인해보자.

[root@/root] # pkginfo |grep samba
system SUNWsmbac samba - A Windows SMB/CIFS fileserv
er for UNIX (client)
system SUNWsmbar samba - A Windows SMB/CIFS fileserv
er for UNIX (Root)
system SUNWsmbau samba - A Windows SMB/CIFS fileserv
er for UNIX (Usr)

위와 같이 나온다면 당연히 설치되어 있다.

이제 계획을 잡자.
삼바 서버로 접속하는 외부 클라이언트에게 어떤 계정을 줄 것이며, 이 계정으
로 작동할 것인가?
삼버 서버의 데이터로는 어디로 할것인가? 이다.

우선 외부에서 삼바 서버로 접속하는 클라이언트에게 samba라는 계정을 주자
그리고 이 계정은 sambagroup라는 그룹으로 묶자
왜? 삼바 데이터 서버는 여러개 만들 수 있다. 그리고 각 데이터 서버로 접속
하는 클라이언트에 다른 계정을 줄 수 있다. 그러니 그룹으로 관리해주면
편할것이다.

간단히 삼바 서버의 데이터 저장 등으로 사용할 디렉토리를 /export/home/samba
로 잡자.

정리해보자

삼바 서버 계정 : samba
삼바 서버 그룹 : sambagrp
삼바 서버 디렉토리 : /export/home/samba
윈도우 작업 그룹 : MSHOME
(이것을 확인하는 방법은 내컴퓨터-> 속성 누르면 시스템 등록 정보가 뜬다
일반, 컴퓨터 이름, 하드웨어.. 등등 많은 메뉴가 있다 이중 컴퓨터 이름에
들어가 본다면
전체 컴퓨터 이름: canard.
작업 그룹 : MSHOME
로 등록되어 있다.)

그리고 확인해보자. 클라이언트로 사용할 컴퓨터에서 삼바 서버가 돌아가는지
확인해보자. 당연히 삼바 서버에서 서버가 작동하지 않으니 않나올 것이다.
window xp에서 확인하는 방법이다.

네트워크 -> 작업 그룹 컴퓨터 보기
해보면 작업 그룹 컴퓨터에 삼바 서버가 전혀 보이지 않는다.


2. 삼바 서버 기본 작업

자 삼바 서버 돌리기 전에 우리는 삼바 서버를 어떻게 구성할 것이며 어떤 계
정을 사용할 지 계획을 세웠다. 이에 맞춰서 작업을 해보자.
우선 그룹과 계정 및 삼바서버에서 사용할 데이터 디렉토리를 만들어야할 것
이다. 이때 데이터 디렉토리는 계정을 만들면서 사용자 홈디렉토리를 사용하면
편할 것이다. (그래서 /export/home/samba)를 사용했따.

[root@/root] # groupadd sambagrp
[root@/root] # useradd -m -d /export/home/samba -G sambagrp -s /bin/false samba
64 blocks
[root@/root] #

useradd의 옵션은 잘 아리라 생각한다. 그래서 다른 설명은 하지 않는다. 그리
고 이곳에서 보안을 위해서 쉘을 /bin/false(-s /bin/false) 사용해서 일반 접
속을 막는다.

자 이것으로 기본 설정은 끝이 났는가? 아니다. 몇가지 설정이 더 남았다.
/etc/hosts 파일과 /etc/lmhosts 파일에 삼바 서버에 접속할 클라이언트를 삽입
한다.

클라이언트를 살펴보면
211.175.131.32 의 IP를 가지며 netbios의 이름으로 canard를 가진다. 그리고
작업 그룹으로 MSHOME를 가진다. 이곳 설정에서는 약간 난이도를 높여서 삼바
서버에서 클라이언트 서버에서 붙이는 이름과 netbios 이름을 다르게 설정해
서 테스트 해보자.

[root@/root] # cat /etc/hosts
127.0.0.1 localhost
211.175.147.154 ns loghost
211.175.131.32 www1
211.175.131.33 www2
이 서버에서는 클라이언트의 이름을 www1으로 줬다.

다음은 /etc/lmhosts 파일이 남았다. 이 파일은 무엇이냐면 netbios 이름과
/etc/hosts 파일에서 설정해 놓은 이름과 매칭 시키는 설정 파일이다.
삼바 서버에서는 www1 컴퓨터를 가르치지만 netbios에서의 이름은 다를 수있
으며 같을 수도 있다.

[root@/root] # cat /etc/lmhosts
localhost ns
www1 canard
www2 test

자 첫 번째 이름은 서버에서 지정해 준 이름이며 두번째 이름은 netbios 이름
이다. 즉 www1은 netbios 이름으로 canard를 뜻한다.

이제 기본적인 설정은 끝이 났다. 이제 삼바 설정 파일의 설정으로 삼바 서버
가 올바로 작동하는 것인가? 아니면 올바로 작동하지 않을 것인가가 결정된다.


3. SWAT 작동시키기

우리는 삼바 서버의 설정을 편하게 하고 싶다. 이것은 사람의 욕망이라면 당연
한 반응이다. (내가 볼 때는 SWAT로 설정하거나 손으로 작업하거나 그게 그거
같다. 설정의 어려움은 대략 비슷하다.)

사람들은 manpage를 뒤져보지 않는 경향이 많다. 그러나 우리는 필히 맨패이지
를 보고 확인해야한다. 이유는? 맨페이지를 뒤져보면 활용법 및 설정이 어느
정도 선까지는 자세히 설명되어 있기 때문이다.

잡설은 넘어가고 위에서 필요로 하는 패키지가 모두 설치되어 있다면 삼바 서
버에 관련된 파일들이 모두 설치되어 있다. 당연히 swat로 설치되어 있다.
확인해보자.

[root@/root] # ls /usr/sfw/sbin/
nmbd smbd tcpd tcpdmatch
safe_finger swat tcpdchk try-from
[root@/root] #

위의 명령어를 사용해보니 nmbd smbd swat 파일이 모두 있다.

그리고 shell> man swat 명령어를 사용해보니 swat를 사용하기 위해서는 2가지
설정을 해줘야 한다고 나온다.
참고로 man swat 않된다고 하지 말자
[root@/root] # man swat
No manual entry for swat.
[root@/root] # export MANPATH=/usr/man:/usr/sfw/man
[root@/root] #
환경변수 MANPATH를 설정 안해줘서 그렇다.

맨패이지 중 중요한 부분을 발췌했다.

You need to edit your /etc/inetd.conf and /etc/services to
enable SWAT to be launched via inetd.

In /etc/services you need to add a line like this:

swat 901/tcp

In /etc/inetd.conf you should add a line like this:

swat stream tcp nowait.400 root /usr/sfw/sbin/swat swat

One you have edited /etc/services and /etc/inetd.conf you
need to send a HUP signal to inetd. To do this use kill -1
PID where PID is the process ID of the inetd daemon.

봐서 알겠지만 /etc/services 파일에
swat 901/tcp
를 적어 넣으라고 나와있다

그리고 /etc/inetd.conf 파일에
swat stream tcp nowait.400 root /usr/sfw/sbin/swat swat
를 적어 넣으라고 나왔다.

그러면 이제 inetd 서버스를 재 시작해보자. 여러 방법이 있으니 알아서..
(이런 것까지는 알갈쳐준다.)

이제 삼바 서버에서 넷스케이프를 띄워서
http://localhost:901 의 주소를 사용해본다.

잘나온다. 이제 노력과 끈기로 자신의 시스템에 맞는 설정을 찾아야한다.

그리고 우리는 삼바 시작 스크립트를 살펴보자.
shell> vi /etc/init.d/samba
case "$1" in
start)
[ -f /etc/sfw/smb.conf ] || exit 0

/usr/sfw/sbin/smbd -D
/usr/sfw/sbin/nmbd -D
;;

위에서 보다 싶이 설정 파일은 /etc/sfw/smb.conf이다. SWAT를 작성하면 이곳
에 설정 파일이 만들어 질 것이다.
그리고 서버 시작시 삼바 서버가 작동하도록 스크립트를 활성화 시키자.


4. 삼바 설정 파일

사실 노력과 끈기로 삼바 설정파일을 구성하는 것은 상당히 힘들다. 그리고
설정의 하나하나의 뜻을 알아야 삼바 설정을 마무리 할 수 있다.
삼바 설정에 관련된 내용을 모두 적으면 무척이나 내용이 길어질 수 있다.
그래서 보안이 아~주 허술하지만 작동은 하는 설정을 예시한다.

shell> vi /etc/sfw/smb.conf
# Global parameters
[global]
workgroup = MSHOME
server string = nimp.samba
security = SHARE
guest account = samba
hosts allow = 211.175.131.32

[samba]
comment=SambaData
path = /export/home/samba
guest only = Yes
guest ok = Yes
read only = No

[global] 부분은 삼바에 접속하는 클라이언트에 해당하는 내용이다.
이후 내용은 삼바에서 데이터를 관리하는 부분에 관련된 설정이다.
[global] 부분은 네트워크 -> 작업 그룹 컴퓨터 보기에서 보여지는
내용이며 이후 내용은 작업 그룹 컴퓨터에서 삼바 서버로 접속시 보여지는
부분이다.
간단히 global 부분에서 설명하자면
클라이언트의 workgroup는 MSHOME의 작업그룹이며 보여지는 이름은 nimp.samba
이다. 직접확인해보면
canard 컴퓨터 옆에 nimp.samba(Ns)라는 컴퓨터가 하나더 보일 것이다. 이것이
삼바 서버로 작동하는 컴퓨터이다.
그리고 보안 방식으로는 SHARE (공유 방식)을 사용했으며, 삼바에 접속하는
클라이언트에게는 samba라는 계정을 사용하게 설정 해 놓은 것이다. 그리고
접속 가능한 클라이언트는 211.175.131.32 IP를 가지는 클라이언트 하나이다.
좀더 많은 클라이언트가 가능하게 하려면 /를 사용한다.

hosts allow = 211.175.131.32 192.168.0.1/24

이상이다. 이렇게 한다면 삼바 서버는 원할히 작동할 것이다. 자세히 설명을
읽어봐야 삼바 설정을 어떻게 해야하며, 클라이언트에 따라 어떻게 설정해야
하는 것인가를 잘 알 수 있다.

참고로 더 자세한 내용을 살펴보려면 삼바 홈페이지에 접속해서 설정에 들어
가는 옵션을 하나하나 설정해서 서버에 적용시키자. swat를 사용해도 된다.
그리고 위의 에제는 로그도 남지지 않는 아~주 보안에 허술한 설정이다. 작동
은 하지만 보안을 위해서 그대로 사용하는 것은 금물이다.

그리고 http://dosc.sun.com에 접속해서 삼바를 설정하는 것을 참고하자.
위의 내용은 리눅스에서도 적용이 가능한 내용이다. 그러나 솔라리스에서는
조금 다르게 작동할 수 있도록 할 수 있다. docs.sun.com의 자료를 살펴보면
다르게 설정할 수 있는 내용을 에시해 놓았으니, 자세히 살펴보자.
솔라리스 문서가 그렇듯, 상당히 허술하면서, 또한 상당히 복잡하다.

 

반응형

'OS > SOLARIS' 카테고리의 다른 글

SWAT SVM RAID  (0) 2009.05.25
미러 디스크 장애시 디스크 교체하기  (0) 2009.05.07
VMSTAT  (0) 2007.12.07
솔라리스에서 xmanager 접속을 차단하거나, 통제하기  (0) 2007.11.17
sun ipmp 관련 정보 사이트들  (0) 2007.08.28
Posted by [PineTree]
OS/LINUX2008. 2. 27. 00:48
반응형

1. ftp 보다 좋은 ncftp 설치

서버 작업을 많이하면, ftp를 많이 사용한다. 하지만 ftp 보다 사용하기 편한 ncftp를 알면 ftp 쓰는 것이 그렇게 불편하게 느껴질 수 가 없다. 난 처음부터 ncftp를 사용해 왔다. RH9에서는 기본설치가 안되어 따로 패키지를 받아서 설치하겠다. 물론 배포판 CD에 있지만, 넣고 마운트하고 어쿠 어쿠 귀찮은 것~~ 간단하게 받아서 설치 할 것이다.


wget http://ftp.superuser.co.kr/pub/redhat/9/RPMS/ncftp-3.1.5-4.i386.rpm

위와같은 명령을 입력하면 받아진다.^^ 


rpm -Uvh ncftp-3.1.5-4.i386.rpm

이렇게 하면 설치하고,


rm -rf ncftp-3.1.5-4.i386.rpm

이렇게 해서 원본 파일을 지워 버린다.^^ 이렇게 설치를 하면 끝이다. 아주 쉽다^^ 이제


ncftp 의 대표적인 기능 몇가지만 알아 보겠다.


[doly@doly ~]$ ncftp ftp.superuser.co.kr

NcFTP 3.0.3 (April 15, 2001) by Mike Gleason (ncftp@ncftp.com).

Copyright (c) 1992-2001 by Mike Gleason.

All rights reserved.

Connecting to ftp.superuser.co.kr...                                                                       

ProFTPD 1.2.8 Server (ProFTPD Default Installation) [su21.nicekorea.co.kr]

Logging in...                                                                                              

Anonymous access granted, restrictions apply.

Logged in to ftp.superuser.co.kr.                                                                          

ncftp / >


위와같이 간단하게 쳐 주면, 무명(anonymous) 로긴이 가능하다.

물론 -u 옵션을 주면 사용자로긴이 가능하다.

ncftp -u doly ftp.superuser.co.kr


그리구 파일이나, 디렉토리이름을 모두 칠 필요 없이 Linux 터미널 처럼 몇자 치고 Tab 키를 누르면, 자동완성이 된다. 이 기능이 아주 좋기 때문에 난 이 프로그램을 쓴다.

전송기능에 있어 다음과 같이 상황이 나온다.

ncftp /apache > get httpd-2.0.49.tar.gz

httpd-2.0.49.tar.gz:                                     5.65 MB  299.92 kB/s 


이런 이유들 때문에 ncftp를 쓴다. ncget , ncput 등의 명령어도 제공된다. 그건 잘 쓰지 않지만 좋은 프로그램들이다.



2. MAN 페이지에서 한글이 깨어진다면.

** 참고 : 아래의 설정은 멘 페이지의 한글이 깨어지는 것을 보안하기위한 설정입니다. 아래 패키지를 설치한다고 해서 콘솔에서 한글이 안 깨지는 것은 아닙니다. 콘솔에서 한글이 깨어지지 않게 하려면, Unicon등 콘솔에서 한글을 지원하는 특별한 프로그램을 커널 컴파일 할 때 넣어야 합니다. 서버를 운영하시는 대부분의 사람들은 콘솔에서 한글 쓸일이 거의 없기 때문에 그 부분은 다루지 않겠습니다.


아마 RH9를 설치한 모든 사람들이 격을 것이다. 멘 페이지에 가끔 한글로 된 것을 볼 수 있는데, 100% 깨어질 것이다.


이렇게 알 수 없는 &&& 문자들로 이루어질 것이다.

이런 경우 다음 패키지를 깔면 문제가 없다.^^


[root@doly root]# wget http://ftp.superuser.co.kr/pub/redhat/9/less-378-8KR.i386.rpm

--21:33:50--  http://ftp.superuser.co.kr/pub/redhat/9/less-378-8KR.i386.rpm

           => `less-378-8KR.i386.rpm'

Resolving ftp.superuser.co.kr... 완료.

Connecting to ftp.superuser.co.kr[210.114.223.221]:80... connected.

HTTP 요청을 보냅니다, 서버로부터의 응답을 기다림...200 OK

길이:   100,767 [audio/x-pn-realaudio-plugin]

100%[=================================================================>] 100,767      289.43K/s    ETA 00:00

21:33:50 (289.43 KB/s) - `less-378-8KR.i386.rpm'가 보존되었습니다 [100767/100767]

[root@doly root]# rpm -Uvh less-378-8KR.i386.rpm

준비 중...                  ########################################### [100%]

1:less                   ########################################### [100%]

[root@doly root]# rm -rf less-378-8KR.i386.rpm


이렇게 서치가 끝나고 실행해 보면 정상적인 결과를 볼 수 있다.



3. rpm으로 커널 업그래이드

2004년에 커널 버그가 엄청 많이 보고 되었다. 지금까지 나온 커널을 패치한 rpm 버전이 있다. 이것을 설치한다. 물론 조금 더 공부했다며, 최신 버전 커널을 컴파일 해서 설치하는 것도 좋지만, 시간이 너무 오래 걸리고, 알아야할 것도 많기 때문에 지금까지 나온 버그를 모두 고친 커널을 rpm 으로 설치한다.

wget http://ftp.superuser.co.kr/pub/redhat/9/update/kernel-smp-2.4.20-30.9.i686.rpm

wget http://ftp.superuser.co.kr/pub/redhat/9/update/kernel-2.4.20-30.9.i686.rpm

rpm -Uvh kernel-smp-2.4.20-30.9.i686.rpm

rpm -Uvh kernel-2.4.20-30.9.i686.rpm

rm -rf kernel-*.rpm

cpu 가 2개라면 smp 커널을 설치해야한다. 하지만 cpu가 하나라면, smp 는 설치하지 말아두 된다.^^



4. badblock 채크 및 마킹

설치할 때도  배드블락을 채크했을 것이다. 그렇지만 어디에 배드블럭이 있고 어떻게 되었는지에 대한 정보를 얻을 수 없다. 그래서 다시 배드블락을 채크할 것이다. 그리고 만약 발견된다면, 파일 시스템 수준에서 그 블락을 쓰지 못하게 마킹을 할 것이다.


[root@doly root]# badblocks -sv /dev/hda11

Checking for bad blocks in read-only mode

From block 0 to 2096451

Checking for bad blocks (read-only test): 2096451/  2096451

2096449

2096450

done                       

Pass completed, 3 bad blocks found.


위와같이 3개의 배드블럭이 발견되었다면, 다음 명령어로 아쉬운데로 마킹을 한다. (fsck 명령의 -c 옵션)

[root@doly root]# fsck.ext3 -cvf /dev/hda11

e2fsck 1.32 (09-Nov-2002)

/dev/hda11 is mounted. 

WARNING!!!  Running e2fsck on a mounted filesystem may cause

SEVERE filesystem damage.


Do you really want to continue (y/n)? yes

/123: recovering journal

Checking for bad blocks (read-only test): done                       

Pass 1: Checking inodes, blocks, and sizes

Pass 2: Checking directory structure

Pass 3: Checking directory connectivity

Pass 4: Checking reference counts

Pass 5: Checking group summary information

/123: ***** FILE SYSTEM WAS MODIFIED *****

/123: ***** REBOOT LINUX *****

   78868 inodes used (30%)

      98 non-contiguous inodes (0.1%)

         # of inodes with ind/dind/tind blocks: 3503/14/0

  325956 blocks used (62%)

       0 bad blocks

       0 large files


   53903 regular files

    3890 directories

    2522 character device files

   15884 block device files

       1 fifo

    4162 links

    2658 symbolic links (2658 fast symbolic links)

       1 socket

--------

   83021 files



이렇게 작업을 하였다면, 어느정도 안심해두 된다고 생각한다^^;



5. tcp_wapper 설정으로 기본 보안 설정

물론 처음 설치시 iptabls(방화벽)을 구축했지만, tcpd를 사용하는 데몬들중 허용하는 ip에서만 접근 가능하게 설정 할 것이다.


echo "ALL:ALL" >> /etc/hosts.deny


이런 간단한 명령어로 모든 서비스를 막는다. 물론 막히는 서비스는 몇가지 안 된다^^ 다 열거하며 힘드니~~

그런다음 항상 허용할 데몬들과 허용할 ip를 등록한다.


echo " ipop3d : ALL

sendmail : ALL

ALL : 192.168.0." >> /etc/hosts.allow


위와 같이 입력하여, pop3 서버와 sendmail 은 모든 ip에 대해서 허용하고, 192.168.0.XXX에서 접근 하면 모든 서비스를 허용하도록 한다. 위와 같이 설정하는 것은 telnet 및 ssh에 가장 영향을 많이 받기 때문에 기본 보안설정으로 사용한다. 만약 유동 ip에서 접속한다면 이런 설정이 무의미 하다.^^; ip가 변해서 잘못하면 서버에 접속하지 못하는 불상사가 발생할 수도 있다.

6. ssh 접속시 root 접속 못하게 설정

ssh에서 root로 바로 접속해서 사용하면 너무 위험하다. 그래서 일반계정으로 접속한 다음 su - 명령어로 root 권한을 획득한 다음 작업하는 것이 좋다. 다음과 같이 간단하게 설정한다.

/etc/ssh/sshd_config 파일을 편집해서 다음과 같이 설정한다.

    PermitRootLogin no

이렇게 하구 sshd를 재시작한다.

/etc/rc.d/init.d/sshd restart



7. su 명령어 특정 사용자만 실행 가능하게 설정

우선 root 권한으로 명령을 실행할 수 있는 명령어 sudo를 삭제한다.

[root@doly bin]# rm -rf /usr/bin/sudo

아래와같이 권한 설정을 바꾸고,

chmod 4750 /bin/su

chown root:wheel /bin/su

소유그룹을 wheel로 한다. 그런 다음

/etc/group 파일을 열어 wheel 그룹에 su 명령어를 쓸 사용자들을 등록한다.

(예 : wheel:x:10:root,doly)



8. 자동 시간 설정

 자동으로 정확한 시간을 맞추는 것은 의외로 간단하다. 다음과 같이한다.

[root@doly bin]# crontab -e

05 00 * * * '/usr/bin/rdate -s time.bora.net && /sbin/clock -w'

위와 같은 내용을 복사해서 넣으면 된다.  위와같이 설정해 두면, 매일 매일 00시 05분에 time.bora.net에 접속하여 시간을 동기화한다.^^

반응형

'OS > LINUX' 카테고리의 다른 글

[linux] CentOS4 XManager 연결 가능하게 하기  (0) 2008.03.10
OpenVPN 사용하기  (0) 2008.03.03
redhat 9.0 에서 한글이 깨질때..조치  (0) 2008.02.27
[LINUX] rpmbuild  (0) 2008.02.11
yum  (0) 2008.02.11
Posted by [PineTree]
OS/LINUX2008. 2. 27. 00:44
반응형
한글 사용을 없앤다.
/etc/profile
export LANG=en_US

한글을 사용한다.
/etc/profile
export LANG=ko

레드햇 9.0에서 man 명령으로 메뉴얼 참고시 한글이 ???로 깨져 보일 때
1. http://ftp.superuser.co.kr/pub/redhat/9/ 사이트로 접속
2. less-378-8KR.src.rpm 파일을 다운로드
3. rpm -Uvh less-378-8KR.src.rpm을 수행
/etc/profile
export JLESSCHARSET=euc

파일을 수정 후 적용
# source prof
반응형

'OS > LINUX' 카테고리의 다른 글

OpenVPN 사용하기  (0) 2008.03.03
REDHAT 9 설치후 기본 셋팅  (0) 2008.02.27
[LINUX] rpmbuild  (0) 2008.02.11
yum  (0) 2008.02.11
[LINUX] bonding  (0) 2008.02.11
Posted by [PineTree]
ORACLE/INSTALL2008. 2. 27. 00:22
반응형
 

 Installing Oracle 9iR2 64-bit on RHEL 4 x86-64 (AMD64/EM64T)

/usr/sbin/groupadd oinstall
/usr/sbin/groupadd dba
/usr/sbin/useradd -m -g oinstall -G dba oracle


/etc/passwd 파일 수정 oracle홈 디렉토리 변경

mkdir -p /u0/oracle
chown -R oracle:oinstall /u0
chmod -R 775 /u0


Requirements for Installing Oracle 9iR2 64-bit on RHEL 4 x86-64 (AMD64/EM64T)
1. Install the required OS components

    * This list is based upon a "default-RPMs" installation of RHEL AS/ES 4 update
    1. When a newer "update" level is used, the RPM release numbers (such as 2.4-9.1.87) may be slightly higher
        (such as 2.4-9.1.93 or 2.4-9.2.37). This is fine so long as you are still using RHEL AS/ES 4 RPMs.
    * glibc-kernheaders-2.4-9.1.87.x86_64.rpm
    * glibc-headers-2.3.4-2.9.x86_64.rpm
    * glibc-devel-2.3.4-2.9.x86_64.rpm     << both ARCH's are required. See below.
    * glibc-devel-2.3.4-2.9.i386.rpm    << both ARCH's are required. See above.
    * compat-gcc-32-3.2.3-47.3.x86_64.rpm
    * compat-gcc-32-c++-3.2.3-47.3.x86_64.rpm
    * libstdc++-devel-3.4.3-22.1.x86_64.rpm
    * libaio-0.3.103-3.x86_64.rpm

확인하기
rpm -qa --queryformat "%{NAME}-%{VERSION}-%{RELEASE} (%{ARCH})\n" | grep glibc-kernheaders
rpm -qa --queryformat "%{NAME}-%{VERSION}-%{RELEASE} (%{ARCH})\n" | grep  glibc-headers              
rpm -qa --queryformat "%{NAME}-%{VERSION}-%{RELEASE} (%{ARCH})\n" | grep  glibc-devel
rpm -qa --queryformat "%{NAME}-%{VERSION}-%{RELEASE} (%{ARCH})\n" | grep  glibc-devel
rpm -qa --queryformat "%{NAME}-%{VERSION}-%{RELEASE} (%{ARCH})\n" | grep  compat-gcc-32
rpm -qa --queryformat "%{NAME}-%{VERSION}-%{RELEASE} (%{ARCH})\n" | grep  compat-gcc-32-c++
rpm -qa --queryformat "%{NAME}-%{VERSION}-%{RELEASE} (%{ARCH})\n" | grep  libstdc++-devel
rpm -qa --queryformat "%{NAME}-%{VERSION}-%{RELEASE} (%{ARCH})\n" | grep  libaio




2. Configure the Unix environment

The first critical environment item is related to the gcc v3.2 and g++ v3.2 RPMs that were installed above. Run these commands:

    mv /usr/bin/gcc /usr/bin/gcc.orig
    mv /usr/bin/g++ /usr/bin/g++.orig
    ln -s /usr/bin/x86_64-redhat-linux-gcc32 /usr/bin/gcc
    ln -s /usr/bin/x86_64-redhat-linux-g++32 /usr/bin/g++
   
.bash_profile
   
TMDIR=/tmp
export TMDIR
export ORACLE_BASE=/u0/oracle
export ORACLE_HOME=$ORACLE_BASE/product/9.2/db_1
export NLS_LANG=AMERICAN_AMERICA.KO16KSC5601
export ORA_NLS33=$ORACLE_HOME/ocommon/nls/admin/data
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/java/lib:$ORACLE_HOME/lib:$ORACLE_HOME/oracm/lib
export ORACLE_SID=dbSID   <<==SID
export ORACLE_OWNER=oracle
export LANG=C
export LD_ASSUME_KERNEL=2.4.19 
#CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib:$ORACLE_HOME/network/jlib
export PATH=$ORACLE_HOME/bin:$ORACLE_HOME/OPatch:/sbin:/usr/local/java/bin:$PATH:.
export TNS_ADMIN=$ORACLE_HOME/network/admin
export CLASSPATH
export umask=022
export DISPLAY=ip:0.0

/etc/sysctl.conf

kernel.hostname   = magic.xxx.co.kr
kernel.domainname = magic

kernen.nem = 250 32000 100 128
kernel.shmmax = 1073741824
kernel.shmmni = 4096
kernel.shmall = 2097152
fs.file-max = 327679
net.ipv4.ip_local_port_range = 1024 65000
net.core.rmem_default = 262144
net.core.rmem_max = 262144
net.core.wmem_default = 262144
net.core.wmem_max = 262144

/etc/profile
           if [ $USER = "oracle" ]; then
               if [ $SHELL = "/bin/ksh" ]; then
                   ulimit -p 16384
                   ulimit -n 65536
               else
                   ulimit -u 16384 -n 65536
               fi
           fi
          
/etc/security/limits.conf
          
oracle              soft    nproc   2047
oracle              hard    nproc   16384
oracle              soft    nofile  1024
oracle              hard    nofile  65536

reboot 후에 install
엔진설치
9.2.0.8 패치셋 설치
db생성

반응형
Posted by [PineTree]
ORACLE/SQL2008. 2. 22. 19:33
반응형
PLT 6.9 SUBPROGRAM
PL/SQL을 지원하는 어떤 툴이나 언어에서도 SUBPROGRAM(프로시저와 함수)을 실행할 수 있다. PL/SQL내부에서 식의 일부로서 함수를 실행할 수 있다. EXECUTE는 명령 다음에 입력되는 Stored Procedure를 실행한다.
 
SUBPROGRAM의 개요
PL/SQL 프로시저와 함수는 3GL의 프로시저 및 함수와 매우 비슷하게 동작된다. 모듈화를 통해 관리가 용이하고 적절히 논리적 단위로 나누어진 프로그래밍을 할 수 있다. , 잘 정의된 논리적인 단위로 코드를 분할할 수 있다. PL/SQL에서 이들 단위를 단위 프로그램 또는 SUBPROGRAM이라 부른다. PL/SQL에는 프로시저와 함수라는 두 가지 유형의 SUBPROGRAM이 있다. SUBPROGRAM은 컴파일된 상태로 데이터베이스에 저장되어 있어 Performance가 향상된다.
 
SUBPROGRAM 작성 단계
구문 작성
TEXT 편집기를 이용하여 SCRIPT FILE CREATE PROCEDURE CREATE FUNCTION문을 작성한다.
 
SQL> ed emp_up
 
CREATE OR REPLACE PROCEDURE emp_sal_update(
                                   p_empno IN emp.empno%TYPE, p_sal IN emp.sal%TYPE)
                 IS
                 BEGIN
                                   UPDATE emp
                                                     SET sal = p_sal
                                                     WHERE empno = p_empno;
                                   IF SQL%NOTFOUND THEN
                                                     DBMS_OUTPUT.PUT_LINE(TO_CHAR(p_empno) ||
                                                                      ' 없는 사원번호입니다.');
                                   ELSE
                                                     DBMS_OUTPUT.PUT_LINE(TO_CHAR(SQL%ROWCOUNT) ||
                                                                      '명의 자료를 수정하였습니다.');
                                   END IF;
                 END emp_sal_update;
/
 
코드 컴파일
SCRIPT FILE을 실행 시켜 컴파일하여 컴파일된 코드를 데이터베이스에 저장한다.
SQL> @emp_up
 
Procedure created.
 
에러 수정
코드 컴파일시 에러가 발생하면 에러를 확인하고 수정하여 코드를 다시 컴파일한다.
SQL> @emp_up
 
Warning: Procedure created with compilation errors.
 
SQL> ed emp_up
                -- emp_up를 수정한 후 저장하고 종료한다.
SQL> @emp_up
 
Procedure created.
 
실행
SQL*Plus에서 EXECUTE명령으로 SUBPROGRAM을 실행한다.
SQL> EXECUTE emp_sal_update(7788,3500)
 
PL/SQL procedure successfully completed.
 
SQL> SELECT empno,ename,job,sal
  2  FROM emp
  3  WHERE empno = 7788;
 
    EMPNO ENAME      JOB             SAL
--------- ---------- --------- ---------
     7788 SCOTT      ANALYST        3500
 
PROCEDURE 생성
나중에 실행할 일련의 동작을 저장하기 위해 PL/SQL프로시저를 작성한다. 프로시저는 실행할 때 사용하는 Parameter가 없거나 여러 개를 가질 수도 있다. 프로시저에서는 DECLARE절이 생략되고 IS BEGIN사이에 필요한 변수를 선언하여 사용한다
 
CREATE  [OR  REPLACE]  PROCEDURE  procedure_name
             [(argument1  [mode1]  datatype [{:= | DEFAULT} expression]
             [,argument2  [mode2]  datatype [{:= | DEFAULT} expression], . . .])]
{IS | AS}
BEGIN
             pl/sql_block;
END;
 
OR  REPLACE : procedure_name이 존재할 경우 PROCEDURE의 내용을 지우고 다시 생성
procedure_name : PROCEDURE
argument : 매개변수의 이름
mode : 3가지가 있다
- IN : 입력 매개변수로 상용
 - OUT : 출력 매개변수로 사용
 - IN OUT : 입력, 출력 매개변수로 상용
pl/sql_block : PROCEDURE를 구성하는 코드를 구성하는 PL/SQL의 블록
 
n         SQL*Plus에서 프로시저를 작성할 때 CREATE OR REPLACE를 사용합니다.
n         어떠한 Parameter라도 사용 가능합니다.
n         IS PL/SQL블록을 시작합니다.
n         Local변수 선언은 IS BEGIN사이에 선언 합니다.
 
PROCEDURE 실행
PL/SQL을 지원하는 어떤 툴이나 언어에서도 프로시저를 실행할 수 있다. SQL*Plus에서 프로시저 호출은 Stored Procedure를 참조하는 PL/SQL 문을 실행하기 위해 EXECUTE 명령을 사용할 수 있다. EXECUTE는 명령 다음에 입력되는 Stored Procedure를 실행한다.
procedure_name[(argument1[,argument2, . . . .])]
 
SQL> EXECUTE emp_sal_update(7902,4000)
 
PL/SQL procedure successfully completed.
 
CREATE OR REPLACE PROCEDURE emp_input(
                  v_name    IN            emp.ename %TYPE,
                  v_job       IN            emp.job %TYPE,
                  v_mgr      IN            emp.mgr %TYPE,
                  v_sal        IN            emp.sal %TYPE)
IS
                  v_comm                    emp.comm%TYPE;
                  v_deptno                                    emp.deptno%TYPE;
                  manager_error          EXCEPTION;
BEGIN
                  IF UPPER(v_job) NOT IN ('PRESIDENT','MANAGER','ANALYST',
                                                                       'SALESMAN','CLERK') THEN
                                   RAISE manager_error;
                  ELSIF UPPER(v_job) = 'SALESMAN' THEN
                                   v_comm := 0;
                  ELSE
                                   v_comm := NULL;
                  END IF;
                  SELECT deptno
                                   INTO v_deptno
                                   FROM emp
                                   WHERE empno = v_mgr;
                  INSERT INTO emp
                                   VALUES (empno_sequence.NEXTVAL,v_name,UPPER(v_job),
                                                     v_mgr,SYSDATE,v_sal,v_comm,v_deptno);
EXCEPTION
                  WHEN manager_error THEN
                                   DBMS_OUTPUT.PUT_LINE('담당 업무가 잘못 입력되었습니다.');
                  WHEN NO_DATA_FOUND THEN
                                   DBMS_OUTPUT.PUT_LINE('입력한 MANAGER 없습니다.');
                  WHEN OTHERS THEN
                                   DBMS_OUTPUT.PUT_LINE('기타 에러입니다.');
END;
/
 
SQL> SET SERVEROUTPUT ON
SQL> EXECUTE emp_input('YOONJB','MANAGER',7788,2500)
 
FUNCTION 생성
실행 환경에 반드시 하나의 값을 Return하기 위해 PL/SQL 함수를 사용한다. 함수 선언에서 Datatype이 있는 RETURN 절을 추가하고 PL/SQL 블록에 적어도 한 개의 이상의 RETURN 문을 포함한다. PARAMETER에서 사용하는 IN,OUT,IN OUT PROCEDURE에서 사용한 것과 동일하게 사용 가능하나 대부분 IN을 사용한다.
CREATE  [OR  REPLACE]  FUNCTION  function_name
             [(argument1  [mode1]  datatype [{:= | DEFAULT} expression]
             [,argument2  [mode2]  datatype [{:= | DEFAULT} expression], . . .])]
RETURN  data_type
{IS | AS}
BEGIN
             pl/sql_block;
END;
 
 
OR  REPLACE : function_name이 존재할 경우 FUNCTION의 내용을 지우고 다시 생성
function_name : Function의 이름은 표준 Oracle 명명법에 따른 함수이름
argument : 매개변수의 이름
mode : 3가지가 있다
- IN : 입력 매개변수로 상용
 - OUT : 출력 매개변수로 사용
 - IN OUT : 입력, 출력 매개변수로 상용
data_type : 반환되는 값의 datatype
pl/sql_block : FUNCTION를 구성하는 코드를 구성하는 PL/SQL의 블록
 
RETURN
n         PL/SQL 블록에는 RETURN문이 있어야 한다.
n         함수는 RETURN 절에 지정된 것과 동일한 datatype으로 RETURN 값을 설정해야 한다.
n         다중 RETURN 문은 사용할 수 있지만 한 번의 호출로는 한 개의 RETURN 문만 실행된다.
n         일반적으로 다중 RETURN 문은 IF 문에서 사용한다.
 
FUNCTION 실행
PL/SQL을 지원하는 어떤 툴이나 언어에서도 함수를 실행할 수 있고 PL/SQL내부에서 식의 일부로서 함수를 실행할 수 있다. SQL*Plus에서 FUNCTION 호출은 Stored Function를 참조하는 PL/SQL 문을 실행하기 위해 EXECUTE 명령을 사용할 수 있다. EXECUTE는 명령 다음에 입력되는 Stored Function를 실행한다.
output_variable := function_name[(argument1[,argument2, . . . . .])]
 
SQL> EXECUTE :g_deptno := ename_deptno('ALLEN')
 
PL/SQL procedure successfully completed.
 
CREATE OR REPLACE FUNCTION ename_deptno(
                  v_ename  IN            emp.ename%TYPE)
RETURN NUMBER
IS
                  v_deptno                  emp.deptno%TYPE;
BEGIN
                  SELECT deptno
                                   INTO v_deptno
                                   FROM emp
                                   WHERE ename = UPPER(v_ename);
                  DBMS_OUTPUT.PUT_LINE('부서번호 : ' || TO_CHAR(v_deptno));
                  RETURN v_deptno;
EXCEPTION
                  WHEN NO_DATA_FOUND THEN
                                   DBMS_OUTPUT.PUT_LINE('입력한 MANAGER 없습니다.');
                  WHEN TOO_MANY_ROWS THEN
                                   DBMS_OUTPUT.PUT_LINE('자료가 2 이상입니다.');
                  WHEN OTHERS THEN
                                    DBMS_OUTPUT.PUT_LINE('기타 에러입니다.');
END;
/
 
 
SQL> SET SERVEROUTPUT ON
SQL> VAR g_deptno NUMBER
SQL> EXECUTE :g_deptno := ename_deptno('SCOTT')
부서번호 : 10
 
PL/SQL procedure successfully completed.
 
SQL> PRINT g_deptno
 
 G_DEPTNO
---------
       10
 
함수와 프로시저 비교
프로시저
함수
PL/SQL 문으로서 실행
식의 일부로서 사용
RETURN Datatype이 없음
RETURN Datatype이 필수
값을 Return할 수 있음
값을 Return하는 것이 필수
n         프로시저는 parameter리스트를 가질 수 있지만 값 반환이 필수적 이지는 않다.
n         함수는 다음과 같은 두 가지 점에서 프로시저와 다르다.
n         (expression)의 일부로서 함수를 사용한다.
n         함수는 값을 return하는 것이 필수적이다.
 
TRIGGER
특정 테이블에 DML(INSERT,UPDATE,DELETE)문장이 수행되었을 때 데이터베이스에서 자동적으로 PL/SQL 블록을 수행 시키기 위해서 데이터베이스 TRIGGER를 사용한다. TRIGGER는 트리거링 이벤트가 일어날 때마다 암시적으로 실행된다. 트리거링 이벤트에는 데이터베이스 테이블에서 INSERT, UPDATE, DELETE 오퍼레이션이다.
 
TRIGGER가 사용되는 경우
n        테이블 생성시 CONSTRAINT로 선언 제한이 불가능하고 복잡한 무결성 제한을 유지
n        DML문장을 사용한 사람,변경한 내용,시간 등을 기록함으로써 정보를 AUDIT하기
n        테이블을 변경할 때 일어나야 할 동작을 다른 테이블 또는 다른 프로그램들에게 자동적으로 신호하기
 
TRIGGER에 대한 제한
n         TRIGGER는 트랜잭션 제어 문(COMMIT,ROLLBACK,SAVEPOINT)장을 사용하지 못한다.
n         TRIGGER 주요부에 의해 호출되는 프로시저나 함수는 트랜잭션 제어 문장을 사용하지 못한다.
n         TRIGGER 주요부는 LONG또는 LONG RAW변수를 선언할 수 없다.
n         TRIGGER 주요부가 액세스하게 될 테이블에 대한 제한이 있다.
 
TRIGGER생성
CREATE TRIGGER문장에 의해 TRIGGER를 생성할 수 있다.
CREATE  [OR  REPLACE]  TRIGGER  trigger_name
             {BEFORE | AFTER}  triggering_event [OF  column1, . . .] ON table_name
             [FOR  EACH  ROW  [WHEN  trigger_condition]
trigger_body;
 
trigger_name : TRIGGER의 식별자
BEFORE | AFTER : DML문장이 실행되기 전에 TRIGGER를 실행할 것인지 실행된 후에 TRIGGER를 실행할 것인지를 정의
triggering_event : TRIGGER를 실행하는 DML(INSERT,UPDATE,DELETE)문을 기술한다.
OF column : TRIGGER가 실행되는 테이블에서 COLUMN명을 기술한다.
table_name : TRIGGER가 실행되는 테이블 이름
FOR EACH ROW : 이 옵션을 사용하면 행 레벨 트리거가 되어 triggering문장에 의해 영향받은 행에 대해 각각 한번씩 실행하고 사용하지 않으면 문장 레벨 트리거가 되어 DML문장 당 한번만 실행된다.
 
TRIGGER에서 OLD NEW
행 레벨 TRIGGER에서만 사용할 수 있는 예약어로 트리거 내에서 현재 처리되고 있는 행을 액세스할 수 있다. 즉 두개의 의사 레코드를 통하여 이 작업을 수행할 수 있다. :OLD INSERT문에 의해 정의되지 않고 :NEW DELETE에 대해 정의되지 않는다. 그러나 UPDATE :OLD :NEW를 모두 정의한다. 아래의 표는 OLD NEW값을 정의한 표이다.
문장
:OLD
:NEW
INSERT
모든 필드는 NULL로 정의
문장이 완전할 때 삽입된 새로운 값
UPDATE
갱신하기 전의 원래 값
문장이 완전할 때 갱신된 새로운 값
DELETE
행이 삭제되기 전의 원래 값
모든 필드는 NULL이다.
 
TRIGGER 술어 사용하기
트리거 내에서 오퍼레이션이 무엇인지를 결정하기 위해 사용할 수 있는 3가지 BOOLEAN함수가 있다.
술 어
    
INSERTING
트리거링 문장이 INSERT이면 TRUE를 그렇지 않으면 FALSE RETURN
UPDATING
트리거링 문장이 UPDATE이면 TRUE를 그렇지 않으면 FALSE RETURN
DELETING
트리거링 문장이 DELETE이면 TRUE를 그렇지 않으면 FALSE RETURN
 
TRIGGER 삭제와 억제하기
DROP TRIGGER명령어로 트리거를 삭제할 수 있고 TRIGGER를 잠시 disable할 수 있다.
DROP  TRIGGER  trigger_name;
 
ALTER  TRIGGER  trigger_name  {DISABLE | ENABLE};
 
TRIGGER DATA DICTIONARY
TRIGGER가 생성될 때 소스 코드는 데이터 사전 VIEW user_triggers에 저장된다. VIEW TRIGGER_BODY, WHERE, 트리거링 테이블, TRIGGER 타입을 포함 한다.
SQL> SELECT trigger_type,table_name,triggering_event
  2  FROM user_triggers;
 
TRIGGER_TYPE     TABLE_NAME                     TRIGGERING_EVENT
---------------- ------------------------------ --------------------------
AFTER STATEMENT  EMP                            INSERT OR UPDATE OR DELETE
BEFORE STATEMENT EMP                            INSERT OR UPDATE OR DELETE
BEFORE EACH ROW  EMP                            UPDATE
 
CREATE OR REPLACE TRIGGER emp_sal_chk
BEFORE UPDATE OF sal ON emp
FOR EACH ROW WHEN (NEW.sal < OLD.sal
                           OR NEW.sal > OLD.sal * 1.1)
BEGIN
             raise_application_error(-20502,
                'May not decrease salary. Increase must be < 10%');
END;
/
 
SQL> @emp_sal
반응형

'ORACLE > SQL' 카테고리의 다른 글

Oracle 날짜 관련 함수  (0) 2008.10.29
Oracle 날짜형 데이터의 연산  (0) 2008.06.17
PL/SQL (13) - 커서(cursor)  (0) 2008.02.21
PL/SQL (19) - Collections (중첩테이블 - Nested Table)  (0) 2008.02.21
&lt;25가지 SQL작성법&gt;  (0) 2008.02.19
Posted by [PineTree]
ORACLE/SQL2008. 2. 21. 20:28
반응형

###################################################################################################

#   source site : blog.naver.com/tangamjaelt

#   master : 강용운

#   email : tangamjaelt@korea.com

#   last release : 2007.08.29

###################################################################################################

 

 

1. 커서란...

- 일반적으로 커서는 모니터에 해당 위치를 알려주고 그곳에 입력을 대기중이라고 깜빡거리는 것을 나타낸다.

- 메모장을 켜보면 깜빡거리는 것. 그게 커서이다.

- 같은 맥락으로 PL/SQL에서 커서는 메모리상에 SQL문이 실행되는 위치를 가리킨다.

- 커서를 통해, 메모리에 존재하는 SQL문 실행결과를 바로 접근하여 fetch 할 수 있다. 메모리영역이라 함은 private SQL영역으로 SQL문 실행 및 처리결과를 저장하는 곳이다.

- 이 때 커서는 현재 처리하고 있는 row를 가리키게 된다.

- 실행결과를 1개 row씩 처리하다가 마지막까지 처리가 끝나면 커서를 닫는다.

- 많은 row를 처리하기 위해 명시적 커서를 선언하고 제어한다.

 

 

 

2. 종류

   (1) 암시적커서 (Implicit Cursor) : 모든 DML, PL/SQL Select 문에 대해 선언된다.

        - 모든 SQL문에는 관련된 개별 커서가 존재한다.

        - SQL문을 실행하면 PL/SQL은 암시적 커서를 작성하여 자동관리 한다.

 

   (2) 명시적커서 (Explicit Cursor) : 프로그래머가 선언하고 이름을 지정한다.

        - query 결과를 첫번째 행부터 차례대로 처리할 수 있다.

        - 현재 처리중인 행을 추적한다.

        - 프로그래머가 PL/SQL 블록에 명시적 커서를 수동으로 제어할 수 있다.

        - 여러 행 질의에 의해 반환되는 행집합을 활성 집합이라하고 활성집합의 크기는 검색조건을 만족하는 행(row)수와 같다.

 

        < 명시적 커서 >

        

 

        (1) 커서를 연다.

        (2) 행(row)을 인출(fetch)한다.

        (3) 커서를 닫는다.

 

        - OPEN 문은 질의를 실행하여 결과 집합을 식별한 후 커서를 첫번째 행 앞에 위치시킨다.

        - FETCH 문은 현재 행(row)을 검색하고 지정한 조건(empty?)이 만족할 때까지 커서를 다음 행(row)로 이동시킨다.

        - CLOSE 문으로 마지막 행(row)까지 처리되었으면 커서를 닫는다.

 

 

3. 커서 속성

- %ROWCOUNT : 가장 최근에 인출한 행의 개수

- %FOUND : 가장 최근에 인출한 행이 있으면 TRUE

- %NOTFOUND : 가장 최근에 인출한 행이 없으면 TRUE

- %ISOPEN : 커서가 열려있으면 TRUE.

                    

- 커서가 열려있어야 FETCH가 가능하므로 이 속성을 사용해서 커서의 OPEN 상태를 확인한다.

- CLOSE 된 상태에서 FETCH를 하면 INVALID_CURSOR 예외가 발생한다.

 

   IF NOT cursor_name%ISOPEN THEN

          OPEN curosr_name;

   END IF;

 

 

 

 

4. 커서 선언

 

  CURSOR cursor_name IS

        SELECT문;

 

- 커서 선언에 INTO 절을 포함시키지 않는다. INTO절은 FETCH문에 포함된다.

- 질의에 ORDER BY를 사용하여 특정 순서로 행을 처리할 수 있다.

- CURSOR 질의에 있는 변수를 참조할 수 있으나 변수는 CURSOR문 앞에 선언해야 한다.

 

cursor_test.sql

  DECLARE

         v_mp mobile_phone.product_name%TYPE;

     CURSOR cursor_mp IS

         SELECT product_name FROM mobile_phone;

 

  BEGIN

     OPEN cursor_mp;

          LOOP

              FETCH cursor_mp INTO v_mp;

              EXIT WHEN cursor_mp%NOTFOUND;

                  DBMS_OUTPUT.PUT_LINE(v_mp);

          END LOOP;

          DBMS_OUTPUT.PUT_LINE('총 row수 : ' || cursor_mp%ROWCOUNT);

     CLOSE cursor_mp;

 

  END;

   /

 

- 명시적으로 OPEN, FETCH, CLOSE를 수행하였다.

 

SQL> SET SERVEROUTPUT ON;

SQL> @cursor_test

 

  

 

 

5. 커서 FOR LOOP 사용

 

- 커서 FOR 루프를 사용하면 암시적 커서가 자동으로 실행된다.

- 레코드가 암시적으로 선언된다.

- FOR 루프가 한번 반복될 때마다 행이 인출된다.

- 마지막 행이 처리되면 루프가 종료되고 커서가 자동으로 닫힌다.

- 암시적 커서 실행이 이루어지므로 OPEN, FETCH, CLOSE를 선언하지 않는다. (선언하면 이미 커서가 열렸다는 에러 발생)

 

cursor_test2.sql

  DECLARE

     CURSOR cursor_mp IS

         SELECT brand, product_name FROM mobile_phone;

     record_mp cursor_mp%ROWTYPE

 

  BEGIN

      FOR record_mp IN cursor_mp LOOP
          IF record_mp.brand = 'LG' THEN
              DBMS_OUTPUT.PUT_LINE(record_mp.brand || ' => ' || 
record_mp.product_name);
          END IF;
    END LOOP;

 END;

 /

 

- 이 예제에서는 브랜드가 LG인 상품을 출력하는 프로그램이다.

- 여기 예제에서는 %ROWTYPE을 사용하여 커서에 대한 record 타입 변수 record_mp 를 선언하였다.

- OPEN, FETCH, CLOSE 없이 바로 FOR문을 돌리면 된다.

 

 

 

 

6. 파라미터 사용 커서

- 커서에 파라미터를 정의하고 OPEN 시 파라미터를 전달할 수 있다.

- 실행할 때마다 이전에 사용했던 파라미터의 활성 집합을 닫고, 매번 새 파라미터를 이용해 커서를 OPEN한다.

- OPEN(parameter1, parameter2, ...) 형식으로 사용한다.

 

cursor_test3.sql

 DECLARE
        v_product mobile_phone.product_name%TYPE;
        v_brand mobile_phone.brand%TYPE;

 

     CURSOR cursor_mp(p_brand VARCHAR2) IS
         SELECT brand, product_name FROM mobile_phone
                WHERE brand = p_brand;

 BEGIN
        OPEN cursor_mp('LG');
        LOOP
                FETCH cursor_mp INTO v_brand, v_product;
                EXIT WHEN cursor_mp %NOTFOUND;
                DBMS_OUTPUT.PUT_LINE(v_brand || ' => ' ||  v_product);
        END LOOP;
        DBMS_OUTPUT.PUT_LINE(v_brand || ' 총 ' || cursor_mp%ROWCOUNT || ' 건');
        CLOSE cursor_mp;

 

        OPEN cursor_mp('SAMSUNG');
        LOOP
                FETCH cursor_mp INTO v_brand, v_product;
                EXIT WHEN cursor_mp %NOTFOUND;
                DBMS_OUTPUT.PUT_LINE(v_brand || ' => ' ||  v_product);
        END LOOP;
        DBMS_OUTPUT.PUT_LINE(v_brand || ' 총 ' || cursor_mp%ROWCOUNT || ' 건');
        CLOSE cursor_mp;
 END;
 /

 

- OPEN cursor 를 통해 파라미터를 전달한다.

- LG, SAMSUNG 인 것들을 각각 cursor를 통해 출력하였다.

 

 

 

 

반응형

'ORACLE > SQL' 카테고리의 다른 글

Oracle 날짜형 데이터의 연산  (0) 2008.06.17
PL/SQL  (0) 2008.02.22
PL/SQL (19) - Collections (중첩테이블 - Nested Table)  (0) 2008.02.21
&lt;25가지 SQL작성법&gt;  (0) 2008.02.19
oracle에서 hint의 사용  (0) 2008.02.14
Posted by [PineTree]