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

  1. 2009.08.20 Jeus webtob의 모든것..[펌]
  2. 2009.08.20 firefox css 깨짐 현상 (webtob 사용시)
  3. 2009.08.20 eclipse comment_templates.xml ,code_templates.xml
  4. 2009.08.19 Jeus - 컨테이너 추가, 복사(접속포트추가), 가상호스트 설정
  5. 2009.08.18 linux ftp 폴더가 않보일때
  6. 2009.08.18 Fedora10에 FTP설치하기(vsftpd) 1
  7. 2009.08.17 [Fedora] Network
  8. 2009.08.17 [Fedora9] 네트워크 설정 및 방화벽 설정
  9. 2009.08.14 Markup Validation Service
  10. 2009.08.14 VirtualBox - Windows의 네트워크 브리지를 사용한 네트워크 구성(NAT 사용)
  11. 2009.08.14 liunx jdk5 설치
  12. 2009.08.14 linux jdk5 다운하는 곳
  13. 2009.08.14 linux java 설치
  14. 2009.08.14 Fedora 10의 X 윈도우 해상도 설정
  15. 2009.08.13 linux java 설치
  16. 2009.08.12 오라클 테이블별 현황보기
  17. 2009.08.12 오라클 실행계획(explan table) 보기(분석)
  18. 2009.08.12 Javaserver Pages Developer's Guide 1
  19. 2009.08.12 오라클 내장함수
  20. 2009.08.12 오라클 한글 자음 검색 2
  21. 2009.08.11 GMER all your rootkits are belong to us
  22. 2009.08.11 OllyDbg
  23. 2009.08.10 오라클 clob 예제
  24. 2009.07.31 네이버 무료 웹하드 5g 까지
  25. 2009.07.31 jeus 에 2개의 webtob 설정하기.
  26. 2009.07.31 도메인의 IP를 변경하면 언제쯤 인터넷에 전파되어질까?
  27. 2009.07.31 isp 회사들의 dns 주소들
  28. 2009.07.30 테이블에 스크롤바 생성하기 1
  29. 2009.07.30 jsp 게시판 페이징 처리 - >NavigationUtil
  30. 2009.07.29 Oracle SQL Developer 전체기능
98..Etc/70.JEUS2009. 8. 20. 17:25
반응형
출처 : http://searcher.tistory.com/entry/Jeus-webtob%EC%9D%98-%EB%AA%A8%EB%93%A0%EA%B2%83%ED%8E%8C

이 문서는 ww.tmax.co.kr 에서 개발/배포하는

웹서버(WebToB)와 웹어플리케이션서버(JEUS)의 설치 및 시동, 연동, 경로설정에 관한 자료입니다.

(버젼 : JEUS4.2, WEBTOB3.1.6(build3), j2sdk1.4.1_07)

 

 

### 설치/시동/테스팅/종료 ###

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

1. 필요 프로그램

- j2sdk1.4.1_07 (http://java.sun.com)       # j2sdk1.4.1_07 이하 버젼 권장 (1.4.2버젼대에서는 문제발생할 수 있음)

- jeus42.exe (http://www.tmax.co.kr)

- webtob_3.1.6(build3).exe (http://www.tmax.co.kr)

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

2. j2sdk1.4.1_07 설치

- path 맨 앞에 C:/jdk1.4.1_07/bin 설정

- classpath에 . 설정

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

3. JEUS42 설치

- JEUS42.exe를 실행 

  (windows2003 서버의 경우 installing... uninstall부분에서 정지시는 windows2000호환성모드로 다시 실행)

- http://www.tmax.co.kr의 download링크를 클릭 (회원가입필요)

  JEUS license를 신청 -> 이메일을 통해 license부여받음 (90일 사용가능)

  부여받은 license파일을 제우스홈\license에 복사 (덮어쓰기)

- 설치 후 다음 세개의 파일을 자신의 환경에 맞게 편집

  1) 제우스홈\config\노드명\JEUSMain.xml 

  2) 제우스홈\webhome\servlet_home\webapps\examples\web-inf\web.xml
  3) 제우스홈\config\노드명\노드명_servlet_engine1\WEBMain.xml

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

4. webtob3.1.6 설치

- webtob_3.1.6(build3).exe 실행하여 설치 

  (windows2003에서 installing... uninstall부분에서 정지시는 windows2000호환성모드로 다시 실행)

- http://www.tmax.co.kr의 download링크를 클릭 (회원가입필요)

  WEBTOB license를 신청 -> 이메일을 통해 license.dat부여 (90일 사용가능)

  부여받은 license.dat파일을 c:\webtob\license에 복사 (덮어쓰기)

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

5. PATH 설정 후 리부팅 : 자신의 환경에 맞게 설정하고 시스템을 리부팅

  (Program Files처럼 공백을 포함한 디렉토리를 가진 경로는 맨뒤로...)

ex) PATH=C:\J2SDK1.4.1_07\bin;C:\webtob\bin;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOW
S\System32\Wbem;C:\webtob\bin;C:\Jeus42\lib\etc\ant\bin;C:\Jeus42\bin;C:\Jeus42\lib\system

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

6. WEBTOB 환경설정

  1) 웹투비홈\config\sample.m을 카피해서 http.m을 생성

  2) wscfl -i http.m을 커맨드창에서 실행 (webtob 환경설정)

  정상결과 예)

        Current configuration:
                Number of client handler(HTH) = 1
                Supported maximum user per node = 975
                Supported maximum user per handler = 975
        CFL is done successfully for node(노드명(노드명))

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

7. 시동

1) webtob를 실행

- webtob 실행 :  wsboot

2) JEUS를 실행

- 우선 command창을 두개 띄웁니다.(제우스, 제우스관리자)

- 제우스창에 "jeus + 엔터"

- 제우스관리자창에 "jeusadmin 노드명 -U유져명 -P제우스패스워드 ->boot

- 제우스창에 에러(Exception)가 없다면 실행 성공!!!

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

8. 테스팅

- JEUS기본포트는 8088, webtob기본포트는 8080

- JSP 기본경로

제우스홈\webhome\servlet_home\webapps\examples
           http://127.0.0.1/examples/

- Servlet 기본경로

제우스홈\webhome\servlet_home\webapps\examples\WEB-INF\classes
    http://127.0.0.1/examples/

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

9. 종료

1) JEUS종료

- 제우스관리자창에 down -> jeusexit

2) WEBTOB종료

- 웹투비창에 wsdown -i

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

 

 

 

 

### JEUS/WEBTOB 연동하기 ###

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

1. webtob 설정

   - 웹투비홈/config/http.m의 각 항목에 추가합니다.

   *NODE

       JSVPORT = 9900

   *SVRGROUP

       jsvg     NODENAME=노드이름, SVRTYPE=JSV

   *SERVER

      MyGroup    SVGNAME=jsvg, MinProc=10, MaxProc=10

   *URI

      uri2    Uri="/examples/", Svrtype=JSV

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

2. jeus 설정

   - 제우스홈/config/노드이름/노드이름_servlet_engine1/WEBMain.xml 수정

        <webserver-connection>
            <webtob-listener>
                <listener-id>webtob1</listener-id>
                <port>9900</port>
                <hth-count>1</hth-count>
                <webtob-address>IP 혹은 127.0.0.1(동일서버에 JEUS와 WEBTOB존재시)</webtob-address>
                <registration-id>MyGroup</registration-id>
                <thread-pool>
                    <min>4</min>
                    <max>10</max>
                    <step>2</step>
                    <max-idle-time>30000</max-idle-time>
                    <max-wait-queue>4</max-wait-queue> 
                </thread-pool>
            </webtob-listener>
        </webserver-connection>


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

3. 제우스홈/bin/jeus.properties 조정

    - JEUS_WSDIR 부분을 주석처리 하거나 삭제

    - PATH 에서 $JEUS_HOME/webserver 부분도 제거

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

4. webtob 와 jeus 를 부팅 후 확인

   http://주소:8080/exapmples/index.jsp 에서 테스팅 페이지 보기

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

 

 

### DB 연동 ###

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

* MySQL 커넥션풀 샘플 (WEBMain.xml에 추가)

JEUS에서 제공하는 ConnectionPool은 JDBC Drive를 통해 얻은 Connection의 관리는 
엔진에서 해주는 것이므로 JDBC Driver를 $JEUS_HOME/lib/datasource 아래에 두고
DBConnectionPool은 container.xml에 DataSource는 JeusMain.xml에 다음과 같이 
설정을 하시면 사용하실 수가 있습니다. 
 
1) DBConnectionPool
------------------------------------------------------------------------------
<DBConnectionPool MaxUseCount="-1" 
                  ConnectionPoolType="shared" 
                  CloseDelayMillis="-1" 
                  MaxActiveTimeSecs="-1" 
                  ConnectionPoolID="mysql-shared" 
                  ConnectionArguments="user=root;password=" 
                  DriverClassName="org.gjt.mm.mysql.Driver" 
                  DynamicIncrement="true" 
                  ConnectionURL="jdbc:mysql://localhost:3306/mysql" 
                  LoginDelayMillis="-1" 
                  CloseLongActiveConnection="false" 
                  ConnectionTimeOutSecs="10"> 
        <DBPoolControl MaxCapacity="30" 
                   InitCapacity="20" 
                   MaxIdleTimeSecs="300" 
                   IncrementRate="4" /> 
        <DBAConnection ForcedClose="false" />
</DBConnectionPool>
 
 
2) DataSource
------------------------------------------------------------------------------
<DataSource> 
    <Database> 
            <Vendor>others</Vendor> 
            <ExportName>mysql</ExportName> 
            <DataSourceClassName>
                jeus.jdbc.driver.blackbox.BlackboxConnectionPoolDataSource
            </DataSourceClassName> 
            <Property> 
                <Name>URL</Name> 
                <Type>java.lang.String</Type> 
                <Value>jdbc:mysql://localhost:3306/mysql</Value> 
            </Property> 
            <Property> 
                <Name>DriverClassName</Name> 
                <Type>java.lang.String</Type> 
                <Value>com.mysql.jdbc.jdbc2.optional.MysqlConnectionPoolDataSource</Value> 
            </Property> 
            <Property> 
                <Name>Password</Name> 
                <Type>java.lang.String</Type> 
                <Value></Value> 
            </Property> 
            <Property> 
                <Name>User</Name> 
                <Type>java.lang.String</Type> 
                <Value>root</Value> 
            </Property> 
            <DataSourceType>ConnectionPoolDataSource</DataSourceType> 
            <ConnectionPool> 
                <MinPoolSize>4</MinPoolSize> 
                <MaxPoolSize>4</MaxPoolSize> 
                <IncreasingStep>1</IncreasingStep> 
                <ResizingPeriod>10</ResizingPeriod> 
                <OperationTimeout>30000</OperationTimeout> 
                <WaitForFreeConnection> 
                    <WaitingTime>10000</WaitingTime> 
                </WaitForFreeConnection> 
            </ConnectionPool> 
        </Database> 
  </DataSource>
--------------------------------------------------------------------------------------

* Oracle 커넥션풀 샘플 (JEUSMain.xml의 </node>하단에 추가)

    <resource>
        <data-source>
            <database>
                <vendor>oracle</vendor>
                <export-name>오라클UID</export-name>
                <data-source-class-name>oracle.jdbc.pool.OracleConnectionPoolDataSource</data-source-class-name>
                <data-source-type>DataSource</data-source-type>
                <database-name>디비명</database-name>
                <data-source-name>oracle.jdbc.pool.OracleConnectionPoolDataSource</data-source-name>
                <network-protocol>tcp</network-protocol>
                <user>scott</user>
                <password>tiger</password>
                <port-number>1521</port-number>
                <server-name>아이피 또는 127.0.0.1</server-name>
                <driver-type>thin</driver-type>
                <connection-pool>
                    <pooling>
                        <max>20</max>
                        <step>1</step>
                        <period>500000</period>
                    </pooling>
                </connection-pool>
            </database>
        </data-source>
    </resource>

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

* DB2

  1) JEUS 3.x ($JEUS_HOME/config/<NODENAME>/JeusMain.xml
        <Database> 
            <Vendor>db2</Vendor> 
            <ExportName>db2local</ExportName> 
            <DatabaseName>SAMPLE</DatabaseName> 
            <DataSourceClassName>COM.ibm.db2.jdbc.DB2ConnectionPoolDataSource</DataSourceClassName>
            <DataSourceName/> 
            <ServiceName/> 
            <Description/> 
            <NetworkProtocol/> 
            <Password>jeus2013</Password> 
            <PortNumber>포트번호</PortNumber> 
            <ServerName>DB서버 IP</ServerName> 
            <User>db2inst1</User> 
            <DataSourceType>LocalXADataSource</DataSourceType> 
            <ConnectionPool> 
                <MinPoolSize>2</MinPoolSize> 
                <MaxPoolSize>4</MaxPoolSize> 
                <IncreasingStep>1</IncreasingStep> 
                <ResizingPeriod>600000</ResizingPeriod> 
                <OperationTimeout>30000</OperationTimeout> 
                <WaitForFreeConnection> 
                    <WaitingTime>10000</WaitingTime> 
                </WaitForFreeConnection> 
            </ConnectionPool> 
        </Database>  
  2) JEUS 4.x ($JEUS_HOME/config/<NODENAME>/JEUSMain.xml
           <database>
                <vendor>db2</vendor>
                <export-name>db2XADatasource1</export-name>
<data-source-class-name>COM.ibm.db2.jdbc.DB2XADataSource</data-source-class-name>
                <data-source-type>XADataSource</data-source-type>
                <database-name>sample</database-name>
                <description>Customer DB</description>
                <password>db2inst1</password>
                <encryption>false</encryption>
                <port-number>포트번호</port-number>
                <server-name>DB서버 IP</server-name>
                <user>db2inst1</user>
                <connection-pool>
                    <pooling>
                        <min>2</min>
                        <max>4</max>
                        <step>1</step>
                        <period>600000</period>
                    </pooling>
                    <wait-free-connection>
                        <enable-wait>false</enable-wait>
                        <wait-time>10000</wait-time>
                    </wait-free-connection>
                    <operation-to>30000</operation-to>
                </connection-pool>
            </database>
--------------------------------------------------------------------------------------


 

 

### TIPS ###

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

* 파일경로설정

1) 파일 실제경로 (기본값)

- servlet : 제우스홈\webhome\servlet_home\webapps\examples\WEB-INF\classes

- jsp : 제우스홈\webhome\servlet_home\webapps\examples

2) 기존의 examples 컨텍스트 이외에 새로운 aaa라는 컨텍스트를 추가하는 방법 (컨텍스트 설정법)
- WEBMain.xml에서 다음 부분을 추가한다. 
  <context> 
    <context-name>aaa</context-name> 
    <context-path>/aaa</context-path> 
  </context> 
- aaa 컨텍스트의 DD(deployment descriptor)파일을 작성 
  제우스홈\config\노드명\[SERVLET_ENGINE_NAME]\jeus-web-dd_examples.xml 파일을 jeus-web-dd_aaa.xml 파일로 복사  

  하여 편집. context-name, docbase 만 설정하면 됩니다. WEBMain.xml의 이름과 동일해야 함. 
  <?xml version="1.0"?> 
  <!DOCTYPE jeus-web-dd PUBLIC "-//Tmax Soft., Inc.//DTD JEUS WEB Deployment Info 4.0//EN" 
                             "http://www.tmaxsoft.com/jeus/dtd/4.0/jeus-web-dd.dtd"> 
  <jeus-web-dd> 
    <context> 
        <context-name>aaa</context-name> 
        <docbase>서버의 물리적 절대경로</docbase> 
        <auto-reload> 
            <enable-reload>true</enable-reload> 
            <check-on-demand>true</check-on-demand> 
        </auto-reload> 
    </context> 
  </jeus-web-dd> 
- WebtoB의 환경설정파일(http.m)의 URI 절에 aaa 컨텍스트 경로를 다음과 같이 추가한다. 
  *URI 
  uri8 Uri = "/aaa/",Svrtype = JSV 
- WebtoB의 환경파일 수정 후에는 반드시 환경파일 컴파일 후 WebtoB를 재기동 : wscfl -i http.m 
- JEUS 를 재기동



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

* index.jsp를 자동으로 인식시키려면

- 제우스홈\config\노드명\[SERVLET_ENGINE_NAME]\webcommon.xml 파일에 index.jsp추가

  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
  </welcome-file-list>

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

* jspwork 디렉토리 변경

1. JEUS 3.x
$JEUS_HOME/config/<HOSTNAME>/<SERVLET_ENGINE_NAME>/container.xml의
<JSPEngine> 태그 안에 JspWorkDir을 설정하면 됩니다.
<Container>
  ...
  <ContextGroup>
    ...
    <JSPEngine ... 
      JspWorkDir="/app/jwork" 
      ...
    />
2. JEUS 4.x
$JEUS_HOME/config/<HOSTNAME>/<SERVLET_ENGINE_NAME>/WEBMain.xml의
<jsp-engine> 태그 안에 <jsp-work-dir>를 설정하면 됩니다.
<web-container>
  <context-group>
    ...
    <jsp-engine>
      ...
      <jsp-work-dir>/app/jwork</jsp-work-dir>
      ...
    </jsp-engine>
--------------------------------------------------------------------------------------

* 폴더관리 (webtob, jeus 연동시)

- image, js, css, html 등은WebToB홈\docs 에 폴더로 관리해서 WEBTOB가 처리

- jsp, servlet은 context를 별도 설정 (컨텍스트 설정법 참조)해서 JEUS가 처리

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

* 오라클 데이터베이스 사용시 C:/jeus/lib/datasource 폴더에 classes12.zip 복사

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

* trouble shooting

- Out Of Memory 에러

  JVM에서 사용할 수 있는 memory가 부족할 때 발생합니다. 
  이것을 해결하는 방법으로는 버전별로 다음과 같이 JEUS 환경 파일에서
  추가하면 됩니다. -Xms가 min 값이고 -Xmx가 max 값입니다.
  1) JEUS 3.x ($JEUS_HOME/config/<HOSTNAME>/JeusMain.xml)
  <JeusSystemConfig>
      <NodeConfig>
          ...
          <EngineContainer>
              ...
              <CommandOption>-Xms256m -Xmx256m<CommandOption>
  2) JEUS 4.x ($JEUS_HOME/config/<HOSTNAME>/JEUSMain.xml)
  <jeus-system>
      <node>
          ...
          <engine-container>
             ...
              <command-option>-Xms256m -Xmx256m<command-option>
- 노드명에 '-' 문자를 썼을 경우 또는 노드명에 공백이 있는 경우

  wscfl -i http.m 부분에서 오류 -> 노드명을 ""으로 묶어준다.

- 8080포트 사용하려고 할때 XDB 인증창이 뜬다면... 

  =====> 오라클의 XDB포트와 충돌하는 경우이므로 오라클의 XDB포트를 아래와 같이 변경해준다.

  [시작] -> [프로그램] -> [Oracle - OraHome92] -> [Configuration and Migration Tools] 

  -> [Database Configuration Assistant]   선택

  프로그램이 실행이되면.....

  [다음] 버튼을 Click -> [데이터베이스의 데이이터베이스 옵션구성] 선택 -> [사용 가능한 데이터베이스] 선택 

  -> [표준데이터베이  스 기능...] 버튼을 Click -> Oracle XML DB 의 [사용자 정의 ...] 버튼을 Click 

  -> [포트 번호 구성] 항목의 [사용자 정의 값 지정] 을 선택하셔서 HTTP 포트를 바꿔줍니다. 

  그리고 FTP 및 WebDAV 포트는 기본 설정인 2100 을 사용합니다. -> [확인] 버튼을 Click 하시고 

  [다음] 버튼을 Click 하셔서 데이터베이스를 실행할 기본모드를 선택하시고 [완료] 버튼을 눌러주시면 

  요약 메세지창이 뜨고 [확인] 버튼을 눌러주시면 XDB 의 Port 설정이 끝나게 됩니다.

- 다음과 같은 nullpointer exception 발생시

  <<__Exception__>>
  java.lang.NullPointerException
          at javax.servlet.GenericServlet.getServletContext(GenericServlet.java:20
  5)
          at javax.servlet.GenericServlet.log(GenericServlet.java:300)
          at javax.servlet.GenericServlet.init(GenericServlet.java:257)
          at jeus.servlet.common.WebContainerManager.startContainer(WebContainerMa
  nager.java:538)
          at jeus.servlet.syscontext.SystemContext.startup(SystemContext.java:64)
          at jeus.servlet.deployment.SystemWebContainer.startup(SystemWebContainer
  .java:35)
          at jeus.server.SystemEngineController.startEngine(SystemEngineController
  .java:26)
          at jeus.server.JeusServer.boot(JeusServer.java:720)
          at jeus.server.ControlThread.acceptRequests(ControlThread.java:181)
          at jeus.server.ControlThread.run(ControlThread.java:86)
  java.lang.NullPointerException : null
  [SystemEngineController] fail to start System Engine [devserver_system_engine] :
   jeus.server.JeusServerException
  <<__!Exception__>>
  [2005.05.26 10:30:05][2] [ControlThread] command (210.117.198.62:1063) : disconn
  ect()

 =====> j2sdk1.4.1_07 이하 버젼으로 jdk를 다시 설치한 수 jeus/webtob 다시설치 해보세요.

- C:\Program Files\Java\j2re1.4.1_07\bin\server\jvm.dll 파일을 찾지 못할때

  =====> C:\j2sdk1.4.1_07\jre\bin\server 폴더를 카피해서 

             C:\Program Files\Java\j2re1.4.1_07\bin 폴더에 복사하세요.

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

* 클래스파일 변경시 실시간으로 변경 반영

소스가 WEB-INF/classes 아래에 있으면 리부팅이 필요 없습니다. 
단, 확인 하실 것이 container.xml(WEBMain.xml)에 context 태그 내에 AutoReload="true"가 설정되어 있으면 됩니다.
WEB-INF/lib/*.jar는 라이브러리와 같이 수정하지 않는다는 의미를 포함하고 있으므로(J2EE 스펙에 준하면...) 
jar 파일 내의 수정은  반드시 제우스를 리부팅 해야 적용됩니다.
--------------------------------------------------------------------------------------

* 인클루드된 파일 변경시 즉시 적용(<%@ include 자동 반영하기)

JSP의 include의 방식에는 <%@ include (action), <jsp:include (directive) 가 있다.

이 중 <jsp:include (action) 는 include하는 JSP(a.jsp)와 include되는 JSP(b.jsp)가 각각 별도의 servlet으로 변환된다.
a.jsp가 수행 도중 b.jsp의 include 구문을 만나면 b.jsp로 제어권이 넘어가서 수행된 후 다시 a.jsp로 제어권이 넘어와서 계속 수행된다.
그래서 b.jsp가 변경된 경우 변경사항이 자동으로 반영된다.

그리고 <%@ include (directive)는 include하는 JSP(a.jsp)와 include되는 JSP(b.jsp)가  하나의 servlet으로 변환되어서 a.jsp 내에 b.jsp가 완전히 포함되는 형태로 변환된다.
<%@ include (directive)의 목적은 JSP가 Servlet으로 변환되어 컴파일 될 때에
특정 코드나 text를 포함하기 위해서 이다.
따라서 b.jsp가 변경된 경우 a.jsp는 b.jsp가 변경되었는지 모르기 때문에 include 된 JSP의 변경시 이것을 인지하지 못한다.

<%@ include (directive) 를 사용하는 경우 JSP container가 include된 파일이 변경된 경우 자동으로 반영해 주기 위해서는 include하는 파일이 수행될 때 마다 include된 파일의 변경 여부를 검사해서 변경되었다면 include 하는 파일을 recompile 해 주어야 한다.
이것은 JSP container에게는 상당히 부하를 주는 작업이다.
그래서 JSP Spec에서는 include된 파일의 변경시 반영 여부는 명시하지 않고 있다.

JEUS에서는 개발과 운영의 편의성을 위해서 이것을 옵션으로 지정하여 변경시 자동 반영이 되게 설정할 수 있다.
하지만 이 옵션을 true로 설정하는 경우 불필요한 검사가 들어가게 되므로 수행 속도에 지장을 주게됩니다. 반드시 JSP 파일의 변경이 빈번한 경우에만 설정하면 된다.

1. JEUS 3.x
$JEUS_HOME/config/<HOSTNAME>/<SERVLET_ENGINE_NAME>/container.xml에 설정
---------------------------------------------------------
<Container>
    ...
    <ContextGroup>
        ...
        <JSPEngine ...
            CheckIncludedJspFile="true"
            ... />
2. JEUS 4.x
$JEUS_HOME/config/<HOSTNAME>/<SERVLET_ENGINE_NAME>/WEBMain.xml에 설정
---------------------------------------------------------
<web-container>
    ...
    <context-group>
        ...
        <jsp-engine>
            ...
            <check-included-jspfile>true</check-included-jspfile>
            ...
        </jsp-engine>
        ...
    </context-group>
    ...
</web-container>
--------------------------------------------------------------------------------------

* http.m 샘플

*DOMAIN
WebtoB

*NODE
devserver WEBTOBDIR="C:/webtob", 
  SHMKEY = 54000,
  DOCROOT="C:/tmax/webdocs",
  IndexName="index.jsp,index.html,index.htmm",
  PORT = "80", 
  LOGGING = "log1",
  ERRORLOG = "log2",
  HTH = 1,
  JSVPORT = 9900

*SVRGROUP
htmlg  NODENAME = devserver, SvrType = HTML
cgig  NODENAME = devserver, SVRTYPE = CGI
ssig  NODENAME = devserver, SVRTYPE = SSI
jsvg  NODENAME = devserver, SVRTYPE=JSV

*SERVER
html  SVGNAME = htmlg, MinProc = 3, MaxProc = 10
cgi  SVGNAME = cgig, MinProc = 3, MaxProc = 10
ssi  SVGNAME = ssig, MinProc = 3, MaxProc =10
MyGroup  SVGNAME=jsvg, MinProc=10, MaxProc=10

*URI
uri1  Uri = "/cgi-bin/", Svrtype = CGI
uri2  Uri="/examples/", Svrtype=JSV
uri3  Uri="/", Svrtype=JSV

*ALIAS
alias1  URI = "/cgi-bin/", RealPath = "C:/webtob/cgi-bin/"

*LOGGING
log1  Format = "DEFAULT", FileName = "C:/webtob/log/access.log", Option = "sync"
log2  Format = "ERROR", FileName = "C:/webtob/log/error.log", Option = "sync"

*EXT
htm  MimeType = "text/html", SvrType = HTML
--------------------------------------------------------------------------------------

* JEUSMain.xml 샘플

<?xml version="1.0"?>
<!DOCTYPE jeus-system PUBLIC "-//Tmax Soft, Inc.//DTD JEUS Main Config 4.0//EN"
                             "http://www.tmaxsoft.com/jeus/dtd/4.0/jeus-main-config.dtd">
<jeus-system>
    <node>
        <name>devserver</name>
        <class-ftp>true</class-ftp>
        <sequential-start>true</sequential-start>
        <enable-webadmin>true</enable-webadmin>
        <system-log>
            <level>debug</level>
        </system-log>
        <engine-container>
            <name>container1</name>
            <engine-command>
                <type>servlet</type>
                <name>engine1</name>
                <startup-mode>xml</startup-mode>
            </engine-command>
            <tm-config>
                <pooling>
                    <min>10</min>
                    <max>20</max>
                    <step>2</step>
                    <period>600000</period>
                </pooling>
                <active-timeout>300000</active-timeout>
                <commit-timeout>120000</commit-timeout>
                <capacity>20000</capacity>
            </tm-config>
        </engine-container>
    </node>
</jeus-system>

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

* WEBMain.xml 샘플

<?xml version="1.0"?>
<!DOCTYPE web-container PUBLIC "-//Tmax Soft., Inc.//DTD WEB Main Config 4.0//EN"
                               "http://www.tmaxsoft.com/jeus/dtd/4.0/web-main-config.dtd">
<web-container>
    <context-group>
        <group-name>MyGroup</group-name>
        <group-docbase>webapps</group-docbase>
        <session-config>
            <timeout>20</timeout>
            <shared>true</shared>
        </session-config>
        <logging>
            <error-log>
                <target>stdout</target>
                <level>information</level>
                <buffer-size>0</buffer-size>
                <valid-day>1</valid-day>
            </error-log>
            <user-log>
                <target>file</target>
                <buffer-size>0</buffer-size>
                <valid-day>1</valid-day>
            </user-log>
            <access-log>
                <target>file</target>
                <buffer-size>0</buffer-size>
                <valid-day>1</valid-day>
                <log-format>
                    <time-format>default</time-format>
                </log-format>
            </access-log>
        </logging>
        <context>
            <context-name>examples</context-name>
            <context-path>/examples</context-path>
        </context>
  <context> 
   <context-name>ngi</context-name> 
   <context-path>/</context-path> 
  </context> 
        <webserver-connection>
            <webtob-listener>
                <listener-id>webtob1</listener-id>
                <port>9900</port>
                <hth-count>1</hth-count>
                <webtob-address>127.0.0.1</webtob-address>
                <registration-id>MyGroup</registration-id>
                <thread-pool>
                    <min>4</min>
                    <max>10</max>
                    <step>2</step>
                    <max-idle-time>30000</max-idle-time>
                    <max-wait-queue>4</max-wait-queue> 
                </thread-pool>
            </webtob-listener>
        </webserver-connection>
    </context-group>
</web-container>
--------------------------------------------------------------------------------------

 

 

 

### 실무 적용 예 (버츄얼호스팅 사용) ###

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

프로젝트 실제환경을 로컬에서 구현해 작업해야 하는 상황에서...

두대의 IBM서버로 돌아가는 JEUS/WEBTOB의 환경설정 입니다.

 

<<< 실제환경 >>>

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

- 서버1 : WindowsServer2003Standard, 웹서버 (WEBTOB)

- 서버2 : WindowsServer2003Standard, 웹컨테이너 (JEUS), DB(Oracle9i)

- 두 서버는 9999포트를 통해 연동한다.

- images,css,js는 서버1에 jsp,java는 서버2에 위치시킨다.

- 서버구조는 1 WEBSERVER, 2 CONTAINER (원래 4개에서 필요한 두개만 가동)

- 윈도우 hosts파일에 localhost2, localhost3 추가

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

 

<<< sample.m >>>

*DOMAIN
WebtoB

*NODE
realchokyCompaq
  WebtobDir="C:/webtob",
  Shmkey=54000,
  Docroot="C:/center",
  HTH=1,
  port="9900",
  JSVPort=9999,
  IndexName="index.jsp,index.htm,index.html",
  Logging="log1",
  ErrorLog="log2"

*VHOST
center
  NodeName="realchokyCompaq",
  HostName="localhost2",
  DocRoot="C:/center",
  Port="9900",
  SSLFlag=N,
  IndexName="index.jsp,index.htm,index.html"

admin
  NodeName="realchokyCompaq",
  HostName="localhost3",
  DocRoot="C:/admin",
  Port="9900",
  IndexName="index.jsp,index.htm,index.html"

*SVRGROUP
htmlg
  NodeName="realchokyCompaq",
  SvrType=HTML

jsvg
  NodeName="realchokyCompaq",
  SvrType=JSV,
  VHostName=center

jsvg2
  NodeName="realchokyCompaq",
  SvrType=JSV,
  VHostName=admin

*SERVER
html
  SvgName=htmlg,
  MinProc=30,
  MaxProc=60

Center
  SvgName=jsvg,
  MinProc=30,
  MaxProc=30,
  HttpInBufsize=0,
  HttpOutBufsize=0

Admin
  SvgName=jsvg2,
  MinProc=10,
  MaxProc=10,
  HttpInBufsize=0,
  HttpOutBufsize=0

*URI
images
  Uri="/images/",
  SvrType=HTML

center
  Uri="/",
  SvrType=JSV,
  VhostName=center

admin
  Uri="/",
  SvrType=JSV,
  VhostName=admin

*LOGGING
log1
  FileName="C:/webtob/log/access.log",
  Format="DEFAULT",
  Option="sync"

log2
  FileName="C:/webtob/log/error.log",
  Format="ERROR",
  Option="sync"

*EXT
htm
  Mimetype="text/html",
  Svrtype=HTML

jsp
  Mimetype="application/jsp",
  Svrtype=JSV

 

 

<<< JEUSMain.xml >>>

 

<?xml version="1.0"?>
<!DOCTYPE jeus-system PUBLIC "-//Tmax Soft, Inc.//DTD JEUS Main Config 4.0//EN"
                             "http://www.tmaxsoft.com/jeus/dtd/4.0/jeus-main-config.dtd">
<jeus-system>
    <node>
        <name>realchokyCompaq</name>
        <class-ftp>true</class-ftp>
        <sequential-start>true</sequential-start>
        <system-log>
            <level>debug</level>
        </system-log>
        <engine-container>
            <name>container1</name>
            <engine-command>
                <type>servlet</type>
                <name>engine1</name>
                <startup-mode>xml</startup-mode>
            </engine-command>
            <tm-config>
                <pooling>
                    <min>10</min>
                    <max>20</max>
                    <step>2</step>
                    <period>600000</period>
                </pooling>
                <active-timeout>300000</active-timeout>
                <commit-timeout>120000</commit-timeout>
                <capacity>20000</capacity>
            </tm-config>
        </engine-container>
        <engine-container>
            <name>container2</name>
            <engine-command>
                <type>servlet</type>
                <name>engine2</name>
                <startup-mode>xml</startup-mode>
            </engine-command>
            <tm-config>
                <pooling>
                    <min>10</min>
                    <max>20</max>
                    <step>2</step>
                    <period>600000</period>
                </pooling>
                <active-timeout>300000</active-timeout>
                <commit-timeout>120000</commit-timeout>
                <capacity>20000</capacity>
            </tm-config>
        </engine-container>
    </node>
    <resource>
        <data-source>
            <database>
                <vendor>oracle</vendor>
                <export-name>오라클UID</export-name>
                <data-source-class-name>oracle.jdbc.pool.OracleConnectionPoolDataSource</data-source-class-name>
                <data-source-type>DataSource</data-source-type>
                <database-name>디비명</database-name>
                <data-source-name>oracle.jdbc.pool.OracleConnectionPoolDataSource</data-source-name>
                <network-protocol>tcp</network-protocol>
                <user>아이피</user>
                <password>패스워드</password>
                <port-number>1521</port-number>
                <server-name>아이피 혹은 127.0.0.1</server-name>
                <driver-type>thin</driver-type>
                <connection-pool>
                    <pooling>
                        <max>20</max>
                        <step>1</step>
                        <period>500000</period>
                    </pooling>
                </connection-pool>
            </database>
        </data-source>
    </resource>
</jeus-system>

 

 

<<< WEBMain.xml (컨테이너 1) >>>

 

<?xml version="1.0"?>
<!DOCTYPE web-container PUBLIC "-//Tmax Soft., Inc.//DTD WEB Main Config 4.0//EN"
                               "http://www.tmaxsoft.com/jeus/dtd/4.0/web-main-config.dtd">
<web-container>
    <context-group>
        <group-name>Center</group-name>
        <group-docbase>webapps</group-docbase>
        <servlet-home>c:\</servlet-home>
        <context>
            <context-name>Center</context-name>
            <context-path>/</context-path>
        </context>
        <session-config>
            <shared>true</shared>
            <timeout>20</timeout>
        </session-config>
        <webserver-connection>
            <webtob-listener>
                <listener-id>Center</listener-id>
                <port>9999</port>
                <output-buffer-size>0</output-buffer-size>
                <webtob-address>127.0.0.1</webtob-address>
                <thread-pool>
                    <min>30</min>
                    <max>30</max>
                </thread-pool>
            </webtob-listener>
        </webserver-connection>
        <logging>
            <error-log>
                <target>stdout</target>
                <buffer-size>0</buffer-size>
                <level>information</level>
            </error-log>
            <user-log>
                <buffer-size>0</buffer-size>
            </user-log>
            <access-log>
                <buffer-size>0</buffer-size>
                <valid-day>1</valid-day>
                <log-format>
                    <time-format>default</time-format>
                </log-format>
            </access-log>
        </logging>
    </context-group>
</web-container>

 

 

<<< jeus-web-dd_Center.xml >>>

 

<?xml version="1.0"?>
<!DOCTYPE jeus-web-dd PUBLIC "-//Tmax Soft., Inc.//DTD JEUS WEB Deployment Info 4.0//EN"
                             "http://www.tmaxsoft.com/jeus/dtd/4.0/jeus-web-dd.dtd">
<jeus-web-dd>
    <context>
        <context-name>center</context-name>
        <docbase>center</docbase>
        <auto-reload>
            <enable-reload>true</enable-reload>
            <check-on-demand>true</check-on-demand>
        </auto-reload>
    </context>
</jeus-web-dd>

 

 

 

<<< WEBMain.xml (컨테이너 2) >>>

 

<?xml version="1.0"?>
<!DOCTYPE web-container PUBLIC "-//Tmax Soft., Inc.//DTD WEB Main Config 4.0//EN"
                               "http://www.tmaxsoft.com/jeus/dtd/4.0/web-main-config.dtd">
<web-container>
    <context-group>
        <group-name>Admin</group-name>
        <group-docbase>webapps</group-docbase>
        <servlet-home>c:\</servlet-home>
        <context>
            <context-name>Admin</context-name>
            <context-path>/</context-path>
        </context>
        <session-config>
            <shared>true</shared>
            <timeout>20</timeout>
        </session-config>
        <webserver-connection>
            <webtob-listener>
                <listener-id>Center</listener-id>
                <port>9999</port>
                <output-buffer-size>0</output-buffer-size>
                <webtob-address>127.0.0.1</webtob-address>
                <thread-pool>
                    <min>30</min>
                    <max>30</max>
                </thread-pool>
            </webtob-listener>
        </webserver-connection>
        <logging>
            <error-log>
                <target>stdout</target>
                <buffer-size>0</buffer-size>
                <level>information</level>
            </error-log>
            <user-log>
                <buffer-size>0</buffer-size>
            </user-log>
            <access-log>
                <buffer-size>0</buffer-size>
                <valid-day>1</valid-day>
                <log-format>
                    <time-format>default</time-format>
                </log-format>
            </access-log>
        </logging>
    </context-group>
</web-container>


 

 

<<< jeus-web-dd_Admin.xml >>>

 

<?xml version="1.0"?>
<!DOCTYPE jeus-web-dd PUBLIC "-//Tmax Soft., Inc.//DTD JEUS WEB Deployment Info 4.0//EN"
                             "http://www.tmaxsoft.com/jeus/dtd/4.0/jeus-web-dd.dtd">
<jeus-web-dd>
    <context>
        <context-name>admin</context-name>
        <docbase>admin</docbase>
        <auto-reload>
            <enable-reload>true</enable-reload>
            <check-on-demand>true</check-on-demand>
        </auto-reload>
    </context>
</jeus-web-dd>


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

 

 

이 문서는 실무에서 자주 사용되는 웹/웹어플서버인 JEUS/WEBTOB를 접하면서 생기게된

설정문제와 기타 문제들을 정리해볼 목적으로 만들어 졌습니다. 오류사항이 있으면 메일을 보내주세요.

기타 문의는 http://www.tmax.co.kr 개발자포럼을 이용하세요.
Posted by 1010
98..Etc/70.JEUS2009. 8. 20. 17:05
반응형
우선 webtob/config/http.m 파일을 열어서

변경전)
css  MimeType = "application/x-pointplus", SVRTYPE = HTML

변경후)
css  MimeType = "text/css", SVRTYPE = HTML



------------위에 않되는 경우----------------------

htc MimeType ="text/x-component" SvrType =HTML (추가)
#txt MimeType ="text/plain" SvrType =HTML (주석처리)

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

컴파일 하고 webtob 재시작 해주세요...

wscfl -i http.m


원인은 아래 잃어보세요...

하도 틀린 곳이 많아서 (특히,  MS IIS를 돌리는 곳 가운데) 어디를 딱히 찍어낼 수도 없습니다. text/css나 text/html, text/javascript 등을 http 헤더에 지정하지 않은 채로 파일을 내보내는 곳이 아주 많습니다.

이런 곳이 많은 이유 중 하나는 M$ IE가 http 표준을 무시하고 제멋대로 file type sniffer인지 뭔지 하는 것을 쓰면서 웹 제작자의 버릇을 아주 잘못 들여 놓았기 때문입니다. 표준을 지키는 것이 얼마나 중요한지 보여 주는 단적인 보기입니다.


http 헤더의 Content-Type에 지정한 값을 _무조건_ 믿어야 함에도 불구하고, MS IE는  그것을 믿지 않고 파일 확장자와 파일 첫 부분을 직접 들여다 보고서 제멋대로 파일의 MIME type을 결정합니다.   이 바람에 상당수의 웹 개발자들이 http content-type header field에 제대로 된 값을 지정하지 않은 채로 파일을 내보냅니다.  그럴 경우 서버는 디폴트 값을 쓰므로, html, css 등이  text/html이나 text/css 대신 application/octet-stream이란 머릿표를  달고 클라이언트로 보내집니다. 이런 Content-Type 헤더를 달고 온 파일에 대해 http 표준을 따르는 모질라와 같은 브라우저는 application/octetstream은 자체 처리할 수 없으므로 저장하라는 대화 상자를 띄웁니다. 또 어떤 경우는 text/html이나 text/css 자리에 text/plain이 붙어 있어서 iframe으로 포함시킨 html 문서의 소스가 그대로 보이는 경우도 있습니다.

    IIS이든 Apache이든 또다른 웹 서버이든 정적 문서는 확장자 별로 (apache는 필요하면 특정 파일에 대해서만 따로 MIME type을 지정할 수도 있습니다) 기본 MIME type을 지정할 수 있습니다. 웹 서핑 하다가 html 소스가 화면 일부에 보인다든지, MS IE로 볼 때에는 '광고'가 뜨던 부분에서 모질라는 파일을 저장하라는 대화 상자가 뜬다든지 하면 신고해 주십시오. 다 이런 문제 때문입니다.

   참, MS IE의 file type sniffer는 어떨 때에는 아주 엉터리입니다. 전에 제가 운영하던 곳에서 database로부터 동적으로 PDF를 생성해서 (LaTeX을 써서) 뿌려 준 적이 있습니다. 물론, application/pdf란 http 헤더를 달아서 내보냈지요. acroread도 군소리 없이 잘 보여 주는 pdf 파일을 보고 MS IE의 filetype sniffer는 제멋대로 pdf가 아니라고 판단하고서 acroread를 띄우는 대신 저장하라고 하더군요.
Posted by 1010
56. Eclipse Etc.../Eclipse2009. 8. 20. 15:03
반응형
java 코드 코멘트



java 코드 포멧


Posted by 1010
98..Etc/70.JEUS2009. 8. 19. 09:42
반응형
출처 : http://develop.sunshiny.co.kr/143

[
jeus@localhost config]$ cat ws_engine.m
*DOMAIN
jeuservice

*NODE
localhost   * 컨테이너 1
  WEBTOBDIR = "/usr/local/jeus5/webserver",
  SHMKEY    = 54000,
  DOCROOT   = "/home/free/webapps/WebContent",
  PORT      = "8080",
  LOGGING   = "log1",
  ERRORLOG  = "log2",
  JSVPORT   = 9900,
  IndexName = "index.do,index.html,index.jsp",
  HTH       = 1

*VHOST     * 컨테이너2 가상 호스트 추가
vhost1    
  DOCROOT   = "/home/free2/webapps/WebContent",  * 새로운 컨텍스트 경로
  PORT      = "8088",           * 사용할 포트 번호 지정(포트번호만 변경하여 다른 컨텍스트 사용)
  NODENAME  = "localhost",    * 상위에  정의한 NODE 명을 지정
  HOSTNAME  = "192.168.1.11",   * DNS 명(예: aaa.co.kr) 또는 localhost IP(IP로 외부 접속)
                                                * HOSTNAME에서 DNS 명을 설정시에 로컬의 hosts 파일에 dns 추가
  IndexName = "index.do,index.html,index.jsp",  * 컨테이너 기동시에 읽어들일 파일
  LOGGING   = "log3",    * 로그 정의
  ERRORLOG  = "log4"  


*SVRGROUP
htmlg       NODENAME = "localhost", SVRTYPE = HTML
cgig        NODENAME = "localhost", SVRTYPE = CGI
ssig        NODENAME = "localhost", SVRTYPE = SSI
jsvg        NODENAME = "localhost", SVRTYPE = JSV
jsvg1       NODENAME = "localhost", SVRTYPE = JSV, VHOSTNAME = vhost1  * 가상 호스트 추가

*SERVER
html        SVGNAME  = htmlg, MinProc = 1,  MaxProc = 2
cgi         SVGNAME  = cgig,  MinProc = 1,  MaxProc = 2
ssi         SVGNAME  = ssig,  MinProc = 1,  MaxProc = 2
MyGroup     SVGNAME  = jsvg,  MinProc = 5, MaxProc = 10
MyGroup2    SVGNAME  = jsvg1,  MinProc = 5, MaxProc = 10    * 추가된 컨테이너에서 사용하는 그룹

*URI
uri1        Uri      = "/cgi-bin/",  Svrtype = CGI
uri2        Uri      = "/free1/", Svrtype = JSV     * 컨테이너1 의 이름(JEUSMain.xml)
uri3        Uri      = "/free2/", Svrtype = JSV, VhostName=vhost1, SvrName = MyGroup2  * 컨테이너2의 이름(JEUSMain.xml)
uri4        Uri      = "/", Svrtype = JSV

*ALIAS
alias1      URI      = "/cgi-bin/", RealPath = "/usr/local/jeus5/webserver/cgi-bin/"

*LOGGING
log1        Format   = "DEFAULT",   FileName = "/home/free/webapps/logs/webserver/access.log", Option = "sync"
log2        Format   = "ERROR",     FileName = "/home/free/webapps/logs/webserver/error.log",  Option = "sync"
log3        Format   = "DEFAULT",   FileName = "/home/free2/webapps/logs/webserver/access.log", Option = "sync" * 로그파일 저장 경로
log4        Format   = "ERROR",     FileName = "/home/free2/webapps/logs/webserver/error.log",  Option = "sync"

*EXT
htm         MimeType = "text/html",  SvrType = HTML
do              Mimetype ="application/jsp",  Svrtype=JSV,  SvrName=MyGroup  * 사용 확장자 정의
jsf             Mimetype ="application/jsp",  Svrtype=JSV,  SvrName=MyGroup
jsp             Mimetype ="application/jsp",  Svrtype=JSV,  SvrName=MyGroup
html            MimeType = "text/html", SvrType = HTML
hwp             MimeType = "application/x-hwp", SvrType = HTML
pdf             MimeType = "application/x-pdf", SVRTYPE = HTML
css             MimeType = "text/css", SvrType = HTML
js              MimeType = "application/x-javascript", SvrType = HTML
gul             MimeType = "application/gul", SvrType = HTML
gif             MimeType = "image/gif", SvrType=HTML
jpeg            MimeType = "image/gif", SvrType=HTML
jpg             MimeType = "image/gif", SvrType=HTML
zip             MimeType = "application/zip", SvrType=HTML
jar             MimeType = "application/x-java-archive", SvrType=HTML
exe             MimeType = "application/octet-stream", SvrType=HTML
wml             MimeType = "application/vnd.wap.wml", SvrType=HTML
wmls            MimeType = "application/vnd.wap.wmlscript", SvrType=HTML
wmlc            MimeType = "application/vnd.wap.wmlc", SvrType=HTML
wmlsc           MimeType = "application/vnd.wap.wmlscript", SvrType=HTML
wbmp            MimeType = "application/vnd.wap.wbmp", SvrType=HTML
swf             MimeType = "application/x-shockwave-flash", SvrType=HTML
csv             MimeType = "application/octet-stream", SvrType=HTML
xml             MimeType = "text/html", SvrType = HTML
asd             MimeType = "application/astound",SvrType=HTML
asn             MimeType = "application/astound",SvrType=HTML
doc             MimeType = "application/msword",SvrType=HTML
wiz             MimeType = "application/msword",SvrType=HTML
rtf             MimeType = "application/msword",SvrType=HTML
xls             MimeType = "application/vnd.ms-excel",SvrType=HTML
xlw             MimeType = "application/vnd.ms-excel",SvrType=HTML
xla             MimeType = "application/vnd.ms-excel",SvrType=HTML
xlc             MimeType = "application/vnd.ms-excel",SvrType=HTML
xlm             MimeType = "application/vnd.ms-excel",SvrType=HTML
xlt             MimeType = "application/vnd.ms-excel",SvrType=HTML
ppt             MimeType = "application/vnd.ms-powerpoint",SvrType=HTML
pps             MimeType = "application/vnd.ms-powerpoint",SvrType=HTML
pot             MimeType = "application/vnd.ms-powerpoint",SvrType=HTML
m13             MimeType = "application/x-msmediaview",SvrType=HTML
m14             MimeType = "application/x-msmediaview",SvrType=HTML
wmf             MimeType = "application/x-msmetafile",SvrType=HTML
midi            MimeType = "audio/midi",SvrType=HTML
mid             MimeType = "audio/midi",SvrType=HTML
aif             MimeType = "audio/x-aiff",SvrType=HTML
aiff            MimeType = "audio/x-aiff",SvrType=HTML
aifc            MimeType = "audio/x-aiff",SvrType=HTML
wav             MimeType = "audio/x-wav",SvrType=HTML
cab             MimeType = "x-application/octet-stream", SvrType = HTML
fla             MimeType = "application/x-fla", SvrType=HTML

ws_engine.m 파일은 설정후 컴파일 과정을 함
[jeus@localhost localhost]$
wscfl -i ws_engine.m

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

[jeus@localhost localhost]$ cat JEUSMain.xml
<?xml version="1.0" encoding="utf-8"?>
<jeus-system xmlns="http://www.tmaxsoft.com/xml/ns/jeus">
    <node>
                <name>localhost</name>
        <engine-container>
<!-- 컨테이너 1 -->
            <name>container1</name>
            <command-option>-Xms256m -Xmx512m</command-option>
            <engine-command>
                <type>ws</type>
                <name>engine1</name>
            </engine-command>
            <engine-command>
                <type>servlet</type>
                <name>engine1</name>
            </engine-command>
            <sequential-start>true</sequential-start>
        </engine-container>
<!-- 컨테이너 2 -->
                <engine-container>
            <name>container2</name>
            <command-option>-Xms256m -Xmx512m</command-option>
            <engine-command>
                <type>servlet</type>
                <name>engine2</name>
            </engine-command>
            <sequential-start>true</sequential-start>
        </engine-container>

        <class-ftp>true</class-ftp>
        <sequential-start>true</sequential-start>
        <enable-webadmin>true</enable-webadmin>
    </node>
    <application>
        <!-- 노드 localhost 에서 사용할 컨테이너 이름(ws_engine.m)-->
        <name>free1</name> 
        <path>/home/free/webapps/WebContent</path>
        <deployment-type>COMPONENT</deployment-type>
        <deployment-target>
            <target>
                <engine-container-name>localhost_container1</engine-container-name>
                <web-context-group>
                    <name>MyGroup</name>
                </web-context-group>
            </target>
        </deployment-target>
        <web-component/>
    </application>
    <application>
        <!-- 가상호스트 vhost1 에서 사용할 컨테이너 이름(ws_engine.m)-->
        <name>free2</name>
        <path>/home/free2/webapps/WebContent</path> <!-- 추가할 컨텍스트 경로 -->
        <deployment-type>COMPONENT</deployment-type>
        <deployment-target>
            <target>
                <engine-container-name>localhost_container2</engine-container-name>
                <web-context-group>
                    <name>MyGroup2</name>
                </web-context-group>
            </target>
        </deployment-target>
        <web-component/>
    </application>
</jeus-system>


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

기본으로 제우스에서 하나의 webtob 와 하나의 호스트명_ws_engine1 를 사용.
컨테이너 1 다음으로 추가되는 컨테이너는,
컨테이너 1에 설정된 호스트명_ws_engine1/WSMain.xml 에 설정부분을 추가하여 사용.

[jeus@localhost localhost_ws_engine1]$ cat WSMain.xml
<?xml version="1.0" encoding="UTF-8"?>
<ws-engine xmlns="http://www.tmaxsoft.com/xml/ns/jeus">
    <domain>
        <name>jeuservice</name>
<!-- 컨테이너 1에서 사용. -->
        <node>
            <name>localhost</name> 
            <webtob-dir>/usr/local/jeus5/webserver</webtob-dir>
            <shmkey>54000</shmkey>
            <docroot>/home/free/webapps/WebContent</docroot>
            <jsv-port>9900</jsv-port>
            <hth>1</hth>
            <port>8080</port>
            <logging>log1</logging>
            <error-log>log2</error-log>
        </node>

<!-- 추가된 컨테이너 설정은 아래 해당하는 엘리먼트 추가  -->
        <svrgroup>
            <name>htmlg</name>
            <svr-type>HTML</svr-type>
            <node-name>localhost</node-name>
        </svrgroup>
        <svrgroup>
            <name>cgig</name>
            <svr-type>CGI</svr-type>
            <node-name>localhost</node-name>
        </svrgroup>
        <svrgroup>
            <name>ssig</name>
            <svr-type>SSI</svr-type>
            <node-name>localhost</node-name>
        </svrgroup>
        <svrgroup>
            <name>jsvg</name>
            <svr-type>JSV</svr-type>
            <node-name>localhost</node-name>
        </svrgroup>
        <svrgroup>
            <name>jsvg2</name>
            <svr-type>JSV</svr-type>
            <node-name>localhost</node-name>
        </svrgroup>
        <server>
            <name>html</name>
            <svg-name>htmlg</svg-name>
            <min-proc>1</min-proc>
            <max-proc>2</max-proc> 
            <asq-count>1</asq-count>
        </server>
        <server>
            <name>cgi</name>
            <svg-name>cgig</svg-name>
            <min-proc>1</min-proc>
            <max-proc>2</max-proc>
        </server>
        <server>
            <name>ssi</name>
            <svg-name>ssig</svg-name>
            <min-proc>1</min-proc>
            <max-proc>2</max-proc>
        </server>
        <server>
            <name>MyGroup</name>
            <svg-name>jsvg</svg-name>
            <min-proc>5</min-proc>
            <max-proc>10</max-proc>
        </server>
        <server> <!-- 컨테이너 그룹 추가 (ws_engine.m)-->
            <name>MyGroup2</name>
            <svg-name>jsvg1</svg-name>
            <min-proc>5</min-proc>
            <max-proc>10</max-proc>
        </server>
        <uri>
            <name>uri1</name>
            <uri-def>/cgi-bin/</uri-def>
            <svr-type>CGI</svr-type>
        </uri>
        <uri>
            <name>uri2</name>
            <uri-def>/webapps</uri-def>
            <svr-type>JSV</svr-type>
        </uri>
        <uri>
            <name>uri3</name>
            <uri-def>/free2</uri-def>
            <svr-type>JSV</svr-type>
        </uri>
        <uri>
            <name>uri4</name>
            <uri-def>/</uri-def>
            <svr-type>JSV</svr-type>
        </uri>
        <logging>
            <name>log1</name>
            <format>DEFAULT</format>
            <file-name>/home/free/webapps/logs/webserver/access.log</file-name>
            <option>sync</option>
        </logging>
        <logging>
            <name>log2</name>
            <format>ERROR</format>
            <file-name>/home/free/webapps/logs/webserver/error.log</file-name>
            <option>sync</option>
        </logging>
        <logging>
            <name>log3</name>
            <format>DEFAULT</format> <!-- 추가할 컨텍스트의 로그 파일 저장 경로 (ws_engine.m) -->
            <file-name>/home/free2/webapps/logs/webserver/access.log</file-name>
            <option>sync</option>
        </logging>
        <logging>
            <name>log4</name>
            <format>ERROR</format>
            <file-name>/home/free2/webapps/logs/webserver/error.log</file-name>
            <option>sync</option>
        </logging>
        <ext>
            <name>htm</name>
            <mimetype>text/html</mimetype>
            <svr-type>HTML</svr-type>
        </ext>
        <ext>
            <name>jsp</name>
            <mimetype>application/jsp</mimetype>
            <svr-type>JSV</svr-type>
            <svr-name>MyGroup</svr-name>
        </ext>
    </domain>
</ws-engine>


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


컨테이너 1에서 사용하는
호스트명_servlet_engine1

[jeus@localhost localhost_servlet_engine1]$ cat WEBMain.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-container xmlns="http://www.tmaxsoft.com/xml/ns/jeus">
    <context-group>
        <group-name>MyGroup</group-name>
        <webserver-connection>
            <webtob-listener>
                <listener-id>webtob1</listener-id>
                <port>9900</port>
                <output-buffer-size>8192</output-buffer-size>
                <thread-pool>
                    <min>5</min>
                    <max>10</max>
                    <step>1</step>
                    <max-idle-time>30000</max-idle-time>
                </thread-pool>
                <webtob-address>127.0.0.1</webtob-address>
                <registration-id>MyGroup</registration-id>
            </webtob-listener>
        </webserver-connection>
        <print-error-to-browser>true</print-error-to-browser>
        <encoding>
            <request-encoding>
                <default>MS949</default>
                <forced>MS949</forced>
            </request-encoding>
            <response-encoding>
                <default>MS949</default>
                <forced>MS949</forced>
            </response-encoding>
            <postdata-encoding>
                <default>MS949</default>
                <forced>MS949</forced>
            </postdata-encoding>
        </encoding>
        <jsp-engine>
            <jsp-work-dir>/home/free/webapps/jspwork</jsp-work-dir>
        </jsp-engine>
        <logging>
            <access-log>
                <handler>
                    <file-handler>
                        <name>handler1</name>
                        <valid-day>1</valid-day>
                    </file-handler>
                </handler>
            </access-log>
        </logging>
    </context-group>
    <session-cluster>
        <session-routing>false</session-routing>
    </session-cluster>
</web-container>


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

컨테이너 2에서 사용하는 호스트명_servlet_engine2
필요한 설정부분은 그룹명과 jsp 컴파일된 클래스가 저장될 경로 변경

[jeus@localhost localhost_servlet_engine2]$ cat WEBMain.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-container xmlns="http://www.tmaxsoft.com/xml/ns/jeus">
    <context-group>
        <group-name>MyGroup2</group-name>
        <webserver-connection>
            <webtob-listener>
                <listener-id>webtob1</listener-id>
                <port>9900</port> <!-- 하나의 webtob 를 공유하기때문에 통신 포트 동일-->
                <output-buffer-size>8192</output-buffer-size>
                <thread-pool>
                    <min>5</min>
                    <max>10</max>
                    <step>1</step>
                    <max-idle-time>30000</max-idle-time>
                </thread-pool>
                <registration-id>MyGroup2</registration-id>
                <webtob-home>/usr/local/jeus5/webserver</webtob-home>
            </webtob-listener>
        </webserver-connection>
        <print-error-to-browser>true</print-error-to-browser>
        <encoding>
            <request-encoding>
                <default>MS949</default>
                <forced>MS949</forced>
            </request-encoding>
            <response-encoding>
                <default>MS949</default>
                <forced>MS949</forced>
            </response-encoding>
            <postdata-encoding>
                <default>MS949</default>
                <forced>MS949</forced>
            </postdata-encoding>
        </encoding>
        <jsp-engine>
            <jsp-work-dir>/home/free2/webapps/jspwork</jsp-work-dir>
        </jsp-engine>
        <logging>
            <access-log>
                <handler>
                    <file-handler>
                        <name>handler1</name>
                        <valid-day>1</valid-day>
                    </file-handler>
                </handler>
            </access-log>
        </logging>
    </context-group>
    <session-cluster>
        <session-routing>false</session-routing>
    </session-cluster>
</web-container>
Posted by 1010
61.Linux2009. 8. 18. 17:34
반응형
ftp 실행시 폴더가 보이지 않을때

setsebool -P ftp_home_dir=1
Posted by 1010
61.Linux2009. 8. 18. 11:51
반응형
출처 : http://anglehun.tistory.com/129

1. 설치되어 있나 확인하기
rpm -qa | grep vsftpd

2. 설치하기
yum install vsftpd

3. 설정하기
FTP서비스 시작 : /etc/rc.d/init.d/vsftpd start
FTP서비스 종료 : /etc/rc.d/init.d/vsftpd stop
FTP서비스 재시작 : /etc/rc.d/init.d/vsftpd restart
부팅시 자동실행 : chkconfig vsftpd on
설정파일 : /etc/vsftpd/vsftpd.conf

1) home디렉토리 상위로 이동금지
    chroot_list_enable=YES
    chroot_local_user=YES
    설정후 접속할 때 /etc/vsftpd.chroot_list 파일이 없다는 오류가 발생하게 되면,
    해당파일을 생성해줍니다.
제외계정명을 해당파일에 넣어줍니다.
2) 동시 접속자수 제한
    max_clients=10  (숫자만큼 제한)
3) IP당 접속자수 제한
    max_per_ip=2 (수자만큼 제한)

4. 시스템->관리->방화벽->신뢰하는 서비스->FTP 체크 후 적용

5. 사용자 추가하기
#useradd -M ID : ID를 추가
#mkdir /ftpdata
#mkdir /ftpdata/ID : 사용자 디렉토리 생성(사용자 로그인 디렉토리)
#usermod -d /ftpdata/ID ID : 사용자 디렉토리 연결
#chown -R ID:ID /ftpdata : ID에 대한 권한 변경(읽기/쓰기/실행 가능)
#passwd ID : ID에 대한 패스워드 부여

6. 사용자 폴더를 제외한 폴더 접근 제한
#vi /etc/vsftpd/vsftpd.conf

맨 아래에 다음과 같이 코드를 추가해준다.
chroot_local_user=YES

#/etc/rc.d/init.d/vsftpd restart : vsftpd 서비스 재시작
Posted by 1010
61.Linux2009. 8. 17. 20:27
반응형
출처 : http://anaron.egloos.com/73366

※ 리눅스에서의 네트워크 장치 이름

    랜카드 장착시 -> '/dev/eth0'  ,  '/dev/eth1'  ,  ...




☆ IP 주소

- 각 컴퓨터 랜카드에 부여되는 고유한 주소

예) 255 . 255 . 255 . 255




☆ 네트워크 주소

- 같은 네트워크에 있는 공통된 주소.

- 각 IP에 서브넷 마스크( C클래스의 경우 : 255 . 255 . 255 . 0 ) 를 XOR하면 나오는 주소.


예)  리눅스 서버 IP          : 192 . 168 . 184 . 100

      리눅스 클라이언트 IP : 192 . 168 . 184 . 200

      윈도우 클라이언트 IP : 192 . 168 . 184 . 201


      >> 굵은 부분이 네트워크 주소

      >> 밑줄 부분이 사설 네트워크 주소

           : 외부와 분리된 별도의 네트워크 공인 IP가 부족할때 사용함.




☆ Broadcast

- 내부 네트워크의 모든 컴퓨터가 듣게되는 주소.

- 네트워크 주소 + 255

   예)  ( C클래스 )  192 . 168 . 184 . 255




☆ Gateway , Router

- 게이트웨이 = 라우터

- 네트워크 간에 데이터를 전송하는 장비 또는 컴퓨터.

- 외부 네트워크로 나가기 위한 통로.

- 게이트웨이 주소 마지막 숫자는 관리자가 정하기 나름.

※ 게이트웨이 를 별도로 추가시

    # route  add  default  gw  <게이트웨이 주소>  dev  <장치 이름>

    예)  # route  add  default  gw  192.168.184.254  dev  eth0




☆ Net Mask  &  Class


- 넷마스크 : 네트워크의 규모를 등급별로 결정함.

- C 클래스 : 256개의 IP주소 사용가능

                 예)  네트워크 주소 : 192 . 168 . 184 . 0
                       넷마스크 주소 : 255 . 255 . 255 . 0

- B 클래스 : 65536개의 IP주소 사용가능 ( 2^16 )

                 예)  네트워크 주소 : 192 . 168 . 0 . 0
                       넷마스크 주소 : 255 . 255 . 0 . 0

- A 클래스 : 2^24 개의 IP주소 사용가능

                 예)  네트워크 주소 : 192 . 0 . 0 . 0
                       넷마스크 주소 : 255 . 0 . 0 . 0


※ 설치 가능한 컴퓨터 갯수

    네트워크 주소, 브로드 캐스트 주소, 게이트 웨이 주소 3개를 제외한

    갯수의 컴퓨터를 네트워크 내부에 설치할 수 있다. (C클래스의 경우 256-3 = 253대)




☆ DNS 서버 주소

- URL을 해당 컴퓨터의 IP주소로 변환해주는 서버 컴퓨터의 주소

- 설정 파일  :  /etc/resolv.conf

                    ------------------------------------
                    ........

                    Default  Server : *****                       // DNS 제공자

                    nameserver < ***.***.***.*** >         // 해당 DNS 서버 IP
                    ........

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




☆ 네트워크 관련 명령어


ⓐ # system-config-network

    - 네트워크 연결방식을 DHCP 클라이언트 또는 고정 IP 주소를 사용할지 결정

    - IP 주소 , 서브넷 마스크 , 게이트웨이 정보

    - DNS 정보

    - 네트워크 카드 드라이버 설정 , 장치 (eth0) 설정


ⓑ # system-config-network-tui

    - Text User Interface  :  네트워크 설정의 텍스트 모드


ⓒ # service  network  restart

    - 네트워크 설정 변경후 변경 내용을 시스템에 적용 (네트워크 서비스 재시작)


ⓓ # ifconfig < 장치 이름 >

    - 해당 장치의 IP 주소 설정 정보를 출력


ⓔ # nslookup

    - DNS 서버작동 테스트


ⓕ # ping

    - 네트워크에 응답 테스트




☆ 네트워크 설정 변경 관련 파일

 /etc/sysconfig/network                                 // 기본 정보

 /etc/sysconfig/network-scripts/ifcfg-eth0       // eth0 에대한 정보 몽창..

/etc/resolv.conf                                            // DNS 서버정보 및 호스트 이름 정보




☆ 네트워크 카드 교체

- 실제로 네트워크 카드에 문제가 발생시 적용시킬수 있다.


1. 네트워크 카드를 제거.

2. 네트워크 카드를 새로 장착.

3. root 로 부팅~

4. # system-config-network

5. "하드웨어" 탭  →  'eth0' 지우기

                       [새로만들기]  →  하드웨어 타입 'Ethernet' 선택

                       →  <네트워크 아답터 설정 창>  →  아답터 'AMD PCnet32' 선택

6. "장치" 탭  →  [새로만들기]  →  '이더넷 연결' 선택  →  'AMD PCnet32' 선택

                       →  <네트워크 셋팅 설정 창>  →  '정적으로 설정된 IP 주소들' 선택

                       →  네트워크 정보 입력

7. "DNS" 탭  →  DNS 주소 확인

8. 완료 (창닫기 or  메뉴 [파일]-[끝내기] 선택)

9. # service  network  restart            // 서비스 재시작

10. # ping  www.google.co.kr          //  응답확인

11. # ifconfig  eth0                          //  네트워크 설정 확인




☆ 네트워크 설정 - Text Mode

# vi  /etc/sysconfig/network         // 확인

# vi /etc/sysconfig/network-scripts/ifcfg-eth0

   다음 사항을 수정한다.

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

   ..............

   NETMASK = *** . *** . *** . ***              // 넷마스크

   IPADDR = *** . *** . *** . ***                  // IP 주소
   ..............

   GATEWAY = *** . *** . *** . ***             // 게이트 웨이 주소
   ..............

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

# service  network  restart




☆ 네트워크 설정 - Command Mode

# ifconfig  eth0  <IP 주소>  netmask  <넷마스크>  broadcast  <브로드캐스트 주소>  up

# route  add  -net  <네트워크 주소>  netmask  <넷마스크>  eth0

# route  add  default  gw  <게이트웨이 주소>  dev  eth0

# vi /etc/resolv.conf          // DNS 설정

# service  network  restart





※  인터넷이 잘 안될때 , DNS 서버 고장을 의심해보자

ⓐ DNS 서버 작동 확인하기

    # nslookup

    > server                     // 사용중인 DNS 서버 주소확인,  "Default server :" 이후에 나오는 주소가 DNS주소

    > www.google.co.kr

       ;; connection timed out; no servers could be reached

        위와 같은 에러 메시지가 나온다면 DNS 서버가 고장나거나, DNS 서버의 주소가 잘못된것.


ⓑ 다른 컴퓨터에서 DNS 주소 따오기

     windows 인경우 : cmd 창에서 'nslookup' 명령으로 DNS 주소 획득~

     linux 인 경우 :  위 ⓐ방법으로 확인


ⓒ 가져온 DNS 주소 확인하기

    # nslookup

    > server  <새로운 DNS 주소>

    > www.google.co.kr               // DNS 서버 작동 확인


ⓓ 정상 작동하는 DNS 주소 적용하기

    # vi  /etc/resolv.conf               // 'nameserver' 부분 수정
Posted by 1010
61.Linux2009. 8. 17. 20:08
반응형

출처 : http://wiz.pe.kr/451

0. 들어가기 전에

이 글은 [Fedora 9] 간단하게 리눅스 서버 만들기의 일부로 작성된 글입니다.
개별 기능들에 대한 내용은 전체적인 흐름과 환경에 영향을 받을 수 있다는 점을 참고하세요.
목표 시스템은 아래와 같습니다.

1차 목표 시스템 (Fedora Core 9 + Apache + PHP + MySQL + fastCGI + Textcube)
Linux : Linux reds 2.6.25.14 (Fedora Core 9)
Apache : httpd-2.2.9-1
PHP : php-5.2.6-2
MySQL : mysql-5.0.51

1. 네트워크 설정

// 네트워크와 호스트 명 설정
# vi /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=fedora.wiz.pe.kr

// 네트워크 인터페이스 설정
# vi /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
ONBOOT=yes
NM_CONTROLLED=yes
IPADDR=[IP주소]
NETMASK=255.255.255.0
GATEWAY=[Gateway 주소]
DNS1=168.126.63.1
TYPE=Ethernet
USERCTL=no
IPV6INIT=no

// 기본 DNS 설정
# vi /etc/resolv.conf
nameserver 168.126.63.1
// 네트워크서비스 자동 시작 해제
# chkconfig NetworkManager off
// 네트워크서비스 중지
# service NetworkManager stop
// 네트워크 자동 시작 등록
# chkconfig network on
// 네트워크 시작
# service network start

IP와 게이트웨이 설정 등에 대한 이야기는 그냥 넘어가겠습니다. 가장 중요한 부분은 "설치 후 기본환경 설정"에서 이야기 했던 것처럼 networkservice 를 죽이고, network 만 설정을 해야 합니다. NetworkManager는 무선랜 환경 등 동적인 네트워크 환경을 지원하기 위한 부분인데 서버에서 약간의 문제가 있어서 나타나는 현상이라고 합니다. 관련 내용은 Personal Fedora 9 Installation GuideNetworkManager를 참고하세요.

2. 방화벽 설정

2.1 방화벽 해제

// 방화벽 설정 해제
# lokkit
- disable 설정

외부에서 접근이 가능하도록 방화벽은 관리 기능을 이용해 해제를 해줍니다

2.2 selinux 해제

fedora는 selinux를 통해 보안 정책을 관리 하도록 되어 있습니다. 방화벽을 해제해도 selinux 때문에 외부에서 접근이 불가능 하게 됩니다. 그래서 우선 selinux를 해제 시켜줍니다. 두 가지 방법이 있지만 첫 번째 방법을 추천합니다.

// 방법1 : selinux config 설정 변경
# vi /etc/selinux/config
▷ SELINUXTYPE=
▶ SELINUXTYPE=disabled // 상태확인
# sestatus ?v
SELinux status: disabled
// 방법2 : system 보안 설정 변경
# vi /etc/sysconfig/system-config-securitylevel
// 아래 내용을 추가
▶ setenforce 0
// 상태확인
# sestatus ?v
SELinux status: disabled

3. 관련글

* 간단하게 리눅스 서버 만들기
  - 설치 후 기본 환경 설정
  - 계정관리
  - 콘솔 해상도 조절하기
  - 네트워크 설정 및 방화벽과 selinux 설정
  - 한글 터미널 설정 및 yum 설정
외부참고 링크
* Linux 네트워크 설정
* [Fedora] Network
* NetworkManager
* Fedora 방화벽 설정
* SELinux 제어 방법
* 국내 DNS 서버 목록
* Fedora Core Project 의 SELINUX에 대한 이해

Posted by 1010
98..Etc/Etc...2009. 8. 14. 15:53
반응형
웹 문서의 markup(HTML, XHTML, …)을 검사

http://validator.kldp.org/
Posted by 1010
61.Linux2009. 8. 14. 13:41
반응형
Posted by 1010
61.Linux2009. 8. 14. 11:46
반응형
출처 : http://huikyun.tistory.com/201

Java JDK 6.0이 나온지도 꽤나 긴 시간이 흘럿건만 필자는 아직도 5.0을 고집한다.
고객쪽 서버에 설치하였을때 구버전의 JRE가 설치된 경우가 대다수이므로 최신버전으로 개발을 할 수가 없기 때문에
1.4.2에서 5.0으로 올라온 것도 겨우 얼마전 이야기이다. 그것도 아무 허락없이... ㅋㅋㅋ

뭐, 거두절미하고 일단 JDK 5.0 을 받으러 가보자.
예전엔 이런저런 정보 넣는 것이 없었는데 다운을 하려고 하면 정보를 입력하고 입력된 메일로 주소가 온다.-_-'
메일로 보내주는 주소가 바로 이것이다.

JDK 1.4.2 >> http://java.sun.com/javase/downloads/jdk/142/
JDK 5.0 >> http://java.sun.com/javase/downloads/5/jdk

두 링크중에 반드시 아래의 5.0으로 받는다.

글 작성 시점을 기준으로 최신 업데이트 버전은 18이다.

플랫폼은 리눅스, 언어는 멀랭, 라이센스 동의에 체크하고 "Continue" 버튼을 클릭...


아래 이미지의 빨간 박스처럼 rpm 이라는 단어가 없는 파일의 파일명을 클릭하면 바로 다운로드 할 수 있다.


다운 받은 파일을 /usr/local 으로 이동시키고 그 경로로 가서 파일의 권한을 바꿔준후 실행시킨다.

[root@localhost ~]# mv jdk-1_5_0_18-linux-i586.bin /usr/local
[root@localhost ~]# cd /usr/local
[root@localhost local]# chmod 755 jdk-1_5_0_18-linux-i586.bin
[root@localhost local]# ./jdk-1_5_0_18-linux-i586.bin

아래처럼 알 수 없는 언어로 도배가 되면 "yes" 입력후 엔터.


그러면 자동으로 설치가 시작이 되고 현재 폴더에 jdk1.5.0_18 이라는 폴더가 생긴 것을 아래 이미지에서 확인할 수 있다.
폴더명이 긴 관계로 java라는 이름으로 심볼릭 링크를 만들어 준다.


파일들이 설치가 되면 /etc/profile 파일을 열어서 아래의 이미지와 같이 환경 변수들을 설정해준다.


저장을 하고 나와서 적용을 위해서 아래와 같이 입력 후, 엔터.

[root@localhost local]# source /etc/profile

그리고 나서 env 명령을 사용하여 환경변수를 확인하니 아래처럼 적용된 환경변수가 보인다.


그리고 마지막으로... 역시나 JDK 설치 인증샷의 진짜배기는 바로 이것...

저작자 표시 비영리 변경 금지
Posted by 1010
61.Linux2009. 8. 14. 11:42
반응형
Posted by 1010
61.Linux2009. 8. 14. 11:27
반응형

linux 에서 자바를 설치할려면 우선 설치파일이 윈도우랑 틀리다는건 다 아실겁니다.

 

http://java.sun.com 에서 최신의 jdk 를 다운받습니다.

현재 최신버전은 http://java.sun.com/javase/downloads/index.jsp 이곳에서

JDK6 을 다운받을 수 있습니다.

 

다운받는 파일은

Linux RPM in self-extraction file 인 jdk-6-linux-i586-rpm.bin 을 다운받습니다.

 

 

/usr/local/src 디렉토리에 다운받은 파일을 옮겨넣으시고

#chmod 755 jdk-6-linux-i586-rpm.bin

#./jdk-6-linux-i586-rpm.bin

 

하면 license 에 대해서 글들이 나오고..엔터키를 누르면서 맨 밑으로 내리면 머라고 물어봅니다.

yes 라고 입력하시고 엔터 하시면 이제 설치가 시작됩니다.

 

설치가 완료도면 java 의 설치위치는 /usr/java 가 되있을겁니다.

만약에 어디있는지 모르신다면 최상위 디렉토리(루트 디렉토리)로 이동하신후 find . -name jdk* -print 하면 자바파일이 어디에

있는지 알 수 있습니다.

 

디렉토리가 좀 길고 그러면 나중에 찾는거 힘드니까 /usr/java 가 아니라

폴더이름이 jdk-6-linux-i586  이렇다면 이름을 java 로 변경해주세요

 

설치가 완료되면 이제 PATH 를 잡아주셔야하는데

여기서 중요한것이 잘못하면 로그인이 안될 수 있습니다. 터미널 창을 하나 더 띄워서 로그인해주세요

source 실행한 후 로그인이 안된다면 미리 띄워놓았던 터미널에서 원상복구를 해야합니다.

 

#vi /etc/profile

맨 밑에

 

JAVA_HOME=/usr/java  #자바가 설치된 위치입니다.
export JAVA_HOME
PATH=$PATH:$JAVA_HOME/bin
CLASSPATH=$CLASSPATH:$JAVA_HOME/lib

 

이렇게 추가한 후 저장하시고 나오세요

 

그리고

#source /etc/profile

하면 끝납니다.

 

이제

#java

#javac

했을 때 명령어 옵션이 제대로 나오나 확인하시면 끝

Posted by 1010
61.Linux2009. 8. 14. 11:03
반응형
Fedora 10의 X 윈도우 해상도 설정
Fedora 10에서는 xorg.conf가 없이 작동하는 경우가 많다.

Fedora 10에 설치된 Xorg 7은 auto detection 기능을 이용해서 장치나 해상도를 결정할 수 있기 때문에, 잘 나오는 경우라면 그냥 무난하게 사용하면 된다. 하지만 VGA의 최대 해상도가 잘 나오지 않거나, Virtualbox, VMware같은 장치를 사용하면 모니터를 auto detection 하지 못해서 해상도가 제대로 잡히지 않는다.

이럴땐 /etc/X11/xorg.conf를 설정해주면 된다.

그러나 간혹 이 파일이 없는 경우가 있다. 바로 자동 감지로 Xorg가 작동한 경우이다. 그래서 먼저 기본 설정의 xorg.conf를 생성해야 한다. (아래 방법이 귀찮으신 분들은 system-config-display 패키지를 설치해도 된다. 이 패키지를 설치하고 실행하면 즉시 xorg.conf를 생성한다)

[root@localhost X11]# Xorg -configure :1

X.Org X Server 1.5.3
Release Date: 5 November 2008
X Protocol Version 11, Revision 0
Build Operating System: Linux 2.6.18-92.1.18.el5 i686
Current Operating System: Linux localhost.localdomain 2.6.27.9-159.fc10.i686 #1 SMP Tue Dec 16 15:12:04 EST 2008 i686
Build Date: 11 December 2008  05:27:37PM
Build ID: xorg-x11-server 1.5.3-6.fc10
Before reporting problems, check http://wiki.x.org
to make sure that you have the latest version.
Markers: (--) probed, (**) from config file, (==) default setting,
(++) from command line, (!!) notice, (II) informational,
(WW) warning, (EE) error, (NI) not implemented, (??) unknown.
(==) Log file: "/var/log/Xorg.1.log", Time: Fri Feb 20 18:45:34 2009
...생략...
(++) Using config file: "/root/xorg.conf.new"

Xorg detected your mouse at device /dev/input/mice.
Please check your config if the mouse is still not
operational, as by default Xorg tries to autodetect
the protocol.

Your xorg.conf file is /root/xorg.conf.new

To test the server, run 'X -config /root/xorg.conf.new'


이제 /root/xorg.conf.new에 생성된 파일을 /etc/X11/xorg.conf로 복사해온 뒤에 파일을 열어보자. 아랫 부분에 Section "Screen"이 있는데 여기서 24bit 색상 부분인 SubSection의 Depth가 24인 부분을 수정한다. (24bit 는 트루컬러를 의미한다)

Section "Screen"
Identifier "Screen0"
Device "Card0"
Monitor "Monitor0"
SubSection "Display"
Viewport 0 0
Depth 1
EndSubSection
SubSection "Display"
Viewport 0 0
Depth 4
EndSubSection
SubSection "Display"
Viewport 0 0
Depth 8
EndSubSection
SubSection "Display"
Viewport 0 0
Depth 15
EndSubSection
SubSection "Display"
Viewport 0 0
Depth 16
EndSubSection
SubSection "Display"
Viewport 0 0
Depth 24
EndSubSection
EndSection



방법은 위 Depth 24라인 아래에 Modes 다음에 해상도를 넣어주면 된다.

Section "Screen"
Identifier "Screen0"
Device "Card0"
Monitor "Monitor0"
...생략...
SubSection "Display"
Viewport 0 0
Depth 24
Modes "1280x1024" "1280x960"
EndSubSection
EndSection


위의 예는 1280x1024와 1280x960의 해상도를 지원하도록 넣어둔 것이다. 설정이 끝났으면 X 윈도우를 재시작하면 된다. 재시작 방법은 여러가지가 있으나 제일 편한 것은 <CTRL-ALT-DELETE>로 강제 종료시켜버리는 것이다. 그러나 초보자라서 X 윈도우 재시작을 잘 모른다면 그냥 재부팅하는게 편하다.
Posted by 1010
61.Linux2009. 8. 13. 18:04
반응형

mv jdk-1_5_0_08-linux-i586.bin /usr/local

cd /usr/local

chmod 755 jdk-1_5_0_08-linux-i586.bin

./jdk-1_5_0_08-linux-i586.bin

알수없는 내용들이 많이 나옴.

"yes" 입력후 엔터

자동 설치

ln -s jdk1.5.0_18 java

vi /etc/profile

----------추가----------

#Java Setting
export JAVA_HOME=/usr/local/java
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=$JAVA_HOME/jre/lib/ext:$JAVA_HOME/lib/tools.jar

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

source /etc/profile

env

-----------내용확인-----------

JAVA_HOME=/usr/local/java

CLASSPATH=/usr/local/java/jre/lib/ext:/usr/local/java/lib/tools.jar

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

java -version

java

javac

끝-

Posted by 1010
02.Oracle/DataBase2009. 8. 12. 15:59
반응형
출처 : http://javaservice.net/
--테이블별 현황보기
create or replace
procedure show_space
( p_segname in varchar2,
p_owner in varchar2 default user,
p_type in varchar2 default 'TABLE' )
as
l_free_blks number;
 
l_total_blocks number;
l_total_bytes number;
l_unused_blocks number;
l_unused_bytes number;
l_LastUsedExtFileId number;
l_LastUsedExtBlockId number;
l_LAST_USED_BLOCK number;
procedure p( p_label in varchar2, p_num in number )
is
begin
dbms_output.put_line( rpad(p_label,40,'.') || p_num );
end;
begin
dbms_space.free_blocks
( segment_owner => p_owner,
segment_name => p_segname,
segment_type => p_type,
freelist_group_id => 0,
free_blks => l_free_blks );
 
dbms_space.unused_space
( segment_owner => p_owner,
segment_name => p_segname,
segment_type => p_type,
total_blocks => l_total_blocks,
total_bytes => l_total_bytes,
unused_blocks => l_unused_blocks,
unused_bytes => l_unused_bytes,
LAST_USED_EXTENT_FILE_ID => l_LastUsedExtFileId,
LAST_USED_EXTENT_BLOCK_ID => l_LastUsedExtBlockId,
LAST_USED_BLOCK => l_LAST_USED_BLOCK );
 
p( 'Free Blocks', l_free_blks );
p( 'Total Blocks', l_total_blocks );
p( 'Total Bytes', l_total_bytes );
p( 'Unused Blocks', l_unused_blocks );
p( 'Unused Bytes', l_unused_bytes );
p( 'Last Used Ext FileId', l_LastUsedExtFileId );
p( 'Last Used Ext BlockId', l_LastUsedExtBlockId );
p( 'Last Used Block', l_LAST_USED_BLOCK );
end;
/
set serveroutput on
exec show_space( 'EMP' );
 
--테이블스페이스 현황보기
column dummy noprint
column pct_used format 999.9 heading "%|Used"
column name format a16 heading "Tablespace Name"
column Kbytes format 999,999,999 heading "KBytes"
column used format 999,999,999 heading "Used"
column free format 999,999,999 heading "Free"
column largest format 999,999,999 heading "Largest"
break on report
compute sum of kbytes on report
compute sum of free on report
compute sum of used on report
 
select nvl(b.tablespace_name,
nvl(a.tablespace_name,'UNKOWN')) name,
kbytes_alloc kbytes,
kbytes_alloc-nvl(kbytes_free,0) used,
nvl(kbytes_free,0) free,
((kbytes_alloc-nvl(kbytes_free,0))/
kbytes_alloc)*100 pct_used,
nvl(largest,0) largest
from ( select sum(bytes)/1024 Kbytes_free,
max(bytes)/1024 largest,
tablespace_name
from sys.dba_free_space
group by tablespace_name ) a,
( select sum(bytes)/1024 Kbytes_alloc,
tablespace_name
from sys.dba_data_files
group by tablespace_name )b
where a.tablespace_name (+) = b.tablespace_name
order by 1
/
 
--테이블스페이스 현황보기(덤으로)
SELECT
sysdate inst_date ,
ddf.tablespace_name tspace ,
ROUND(fst.FRAG_INDEX,2) fragindex ,
allspc.KB totalaloc ,
(ddf.fretot - fst.total_free ) /1024 totalused ,
fst.total_free /1024 totalfree ,
ROUND((fst.total_free /ddf.fretot),2) * 100 frepct ,
fst.max_hole /1024 maxdiv ,
ROUND((fst.avg_hole /1024),2) avgdiv ,
fst.holes num_of_div
FROM dual,
(SELECT
tablespace_name tablespace_name ,
SUM(bytes) fretot
FROM dba_data_files
WHERE tablespace_name != 'TEMP'
group by tablespace_name) ddf,
(
SELECT tablespace_name tablespace_name,
SQRT(MAX(BLOCKS)/SUM(BLOCKS))*(100/SQRT(SQRT(COUNT(BLOCKS)) ))
FRAG_INDEX,
SUM(bytes) total_free,
MAX(bytes) max_hole,
AVG(bytes) avg_hole,
COUNT(*) holes
FROM dba_free_space
WHERE tablespace_name != 'TEMP'
GROUP BY tablespace_name
) fst,
(select table_space tablespace_name , sum(x) KB from
(select tablespace_name table_space,sum(BYTES/1024) x from
dba_data_files
where maxbytes=0 and
tablespace_name != 'TEMP'
group by tablespace_name
union all
select tablespace_name table_space,sum(MAXBYTES/1024) x from
dba_data_files
where tablespace_name != 'TEMP'
group by tablespace_name
)group by table_space) allspc
WHERE ddf.tablespace_name = fst.tablespace_name(+)
and ddf.tablespace_name = allspc.tablespace_name(+);


출처 : http://blog.empas.com/jb0077/21023496
Posted by 1010
02.Oracle/DataBase2009. 8. 12. 15:58
반응형
오라클 실행계획(explan table) 보기.

작성자: 안창선(kabin@kldp.org)

오라클을 사용하면서 느낀것이 plan을 뜨는게 인포믹스보다 번거롭게 느껴지더군요.
그래서그런지 사용하는분을 별로 보지 못했습니다. 이제 아래 내용을 따라 하시면..
아주 쉽게 plan을 떠보고 SQL문을 튜닝하실 수 있을겁니다.

오라클은 실행계획이라는 것을 확인하여 성능을 측정할 수 있습니다.
엄밀히 말해 성능을 측정하는게 아니라 SQL리 인덱스를 적절히 쓰고 있는지
아니면 인덱스가 무시된체 full table scan을 하여 성능을 떨어뜨리게 되는지등을
확인하는 것입니다.(맞나?)

1. 우선 실행계획을 측정 하려면 실행계획을 확인한 자료를 오라클 DB에 저장할 수
있도록 실행계획 테이블을 만들어 줘야 합니다. 실행계획 테이블의 이름은 어떠한
이름을 가지고 있더라도 상관은 없지만 아래의 테이블 필드를 가지고 있어야
합니다. 따라서 실행계획을 확인하기 위한 첫 작업은 실행계획 테이블을 만드는
것이겠지요. 우리는 디폴트 이름은 PLAN_TABLE이라고 이름을 지읍시다.

create table PLAN_TABLE (
statement_id varchar2(30),
timestamp date,
remarks varchar2(80),
operation varchar2(30),
options varchar2(30),
object_node varchar2(128),
object_owner varchar2(30),
object_name varchar2(30),
object_instance numeric,
object_type varchar2(30),
optimizer varchar2(255),
search_columns numeric,
id numeric,
parent_id numeric,
position numeric,
other long);
create unique index PLAN_TABLE_INDEX
on PLAN_TABLE ( statement_id, id)

2. 자 이제 실행계획 자료를 저장할 테이블을 만들었으니 이제 특정 SQL의
실행계획을 확인해 봅시다.

delete plan_table
/
EXPLAIN PLAN SET STATEMENT_ID = 'plan1' --> 해당실행문의 제목
INTO PLAN_TABLE
FOR
SELECT *
FROM test_table a
WHERE a.test like 'hi'||'%'
/

즉 위의 문장은 일단 실행계획테이블(plan_table)의 자료를 일단 모두 지운다음에.
plan1 ID로 문장을 지정하고 아래에 나오는 SQL문장의 결과를 PLAN_TABLE에
저장 하라는 명령입니다.

3. 이제 실행계획의 결과값을 봅시다.

결과값은 실행계획 테이블에 들어가 있습니다. 결과값을 보려면 아래의 SQL을
실행시켜 보십시오. 단 STATEMENT_ID와 PLAN_TABLE은 여러분이 정의한 것을
입력하셔야겠지요.

SELECT lpad(operation,length(operation)+2*(level-1)) ||
decode(id,0,'CostEstimate:'||decode(position,'0','N/A',position),null)||
''||options||
decode(object_name,null,null,':')||rpad(object_owner,length(object_name)+1,',')||
object_name||
decode(object_type,'unique','(U)','NON-UNIQUE',
'(NU)',null)||decode(object_instance,null,null,'('||object_instance||')')
FROM PLAN_TABLE
START with ID = 0 AND STATEMENT_ID = 'plan1'
CONNECT by prior ID = PARENT_ID and STATEMENT_ID = 'plan1'
/

4. 위의 결과값

예를 들어 이런 것이 나올 수 있습니다.

LPAD(OPERATION,LENGTH(OPERATION)+2*(LEVEL-1))||DECODE(ID,0,'COSTESTIMATE:'||DECO
--------------------------------------------------------------------------------
SELECT STATEMENTCostEstimate:
TABLE ACCESSBY INDEX ROWID:HDMF,,,,,,,,W5_CARVAL_T(1)
INDEXRANGE SCAN:HDMF,,,,,,,,,,,,,,,,,,W5_CARVAL_T_CNAME_IDX(NU)

여기 위를 보면 accessby index 어쩌구 나오지요? 즉 인덱스를 사용하고 있다는
겁니다.
그리고 그 인덱스는 W5_CARVAL_T_CNAME_IDX을 쓰고 있다고 하는 것이구요.

만약 내용이

LPAD(OPERATION,LENGTH(OPERATION)+2*(LEVEL-1))||DECODE(ID,0,'COSTESTIMATE:'||DECO
--------------------------------------------------------------------------------
SELECT STATEMENTCostEstimate:
TABLE ACCESSFULL:HDMF,,,,,,,,W5_CARVAL_T(1)

이런 식으로 나오면 인덱스를 전혀 사용하지 못하고 테이블을 일일이 뒤진다는
거지요.
위에 보면 accessfull이라는게 있지요. 즉 테이블을 전체 검색하고 있다는 뜻입니다.
 
Posted by 1010
05.JSP2009. 8. 12. 15:44
반응형
  Developer Guide Title
   
 

Expanded Syntax Reference
Output Comment Generates a comment that can be viewed in the HTML source file.
Hidden Comment Documents the JSP page but is not sent to the client.
Declaration Declares a variable or method valid in the scripting language used in the page.
Expression Contains an expression valid in the scripting language used in the page.
Scriptlet Contains a code fragment valid in the scripting language used in the page.
Include Directive Includes a file of text or code when the JSP page is translated.
Page Directive Defines attributes that apply to an entire JSP page.
Taglib Directive Defines a tag library and prefix for the custom tags used in the JSP page.
<jsp:forward> Forwards a client request to an HTML file, JSP file, or servlet for processing.
<jsp:getProperty> Gets the value of a Bean property so that you can display it in a JSP page.
<jsp:include> Sends a request to an object and includes the result in a JSP file.
<jsp:plugin> Downloads a Java plugin to the client Web browser to execute an applet or Bean.
<jsp:setProperty> Sets a property value or values in a Bean.
<jsp:useBean> Locates or instantiates a Bean with a specific name and scope.
Posted by 1010
02.Oracle/DataBase2009. 8. 12. 15:19
반응형

10.명령어


[2008.06.02] 오라클 내장함수#


숫자 함수(number function)#


ABS ACOS ASIN ATAN
ATAN2 BITAND CEIL COS
COSH EXP FLOOR LN
LOG MOD POWER ROUND(number)
SIGN SIN SINH SQRT
TAN TANH TRUNC(number) WIDTH_BUCKET


① ROUND(45.926, 2) --> 45.93 : 소수점 두자리수까지 보여주면서 반올림한다.
② TRUNC(45.926, 2) --> 45.92 : 소수점 두자리까지만 보여주고 나머지는 버린다.
③ MOD(1600,300) --> 100 : 1600을 300으로 나누고 나머지를 리턴한다.
* ROUND예제(WHOLE NUMBER:정수)
SELECT ROUND(45.923,2), ROUND(45.923,0), ROUND(45.923,-1) FROM DUAL
==> 45.92 46 50

* TRUNC예제
SELECT TRUNC(45.923,2), TRUNC(45.923), TRUNC(45.923,-1) FROM DUAL
==> 45.92 45(n이 생략된면 일의 자리까지 남기고 버린다.) 40

* SYSTEM 날짜를 갖고 오는 방법.
SELECT sysdate FROM dual


/** 함수 - Number Function **/
--무조건 올림
SELECT CEIL(13.11) FROM DUAL;
SELECT CEIL(13.001) FROM DUAL;

--나머지 구함
SELECT MOD(23, 5) FROM DUAL;
SELECT MOD(57, 145) FROM DUAL;

-- 제곱승
SELECT POWER(3, 2), POWER(3, -2) FROM DUAL;
SELECT POWER(2, 10) FROM DUAL;

--자릿수 지정
SELECT ROUND(345.123, 0) FROM DUAL;
SELECT ROUND(345.123, 2), ROUND(345.123, -1) FROM DUAL;

--지정된 자리까지 잘라내기
SELECT TRUNC(345.123, 1), TRUNC(345.123, 0), TRUNC(345.123, -1) FROM DUAL;
SELECT TRUNC( 345.123 + 0.09, 1 ) FROM DUAL;
SELECT TRUNC( 345.123 + 0.9, 0 ) FROM DUAL;
SELECT TRUNC( 345.123 + 9, -1 ) FROM DUAL;

SELECT SIGN(5.989), SIGN(0), SIGN(-999.098) FROM DUAL;


문자 함수(character function)#


CHR CONCAT INITCAP LOWER
LPAD LTRIM NLS_INITCAP NLS_LOWER
NLSSORT NLS_UPPER REPLACE RPAD
RTRIM SOUNDEX SUBSTR TRANSLATE
TREAT TRIM UPPER ASCII
INSTR LENGTH, LENGTHB, LENGTHC, LENGTH2, LENGTH4

select ascii('B') from dual;

=> 66


①LOWER( column|expression )

LOWER('String') --> string : 소문자로 변환

②UPPER( column|expression )
UPPER('String') --> STRING : 대문자로 변환

③INITCAP( column|expression )
INITCAP('string') --> String : 첫글자만 대문자이고 나머지글자는 소문자로 변환


④CONCAT( column1|expression1 ,column2|expression2 )
CONCAT('Good','String') --> GoodString : ||와 같은 역할을 한다.

⑤SUBSTR(column|expression, m [,n]) : m값이 음수면 문자값의 끝부터..)
SUBSTR('String',1,3) --> Str : 1번째부터 3개의 문자를 리턴한다.

⑥LENGTH( column|expression )
LENGTH('String') --> 6 : 문자열의 길이를 리턴한다.

⑦INSTR( column|expression, )
INSTR('String','r') --> 3 : 문자열에 'r'이 몇번째 위치하고 있나를 리턴한다.

⑧LPAD( column|expression,n,'string' ) : n 은 전체 길이
LPAD('String',10,'*') --> ****String
: 10자리수중에 모자란 자리수를 '*'로 왼쪽에 채운다.(문자,숫자 가능!!!)

⑨ RPAD('String',10,'*') --> String****
: 10자리수중에 모자란 자리수를 '*'로 오른쪽에 채운다.(문자,숫자 가능!!!)

⑩ LTRIM(' String') --> 'String' : 문자열의 왼쪽 공백을 버린다.


⑪ RTRIM('String ') --> 'String' : 문자령의 오른쪽 공백을 버린다.
* TRIM(leading/tailing/both, trim_character FROM trim_source )

TRIM( 'S' FROM 'SSMITH') --> MITH


/** 함수 - Character Function **/
--특정Character의 아스키값 구하기
SELECT CHR(65) "CHR", ASCII('A') "ASCII" FROM DUAL;
SELECT ASCII( CHR(65) ) FROM DUAL;

SELECT LOWER('My name is LKM') "LOWER", UPPER('My name is LKM') "UPPER" FROM DUAL;

SELECT LPAD('LKM', 10, '*') "LPAD", RPAD('LKM', 10, '*') "RPAD" FROM DUAL;
SELECT LPAD('1234567890', 20, '+') || RPAD('1234567890', 20, '^') "12345678901234567890"
FROM DUAL;
SELECT LPAD('1,234,567', 30, ' ') "LPAD사용으로 30자리 맞춤",
'1,234,567' "단순문자 사용",
1234567 "단순숫자 사용"
FROM DUAL;

SELECT LTRIM(' AAA ') "LTRIM", RTRIM(' AAA ') "RTRIM" FROM DUAL;
SELECT LTRIM( RTRIM( ' A A A ' ) ) "TRIM" FROM DUAL;

SELECT REPLACE('ORACLE', 'A', 'BBB') "REPLACE" FROM DUAL;
SELECT EMP_NAME, REPLACE(EMP_NAME, '이', '박') "이->박"
FROM PERSONNEL
WHERE EMP_NAME LIKE '이%';

SELECT SUBSTR('ORACLE PROJECT', 1, 3) SUBSTR1,
SUBSTR('ORACLE PROJECT', 4, 5) SUBSTR2,
SUBSTR('ORACLE PROJECT', 10) SUBSTR3 FROM DUAL ;
SELECT SUBSTRB('ORACLE PROJECT', 1, 3) SUBSTRB1,
SUBSTRB('ORACLE PROJECT', 4, 5) SUBSTRB2,
SUBSTRB('ORACLE PROJECT', 10) SUBSTRB3 FROM DUAL ;
SELECT SUBSTR('오라클 PROJECT', 1, 3) SUBSTR1,
SUBSTR('오라클 PROJECT', 4, 5) SUBSTR2,
SUBSTR('오라클 PROJECT', 10) SUBSTR3 FROM DUAL ;
SELECT SUBSTRB('오라클 PROJECT', 1, 3) SUBSTRB1,
SUBSTRB('오라클 PROJECT', 4, 5) SUBSTRB2,
SUBSTRB('오라클 PROJECT', 10) SUBSTRB3 FROM DUAL ;

SELECT LENGTH ('ORACLE PROJECT') "LENGTH",
LENGTHB('ORACLE PROJECT') "LENGTHB",
FROM DUAL;
SELECT EMPNO, LENGTH(EMPNO), LENGTHB(EMPNO),
EMP_NAME, LENGTH(EMP_NAME), LENGTHB(EMP_NAME)
FROM PERSONNEL
WHERE EMPNO > '98102';
SELECT HOBBY, LENGTH(HOBBY), LENGTHB(HOBBY)
FROM PERSONNEL
WHERE EMPNO > '98102';

SELECT INSTR ('ORACLE PROJECT', 'R', 1, 1) INSTR1,
INSTR ('ORACLE PROJECT', 'R', 1, 2) INSTR2,
INSTR ('ORACLE PROJECT', 'R', 1, 3) INSTR3
FROM DUAL;
SELECT INSTR ('CORPORATE FLOOR','OR', 3, 2) INSTR,
INSTRB ('CORPORATE FLOOR','OR', 3, 2) INSTRB
FROM DUAL;
SELECT HOBBY,
INSTR (HOBBY, ')', 1, 1) INSTR,
INSTRB(HOBBY, ')', 1, 1) INSTRB
FROM PERSONNEL

WHERE EMPNO > '98102';



날짜와 날짜 처리함수(date, datetime function)#


ADD_MONTHS CURRENT_DATE CURRENT_TIMESTAMP DBTIMEZONE
EXTRACT(datetime) FROM_TZ LAST_DAY LOCALTIMESTAMP
MONTHS_BETWEEN NEW_TIME NEXT_DAY NUMTODSINTERVAL
NUMTOYMINTERVAL ROUND(date) SESSIONTIMEZONE SYS_EXTRACT_UTC
SYSDATE SYSTIMESTAMP TO_DSINTERVAL TO_TIMESTAMP
TO_TIMESTAMP_TZ TO_YMINTERVAL TRUNC(date) TZ_OFFS


date + number : date에 number만큼 후의 날자를 보여준다.
date - number : date에 number만큼 전의 날자를 보여준다.
date1 - date2 : date1에서 date2 까지의 총 일수를 보여준다.( date1+date2는 X )
date1 + 숫자/24 : date1에서 시간을 더해 날짜를 보여준다.


NUMTODSINTERVAL

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


MONTHS_BETWEEN('01-SEP-95','11-JAN-94') --> 19.6774194
; 두날짜 사이의 달수를 보여준다.

ADD_MONTHS('11-JAN-94', 6) --> 11-JUL-94
; 날짜에 6개월을 더한 날자를 보여준다.

NEXT_DAY('01-SEP-95','FRIDAY') --> '08-SEP-95'
; 해당일 다음에 오는 FRIDAY의 일자를 보여준다.
('SUNDAY'는 1, 'MONDAY'는 2...이런식으로 숫자를 써줘도 된다.)

LAST_DAY('01-SEP-95') --> '30-SEP-95'
; 해당월의 마지막날자를 보여준다.

ROUND('25-JUL-95','MONTH')--> 01-AUG-95 ROUND('25-JUL-95','YEAR')--> 01-JAN-96
TRUNC('25-JUL-95','MONTH') --> 01-JUL-95 TRUNC('25-JUL-95','YEAR') --> 01-JAN-95


/** 함수 - Date Function **/
SELECT SYSDATE FROM DUAL;
SELECT TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI:SS') "SYSDATE" FROM DUAL;

SELECT LAST_DAY(SYSDATE) FROM DUAL;
SELECT TO_CHAR(LAST_DAY(SYSDATE), 'YYYY-MM-DD HH24:MI:SS') "LAST_DAY" FROM DUAL;

SELECT MONTHS_BETWEEN( '2002/01/13', '2002/05/13' ) "MONTHS_BETWEEN (-)",
MONTHS_BETWEEN( '2002/01/13', '2001/11/13' ) "MONTHS_BETWEEN (+)"
FROM DUAL ;
SELECT MONTHS_BETWEEN( '2002/01/13', '2002/01/30' ) "MONTHS_BETWEEN (-)",
MONTHS_BETWEEN( '2002/01/13', '2002/01/01' ) "MONTHS_BETWEEN (+)"
FROM DUAL ;

SELECT ADD_MONTHS(SYSDATE, 1) "ADD_MONTHS (+)",
ADD_MONTHS(SYSDATE, -1) "ADD_MONTHS (-)"
FROM DUAL ;

ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD';
SELECT ADD_MONTHS( '2002/02/28', 12 ) "1년후",
ADD_MONTHS( '2002/02/28', 24 ) "2년후",
ADD_MONTHS( '2002/02/28', 36 ) "3년후"
FROM DUAL ;

SELECT SYSDATE,
NEXT_DAY(SYSDATE, '일요일') "NEXT_DAY 1",
NEXT_DAY(SYSDATE, 1 ) "NEXT_DAY 2"
FROM DUAL;
SELECT SYSDATE,
NEXT_DAY(SYSDATE, '수요일') "NEXT_DAY 1",
NEXT_DAY(SYSDATE, 4 ) "NEXT_DAY 2"
FROM DUAL;


데이터 형변환 함수(conversion function)#


ASCIISTR BIN_TO_NUM CAST CHARTOROWID
COMPOSE CONVERT DECOMPOSE HEXTORAW
NUMTODSINTERVAL NUMTOYMINTERVAL RAWTOHEX RAWTONHEX
ROWIDTOCHAR ROWIDTONCHAR TO_CHAR(character) TO_CHAR(datetime)
TO_CHAR(number) TO_CLOB TO_DATE TO_DSINTERVAL
TO_LOB TO_MULTI_BYTE TO_NCHAR(character) TO_NCHAR(datetime)
TO_NCHAR(number) TO_NCLOB TO_NUMBER TO_SINGLE_BYTE
TO_YMINTERVAL TRANSLATE ... USING UNISTR


nlsparams : 십진수, 그룹구분자, 지역 통화 기호, 국제 통화 기호

TO_CHAR(date,['format'],[nlsparams]) : date를 format에 맞게 문자열로 변환한다.

- Date Format Elements
YYYY --> 1999 (년출력) , YEAR --> nineteen ninety-nine (년출력)
MM --> 12 (월출력) , MONTH --> DECEMBER (월출력), MON --> DEC
D --> 요일을 숫자로 리턴한다.(일요일은 1, 월요일은 2...)
DD --> 07 (달의 일출력)
DDD --> 200 (연의 일출력)그 해의 총 몇 일째인가를 리턴한다.
DAY --> MONDAY (요일출력) DY-->MON
CC --> 20 (몇 세기인지를 보여준다.)
WW --> 그 해의 몇 번째 주인가를 리턴한다.
W --> 그 달의 몇 번째 주인가를 리턴한다.

=>  흔히 사용하는 위의 형태는 일상 생활에서 사용되는 몇주 개념적용이 아닌


7일 단위로 끊은 주 개념입니다.


예를 들어 2005년 1월 2일의 경우 일요일로서 일상 생활에서는 2005년의 2주차 입니다.


하지만 to_char('20050102','ww') 의 경우 '2005'년도의 2일째 이기에 1주 로 계산 합니다.


(2006년의 경우 '20060101'이 정확히 일요일이기 때문에 to_char(sysdate,'ww')의 값을 오해 할 수 있습니다. 2005년 또는 2007년 경우를 확인 해 보시면 이해에 도움이 될 것입니다.)



* Element들을 소문자로 쓰면 소문자로 나오고 대문자로 쓰면 대문자로 출력된다.
HH or HH12 or HH24 / MI(0-59분) / SS(0-59초)


* 문자열은 " " 묶어 추가한다 DD " of " MONTH --> 12 of DECEMBER

*숫자 접미어는 숫자를 문자로 표기. TH(4->4TH)/ SP(4->FOUR)/ SPTH or THSP(4->FOURTH)

ddspth : 14-> fothteenth

* / . , : 구두점은 결과에 그대로 출력한다. * 공백, 선행제로를 제거하는 fm요소가 있다.

TO_CHAR(number,'format',[nlsparams]) : number를 format에 맞게 문자열로 변환한다.

- Number Format Elements
9 : 999,999 --> 1,234 $: 부동 달러 기호 $99999 -> $1234
0 : 099999 --> 001234 99.999EEEE -> 1.234E+03 B: 0값을 공백으로
L : L99,999 --> FF1,234 (NLS_CURRENCY에 설정되어있는 값이 L로 보여진다.)

TO_NUMBER(char,['format'],[nlsparams]) : 숫자형태의 문자열을 숫자로 변한한다.
TO_DATE(char,['format'],[nlsparams]):날자형태의 문자열을 format에 맞게 날자형식으로 변환 한다.


/** 함수 - Conversion Function **/
SELECT TO_CHAR(1234567.891) "TO_CHAR1",
TO_CHAR(1234567.891, '999') "TO_CHAR2",
TO_CHAR(1234567.891, '9,999,999') "TO_CHAR3",
TO_CHAR(1234567.891, '0.0000') "TO_CHAR5",
TO_CHAR(1234567.891, '9,999,999.0000') "TO_CHAR6",
TO_CHAR(123, '9,999.00') "TO_CHAR7",
TO_CHAR(123, '9,999.99') "TO_CHAR8"
FROM DUAL ;
SELECT TO_CHAR(1234567.891, '9G999G999') "TO_CHAR3",
TO_CHAR(1234567.891, '0D0000') "TO_CHAR5",
TO_CHAR(1234567.891, '9G999G999D0000') "TO_CHAR6",
TO_CHAR(123, '9G999D00') "TO_CHAR7",
TO_CHAR(123, '9G999D99') "TO_CHAR8"
FROM DUAL ;

SELECT TO_CHAR(SYSDATE, 'YYYY-MM-DD') "TO_CHAR1",
TO_CHAR(SYSDATE, 'YYYY/MM') "TO_CHAR2",
TO_CHAR(SYSDATE, 'YYYY') "TO_CHAR3",
TO_CHAR(SYSDATE, 'DD') "TO_CHAR4",
TO_CHAR(SYSDATE, 'DAY') "TO_CHAR5",
TO_CHAR(SYSDATE, 'YYYY/MM/DD HH24:MI:SS') "TO_CHAR6",
TO_CHAR(TO_DATE('20020101','YYYYMMDD'), 'YYYY-MM-DD') "TO_CHAR7",
TO_CHAR(TO_DATE('20020101','YYYYMMDD'), 'YYYYMMDD HHMISS') "TO_CHAR8"
FROM DUAL ;

SELECT TO_NUMBER('123456.9') "TO_NUMBER1",
TO_NUMBER('1234567') "TO_NUMBER2"
FROM DUAL ;
SELECT TO_NUMBER('123,456.9', '999,999.9') "TO_NUMBER1",
TO_NUMBER('1,234,567', '9G999G999') "TO_NUMBER2"
FROM DUAL ;

ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD HH24:MI:SS';
SELECT TO_DATE('20020824') "TO_DATE1",
TO_DATE('2002-08-24') "TO_DATE2",
TO_DATE('200208') "TO_DATE3"
FROM DUAL ;
SELECT TO_DATE('20020824', 'YYYYMMDD') "TO_DATE1",
TO_DATE('2002-08-24', 'YYYY-MM-DD') "TO_DATE2",
TO_DATE('200208', 'YYYYMM') "TO_DATE3"
FROM DUAL ;
SELECT TO_DATE('2002/08/24 08:14:06', 'YYYY/MM/DD HH24:MI:SS') "TO_DATE1",
TO_DATE('2002/08/24 08:14:06 오후', 'YYYY/MM/DD HH:MI:SS AM') "TO_DATE2"
FROM DUAL ;


기타함수(miscellaneous single row function)#


BFILENAME COALESCE DECODE DEPTH
DUMP EMPTY_BLOB EXISTSNODE EXTRACT(XML)
EMPTY_CLOB
EXTRACTVALUE GREATEST LEAST NLS_CHARSET_DECL_LEN
NLS_CHARSET_ID NLS_CHARSET_NAME NULLIF NVL
NVL2 PATH SYS_CONNECT_BY_PATH SYS_CONTEXT
SYS_DBURIGEN SYS_EXTRACT_UTC SYS_GUID SYS_TYPEID
SYS_XMLAGG SYS_XMLGEN UID UPDATEXML
USER USERENV VSIZE XMLAGG
XMLCOLATTVAL XMLCONCAT XMLFOREST XMLSEQUENCE
XMLTRANSFORM XMLELEMENT CASE


NVL Funcion : 값이 null일 때 설정값을 보여준다.
NVL(number_column, 0) : null일 때 0을 보여준다.
NVL(date_column, '01-JAN-95') : null일 때 '01-JAN-95'를 보여준다.
NVL(character_column, 'Empty') : null일 때 'Empty'를 보여준다.
* column Type과 표현식의 type이 반드시 일치해야 한다.

DECODE Function : CASE or IF-THEN-ELSE 형식과 비슷하다.
*DECODE(col/expression, search1, result1 [,search2,result2,…] [,default])
F1 (F2 (F3 (col,arg1),arg2),arg3)

이중 Decode나 Nvl 그리고, To_데이터형은 너무나도 많이 쓰여서 잘 안 까먹지만....
숫자나 문자관련 함수 잘 안쓰면 찾기가 너무 힘들다는..... '그 뭐시기냐 문자열의 위치 찾아내는거
그 함수 뭐냐?' 라면 '그게 뭔데?'라는 반문이-_- 차라리 instr이 뭐하는거지가 더 쉬운 질문이다-_-
대전 있을때 자료전환건이 있어서... 처리를 하려고 보니 특정칼럼 하나에 잘 쓰이지 않는
두개의 필드값을 탭구분자로 나눠서 때려넣어논 꼴을 본적이 있다. instr, chr, replace로 간단히 해결가능할걸 instr과 chr를 잘 몰라 통째로 엑셀로 받아 수작업을 했다라는....

/** 함수 - ETC **/
SELECT EMPNO, EMP_NAME, HOBBY 취미, WELL 특기
FROM PERSONNEL
WHERE EMPNO BETWEEN '98001' AND '98005';
SELECT EMPNO, EMP_NAME, HOBBY 취미, NVL(WELL, '(없다)') 특기
FROM PERSONNEL
WHERE EMPNO BETWEEN '98001' AND '98005';

SELECT DECODE( '나', '나', '맞다', '아니다' ) "나가 나면 맞다, 아니면 아니다"
FROM DUAL ;
SELECT DECODE( '나', '대명', '아니다',
'너' , '아니다',
'그' , '아니다',
'나' , '맞다',
'모르겠다' ) FROM DUAL ;
SELECT EMPNO,
EMP_NAME,
DECODE (HT_CODE, '1', '현재원', '2', '휴직', '퇴사') HT_CODE
FROM PERSONNEL
WHERE EMPNO BETWEEN '98071' AND '98080';

SELECT GREATEST (132, 33, 45, 90, 60.77) GREATEST,
LEAST (132, 33, 45, 90, 60.77) LEAST
FROM DUAL;
SELECT GREATEST ('이공명', '이대명', '최수미') GREATEST,
LEAST ('이공명', '이대명', '최수미') LEAST
FROM DUAL;

SELECT USERENV('LANGUAGE') "LANGUAGE",
USERENV('TERMINAL') "TERMINAL",
USERENV('SESSIONID') "SESSIONID"
FROM DUAL;

SELECT UID, USER FROM DUAL;


그룹함수 - 집계(Aggregate) 함수#


AVG CORR COUNT COVAR_POP
COVAR_SAMP CUME_DIST DENSE_RANK FIRST
GROUP_ID GROUPING GROUPING_ID LAST
MAX MIN PERCENTILE_CONT PERCENTILE_DISC
PERCENT_RANK RANK REGR function STDDEV
STDDEV_POP STDDEV_SAMP SUM VAR_POP
VAR_SAMP VARIANCE GROUPING SETS


/** 함수 - Group Function **/
SELECT AVG(HEIGHT), AVG(WEIGHT) FROM PERSONNEL;

SELECT MAX(EMPNO), MAX(EMP_NAME), MIN(EMPNO), MIN(EMP_NAME) FROM PERSONNEL;
SELECT MAX(HEIGHT), MIN(HEIGHT) FROM PERSONNEL;

SELECT SUM(WEIGHT) FROM PERSONNEL;

SELECT COUNT(*), COUNT(EMPNO), COUNT(JIKCH_CODE) FROM PERSONNEL;


그룹함수 -  분석(Analytic) 함수#


AVG CORR COUNT COVAR_POP
COVAR_SAMP CUME_DIST DENSE_RANK FIRST
FIRST_VALUE LAG LAST LAST_VALUE
LEAD MAX MIN NTILE
PERCENT_RANK PERCENTILE_CONT PERCENTILE_DISC RANK
RATIO_TO_REPORT REGR_(linear regression) function ROW_NUMBER STDDEV
STDDEV_POP STDDEV_SAMP SUM VAR_POP
VAR_SAMP VARIANCE TOP_N 분석


윈도우(windowing) 분석 함수#

윈도우 분석함수는 전체 결과 집합 중에서 연속선상에 있는 부분 집합을 대상으로 적용하는 함수의 집합을 말한다.
윈도우 분석함수의 종류는 AVG, COUNT, MAX, MIN,STDDEV,SUM,VARIANCE,FIRST_VALUE,LAST_VALUE 등이 있다.
부분 집합을 결정하기 위한 범위는 CURRENTROW, UNBOUNDED PRECEDING, UNBOUNDED FOLLOWING 등을 지정할 수 있다.

【형식】
   (SUM | AVG | MAX | MIN | COUNT | STDDEV | VARIANCE | FIRST_VALUE | LAST_VALUE)
   ({ | * }) OVER
   ([PARTITION BY [,...]]
   ORDER BY  [collate clause]
   [ASC | DESC] [NULLS FIRST | NULLS LAST] [,...]
   ROWS | RANGE
   {{UNBOUNDED PRECEDING |  PRECEDING} | BETWEEN
   {UNBOUNDED PRECEDING |  PRECEDING}
   AND {CURRENT ROW |  FOLLOWING}}


OVER FROM, WHERE, GROUP BY, HAVING 절이 처리된 후에 적용되며, 함수를 적용하기 위한
행의 정렬 기준 또는 대상 행 집합에 대한 윈도우 정의
ROWS | RANGE 윈도우의 크기를 결정하기 위한 행 집합을 정의
• ROWS는 물리적인 단위에 의해 윈도우 크기 지정
• RANGE는 논리적인 상대 번지에 의해 윈도우 크기 지정
BETWEEN...AND 윈도우의 시작 위치와 마지막 위치 지정
UNBOUNDED PRECEDING 윈도우의 시작 위치는 각 분할의 첫 번째 행
UNBOUNDED FOLLOWING 윈도우의 마지막 위치는 각 분할의 마지막 행


PseudoColumn을 의미하는 것#


ROWID Each row in the database has an address
ROWNUM 테이블에서 select 되어진 행의 순서번호
LEVEL 테이블에서 행(row)의 계층관계를 가리키는 일련번호 순서


LPAD, RPAD : 문자열 채우기#

문법 :

lpad ('string', n [, 'string_pad')
rpad ('string', n [, 'string_pad')


예제 :

select lpad('*', 5, '%') lpad, rpad('%', 5, '*') rpad from dual


결과 :


LPAD RPAD
%%%%* %****


설명 :


VSIZE : 문자의 길이를 구한다.#

예제 :

select vsize('가나다'), '가나다' from dual


결과 :


VSIZE(가나다) 가나다
6 가나다


출처 : http://ebizdocs.springnote.com/pages/1250050?print=1


Posted by 1010
02.Oracle/DataBase2009. 8. 12. 14:39
반응형
select *
FROM BIZ_MASTER
where case when ceo_name < 'ㄱ' then substr(ceo_name, 1, 1)
            when ascii('ㄱ') <= ascii(ceo_name) and
                 ascii(ceo_name)<= ascii('ㅎ') then ceo_name
            when ceo_name < '나' then 'ㄱ'
            when ceo_name < '다' then 'ㄴ'
            when ceo_name < '라' then 'ㄷ'
            when ceo_name < '마' then 'ㄹ'
            when ceo_name < '바' then 'ㅁ'
            when ceo_name < '사' then 'ㅂ'
            when ceo_name < '아' then 'ㅅ'
            when ceo_name < '자' then 'ㅇ'
            when ceo_name < '차' then 'ㅈ'
            when ceo_name < '카' then 'ㅊ'
            when ceo_name < '타' then 'ㅋ'
            when ceo_name < '파' then 'ㅌ'
            when ceo_name < '하' then 'ㅍ'
            else                  'ㅎ'
       end = 'ㄱ';



출처 : http://blog.naver.com/pro20cm/150021994738



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


1.Sample Data 입력


create table t_first (col1 varchar2(100));


insert into t_first values('토플');
insert into t_first values('깡다구');
insert into t_first values('거울');
insert into t_first values('땅끝마을');
insert into t_first values('success');
insert into t_first values('듀오백');
insert into t_first values('사랑');
insert into t_first values('나오미');
insert into t_first values('미국');
insert into t_first values('naver');
insert into t_first values('뻥이야');
insert into t_first values('토마토');
insert into t_first values('새해');
insert into t_first values('premature');
insert into t_first values('찜질방');
insert into t_first values('사진');
insert into t_first values('fallen');
insert into t_first values('energy');
insert into t_first values('햄버거');
insert into t_first values('ㄱ');
insert into t_first values('ㄴ');
insert into t_first values('ㄷ');
insert into t_first values('가');
insert into t_first values('나');
insert into t_first values('다');


select * from t_first;


2.Data가 소량이라면 다음처럼 하면 됩니다.


select *
from t_first
where case when col1 < 'ㄱ' then substr(col1, 1, 1)
            when ascii('ㄱ') <= ascii(col1) and
                 ascii(col1)<= ascii('ㅎ') then col1
            when col1 < '나' then 'ㄱ'
            when col1 < '다' then 'ㄴ'
            when col1 < '라' then 'ㄷ'
            when col1 < '마' then 'ㄹ'
            when col1 < '바' then 'ㅁ'
            when col1 < '사' then 'ㅂ'
            when col1 < '아' then 'ㅅ'
            when col1 < '자' then 'ㅇ'
            when col1 < '차' then 'ㅈ'
            when col1 < '카' then 'ㅊ'
            when col1 < '타' then 'ㅋ'
            when col1 < '파' then 'ㅌ'
            when col1 < '하' then 'ㅍ'
            else                  'ㅎ'
       end = 'ㄱ';                    <== 이 부분을 바꿔가면서 테스트해 보면 됩니다.


select * from t_first
order by col1;


COL1
깡다구
거울


3.그러나 Data의 양이 많고 검색할 때 반드시 인덱스를 이용해야 한다면 다음처럼

  해야 합니다. 8i이후부터 가능한 FBI(function-based index)를 활용하는 예제입니다.

  이 예제는 dba 권한을  가진 유저로 테스트한 것입니다.


-- 함수 생성

create or replace function sf_ganada
  (p_name varchar2)
  return varchar2
  deterministic
is
  v_ret varchar2(10);
begin

  v_ret := case when p_name < 'ㄱ' then substr(p_name, 1, 1)
                when ascii('ㄱ') <= ascii(p_name) and
                     ascii(p_name)<= ascii('ㅎ') then p_name
                when p_name < '나' then 'ㄱ'
                when p_name < '다' then 'ㄴ'
                when p_name < '라' then 'ㄷ'
                when p_name < '마' then 'ㄹ'
                when p_name < '바' then 'ㅁ'
                when p_name < '사' then 'ㅂ'
                when p_name < '아' then 'ㅅ'
                when p_name < '자' then 'ㅇ'
                when p_name < '차' then 'ㅈ'
                when p_name < '카' then 'ㅊ'
                when p_name < '타' then 'ㅋ'
                when p_name < '파' then 'ㅌ'
                when p_name < '하' then 'ㅍ'
                else                  'ㅎ'
           end;

  return v_ret;
end sf_ganada;
/


-- 인덱스 생성
create index t_first_col1_fbi_idx
on t_first(sf_ganada(col1));


-- 통계 생성

analyze table t_first compute statistics
  for table
  for all indexed columns
  for all indexes;


-- 세션 환경 설정
alter session set QUERY_REWRITE_ENABLED=TRUE;
alter session set QUERY_REWRITE_INTEGRITY=TRUSTED;


-- 테스트 및 실행계획

select col1, sf_ganada(col1)
from t_first
where sf_ganada(col1) = 'ㄱ';


Execution Plan
----------------------------------------------------------
0   SELECT STATEMENT Optimizer=CHOOSE (Cost=2 Card=4 Bytes=36)  
1 0     TABLE ACCESS (BY INDEX ROWID) OF 'T_FIRST' (Cost=2 Card=4 Bytes=36)  
2 1         INDEX (RANGE SCAN) OF 'T_FIRST_COL1_FBI_IDX' (NON-UNIQUE) (Cost=1 Card=4)

참고 1 : FBI(function-based index, 함수기반 인덱스)를 사용하려면...


# You must have the following initialization parameters defined

   to create a function-based index:

   -- QUERY_REWRITE_INTEGRITY set to TRUSTED
   -- QUERY_REWRITE_ENABLED set to TRUE
   -- COMPATIBLE set to 8.1.0.0.0 or a greater value


# The table must be analyzed after the index is created.


# The query must be guaranteed not to need any NULL values
   from the indexed expression, since NULL values are not stored in indexes.



참고 2 : 비슷한 문제 => http://blog.naver.com/orapybubu/40021815464

=================================================================================

자음까지는 잘 모르겠고...


select *

from table

where 한글 >= "가"

and     한글 < "나"


이렇게 하면 "가"부터 "깋" 까지는 가지고 옵니다.

   where decompose(mycolumn) like substr(decompose('가'),0,1)||'%'

================================================================

bulls1223 님 말 맞긴한대요 DECOMPOSE 는 유니코드 아니면 안됩니다.

한글로 테스트는 안해봐서 모르겠는대요... 그리고 9i 이상만 되는거 같내요

http://download-west.oracle.com/docs/cd/B10501_01/server.920/a96540/functions34a.htm#1000002


다른방법으론... 테이블 일일이 만들어서 검색하는방법이 있습니다.

 도서관리 프로그램 같은대서 주로 사용하는대요

도서관가면 ㄱ 210.0 ㄴ   이런거 있잔아요 이게 도서명 하고 저자명 각각 쓰는건대요

테이블보면

ㄱ  가 각 간 ~~~ 이런식으로  ㄱ 들어가는건 모두 들어있더군요.. 이걸가지고 검색하더군요... 받침은 안들어갑니다. ... 악 이런거...


다 만들어진건 찾기 힘들겁니다.  정해야된다면 직접만드시는게...

Posted by 1010
반응형

Start


GMER is an application that detects and removes rootkits .

It scans for:

  • hidden processes
  • hidden threads
  • hidden modules
  • hidden services
  • hidden files
  • hidden Alternate Data Streams
  • hidden registry keys
  • drivers hooking SSDT
  • drivers hooking IDT
  • drivers hooking IRP calls
  • inline hooks
  • GMER runs on Windows NT/W2K/XP/VISTA

    You can download GMER here.

    Please see my FAQ section and feel free to send me any comments here .

    Download


    The latest version of  GMER 1.0.15.15020

    GMER runs only on Windows NT/W2K/XP/VISTA


    GMER application:  
      or ZIP archive: gmer.zip ( 284kB )
    It's recommended to download randomly named EXE (click button above) because some malware won't let gmer.exe launch.
     
    Userland rootkit detector:   catchme.exe ( 25kB )
     
    MBR rootkit detector:   mbr.exe ( 70kB )
     
    Example of rootkit scanning and removal   gmer.wmv ( 87kB Windows Media Video 9 codec )
     
    Sample of undetectable rootkit: test.wmv ( 950kB Windows Media Video 9 codec )
     
    Gromozon rootkit unhooking :   gromozon.wmv ( 0,6MB Windows Media Video 9 codec )
     
    Log samples:   Rustock.B, Gromozon, Haxdoor, hxdef, BadRKDemo
     
    IceSword + DarkSpy + GMER + pe386 rootkit :   pe386.wmv ( 0,5MB Windows Media Video 9 codec )


    Thanks to: MR Team, CastleCops, ...


    Version History:

    This is list of changes for each release of GMER:


  • 1.0.15

    - Changed installation method
    - Improved files scanning
    - Improved kernel & user mode code sections scanning

  • 1.0.14

    - Improved files scanning
    - Improved registry scanning
    - Improved "delete file" function
    - Added disk browser
    - Added registry browser and editor
    - Added registry exports
    - Added "Kill file" and "Disable service" options to help remove stubborn malware
    - Added new option "gmer.exe -nodriver"
    - Added new option "gmer.exe -killfile"

    gmer.exe -killfile C:\WINDOWS\system32\drivers\runtime2.sys

    gmer.exe -killfile C:\WINDOWS\system32:pe386.sys

    - Simplified displaying of device hooks
    - Added detection and removal of MBR rootkit
  • 1.0.13

    - Added kernel & user IAT hooks detection
    - Added AttachedDevice hooks detection
    - Added detection of hooks outside code sections
    - Added button "Save ..." log

  • 1.0.12

    - Added kernel & user mode code sections scanning ( inline hooks )
    - Added code restoring
    - Improved "GMER Safe Mode"
    - Improved hidden process scanning

  • 1.0.11

    - Added "Simple mode"
    - Added threads tab
    - Added hidden Alternate Data Stream ( NFTS Stream ) scanning
    - Added hidden threads scanning
    - Improved hidden process scanning
    - Improved hidden modules scanning
    - Improved hidden files scanning
    - Fixed devices scanning

  • 1.0.10

    - English version
    - Improved process monitoring
    - Added Autostart tab
    - Added "GMER Safe Mode"
    - Added "Files" window
    - Added full path of process
    - Added loaded libraries
    - Added hidden libraries scanning

  • 1.0.9

    - Improved hidden services scanning.
    - Improved ROOTKIT scanning.
    - Improved "Kill all" and "Restart".

  • 1.0.8

    - Added hidden services scanning.
    - Added hidden services deletion.
    - Added hidden files deletion.
    - Added restoring SSDT table.
    - Added Interpretation of the rootkit scanning.
    - Added CMD tab - executing shell commands
    - Fixed showning registry keys
    - Fixed tracing library loading.

  • 1.0.7

    - Improved hidden files scanning.
    - Added "Services" tab.

  • 1.0.6

    - Fixed hidden registry keys scanning.

  • 1.0.5

    - Added online antivirus scanning.
    - Fixed scanning of rootkits that hooks devices' IRP calling

  • 1.0.4

    - Added rootkit scanning.
    - Added loading devices monitoring.

  • 1.0.3

    - Added log.
    - Fixed NTVDM.EXE tracing. 

  • 1.0.2

    - Added processes tab
    - Added "Kill all" function.
    - Added "Shell" option in the "Process" section, that executes an application other than Explorer.exe

    [Process]
    Shell=gmer.exe
  • 1.0.1

    - First release.

  • News


    2009.03.08

    New version 1.0.15.14878 has been released.


    2008.03.30

    ALWIL Software has released AVAST 4.8 containing anti-rootkit based on GMER technology.


    2008.01.18

    Version 1.0.14.14116 released.


    2008.01.02

    Stealth MBR rootkt found in the wild !

    You can read about it here: [1], [2]


    2007.06.26

    Version 1.0.13.12540 released.


    2007.03.14

    Just another DDoS story - One Person's Perspective by Paul Laudanski

    "... Around the middle of February 2007, CastleCops itself became the target of a large scale DDoS. Not new to this kind of attack, it is the first time CastleCops experienced such a large throughput at nearly 1Gbit/s ..."


    2007.03.09

    Andy Manchesta added catchme into SDFix tool.


    2007.02.26

    Thanks to Marco Giuliani for preparing Italian version of help !

    http://www.pcalsicuro.com/main/2007/02/guida-a-gmer/


    2007.02.21

    New version of catchme with Windows Vista support released.

    Catchme has been integrated with combofix developed by sUBs. Keep up the good fight sUBs !.


    2007.01.20

    After over a month of fight my web page is up and running.

    Thank you Paul Vixie and ISC, Matt Jonkman, guys from register.com, MR Team and everyone who helped me.

    Special thanks to Paul Laudanski who won this battle.

    You can read about it here: [1], [2]


    2006.12.13

    My doman DDoS-ed for the first time.


    2006.12.06

    I developed sample rootkit "test.sys" which hides its file from all public rootkit detectors:

  • BlackLight
  • Sophos ARK
  • RootkitRevealer
  • IceSword
  • DarkSpy
  • SVV
  • ...
  • GMER
  • Rootkit doesn't create hooks ( SSDT, IRP, SYSENTER, IDT, inline, FSF ) and its modifications are not visible.
    You can see it in action in these movies: test.wmv, test2.wmv ( 0.9MB, 0.7MB Windows Media Video 9 codec ).
    The detection of this type of rootkit will be added into the next version.


    2006.11.28

    Version 1.0.12.12011.


    2006.10.17

    New tool - catchme released.

    FAQ


    Frequently Asked Questions
    Question: Do I have a rootkit  ?
    Answer: You can scan the system for rootkits using GMER. Run gmer.exe, select Rootkit tab and click the "Scan" button.
    If you don't know how to interpret the output, please Save the log and send it to my email address.
    Warning ! Please, do not select the "Show all" checkbox during the scan.
    Question: How to install the GMER software ?
    Answer: Just run gmer.exe. All required files will be copied to the system during the first lanuch.
    Question: My computer is infected and GMER won't start:
    Answer: Try to rename gmer.exe to test.exe and click test.exe.
    Question: How do I remove the Rustock rootkit ?
    Answer: When GMER detects hidden service click "Delete the service" and answer YES to all questions.


    Question: How do I show all NTFS Streams ?
    Answer: On the "Rootkit Tab" select only: Files + ADS + Show all options and then click the Scan button.
    Question: Can I launch GMER in Safe Mode ?
    Answer: Yes, you can launch GMER in Safe Mode, however rootkits which doesn't work in Safe Mode won't be detected.
    Question: I am confused as to use delete or disable the hidden "service".
    Answer: Sometimes "delete the service" option wont work because the rootkit protects its service. So, in such case use: 1) "disable the service", 2) reboot your machine, and 3) "delete the service".

    Contact


    Feel free to write to me if you have any problems with GMER or malware. Use the following address: info@gmer.net

    Posted by 1010
    반응형
    Please read this before download!

    Registration

    This software is a shareware. To use this program on a permanent basis or for commercial purposes, you should register it by sending filled registration form to Ollydbg@t-online.de. The registration is free of charge and assumes no financial or other obligations from either side - just be fair and let me know that you like this software. Even your personal data in the registration form is optional (use your nickname or pseudonym if you want).

    If you use OllyDbg together with Randall Hyde's HLA (High Level Assembly), you don't need (but still allowed) to register.

    When registering, you can subscribe for information (email) on the new versions of this program, including pricing, terms of support and list of new features. In this case you agree not to treat this information as a spam as long as number of letters does not exceed 4 each calendar year and they contain no advertisements from the third parties. If you no longer want to receive this information - well, just let me know, and I will immediately delete your address from my database.
     

    Trademark information

    All brand names and product names used in OllyDbg, accompanying files or in this help are trademarks, registered trademarks, or trade names of their respective holders. They are used for identification purposes only.
     

    License Agreement

    This License Agreement ("Agreement") accompanies the OllyDbg versions 1.10, OllyDbg Plugin Development Kit version 1.10 and related files ("Software"). By using the Software, you agree to be bound by all of the terms and conditions of the Agreement.

    The Software is distributed "as is", without warranty of any kind, expressed or implied, including, but not limited to warranty of fitness for any particular purpose. In no event will the Author be liable to you for any special, incidental, indirect, consequential or any other damages caused by the use, misuse, or the inability to use of the Software, including any lostprofits or lost savings, even if Author has been advised of the possibility of such damages.

    The Software is owned by Oleh Yuschuk ("Author") and is Copyright (c) 2000-2004 Oleh Yuschuk. To use this Software on a permanent basis or for commercial purposes, you must register it by filling the supplied registration form and sending it to the Author. You don't need to register Software if you use it exclusively with Randall Hyde's High Level Assembly. If you are already a registered OllyDbg user, you don't need to re-register the Software again. If the Software is registered to a company or organization, any person within the company or organization has the right to use it at work. You may install the registered Software on any number of storage devices, like hard disks, floppy disks etc. and are allowed to make any number of backup copies of this Software.

    You are not allowed to modify, decompile, disassemble or reverse engineer the Software except and only to the extent that such activity is expressly permitted by applicable law. You are not allowed to distribute or use any parts of the Software separately. You may make and distribute copies of this Software provided that a) the copy contains all files from the original distribution and these files remain unchanged; b) if you distribute any other files (for example, plugins) together with the Software, they must be clearly marked as such and the conditions of their use cannot be more restrictive than conditions of this Agreement; and c) you collect no fee (except for transport media, like CD or diskette), even if your distribution contains additional files.

    You are allowed to develop and distribute your own plugins -- Dynamic Link Libraries that connect to the Software and make use of the functions implemented in the Software -- free of charge provided that a) your plugins contain no features that persuade or force user to register them, or limit functionality of unregistered plugins; b) you allow free distribution of your plugins on the conditions similar to that of the Software; and c) you collect no fee (except for transport media, like CD or diskette). If you want to develop commercial plugin, please contact Author for a special Agreement.

    The distribution includes files PSAPI.DLL and DBGHELP.DLL that are the Microsoft(R) Redistributable files. These files should be installed only in the directory where the Software resides. You should use supplied PSAPI.DLL only on Windows NT(R) 4.0. You are not allowed to distribute PSAPI.DLL or DBGHELP.DLL separately from the Software.

    This Agreement covers only the version 1.10 of the OllyDbg and version 1.10 of the OllyDbg Plugin Development Kit. All other versions are covered by separate License Agreements.
     

    Fair use

    Many software manufacturers explicitly disallow you any attempts of disassembling, decompilation, reverse engineering or modification of their programs. This restriction also covers all third-party dynamic-link libraries your application may use, including system libraries. If you have any doubts, contact the owner of copyright. The so called „fair use" clause can be misleading. You may want to discuss whether it applies in your case with competent lawyer.
     

    Download

     Download OllyDbg 1.10 (final version)

     Download Plugin Development Kit 1.10 (requires OllyDbg 1.10)

     Download free source of command line plugin (requires OllyDbg 1.08 or 1.10 and Borland's BCB 5.0)
     

    Older versions

     Download OllyDbg 1.08b (previous "official" release)

     Download Plugin Development Kit 1.08

     Version 1.00 (mostly of historical value)
     

    Posted by 1010
    02.Oracle/DataBase2009. 8. 10. 18:08
    반응형



    오라클 clob 예제

    by kkaok
    2003-06-27


    Lob type이란?

    lob(Large Object) 타입은 대용량 데이터를 저장하기위한 데이터 타입으로 오라클 8버전부터 지원된다.


    Lob 타입의 특징

    이전에 대용량 처리는 long 타입으로 처리를 할 수 밖에 없었다. 그런데 이 칼럼은 한테이블에 하나만 사용할 수 있으며 최대 크기가 2GB였다. 더군다나 검색을 구현하기가 어려워 포기를 해야 했다. 그래서 이런 문제를 보안하기 위 나온 것이 Lob 타입이다. Lob 타입은 테이블에 여러개의 컬럼을 생성할 수 있으며 최대 크기가 4GB이다. 또한 long 타입보다 훨씬 쉬운 검색기능을 제공한다.


    Lob type의 종류

    이전에 대용량 처리는 long 타입으로 처리를 할 수 밖에 없었다. 그런데 이 칼럼은 한테이블에 하나만 사용할 수 있으며 최대 크기가 2GB였다. 더군다나 검색을 구현하기가 어려워 포기를 해야 했다. 그래서 이런 문제를 보안하기 위 나온 것이 Lob 타입이다. Lob 타입은 테이블에 여러개의 컬럼을 생성할 수 있으며 최대 크기가 4GB이다. 또한 long 타입보다 훨씬 쉬운 검색기능을 제공한다.

    BLob (Binary Large Object), 이진 바이너리 데이터의 저장시 사용된다.
    CLob (Character Large Object), 문서 데이터의 저장시 사용된다.
    BFILE 외부 파일에 저장된 이진 데이터가 있는 경로의 저장시 사용된다.

    Clob에 저장하기

      1: import java.sql.*;
      2: import java.io.*;
      3: import oracle.sql.*;
      4: import oracle.jdbc.driver.*;
      5: ...
      6: 
      7: public void insertQuery(UploadBoard up,int re_step,int re_level) 
             throws Exception  
      8: {
      9:   ResultSet rs   = null;
     10:   PreparedStatement pstmt = null;
     11:   Connection conn = null;
     12:   String query = "insert into "+up.getTableName()+" (seq,re_step,
               re_level,name,title,pwd,email,readnum,writeday,ip,relativeCnt,
                   homepage,imgInfo,content,tag) 
                       values(?,?,?,?,?,?,?,0,sysdate,?,0,?,?,empty_clob(),?)";
    
    오라클 명령어 empty_clob()을 이용해 공간을 확보한다.
    13: try{ 14: conn = DBManager.getClobConnection(); 15: conn.setAutoCommit(false);
    CLOB column을 업데이트 하는동안 다른 process의 접근을 막기위해
    setAutoCommit(false)를 반드시 설정해야 한다. 이부분이 가장 중요하다.
    16: pstmt = conn.prepareStatement(query); 17: pstmt.setInt(1,up.getSeq()); 18: pstmt.setInt(2,re_step); 19: pstmt.setInt(3,re_level); 20: pstmt.setString(4,up.getName()); 21: pstmt.setString(5,up.getTitle()); 22: pstmt.setString(6,up.getPwd()); 23: pstmt.setString(7,up.getEmail()); 24: pstmt.setString(8,up.getIp()); 25: pstmt.setString(9,up.getHomepage()); 26: pstmt.setString(10,up.getImgInfo()); 27: pstmt.setString(11,up.getTag()); 28: pstmt.executeUpdate(); 29: pstmt.close(); 30: String query2 = " select /*+ index_desc("+up.getTableName()+ " "+up.getTableName()+"_indx) */ content from "+ up.getTableName()+" where seq = ? for update ";
    for update를 이용해 CLOB column을 lock한다.
    31: pstmt = conn.prepareStatement(query2); 32: pstmt.setInt(1,up.getSeq()); 33: rs = pstmt.executeQuery(); 34: if(rs.next()) { 35: CLOB clob = ((OracleResultSet)rs).getCLOB(1); 36: Writer writer = clob.getCharacterOutputStream(); 37: Reader src = new CharArrayReader(up.getContent().toCharArray()); 38: char[] buffer = new char[1024]; 39: int read = 0; 40: while ( (read = src.read(buffer,0,1024)) != -1) { 41: writer.write(buffer, 0, read); // write clob. 42: } 43: src.close(); 44: writer.close(); 45: } 46: conn.commit(); 47: conn.setAutoCommit(true);
    CLOB column에 데이터을 저장하였다면 commit()을 실행시키고
    conn.setAutoCommit(true)로 다시 설정한다.
    48: }finally{ 49: DBManager.close(rs,pstmt,conn); 50: } 51: }


    Clob 불러오기

         ...
      1: public BoardTable getViewData(String tableName,int seq) throws Exception
      2: {
      3:   BoardTable bTable = new BoardTable();
      4:   String query = " select * from "+tableName+" where seq = ? ";
      5:   ResultSet rs = null;
      6:   PreparedStatement pstmt = null;
      7:   Connection conn = null;
      8:   try{
      9:     conn = DBManager.getConnection();
     10:     pstmt = conn.prepareStatement(query);
     11:     pstmt.setInt(1,seq);
     12:     rs = pstmt.executeQuery();
     13:     if (rs.next()) {
     14:       ...
     15:       ...      
     16:       StringBuffer output = new StringBuffer();
     17:       Reader input = rs.getCharacterStream("content");
     18:       char[] buffer = new char[1024];
     19:       int byteRead;
     20:       while((byteRead=input.read(buffer,0,1024))!=-1){
     21:         output.append(buffer,0,byteRead);
     22:       }
     23:       input.close();
     24:       bTable.setContent(output.toString()); 
    
    CLOB 데이터를 불러오기 위해서는 위에서처럼
    rs.getCharacterStream("content")로 불러서 StringBuffer에 담아야 한다.
    25: ... 26: ... 27: } 28: } finally { 29: DBManager.close(rs,pstmt,conn); 30: } 31: return bTable; 32: }


    ================================================
        * Oracle Community OracleClub.com
        * http://www.oracleclub.com
        * http://www.oramaster.net
        * 운영자 : 김정식 (oramaster _at_ empal.com)
      ================================================
    Posted by 1010
    반응형
    Posted by 1010
    98..Etc/70.JEUS2009. 7. 31. 10:25
    반응형
    C:\TmaxSoft\JEUS6.0\config\administrator\administrator_servlet_engine1

    WEBMain.xml 설정 부분에 웹투비 리스너를 두개등록하여 기동한다.
     

    <webtob-listener>            <=== WebtoB와의 연동을 위해서 추가해야 하는 부분입니다.
                    <listener-id>webtob1</listener-id>
                    <port>9900</port>        <=== WebtoB의 JSVPORT 와 동일해야 합니다.
                    <webtob-address>127.0.0.1</webtob-address>     <=== WebtoB의 IP 입니다.
                    <registration-id>MyGroup</registration-id>     <=== WebtoB의 SERVER 명과 동일
                    <thread-pool>
                        <min>25</min>
                        <max>30</max>
                    </thread-pool>
                </webtob-listener>
            </webserver-connection>


     <webtob-listener>            <=== WebtoB와의 연동을 위해서 추가해야 하는 부분입니다.
                    <listener-id>webtob1</listener-id>
                    <port>9900</port>        <=== WebtoB의 JSVPORT 와 동일해야 합니다.
                    <webtob-address>127.0.0.1</webtob-address>     <=== WebtoB의 IP 입니다.
                    <registration-id>MyGroup</registration-id>     <=== WebtoB의 SERVER 명과 동일
                    <thread-pool>
                        <min>25</min>
                        <max>30</max>
                    </thread-pool>
                </webtob-listener>
            </webserver-connection>

    Posted by 1010
    98..Etc/Etc...2009. 7. 31. 09:47
    반응형

    안녕하세요. 누리호스팅입니다.
    
    도메인의 IP를 변경하면 언제쯤 인터넷에 전파되어질까?
    라는 의문점을 고객님께서는 가지고 계실겁니다. 아래의 내용을 보시면 그 해답을 얻을수
    가 있을겁니다.
    
    누리호스팅 네임서버를 고객님 도메인의 1차,2차 네임서버로 등록하여 사용할때 유의사항
    에 대하여 안내를 해 드립니다.
    
    누리호스팅에서는 고객님께서 직접 누리호스팅의 고객지원센터에서 네임서버의 정보관리(고
    객님 도메인의 등록,수정,삭제)를 할수 있게 되어 있습니다. 그런데, 현재 TTL 시간이 1800
    으로 해서 서비스를 하시는 경우가 상당히 많습니다. 이것에 대한 장단점을 기술적인 부분
    에 대한 설명부터 해서 안내하여 드리겠습니다.
    
    TTL(Time To Live)의 개념은 RFC 1035 문서에 다음과 같이 정의되어 있습니다.
    --------------------------------------------------------------------------
    TTL             a 32 bit signed integer that specifies the time interval
                    that the resource record may be cached before the source
                    of the information should again be consulted.
    --------------------------------------------------------------------------
    
    가정1. 누리호스팅 네임서버에 등록한 도메인 : www.abc.com
    가정2. www.abc.com의 TTL : 86,400초 (1일)
    
    위의 내용을 가정해서 설명하겠습니다. 
    
    A라는 사람이 하나로통신 전용선을 이용하고 있습니다. 네임서버는 하나로통신 네임서버를 
    사용합니다. A가 www.abc.com 으로 22시에 처음으로 접속을 하였습니다. 
    그러면 A가 사용하는 네임서버에서 www.abc.com이라는 도메인정보가 없기 때문에 누리호스
    팅 네임서버로 www.abc.com의 IP정보를 쿼리를 합니다. 그러면, 하나로통신 네임서버에는 
    86,400초동안 www.abc.com의 IP정보를 가지고 B,C 기타의 하나로통신 네임서버를 이용하는 
    사람들에게 서비스를 해 줍니다.  86,400초가 지나고 나면 www.abc.com의 도메인 정보는 하
    나로 통신 네임서버에서 삭제됩니다. 다시 누군가가 www.abc.com의 도메인 정보를 쿼리할때
    에 누리호스팅 네임서버에 물어봅니다.
    
    그러면 www.abc.com의 IP정보가 변경이 되는경우는 어떻게 될까요?
    
    오늘 저녁 22 시에 IP정보를 변경을 하였다고 하면, 내일 저녁까지 기존IP와 변경된 IP 두
    가지 정보가 인터넷에 있는 임의의 네임서버에는 섞여서 있을겁니다. 왜냐하면, 21시에 누
    리호스팅 네임서버에서 www.abc.com 의 IP정보를 쿼리해간 네임서버에는 내일 21시까지 
    www.abc.com의 IP정보를 가지고 있을것이기 때문입니다.
    
    따라서, 오늘저녁부터 내일저녁까지 기존의 IP와 변경된 IP 두개의 서버에서 고객님은 서비
    스를 운영을 해야 되겠습니다. 조금 이상하시죠? ^^
    
    서버가 여유있게 남아 있는 경우에는 별 이상이 없겠지만, 일반적인 경우에는 쉽지않은 문
    제가 됩니다. 그리고, 서버가 여유있게 있다고 하더라도 서비스 정보가 두군데 분산되어 저
    장이 되는 문제도 쉽지 않은 문제가 될수 있을듯 합니다.
    
    이런 문제를 아주 쉽게 해결할 수 있는 것이 도메인의 TTL 값을 조정해서 해결하는것입니
    다.~~ ^^
    
    즉, 누리호스팅의 네임서버에서 TTL을 86,400 -> 1800(30분) 으로 변경을 하는것입니다.
    도메인의 정보가 인터넷에 전파되는데 걸리는 시간이 30분이라는 것입니다. 저희가 고객의 
    서비스를 이전해 주는 작업을 가끔 해 주는 경우가 있는데, 30분으로 도메인의 TTL을 설정
    하고 작업하면 서비스 중지 없이 거의 실시간으로 도메인 IP정보 변경을 할수가 있었습니
    다. 뭔가 해결이 된듯 하지 않습니까?~~~ ^^
    
    그러면, 항상 네임서버에 등록된 도메인의 TTL을 1800으로 설정하면 어떻게 되겠습니까?
    이것도 문제가 됩니다. 어떤 문제가 있냐면, A라는 사람이 www.abc.com으로 접속을 자주합
    니다. 그러면, 정확히 30분 간격으로 해서 누리호스팅 네임서버에 쿼리를 합니다. 크게 문
    제되지는 않지만, 누리호스팅 네임서버에 쿼리를 하는 시간만큼 지연이 생깁니다. 브라우져
    에서 홈페이지를 열려고 할때는 대략 1초정도 딜레이 되는 것도 문제가 되겠지요~~?
    
    이런 경우의 사용자가 많다고 생각하면 서버 관리자 입장에서는 사소한 문제로 그런 시간 
    지연이 생긴다는 것이 조금 괴로우실 겁니다. ^^
    
    따라서, TTL의 86,400초와 1,800초의 두가지 옵션을 저희가 누리호스팅 네임서버에서 제공
    하는 이유를 이해하시리라 생각하고, 정상적인 업무 처리를 간단히 정리하면서 정리하겠습
    니다.
    
    ### 네임서버에 TTL 변경 절차 ###
    ================================================================================
    1. 도메인의 IP변경 이벤트 발생
    2. 적어도 변경 시점 TTL 시간 이전에 1,800초로 변경 : 누리호스팅 고객지원센터에서
    3. 누리호스팅 네임서버에서 도메인의 IP변경  : 누리호스팅 고객지원센터에서 
    4. 변경된 IP정보로 이상없이 서비스 되는지 확인 (2-3일정도)
    5. TTL 시간 86,400초로 변경
    ================================================================================
    
    감사합니다. 
    
    Posted by 1010
    98..Etc/Etc...2009. 7. 31. 09:26
    반응형
    likejazz님이 최근 posting한 openDNS에 대한 글을 보다가 아래 comment를 보니 KT DNS 주소를 올려주신 분이 계셨다.

    내가 항상 외우고 있던 데이콤 DNS서버와 비교해보니 KT쪽 ping 응답 속도가 더 빨랐다.(물론 이 값이 절대적이지는 않을 거라고 생각은 하지만 어느 정도 신뢰성이 있지 않을까?)

    맘 먹은김에 찾아보니 잘 정리해 놓은 글이 있었다.

    한국통신(KT)- 주 DNS 주소: 168.126.63.1 - 보조 DNS 주소: 168.126.63.2
    * 두루넷- 주 DNS 주소: 210.117.65.1 - 보조 DNS 주소: 210.117.65.2
    * 신비로- 주 DNS 주소: 202.30.143.11 - 보조 DNS 주소: 203.30.143.11
    * 데이콤- 주 DNS 주소: 164.124.101.2 - 보조 DNS 주소: 203.248.252.2
    * 하나로- 주 DNS 주소: 131.107.1.7 - 보조 DNS 주소: 210.94.0.7
    * 드림라인- 주 DNS 주소: 210.181.4.25 - 보조 DNS 주소: 210.181.1.24

    출처 : http://kofree.net/board/bbs/board.php?bo_table=tbl009&wr_id=1516&page=2
    Posted by 1010
    반응형
    출처 : http://www.imgwizard.com/?mid=tip&category=361&page=1&document_srl=369

    <HTML>
    <HEAD>
    <Title>테이블에 스크롤바 생성하기</Title>

    <style type="text/css">
    <!--
    body,td {font-family:"굴림"; font-size: 9pt}
    #scrollbox {width:400; height:100; overflow:auto; padding:10px; border:1; border-style:solid; border-color:black}
    -->
    </style>

    </HEAD>

    <BODY BGCOLOR="#FFFFFF">
    <table width=400 height=100 border="0" cellspacing="0" cellpadding="0">
    <tr>
      <td>
      <DIV id="scrollbox">
      <b>이수영 -천년이라도</b><p>
          하루종일 난 그대위해 기도했어요.<br>
          마음이 너무 아파할것같아<br>
          아무일도 아닌걸요 힘들어 말아요<br>
          시간이 조금 필요할 뿐이죠<br>
          누구도 그댈 대신할수는 없지만<br>
          이젠 추억으로 만족하겠죠<br>
          조금 걱정이 되네요<br>
          그대가 없는 나의 삷이란건 생각조차<br>
          해본적 없으니까<br>
          그대가 가면 나는 여기에<br>
          천년이라도 기다릴게요<br>
          살다가 한번 생각이나면<br>
          힘들어말고 찾아오세요<br>
          한번도 그대를 원망하지 않아요<br>
          그대에겐 부족한 나였으니<br>
          부디 멀리나마 행복하기를 바래요<br>
          이제다시는 볼수 없을테니..<br>
      </DIV>
      </td>
    </tr>
    </table>
    </BODY>
    </HTML>


    ===========
    ☞ div 태그에 id를 줘서 스타일시트를 적용해도되고, div 태그내에 직접 <DIV style="..."> 써줘도 되고...
    ☞ 넷스케이프에서 스크롤은 적용 안되지만 내용은 보임
    ☞ overflow=auto    : 내용길이에따라 스크롤바 생김
    ☞ overflow=scroll  : 무조건 스크롤바 생김
    Posted by 1010
    05.JSP2009. 7. 30. 16:11
    반응형

    -- 웹접근성을 고려한 게시판 페이징 처리
    파라미터(전체게시물수,현재페이지번호,한페이지당보여줄갯수,링크주소)

    package com.bizconsult.util;

    public class NavigationUtil {

            private int totalCnt;   // 전체건수
            private int maxPageNo;  // 최대페이지
            private int curPageNo;  // 현재페이지
            private int pageVol;    // 페이지당갯수

            private String baseLink=""; // 링크페이지 
           
           

            public NavigationUtil(int totalCnt, int pageNo, int pageVol, String baseLink) {
                    // TODO Auto-generated constructor stub

                    super();

                   
                    // 한화면에 보여줄 글 갯수
                    this.pageVol = pageVol;
                   
                    // 현재 페이지 번호
                    this.curPageNo = pageNo;
                   
                    // 링크페이지
                    this.baseLink = baseLink;

                    // 전체 페이지 수
                    this.totalCnt = (totalCnt / pageVol) + (totalCnt % pageVol == 0 ? 0 : 1);  
            }


            public String goLink() { 
                    // TODO Auto-generated constructor stub

                    StringBuffer sb_PageLink = new StringBuffer();
                   
                    //이전
                    if(this.curPageNo > 1){
                            sb_PageLink.append("<a href='");
                            sb_PageLink.append(this.baseLink);
                            sb_PageLink.append("?pageNo=");
                            sb_PageLink.append(1);
                            sb_PageLink.append("&");
                            sb_PageLink.append("pageVol=");
                            sb_PageLink.append(this.pageVol);
                            sb_PageLink.append("'>");
                            sb_PageLink.append("[처음]");    
                            sb_PageLink.append("</a>");   
                           
                            sb_PageLink.append("<a href='");
                            sb_PageLink.append(this.baseLink);
                            sb_PageLink.append("?pageNo=");
                            sb_PageLink.append(this.curPageNo -1);
                            sb_PageLink.append("&");
                            sb_PageLink.append("pageVol=");
                            sb_PageLink.append(this.pageVol);
                            sb_PageLink.append("'>");
                            sb_PageLink.append("[이전]");    
                            sb_PageLink.append("</a>");
                    }
                   
                   
                    // 게시물 목록
                    for(int i =1 ; i <= this.totalCnt ; i ++){
                            sb_PageLink.append("<a href='");
                            sb_PageLink.append(this.baseLink);
                            sb_PageLink.append("?pageNo=");
                            sb_PageLink.append(i);
                            sb_PageLink.append("&");
                            sb_PageLink.append("pageVol=");
                            sb_PageLink.append(this.pageVol);
                            sb_PageLink.append("'>");
                            sb_PageLink.append(i);    
                            sb_PageLink.append("</a>");
                            sb_PageLink.append("&nbsp;&nbsp;");
                    }
                   
                    //다음
                    if(this.curPageNo < this.totalCnt){ 
                            sb_PageLink.append("<a href='");
                            sb_PageLink.append(this.baseLink);
                            sb_PageLink.append("?pageNo=");
                            sb_PageLink.append(this.curPageNo +1);
                            sb_PageLink.append("&");
                            sb_PageLink.append("pageVol=");
                            sb_PageLink.append(this.pageVol);
                            sb_PageLink.append("'>");
                            sb_PageLink.append("[다음]");    
                            sb_PageLink.append("</a>");   
                           
                            sb_PageLink.append("<a href='");
                            sb_PageLink.append(this.baseLink);
                            sb_PageLink.append("?pageNo=");
                            sb_PageLink.append(this.totalCnt);
                            sb_PageLink.append("&");
                            sb_PageLink.append("pageVol=");
                            sb_PageLink.append(this.pageVol);
                            sb_PageLink.append("'>");
                            sb_PageLink.append("[마지막]");    
                            sb_PageLink.append("</a>");
                    }
                   
                    return sb_PageLink.toString();

            }

            public String goView(String baseLink, int seq) {
                    StringBuffer sb_goView = new StringBuffer();
                    sb_goView.append("<a href='");
                    sb_goView.append(baseLink);
                    sb_goView.append("?");
                    sb_goView.append("mod=V");
                    sb_goView.append("&");
                    sb_goView.append("seq=" + Integer.toString(seq));
                    sb_goView.append("'>");
                    // sb_goView.append("</a>");

                    return sb_goView.toString();
            }

            public String goView(String baseLink, String bizid, int seq) {
                    StringBuffer sb_goView = new StringBuffer();

                    sb_goView.append("<a href='");
                    sb_goView.append(baseLink);
                    sb_goView.append("?");
                    sb_goView.append("mod=V");
                    sb_goView.append("&");
                    sb_goView.append("seq=" + Integer.toString(seq));
                    sb_goView.append("'>");
                    sb_goView.append("image insert");
                    sb_goView.append("</a>");

                    return sb_goView.toString();
            }

            public int getCurPageNo() {
                    return curPageNo;
            }


            public void setCurPageNo(int curPageNo) {
                    this.curPageNo = curPageNo;
            }

            public int getMaxPageNo() {
                    return maxPageNo;
            }


            public void setMaxPageNo(int maxPageNo) {
                    this.maxPageNo = maxPageNo;
            }


            public int getPageVol() {
                    return pageVol;
            }


            public void setPageVol(int pageVol) {
                    this.pageVol = pageVol;
            }


            public int getTotalCnt() {
                    return totalCnt;
            }


            public void setTotalCnt(int totalCnt) {
                    this.totalCnt = totalCnt;
            }


            public String getBaseLink() {
                    return baseLink;
            }


            public void setBaseLink(String baseLink) {
                    this.baseLink = baseLink;
            }


         

    }

    Posted by 1010
    02.Oracle/DataBase2009. 7. 29. 16:30
    반응형
    OTN Logo


    Oracle SQL Developer 1.5: Feature List

    게시일: 2008년 4월

    이 문서는 Oracle SQL Developer 1.5의 전체 기능 목록을 제공합니다. (별도의 Oracle SQL Developer 1.5 신기능) 문서도 있습니다)

    목록

    1. 개요
    2. 아키텍처
    3. 데이터베이스 커넥션
    4. 커넥션 네비게이터
    5. SQL 워크시트
    6. SQL 및 PL/SQL 편집
    7. 내보내기 및 들여오기
    8. 보고
    9. SQL*Plus 지원
    10. 타사 데이터베이스 지원
    11. 마이그레이션 워크벤치
    12. Oracle Application Express 3.0.1
    13. Preferences
    14. 버전 통제

    1.  개요

    다운로드 사이트 OTN
    비용 무료
    오라클 지원 데이터베이스 지원 계약 고객을 위한 메타링크를 통해 지원 가능
    릴리스

    최초 릴리스: SQL Developer 1.0 (2006년 3월)

      Release SQL Developer 1.1 (2006년 12월)
      Release SQL Developer 1.2 (2007년 6월)
      Release SQL Developer 1.2.1 (2007년 8월)
      Release SQL Developer 1.5 (2008년 4월)

    2.  아키텍처 및 일반 구조

    아키텍처 Java IDE
      커넥션 네비게이터
      다중 접속
      DB 지원 (non-Oracle)
      Microsoft SQL Server, Microsoft Access, MySQL 및 Sybase를 위한 읽기 전용 지원
    글로벌화 변환 UI (1.5.1에서 9개국 언어 번환 기능 지원 예정)
      아시아 / 멀티 바이트
      서유럽
    GUI 현대식 IDE 인프라
      온라인 지원
      HTML
      단축 키
    설치 (Release 1.5) 풋프린트 (38.4MB)
      Dependencies JRE (27MB)
      전체 다운로드 크기 (77 MB)
      Oracle Home 불필요
    플랫폼 지원 Windows (with Windows Installer )
      Linux (with RPM install)
      Mac OS/X
    데이터베이스객체 스키마 및 객체 유형 전반을 검색
      DB 객체 검색 및 확장 검색 다이얼로그. 파라미터, 선언 및 사용법 같은 코드의 객체 검색 가능.
    고급 필터링 확장 필터링:
      - 다양한 필터 옵션 및 기준
      - AND or OR 필터링 구현 (All or Any 선택)
      - 기타 사용자 필터링은 가시적 객체를 갖고 있지 않는 사용자를 걸러 내기 위한 OBJECT_COUNT 포함
    엔진 검색 Ask Tom
      Oracle doc
      Search Doc 10.2
      Search Doc 9.2
      Search Forums
      Search Google
      Search 메타링크
    메뉴

    외부 툴 지원

      DDL 및 데이터 내보내기
      데이터베이스 객체 검색
      쿼리 빌더
    확장자

    SQL Developer는 확장성 있는 IDE 기반으로 구현됨
      - Build 완전한 Java 확장자 구현
      - XML을 위한 확장 후크 사용

    커넥션 네비게이터 데이터베이스 기록 관리 실행 (SYS 혹은 SYSTEM 등 모든 권한 접속에 대한 컨텍스트 메뉴를 마우스 오른쪽 클릭)
      데이터베이스 기록 관리 실행 (SYS로)하여 데이터베이스 종료 및 재시작
      스키마의 모든 객체를 위한 DB Doc 생성 (커넥션에 대한 컨텍스트 메뉴를 마우스 오른쪽 클릭). 브라우저에 생성된 index.html 파일을 열고 객체 점검.
    스키마 복사

    하나의 스키마 컨텐츠를 다른 스키마로 복사

      객체를 드롭, 절단 혹은 복사
      실행할 액션 보고 사전 점검
      결과 보고 로깅
    Schema Diff

    2 스키마 사이의 SQL Difference 구문을 비교, 생성

      객체 선택 후 비교
      비교 객체 보고
      차이 및 실행할 SQL 코드 목록화
      스크립트 아웃풋을 선택 커넥션에 실행할 SQL 워크시트에 실행

    3.  데이터베이스 커넥션

    커넥션 커넥션 생성, 저장, 업데이트 및 명칭 변경
      기본 Thin JDBC
      사용자 정의 JDBC URL
      TNS 커넥션
      Connection Manager를 통한 커넥션
      암호화된 비밀번호
      LDAP 커넥션
      외부 인증
      프록시 커넥션
      비밀번호 만료 시, 새로운 접속을 하도록 사용자 프롬프팅
    타사 접근

    읽기 전용 접속으로 객체 및 데이터 검색:
      - MySQL
      - SQL Server
      - MS Access
      - Sybase

    TimesTen TimesTen 지원 통합

    4.  커넥션 네비게이터

    객체 검색 칼럼 헤딩을 통한 분류 허용
     

    DDL 뷰

      종속성, 상세 정보, 통계 등 객체 정의 뷰
    테이블

    생성
      -표준 테이블
      -파티셔닝
      -인덱스 정렬
      -Global Temporary External
      -테이블 간편 생성
      -고급 생성
      -PK 트리거 및 시퀀스 생성
      -Lob 파라미터

     

    수정
      -테이블 복사
      -칼럼 정상화
      -조건 생성, 활성화 및 활성 해제
      -관련 FK 조건 활성화 및 활성 해제

     

    테이블 데이터
      -테이블 데이터 그리드 편집
      -열 복제
      -데이터 분류
      -SQL Where 절을 통한 필터링
      -단일 기록 뷰
      -열 카운트
      -내보내기
      -데이터 검색 (XMLType 칼럼)
      -CLOB 데이터 뷰

    생성
      속성 뷰
      수정
      컴파일링 무효화
      업데이트 뷰의 데이터 업데이트
    동의어

    생성  
       - 객체 기반
       - 명칭 기반

      속성 뷰
      수정
    시퀀스 생성
      속성 뷰
      수정
      컨텍스트 메뉴를 마우스 오른쪽 클릭해 시퀀스 변경
    패키지, 절차, 기능 생성
      속성 뷰
      실행
      PL/SQL 아큐먼트 뷰
      컴파일 (개별 선택, All or Invalid)
      Debug로 컴파일
      "Create Body" 사양으로부터 디폴트 골조 실행
      파일 기반 PL/SQL 지원
      - pl/sql 파일 열기, 편집 및 저장
      - 데이터베이스 업데이트 위해 스키마에 pl/sql 파일 컴파일링
    유형 생성
      속성 뷰
      실행
    트리거 생성
      트리거 소스 편집
      수정
      마스터/디테일 포맷 트리거 탭. 디테일로 트리거 코드 표시
    데이터베이스링크 생성
      속성 뷰
      수정
      테스트
    인덱스

    생성
      -Non-unique
      -Unique
      -텍스트 인덱스
      -비트맵

      속성 뷰
    도메인 인덱스 모든 접근 가능 스키마의 기존 인덱스 유형에 인덱스 생성
    메시지 오류 디스플레이 업데이트로 오라클 오류에 대한 자세한 정보 표시
      컴파일링 관련, 상태 바에 성공 메시지 표시
    디렉토리 속성 뷰
    종합 뷰 생성
      속성 뷰
      실행
      고급 체크박스
      - 객체 등의 선택 항목을 선택하여 Select 구문을 선언적으로 정의
      - 인덱스 추가
      - 파티션 추가
      "New Index"를 사용하여 종합 뷰에 인덱스 추가
    종합 뷰 로그 종합 뷰 로그 생성 및 편집을 위한 새로운 인터페이스
    큐 및 큐 테이블 검색 및 뷰
    Java 검색
      로딩
    기타 사용자스키마 검색  
    휴지통 비우기
      객체 드롭 취소
    XML 스키마 생성
      속성 뷰
    객체 네비게이터 통제 필터/찾기
      새로 표시
      그리드 데이터를 파일로 다운로드
    사용자 승인 및 역할 등으로 사용자 생성
      사용자 역할, 승인 및 권한 편집
    Schema Diff 소스 스키마 및 객체를 데스티네이션 스키마와 비교해 DDL 생성
      SQL을 SQL 워크시트로 전송
    DBA 유틸리티 데이터 관리
     

    데이터베이스 사용자 관리
      -사용자 생성
      -사용자 변경
      -사용자 드롭

     

    DDL 생성
      -객체 기준 DDL
      -스키마 기준 DDL

    Application Express 3.0.1 데이터베이스 스키마와 관련된 모든 Oracle APEX 애플리케이션에 접속 및 검색 (애플리케이션 및 페이지 레벨)
      컨텍스트 메뉴를 사용하여 Oracle APEX 애플리케이션 내보내기 및 들여오기

    5.  SQL 워크시트

    데이터 그리드 기록 버튼 복제
      한 번에 하나의 기록을 보기 위한 단일 기록 "피봇"
      SQL 워크시트에 칼럼 기록 및 이전 순서 취소 허용
      테이블 데이터 편집기의 날짜 필드용 캘린더 프롬프트
      그리드에 대한 컨텍스트 메뉴
      필터로 열 카운트
      데이터 그리드 검색
      칼럼 크기 자동 조정 (데이터 그리드 및 칼럼 헤더 컨텍스트 메뉴에서)
      그리드 이외 모든 곳에서 모든 선택 사항 복사 및 붙여 넣기
      선택 사항을 복사 Excel에 붙여 넣기
      Excel에서 선택 사항 복사해 데이터 그리드로 붙여 넣기
    쿼리 빌더 기본 쿼리 생성
      쿼리 실행하여 데이터 테스트
      SQL을 SQL 워크시트로 전송
    스닙펫 스닙펫을 SQL 워크시트로 드래그 앤 드롭
      스닙펫 관리
      - 새로운 캐터고리 생성
      - 새로운 스닙펫 생성
    SQL 워크시트 구문 실행
      스크립트 실행
      워크시트 커넥션 변경
     

    파일 지원
      - 검색
      - 커넥션 변경
      - 실행
      - 편집
      - 저장

      SQL 구문 포맷
      괄호 매칭
      ref 커저 출력 표시 지원
      BLOB, CLOB, xml, 커저 지원
      Code insight on
      - 테이블 별칭
      - 스키마
      - 부분 테이블 + ctrl +[space] (예정)
      - ctrl +[space] (예정)
      테이블 설명 (F4)
      탭 명 개선: 워크시트 명을 'MyTab Name' 으로 설정
      SQL*Plus 지원 (아래 목록 참조)
      장기 실행 스크립트 일시 정지
      일시 정지 스크립트 재개
      rownum을 선택해 전체 열 선택
      SQL 워크시트의 X쿼리
      SQL 이력
      DBMS 아웃풋
      OWA 아웃풋
      변수 결합
      옵션 실행
      모드를 preference로 자동 실행 (디폴트로는 활성화 안됨)
      코드 포맷
      파일로 내보내기
      쿼리 취소
      Code Insight 개선. 다양한 객체 유형을 위한 코드 완성 기능 사용 가능
      SQL Formatting 대체. 여백, 탭, 코마 적용, 활자 케이스, 신규 라인 등을 통제하는 SQL Formatter preferences 참조.
      자주 사용하는 코드를 위한 코드 템플릿. Preferences에서 이들을 생성한 후, 키 조작을 통해, 코드 편집기 및 SQL 워크시트에서 코드 템플릿 들여오기. ctrl+shift+T)
      코드 템플릿 공유 가능: /Application Data/Sql Developer/CodeTemplate.xml
      플래시백. 10g 및 11g에서, 데이터 플래시백 가능. 테이블 플래시백 참조.
      활자 케이스 변화를 위한 키 조작. (컨텍스트 메뉴에서도 가능.) 조작 키는 ctrl-quote
      Refactor 코드, SQL 워크시트 혹은 코드 편집기의 컨텍스트 메뉴 참조
      장기 실행 쿼리 커넥션을 위한 별도의 공유 워크시트. 조작 키는 ctrl+shift+N. 이는 별도의 공유 워크시트를 생성. 공유 워크시트는 다음과 같이 표시: HR_ _1
      SQL History는 스크립트 실행 혹은 구문 실행을 위한 F5 및 F9 키 조작으로 커맨드 저장. @filename을 실행하면, 파일의 모든 커맨드가 아니라, 이것이 History에 저장됨. ctrl-up 및 ctrl-down 키는 SQL 워크시트에서 이전에 실행된 커맨드를 추가하고 스크롤링.
      구문 삽입, 수정, 삭제, 병합 및 선택을 위해 네비게이터에서 워크시트로 드래그 앤 드롭. Preference 설정.
     

    테이블의 데이터 그리드가 Sort 보존.

      데이터 그리드 필터가 이전 필터 옵션의 드롭 목록을 보존
    튜닝 Autotrace 지원
      Explain plan 지원
      *.trc 파일을 SQL Developer에서 열어 포맷된 추적 파일 생성

    6. SQL 및 PL/SQL 편집

    편집 OS 파일 북마크
      PL/SQL DB 객체 북마크
      코드 폴딩
      코드 포맷
      Code Insight (코드 완성)
      코드 스닙펫 뷰어
      편집기로 객체 드래깅
      파일 운영 (저장, 열기)
      인라인 컴파일링 오류
      표준 편집기 운영
      Leading Remarks로 파일 열기 지원
      구문 하이라이팅
    PL/SQL 디버거 열 형식 검사
      구분점 설정
    튜닝 계층적 프로파일러(Oracle 11g R1 이상의 커넥션용)

    7. 내보내기 및 들여오기

    데이터 들여오기 SQL Developer를 사용하여 스프레드시트 (XLS 포맷) 데이터를  테이블로 들여오기
      xls 스프레드시트의 테이블 들여오기 생성
      CSV로부터 들여오기
    데이터 내보내기 한 번에 한 개 이상의 테이블 내보내기 (with or without DDL)
      다음으로 내보내기  
      -CSV
      - XML
      - Text
      - HTML
      - XLS
      - SQL 삽입 구문
      - SQL*Loader Syntax
    DDL 내보내기 Export DDL 내보내기는 드롭 객체 포함을 허용
      다중 테이블을 위한 데이터 구문 삽입
      스키마 명칭 공표 금지 옵션
      한 번 클릭으로 전체 스키마 내보내기
      컨텍스트 메뉴에서 파일, 워크시트 혹은 클립보드로 내보내기

    8.  리포팅

    리포팅 제공 마스터/상세 보고를 통한 데이터베이스 세션 검색
      전체 보고서 내보내기
      모든 보고서 들여오기
      마우스 오른쪽 클릭 기능 강화
      세션 종료
      SQL 리포팅
      추적 세션
      보고서 결과를 텍스트, CSV, XLS, XML, HTML, INSERT, Loader로 내보내기
      ASH 및 AWR 보고서 (Oracle 11g R1 이상의 커넥션 및  Oracle Diagnostic pack 라이센스 사용자용)
    사용자 정의 보고 차트화 (테이블에서 그룹, 시리즈, 데이터 선택)
      선적 보고서 복사해 사용자 정의 보고로 붙여 넣기
      차트 보고서 생성 및 실행
      마스터 상세 보고 생성 및 실행
      스크립트 사용한 보고서 생성
      Create a report with plsql-dbms_output
    예를 들면,  begin dbms_output.put_line('<h1>hello</h1>'); end;로 보고서 생성
      포맷 코드 (예를 들면, select text from user_source where rownum < 100)으로 보고서 생성
      게이지로 보고서 생성
      보고서 Id를 사용해 사용자 정의 보고서를 클릭
      변수 결합을 위한 프롬프트 정의
      드릴다운 링크
      사용자 정의 보고서 생성, SQL 입력 위한 파일 검색 및 제출 허용
      사용자 정의 보고서 들여보기 및 내보내기
      사용자 정의 보고서 공유
      1.0에 생성된 사용자 정의 보고서 열기
    Oracle Application Express Report 워크스페이스, 애플리케이션, 페이지 및 스키마 검색 지원
    기타 보고서 메인 툴 메뉴의 세션 모니터링 보고서
      네비게이터의 커넥션 컨텍스트 메뉴의 데이터베이스 관리 보고서
    마이그레이션 보고서 타사 데이터베이스 마이그레이션 지원을 위한 일련의 보고서

    9. SQL*Plus 지원

    모든 SQL 및 PL/SQL 커맨드는 SQL 워크시트에서 직접 Oracle Database로 넘겨져 지원됩니다. SQL Developer에서 사용되는 SQL*Plus 커맨드는 데이터베이스로 넘겨지기 전에 SQL 워크시트에 의해 해석되어야 됩니다.

    SQL 워크시트는 현재 수 많은 SQL*Plus 커맨드를 지원합니다. SQL 워크시트에 의해 지원되지 않는 커맨드는 무시되어 Oracle Database로 넘겨지지 않습니다. Oracle SQL Developer SQL 워크시트에 의해 지원되는 SQL*Plus 커맨드는 아래 목록과 같습니다.

    커맨드

    참고

    @


    @@


    acc[ept]


    autotrace  
    clear screen  

    conn[ect]

    스크립트 실행 컨텍스트에서만 유효. CONNECT 뒤의 스크립트로 되어 있는 커맨드는 대체 스키마에서 운영되지만 스크립트 완성 후에는 , SQL 워크시트가 선택된 커넥션의 컨텍스트 내부에 남게 됩니다.

    def[ine]


    desc[ribe]


    doc[ument]


    echo  
    errors  
    esc[ape]  

    exec[ute]


    exit

    실행 중단 및 콤보 상자의 커넥션 원상 회복

    feed[back]  
    ho[st]  
    pau[se]  

    pro[mpt]


    print  

    quit

    실행 중단 및 콤보 상자의 커넥션 원상 회복

    rem[ark]


    sta[rt]


    term[out]  
    timi[ng]  

    undef[ine]


    user  
    var[iable]  
    ver[ify]  

    whenever


    xquery  

    10.  타사 데이터베이스 지원

    타사 검색 Microsoft Access
      Microsoft SQL Server
      MySQL Database
      Sybase Adaptive Server
    마이그레이션 서비스 Microsoft SQL Server에서 Oracle로
      Microsoft Access에서 Oracle로
      MySQL에서 Oracle로
      T-SQL을 PL/SQL로 변환
      Access를 PL/SQL로 변환
      Sybase Adaptive Server to Oracle

    11. 마이그레이션 워크벤치

    타사 데이터베이스 지원 Microsoft Access
      Microsoft SQL Server
      MySQL Database
      Sybase Adaptive Server
    커넥션 타사 데이터베이스 검색
    마이그레이션 옵션 Quick Migration Wizard는 최소 권한 마이그레이션 지원으로 DBA 권한 불필요
      단계적 마이그레이션으로 마이그레이션 프로세스의 모든 단계 통제.
      정밀 마이그레이션 지원으로 마이그레이션을 위한 특정 객체 선택 가능.
      복잡한 객체 마이그레이션은 저장된 절차, 트리거 및 뷰 지원.
    변환 변환 스크래치 편집기는 단일 구문 마이그레이션 지원
      Translation Difference Viewer는 구문 및 블록 매칭을 통해 일대일 비교 제공.

    12.  Oracle Application Express (APEX) 지원

    커넥션 네비게이터 데이터베이스 커넥션 Oracle APEX 데이터베이스 스키마 생성
      애플리케이션 및 페이지 레벨에서 데이터베이스 스키마와 관련된 모든 Oracle APEX 애플리케이션 검색
      컨텍스트 메뉴를 사용하여 Oracle APEX 애플리케이션 내보내기 및 들여오기
    리포팅 워크스페이스
      애플리케이션
      페이지
      스키마

    13.  Preferences

    데이터베이스 Autotrace
      NLS
      타사 JDBC Driver
    환경 워크시트
      Object Viewer
      연결된 SQL 워크시트 열기
      Auto-freeze/pin 탭
      5000 이상의 Fetch 사이즈 허용
      SQL Array Fetch 사이즈
    코드 편집기 북마크
      Insight
      라인 거터
      디스플레이 설정
    PL/SQL 디버거 PL/SQL 디버깅을 위해 프로브 디버거 사용
      구분점 속성
      Watches
      Inspector
    사용자 정의 확장 사용자 정의 보고서 공유
      새로운 컨텍스트 메뉴 추가
      새로운 탭 생성

    14.  버전 통제

    버전 통제 CVS 및 서브버전과로 통합
     

    버저닝 네비게이터

      서브버전 레포지터리 생성
      파일 검사 및 실행
      브랜치/태그
      비교 및 병합
      충돌 해결
    파일

    파일 시스템 파일 검색을 위한 파일 네비게이터

      파일 이력 뷰
    Posted by 1010