블로그 이미지
좋은느낌/원철
이것저것 필요한 것을 모아보렵니다.. 방문해 주셔서 감사합니다..

calendar

1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31

Notice

    '좋은느낌이야'에 해당되는 글 230

    1. 2009.05.26 희한한 생명체
    2. 2009.05.21 리눅스 환경에서 Oracle JDBC설정
    3. 2009.05.21 세계 최고와 최대
    4. 2009.05.21 유럽리그의 명문들 강등 경험
    5. 2009.05.21 유럽 리그의 의리파 선수들
    6. 2009.05.21 유럽 리그들 승격 그리고 강등
    7. 2009.05.19 Listener
    8. 2009.05.18 jdk 설치
    9. 2009.05.13 like 대신 instr
    10. 2009.05.13 [ORACLE]SGA
    2009. 5. 26. 22:35 시사/요즘 세상은
    [지디넷코리아]북미 과학자들이 전 세계를 돌며 선정한 ‘특이 생물체’가 인터넷서 화제다. 스스로 죽는 야자수부터 초미니 바다 생명체까지 신비로운 모습이 누리꾼 눈길을 끌고 있다. 

     

    미국 씨넷뉴스에 따르면  애리조나주립대학 국제 종 탐사 연구소가 2008년까지 조사 발표된 몇 천종의 생명체들 중 대표적인 것들을 선정, 화보로 만들었다. 

     

    ■마다가스카르 섬에서 발견 된 야자수 ‘타히나 스펙타빌리스(Tahina spectabilis)’다. 발아 100년만에 열매를 맺고 스스로 목숨을 끊는 희한한 종자다. 일단 꽃이 피면 크리스마스트리 형으로 자라며, 꿀이 흘러넘쳐 각종 곤충들이 모이게 된다. 이때 열매까지 열리면 나무가 지쳐서 시들고 쓰러지는 것. 

     


    ■2008년 세계 최장신 곤충 기록을 100년만에 갈아치운 ‘포베티쿠스 차니(Phobaeticus chani)’다. 몸 길이가 22.3인치(약 56.64cm)로 성인 팔 길이 정도에 이른다. 천적의 공격을 피하기 위해 서식지인 나뭇가지와 유사한 형태로 진화했다. 첫 발견은 1989년 보르네오 섬에서였다. 

     


    ■역시 보르네오 섬에서 발견된 해마의 일종 ‘힙포캠퍼스 새토마이어(Hippocampus satomiae)’는 세계에서 가장 작은 해마다. 몸길이가 0.45인치(약 1.37cm) 정도. 

     


    ■지렁이가 아니라 분명 뱀으로 분류됐다. ‘레프토타이프로프스 카레(Leptotyphlops carlae)’라는 이름의 이 뱀은 지금까지 알려진 3,100여종의 뱀 중 가장 작은 것으로 나타났다. 전체 길이가 4.1인치(약 10.41cm) 정도로 발바도스 섬에서 발견됐다. 

     


    ■길이 8cm 정도의 ‘딥 블루 크로미스(Deep Blue Chromis)’는 길이 8cm 정도의 작은 물고기지만 활동영역은 수심 110m에 이른다. 주로 남태평양에서 발견된다. 

     


    ■‘마데르피스키스 아텐보로이(Materpiscis attenboroughi)’는 가장 오래된 척추동물로 알려졌다. 호주에서 발견된 화석 표본은 3억8,000만년 이상 지난 것이었다. 임신 상태 화석이 발견돼 일명 ‘Mother Fish’로도 불린다. 

     


    ■카메룬에서 발견된 카페인 없는 커피 종자 ‘샤리에 커피(Charrier Coffee)’는 학계 뿐 아니라 요식업계의 주목도 받고 있다. 

     


    ■지난해 일본 의료진이 찾아낸 세균 종 'Microbacterium hatanonis'는 헤어스프레이 속에 기생해 충격을 줬다. 중성 PH와 섭씨 30도 정도에서 잘 자라는 것으로 연구됐다. 

     



    posted by 좋은느낌/원철
    2009. 5. 21. 20:01 개발/Oracle

    리눅스 환경에서 Oracle JDBC설정

     

    글쓴이: 굿스피드 (2003년 09월 04일 오전 11:44) 읽은수: 495

    JDBC는 자바에서 SQL문을 실행하기 위한 자바 API이다. "Java DataBase Connectivity"의 약자로 간주되기도 하지만 사실상은 상표이름이다. JDBC는 자바로 작성되어진 클래스와 인터페이스들로 구성되어있다. 툴/데이터베이스 개발자들을 위한 표준 API를 제공하고 pure 자바 API를 사용하여 데이터베이스 어플리케이션을 만들게 해준다.

    JDBC를 사용하면, 어떠한 관계 데이터베이스(relational database)로도 SQL문을 전송하기 쉽다. 즉, JDBC API를 사용하면 Sybase, Oracle, Informix에 접근하는 프로그램을 따로 만들 필요가 없다. 단지 하나의 프로그램을 작성하고 그 프로그램에서 SQL 문을 적당한 데이터베이스에 전송할 수 있다. 또한 어플리케이션을 자바로 작성한다면, 어플리케이션을 플랫폼에 따라 다르게 작성하지 않아도 되기 때문에 자바와 JDBC의 결합은 하나의 프로그램이 어디에서나 동작할 수 있게 해준다.

    +환경 설정

    리눅스 환경에서 oracle jdbc를 구동하기 위해서는 먼저 oracle jdbc드라이버가 있어야 된다. 오라클 설치시 기본 권정사항으로 설치했다면 이미 jdbc드라이버가 들어있다. 만약 없다면 아래 링크에서 버전별로 자신의 오라클에 맞는 드라이버를 다운받기 바란다.

    Oracle JDBC Download

    필자는 오라클 8.1.7을 설치했다. 기본 권장 사항 설치를 했을 경우 JDBC드라이버가 지원이 되었었다. 기본 권장 사항 설치시 jdbc드라이버의 경로는 $ORACLE_HOME/product/8.1.7/jdbc/lib이다.

    lib폴더 아래 보면 classes111.zip(9i는 classes12.zip)화일이 있을것이다. jdbc드라이버가 있는것이 확인됐다면 이제 드라이버 환경 설정을 해보자

    [root@localhost]#
    [root@localhost]# unzip classes111.zip
    [root@localhost]# ls
    javax	oracle
    

    먼저 classes111.zip의 압축을 풀어보면 javax oracle폴더가 보일것이다. 이것일 jar로 압축해서 사용을 할 것이다.

    [root@localhost]#
    [root@localhost]# jar cvf classes111.jar javax/ oracle/
    

    위와 같이 jar로 압축을 하면 classes111.jar화일이 생성이 된다. 이제 CLASSPATH설정을 해보자.

    [root@localhost]#
    [root@localhost]# vi /etc/profile
    export CLASSPATH="$CLASSPATH:/oracle/product/8.1.7/jdbc/lib/classes111.jar"
    
    [root@localhost]# set | grep CLASSPATH
    CLASSPATH=.:/usr/local/JSDK/lib/jsdk.tar:/usr/local/tomcat/common/lib/servlet.jar:
    /oracle/product/8.1.7/jdbc/lib/classes111.jar
    

    위와 같이 classes111.jar이 나와야 정상이다. 일단 oracle jdbc가 제대로 설정이 되었나 테스트를 해보자.

    +Oracle JDBC 테스트 #1

    먼저 드라이버가 제대로 설정이 되었는지 테스트 해보자. 우선 아래와 같이 입력한다. JAVA에서 오라클 드라이버의 로딩을 확인해 볼 수 있다.

    [root@localhost]#
    [root@localhost]# javap oracle.jdbc.driver.OracleDriver
    Compiled from OracleDriver.java
    public class oracle.jdbc.driver.OracleDriver extends java.lang.Object 
    implements java.sql.Driver
        /* ACC_SUPER bit NOT set */
    {
        public static final char slash_character;
        public static final char at_sign_character;
        static final java.lang.String oracle_string;
        static final java.lang.String user_string;
        static final java.lang.String password_string;
        static final java.lang.String database_string;
        static final java.lang.String server_string;
        static final java.lang.String access_string;
        public static final java.lang.String protocol_string;
        public static final java.lang.String dll_string;
        --------------중간 생략-----------------------
        public int getMajorVersion();
        public int getMinorVersion();
        public boolean jdbcCompliant();
        public static java.lang.String getCompileTime();
        public oracle.jdbc.driver.OracleDriver();
        static {};
    }
    

    만약 위와 같이 안나온다면 CLASSPATH설정을 확인해 보기 바란다. 설정이 제대로 안되있다면 아래와 같이 에러가 나올 것이다.

    [root@localhost]#
    [root@localhost]# javap oracle.jdbc.driver.OracleDriver 
    Class 'oracle.jdbc.driver.OracleDriver' not found
    

    이제 실제로 java와 jsp테스트를 해보자. 소스가 좀 길다. 하지만 정확한 테스트가 가능하니 꼭 테스트 해보기 바란다.

    [root@localhost]#
    import java.sql.*;
    
    public class Jdbctest {
    public static void main (String args[]) {
    try {
    /* This produces more output then suitible for this article */
    /* Uncomment the next line for more connect information */
    // DriverManager.setLogStream(System.out); 
    /*
    * Set the host port and sid below to 
    * match the entries in the listener.ora
    * Must have a SCOTT/TIGER schema
    */
    String host = "127.0.0.1"; // change,these won\'t work
    String port = "1521";
    String sid = "oracle";
    // or pass on command line all three items
    if ( args.length >= 3 ) {
    host = args[0];
    port = args[1];
    sid = args[2];
    }
    
    String s1 = "jdbc:oracle:thin:@" + 
    host + ":" +
    port + ":" +
    sid ;
    
    if ( args.length == 1 ) {
    s1 = "jdbc:oracle:oci8:@" +
    args[0];
    }
    
    
    if ( args.length == 4 ) {
    s1 = "jdbc:oracle:" + args[3] + ":@" + 
    "(description=(address=(host=" + host+
    ")(protocol=tcp)(port=" + port+ 
    "))(connect_data=(sid=" + sid +
    ")))";
    }
    
    
    System.out.println( "Connecting with: " );
    System.out.println( s1 );
    
    DriverManager.registerDriver(
    new oracle.jdbc.driver.OracleDriver());
    Connection conn = DriverManager.getConnection( s1,
    "scott",
    "tiger");
    
    DatabaseMetaData dmd = conn.getMetaData();
    System.out.println("DriverVersion: ["+
    dmd.getDriverVersion()+"]");
    System.out.println("DriverMajorVersion: ["+
    dmd.getDriverMajorVersion()+"]");
    System.out.println("DriverMinorVersion: ["+
    dmd.getDriverMinorVersion()+"]");
    System.out.println("DriverName: ["+
    dmd.getDriverName()+"]");
    
    if ( conn!=null )
    conn.close();
    System.out.println("Done.");
    
    } catch ( SQLException e ) {
    System.out.println ("\\n*** Java Stack Trace ***\\n"); 
    e.printStackTrace();
    
    System.out.println ("\\n*** SQLException caught ***\\n"); 
    while ( e != null ) {
    System.out.println ("SQLState: " + e.getSQLState ()); 
    System.out.println ("Message: " + e.getMessage ()); 
    System.out.println ("Error Code: " + e.getErrorCode ()); 
    e = e.getNextException (); 
    System.out.println (""); 
    } 
    }
    }
    }
    

    테스트는 접속 방식은 thin oci8의 두가지로 테스트를 해본다. 127.0.0.1에는 오라클 리스너에 등록되어있는 포트를 넣어주고 1521은 오라클 기본포트이다. ORCL은 오라클 SID이다. 자신에게 맞는것을 넣어주면 된다.

    [root@localhost]#
    [root@localhost]# javac Jdbctest.java
    [root@localhost]# java Jdbctest 127.0.0.1 1521 ORCL thin(or 
    oci8)
    Connecting with:
    jdbc:oracle:thin:@(description=(address=(host=127.0.0.1)(protocol=tcp)
    (port=1521))(connect_data=(sid=oracle)))
    DriverVersion: [8.1.7.1.0]
    DriverMajorVersion: [8]
    DriverMinorVersion: [1]
    DriverName: [Oracle JDBC driver]
    Done.
    

    위와 같이 나오면 연결에 성공한 것이다. 만약 안된다면 CLASSPATH를 확인하기 바란다.

    +Oracle JDBC 테스트 #3

    이제 jsp환경에서 테스트를 해보자 필자의 jsp환경은 jakarta-tomcat-4.1.18과 apache_1.3.27을 mod_jk로 연동시켰다.

    [root@localhost]#
    [root@localhost]# vi oracle.jsp
    <%@ page language="java" import="java.sql.*" 
    contentType="text/html;charset=KSC5601" %>
    <%
    Class.forName("oracle.jdbc.driver.OracleDriver");
    Connection Conn =
    DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:SID","scott","tiger");
    Statement stmt = Conn.createStatement();
    ResultSet rs = stmt.executeQuery("select * from tab");
    if (rs==null)
    {
               out.println("none");
    }
    else {
               out.println("oracle jdbc 연결 성공");
    }
    stmt.close();
    Conn.close();
    %>
    

    위와 같이 저장하고 웹브라우저로 확인해 보자. 만약 에러가 난다면 tomcat4가 jdbc드라이버를 제대로 인식을 못하는 것이다.

    +Oracle JDBC 트러블 슈팅

    tomcat 4버전부터 연동하는데 조금 어려움이 있다. 정상적으로 CLASSPATH도 잡혀있고 java와의 연동도 되지만 jsp와의 연동이 잘 안될때가 많았다. 이럴때는 다음과 같이 링크를 걸어주기 바란다.

    [root@localhost]#
    [root@localhost]# ln -s /oracle/product/8.1.7/jdbc/lib/classes111.jar \
    /usr/local/tomcat/common/lib/classes111.jar
    

    이렇게 링크를 걸어주면 tomcat환경에서 jdbc의 연동이 가능할것이다. 마지막으로 oracle과 tomcat + apache와의 연동에서 jdbc연동이 안된다면 apachectl시작 스크립트에 oracle환경 설정이 등록되어있나 확인해 보기 바란다. 물론 리스너쪽 설정도 이상이 없어야 한다.

    오라클 환경 설정은 ORACLE_HOME ORACLE_SID만 설정되어 있으면 된다.


    재 등록일 : 2003년 09월 06일 오후 09:29

     

    원문 : 나소드(http://www.nasord.com/stories.php?story=03/09/04/3444708)

    posted by 좋은느낌/원철
    2009. 5. 21. 17:29 시사/요즘 세상은
    세계 최고와 최대... 당신이 알거나 몰랐을 10군데 명소들...
     

    늘 땅을 밟고 하늘을 호흡하며 살고 있지만 우리가 사는 지구는 우리가 아는 것 이상으로 많은 독특함을 담고 있다. 어쩌면 Scienceray가 소개한 세계 최고의 장소들도 그런 의미에서 지구를 좀 더 아는데 도움이 될듯 한데... 

    이번에 소개하는 글은 우리가 사는 지구 그 안에서 최고 혹은 최대라는 타이틀을 달고 있는 10군데 장소들이다. 어쩌면 이미 당신이 아는 곳도 혹 모르는 곳도 있을지 모르겠다. 
    모쪼록 직접 가볼 수는 없지만 지구의 다양함을 느껴보시길.


    당신이 아는 세계 최대...

    1. 세계 최대의 바위


    사진만 봐도 알아챌 수 있는 이곳은 오스트레일리아의 에어즈 락(Ayers Rock).
    세계에서 가장 큰 바위라는 타이틀 답게 높이만 348m, 둘레는 무려 9.4km에 이른다. 특히 해가 뜨고 짐에 따라 다양한 색으로 변하는 덕분에 관광 명소로 사랑받고 있으며 또 다른 이름인 울루루(Uluru)도 알아두시길.^^

    2. 세계에서 가장 긴 강


    얼핏 사막이 비치는 이곳이 세계에서 가장 긴 강인 나일(Nile)이다.
    무려 5,584km의 긴 길이를 자랑하는 나일강은 동부 아프리카의 젓줄로 나일강하면 이집트를 제일 먼저 떠올리지만 긴 덕분에 나일강이 흐르는 나라만 무려 9곳이며 백나일, 청나일, 플래토 호수, 빅토리아 호수 등 다양한 수원에서 흐르는 물이 합쳐져 이런 거대한 강을 만들어 낸다고 한다. 

    3. 세계에서 가장 높은 곳


    세계에서 가장 높은 곳. 사실 이곳은 너무나 유명한 그곳 에베레스트 산(Everest)이다.
    네팔에서는 사가마타(Sagamatha)라 부르며 그 뜻은 '하늘의 이마'라고 한다. 네팔과 티벳, 중국에 걸쳐 있는 이 산은 매년 조금씩 높아진다는 이야기가 있는데. 재밌는 건 그 높이가 측정하는 기준에 따라 달라진다는 것. 공식적으로는 8,850m라고 알려져 있지만 중국이 가장 높은 바위 끝을 기준으로 잰 높이는 8844.43m였고 그 위에 얼음까지 포함해 미국이 GPS로 측정한 높이는 8,848m라고 한다. 
     
    4. 세계에서 가장 더운 곳


    가장 덥고 가장 넓은 사막이라면 역시 사하라(Sahara)를 꼽을 수 있다.
    900만 ㎢의 이 거대한 사막은 북 아프리카의 대부분을 덥고 있으며 55도의 고온도 곧잘 기록하고 있으며 지난 1922년에는 57.8도에 이르는 가히 살인적인 온도를 기록하기도 했다고 한다. 지구 온난화가 가속되면 더 높은 온도도 기록하려나?

    5. 세계에서 가장 추운 곳


    이곳 또한 너무 유명한 그곳. 세계에서 가장 추운 그곳은 남극(Antarctica)되시겠다.
    세계에서 다섯번째로 거대한 대륙이자 보기만해도 바람불고 추워 보이는 동네다. 1,400만 ㎢의 넓이에 98%가 얼음으로 덮힌 이곳. 지금까지 확인된 최저 기온은 영하 89.2도였다고 한다.


    당신도 몰랐을 세계 최대...

    1. 세계에서 가장 활발한 화산


    가까이는 한라산 조금 멀리는 백두산이라는 화산을 곁에 둔 우리들.
    하지만 이렇게 활발하게 분출하는 화산은 보기 쉽지 않을 듯. 화산 섬으로 유명한 하와이의 킬라우에아 화산(Kilauea)은 90%가 용암으로 덮여있다고 한다. 근처만 가도 후끈할 듯~

    2. 세계에서 가장 깊은 호수


    제법 푸른 빛이 인상적인 호수 하지만 이곳은 '죽은 바다'란 이름을 가진 호수 사해(Dead Sea)다. 이스라엘과 요르단 사이에 위치한 이 호수는 호면 자체가 해면보다 378m나 더 낮다. 말인즉슨 바다 높이에서 밑으로 380여 미터를 내려가야 호수의 표면이 있다는 이야기. 여기에 호수 자체의 깊이도 396m로 제법 깊다.-_-;;

    3. 세계 최대의 산호초


    푸른 바다 만큼이나 아름다움을 뽐내는 산호 군락. 
    그중 최대급 규모를 자랑하는 곳이 오스트레일리아에 있는 그 그레이트 배리어 리프(Great Barrier Reef)다. 3,000개 이상의 암초와 900개의 섬으로 구성된 이곳은 넓이만 20만 ㎢에 이르며 그 규모와 아름다움에 힘입어 1981년 유네스코 선정 세계 문화 유산으로 지정되기도 했다. 

    4. 세계에서 가장 큰 동굴


    길이도 길이지만 사진처럼 뻥 뚫린 가장 넓은 동굴...
    보르네오의 Mulu 국립 공원에 있다는 사슴 동굴(Deer Cave)가 그 주인공이다. 
    길이만 2km에 이르는 이 동굴은 높이와 넓이도 90m에 이를 정도로 뻥 뚫린 모양이다.

    5. 세계에서 가장 높은 폭포


    979m. 세계 최고 높이의 폭포의 높이다.
    베네수엘라에 위치한 엔젤 폭포(Angel Falls)는 뚜렷하게 물방울이 보이는 높이만 807m에 안개처럼 흩뿌리는 높이까지 더하면 그렇게 물경 1km에 달하는 긴 폭포가 완성된다. 실제로 본다면 정말 장관일듯~
    posted by 좋은느낌/원철
    2009. 5. 21. 10:27 취미/운동
    Q> 맨유도 강등된 적 있나요?

    A> 네. 프리미어리그를 포함해 잉글랜드 리그에서18번이나 정상을 밟은 맨유도 한 때는 강등을 두려워하던 시절이 있었습니다. 

    맨유는 1893~94시즌 후 2부리그에 강등된 후 12시즌을 보내고 1905~06시즌에 승격했습니다. 이뿐만이 아닙니다. 맨유는 총 5번 강등됐으며 2부리그에서 모두 22시즌을 보냈습니다.(1920~21년 강등 후 191924~25 승격, 1930~31 강등 후 1935~36 승격, 1936~37 강등 후 1937~38 승격, 1973~74년 강등 후 1974~75년 승격). 

    맨유 뿐 아니라 프리미어리그의 명문팀인 아스널과 리버풀도 강등 경력이 있습니다. 1893~94 시즌, 2부리그에서 출발한 리버풀은 그 해 바로 1부리그에 승격한 후 3차례 강등, 총 10시즌을 2부리그에서 보냈습니다. 리버풀과 같은 시즌 2부 리그로 시작한 아스널은 1904~05시즌 후 1부리그에 승격됐고, 1913~14시즌 2부리그 강등된 후 전쟁으로 중단된 프리미어리그가 1919~1920시즌 재개될 때 다시 1부리그에 합류했습니다.

    Q> 박지성도 강등 경험이 있나요?

    A> 네. 박지성에게도 뼈아픈 강등 경험이 있습니다. 

    2000년 J-리그 교토퍼플상가에서 뛰던 시절인데요, 이 때 강등돼 박지성은 J-2리그에서 한 시즌을 보내게됩니다. 하지만 강등 첫 해 현 일본 대표팀 간판 미드필더인 엔도 야스히토·미우라 카즈요시 등과 J-2리그 우승컵을 들어올렸습니다. 

    박지성은 외국인 용병이라서 다른 J1리그 1부리그로 이적도 가능했지만 교토에 남는 편을 선택했습니다. 그런 우직한 면이 지금의 박지성을 있게 한 원동력 아닐까요. 

    이듬해 교토퍼플상가가 다시 1부리그 복귀한 후 박지성은 2003년 네덜란드 아인트호벤으로 이적하게 되는데요 계약기간이 하루 지난 2003년 1월 1일 일왕배 결승전에서 그는 1골 1도움을 기록, J-리그 역사상 가장 멋지게 팀을 떠난 선수로 기록됩니다. 교토 팬들이 붙여준 박지성의 별명은 쿄토의 별입니다. 

    Q> 창단 후 단 한 번도 강등안된 팀들도 있나요?

    A> 스페인 프리메라리가의 레알 마드리드, 바르셀로나, 애슬레틱 빌바오 등 3개 팀은 1928~29시즌 리그 출범 이래 단 한 번도 강등을 당한 적이 없습니다. 

    또 인테르 밀란도 이탈리아 세리에A팀 중 유일하게 강등 전력이 없는 팀입니다. 본래 세리에A의 유벤투스도 모든 시즌을 세리에A에서만 보냈지만, 2006~07시즌 터져나온 승부조작 스캔들로 세리에B로 강등당했죠. 성적으로 강등당한 건 아니지만, 어쨌든 클럽 역사상 첫 강등입니다. 

    Q> EPL 승격팀들의 생존율은 얼마나 되나요?
     
    A> 프리미어리그 승격 팀들의 생존율은 그다지 높지 않은 편입니다. 1992년 프리미어리그 출범 이후 2006~2007시즌까지 15시즌동안 승격팀들의 첫 시즌 생존률은 50%였습니다. 

    총 44개 팀(팀간 중복 포함)이 프리미어리그로 승격했고, 그 중 22개 팀이 첫 해에 다시 강등당했습니다. 올시즌 승격한 팀들은 헐시티의 성적에 평균 생존율 이상의 성적이 좌우됩니다.

    웨스트브롬위치는 강등이 확정된 상태고, 스토크시티는 리그 11위에 올라 강등권을 완전히 벗어났습니다. 승점 35점으로 리그 17위에 랭크된 헐시티는 26일 마지막 경기에 따라 강등 여부가 결정됩니다. 

    온누리기자 [nuri3@joongang.co.kr]
    posted by 좋은느낌/원철
    2009. 5. 21. 10:24 취미/운동
    바티스투타 (피오렌티나) 11경기 연속골…동상 세워져

    아르헨티나 출신의 가브리엘 바티스투타(40)는 이탈리아에서 ‘그라운드의 마지막 로맨티스트’로 불린다. 그럴만한 까닭이 있다. 

    그는 1991년 보카 주니어스에서 이탈리아 세리에A 피오렌티나로 이적했다. 이적 첫 해부터 13골을 넣으며 피렌체 시민에게 자신의 이름을 각인시켰다. 그러나 피오렌티나는 바티스투타의 꾸준한 활약에도 불구하고 93년 강등을 피하지 못했다. 

    당시 대부분의 언론이 바티스투타의 이적을 보도했음에도 불구하고 그는 팀에 남아 의리를 지켰다. 그리고 피오렌티나를 다시 세리에A로 승격시킨 94~95시즌에는 개막전 이후 11경기 연속 골이라는 대기록과 함께 26골로 당당히 득점왕에 올랐다. 

    바티스투타를 향한 피렌체 시민들의 사랑은 더욱 뜨거워졌다. 피오렌티나 경기장 앞에는 그의 동상이 세워졌다. 

    그러나 그는 2000년 피오렌티나를 떠날 수밖에 없었다. AS로마는 바티스투타의 영입을 위해 3000만 유로(약 500억 원)의 이적료를 제시했다. 재정난을 겪던 피오렌티나는 이를 거부할 수 없었다. 바티스투타의 유니폼이 바뀌었다고 피렌체를 향한 마음까지 변한 것은 아니었다. 

    이적 첫 해 그는 피오렌티나전에서 결승골을 터뜨렸다. 로마의 모든 선수가 환호하던 순간 골을 터뜨린 바티스투타는 오히려 눈물을 보였다. 그는 경기 후 “승리해서 기쁘긴 하지만 피오렌티나를 무너뜨린 사람이 나라는 게 가슴이 아프다”고 말해 ‘그라운드의 마지막 로맨티스트’라는 별명을 얻었다. 

    네드베트(유벤투스) ‘두개의 심장’사나이…지성 롤 모델

    2006년 5월. 이탈리아가 발칵 뒤집어졌다. 이탈리아 세리에A 최다 우승기록(27회)을 갖고 있던 유벤투스와 축구협회, 심판들이 연루된 승부조작 스캔들이 발각돼 검찰의 대대적인 수사가 벌어졌기 때문이다. 결국 유벤투스는 2006~07시즌을 ‘승점-9점’의 핸디캡까지 안은 채 세리에B에서 시작하게 됐다. 

    파비오 카펠로 감독은 물론 이브라히모비치·비에이라·튀랑 등 유벤투스의 주축들은 새로운 팀을 찾아 떠났다. 그러나 꿋꿋이 의리를 지킨 이들도 있었다. 

    파벨 네드베드(37)는 첼시와 토트넘 등 프리미어리그 팀들의 끊임없는 구애에도 불구하고 잔류를 선택했다. 그는 “유벤투스와 함께할 수 있다면 세리에A든 세리에B든 상관없다”고 말해 팬들을 감동시켰다. 

    다행히 유벤투스의 악몽은 오래가지 않았다. 유벤투스는 세리에B에서 한 시즌을 보낸 뒤 2007~08시즌 세리에A 승격에 성공했고 그 중심에는 네드베드가 있었다. 

    그는 올 시즌에도 건재함을 과시했다. 37세의 나이에도 불구하고 ‘두 개의 심장을 가진 사나이’라는 평가를 받는 사나이. 엄청난 활동량으로 종종 박지성의 롤 모델로 언급되기도 하는 그는 이번시즌을 마친 뒤 은퇴하겠다고 선언한 상태다. 

    테베스(웨스트햄) 마지막 2경기서 3골 ‘구세주’

    카를로스 테베스(25·맨유)의 분쟁 사례는 프로 구단이 리그 잔류에 얼마나 목을 매고 있는지 단적으로 보여준다. 2006년 코린티안스(브라질)에서 잉글랜드 프리미어리그의 웨스트햄으로 입성한 테베스는 시즌 막판 웨스트햄의 영웅이 된다. 

    시즌 초반 기대 이하였지만 강등 여부가 결정되는 리그 마지막 2경기에서 3골을 뽑아내 웨스트햄을 구해냈다. 맨유의 유니폼을 입고 있는 지금도 웨스트햄 원정 경기에 나서면 웨스트햄 팬들의 박수를 받는 이유다. 

    웨스트햄이 기사회생하는 사이 16위였던 셰필드 유나이티드는 위건과의 최종전에서 패해 18위로 내려앉아 강등되고 말았다. 사실 테베스는 계약당시 규정위반으로 소문이 자자한 선수였다. 프리미어리그 규정상 당사자인 구단 이외의 제3자 개입을 금지한다. 구단 이외의 선수 소유권을 인정하지 않기 때문이다. 셰필드는 이 사실을 공론화하며 웨스트햄에 손해 배상을 청구했다. 

    '불법선수로 잔류에 성공한 웨스트햄 때문에 강등을 당해 손해가 막심하다'는 내용이었다. 2년간 끌어온 양측의 분쟁은 3월 웨스트햄이 향후 5년간 2000만 파운드(약 384억 원)를 배상하기로 하고 타협을 봤다. 하지만 지금까지 프리미어리그에 남아 있는 웨스트햄은 테베스로 인해 배상금과 비교할 수 없는 이득을 본 셈이다. 프리미어리그는 연간 중계권료 수익만 약 400억 원에 이른다. 

    이정찬 인턴기자
    posted by 좋은느낌/원철
    2009. 5. 21. 10:20 취미/운동
    잉글랜드 프리미어리그에서는 맨체스터 유나이티드가 정상을 밟으며 프리미어리그 3연패라는 명예를 누렸다. 

    그러나 더 뜨거운 전쟁이 아직 남아있다. 잉글랜드 프리미어리그 잔류를 위한 생존 경쟁이다. 경기 결과에 따라 1000억 원이 왔다 갔다 한다. 그래서 강등이 결정되는 경기는 흔히 '1000억 전쟁'으로 통한다. 



    뉴캐슬·헐시티, 25일 경기로 1부 탈락 여부 판가름

    20개 구단이 각축전을 벌이는 잉글랜드 프리미어리그에서는 매년 18~20위까지 하위 3개 팀이 챔피언십리그로 강등된다. 이 빈자리를 챔피언십리그의 1, 2위 두 팀과 챔피언십리그 3~6위 플레이오프에서 살아남은 한 팀이 채우게 된다. 

    챔피언십으로 강등될 경우 일단 약 400억 원에 이르는 프리미어리그 방송 중계권을 더 이상 받지 못하게 된다. 또 스폰서십과 각종 광고 수익도 크게 줄어 총 손실액은 1000억 원으로 추산된다. 

    올해는 김두현이 속한 웨스트브롬위치 알비온(승점 31)은 마지막 경기 결과와 상관없이 일찌감치 강등이 결정됐다. 16위 선덜랜드, 17위 헐시티, 18위 뉴캐슬 유나이티드, 19위 미들즈브러 등 4개 팀이 살얼음판 위를 걷고 있다. 이들의 운명은 25일 0시 일제히 킥오프하는 2008~2009 잉글랜드 프리미어리그 최종전에서 결정된다. 

    16위 선덜랜드는 가장 유리한 처지지만 히딩크가 이끄는 강호 첼시와 마지막 경기라는 게 걱정거리다. 

    17위 헐시티는 맨체스터유나이티드를 홈으로 불러들여 최종전을 치른다. 헐시티로서는 버거운 상대지만 맨유는 이미 리그 우승을 확정한 터라 헐시티 전에는 2군들을 중심으로 출전할 전망이다. 맨유로서는 28일 로마 열리는 유럽축구연맹(UEFA) 챔피언스리그 결승전에 전력을 쏟아부어야 하기 때문이다. 창단 104년 만에 프리미어리그에 처음 입성한 헐시티는 리그 초반 한 때 3위까지 올랐다. 그 기세를 살리지는 못했지만 프리미어리그 첫해에 잔류에 성공하기만 해도 대성공이다. 

    18위 뉴캐슬 유나이티드는 최근 12경기에서 1승4무7패라는 극도의 부진을 보이고 있다. 뉴캐슬의 전설적인 스타 출신인 앨런 시어러 감독은 지난 4월 위기에 빠진 팀의 지휘봉을 잡았다. 시어러 감독은 "맨유가 꼭 헐시티를 잡아주기 바란다"며 극적인 강등권 탈출을 꿈꾸고 있다. 

    19위 미들즈브러는 웨스트햄과 마지막 경기를 치른다. 두 팀 모두 일단 승리를 거둔 후 다른 팀 경기 결과를 살펴야 하는 힘겨운 상황이다. 

    울버햄·버밍엄 1부 승격
    강등되는 팀이 있으면 승격의 기쁨을 만끽하는 팀도 있다. 이번 시즌 챔피언십리그에서는 울버햄프턴과 버밍엄이 나란히 1, 2위로 프리미어리그에 직행했다. 번리와 쉐필드 유나이티드는 프리미어리그 승격의 마지막 한 자리를 놓고 오는 25일 오후 11시 웸블리에서 단판 승부를 펼친다.



    이해준 기자 [hjlee72@joongang.co.kr]
    posted by 좋은느낌/원철
    2009. 5. 19. 20:04 개발/Oracle

    http://radiocom.kunsan.ac.kr
    오라클 리스너(Listener)는 네트워크를 이용하여 클라이언트에서 오라클 서버로 연결하기 위한 오라클 네트워크 관리자이다. 만약 로컬 데이터베이스가 아니고 네트워크로 연결된 원격 데이터베이스 서버에 연결하려면 원격 데이터베이스 서버는 그 리스너를 기동해야 한다. 즉, 서버가 클라이언트의 요청을 들을 수 있도록 그 리스너를 시작하는 것이다. 이러한 리스너의 시작과 종료, 또 그 상태를 확인하는 오라클 데이터베이스 관리 툴이 바로 오라클 리스너(lsnrctl)이다. 
    디폴트 리스너 이름은 LISTENER 이지만, 이 이름은 $ORACLE_HOME/network/admin/listener.ora 파일에서 리스너 이름을 변경할 수 있다.
    【예제】
    $ lsnrctl help
    The following operations are available
    An asterisk (*) denotes a modifier or extended command:
     
    start               stop                status              
    services            version             reload              
    save_config         trace               spawn               
    change_password     quit                exit                
    set*                show*               
     
    $ lsnrctl start
     
    $ lsnrctl stop
     
    $ lsnrctl status
    
    【예제】
    $ ls -l network/admin/listener.ora
    -rw-r--r--   1 oracle   oinstall     599 Jan  7 13:15 network/admin/listener.ora
    $ cat network/admin/listener.ora
    # listener.ora Network Configuration File: /export/home0/oracle/app/oracle/product/10.2.1/network/admin/listener.ora
    # Generated by Oracle configuration tools.
     
    SID_LIST_LISTENER =
      (SID_LIST =
        (SID_DESC =
          (SID_NAME = PLSExtProc)
          (ORACLE_HOME = /export/home0/oracle/app/oracle/product/10.2.1)
          (PROGRAM = extproc)
        )
      )
     
    LISTENER =
      (DESCRIPTION_LIST =
        (DESCRIPTION =
          (ADDRESS_LIST =
            (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC))
          )
          (ADDRESS_LIST =
            (ADDRESS = (PROTOCOL = TCP)(HOST = jinpo.kunsan.ac.kr)(PORT = 1521))
          )
        )
      )
     
    $ 
    
    또 다른 방법으로 오라클 리스너는 오라클 홈의 bin 디렉토리에 위치하며 리스너를 실행하면, 리슨너 프롬프트인 LSNRCTL>이 출력된다. 이때 도움말이 필요하다면 HELP를 입력하여 도움을 받을 수 있다. 이러한 오라클 리스너의 명령어 중 START는 오라클 리스너를 시작하고, STOP는 오라클 리스너를 종료하는 명령어이다. STATUS는 시작된 오라클 리스너의 상태를 확인하는 명령어이며, SERVICES는 현재 시작된 서비스의 수를 출력하는 명령어이다.
    【예제】
    $ lsnrctl
    LSNRCTL for Solaris: Version 10.2.0.1.0 - Production on 02-SEP-2007 15:47:03
     
    Copyright (c) 1991, 2005, Oracle.  All rights reserved.
     
    Welcome to LSNRCTL, type "help" for information.
     
    LSNRCTL> help
    The following operations are available
    An asterisk (*) denotes a modifier or extended command:
    
    start               stop                status
    services            version             reload
    save_config         trace               spawn
    dbsnmp_start        dbsnmp_stop         dbsnmp_status
    change_password     debug               test
    quit                exit                set*
    show*
    
    오라클 리스너 명령어의 세부 사항은 다음과 같다.
    
    start [listener_name]start listener
    stop [listener_name]stop listener
    status [listener_name]get the status of listener
    service [listener_name]get the service information of the listener
    version [listener_name]get the version information of the listener
    reload [listener_name]reload the parameter files and SIDs
    save_config [listener_name]saves configuration changes to parameter file
    trace OFF | USER | ADMIN [listener_name]set tracing to the specified level
    spawn [listener_name] spawn_alias
    [(ARGUMENTS='arg0, arg1,...')]
    change_password [listener_name]changes the password of the listener
    quit | exitexit LSNRCTL
    오라클 리스너 명령어 중에서 set과 show 명령어의 쓰임새는 다음과 같다. 【예제】 LSNRCTL> help set The following operations are available after set An asterisk (*) denotes a modifier or extended command: password rawmode displaymode trc_file trc_directory trc_level log_file log_directory log_status current_listener connect_timeout startup_waittime use_plugandplay direct_handoff save_config_on_stop LSNRCTL> help show The following operations are available after show An asterisk (*) denotes a modifier or extended command: rawmode displaymode trc_file trc_directory trc_level log_file log_directory log_status current_listener connect_timeout startup_waittime snmp_visible use_plugandplay direct_handoff save_config_on_stop LSNRCTL>
    posted by 좋은느낌/원철
    2009. 5. 18. 19:40 개발/Java
    좋은 링크를 발견해서 그대로 따라 했더니 잘 됐습니다.
    http://news.softpedia.com/news/How-to-Install-Java-in-Fedora-Core-6-39724.shtml
    학교 인터넷이 느린건지 접속이 상당히 느리네요.

    1. 설치할 jdk(or jre) 다운로드
    rpm 버전이 아니라 그냥 self-extracting 파일입니다.
    사용자 삽입 이미지

    2. 설치할 폴더로 파일 이동
    mv jdk-6u1-linux-i586.bin /opt

    3. 설치할 폴더로 이동하여 권한 설정을 변경합니다.
    cd /opt
    chmod +x jdk-6u1-linux-i586.bin

    4. 설치합니다.
    ./jdk jdk-6u1-linux-i586.bin

    5. 다운 받은 파일 제거 합니다.
    rm -rf jdk-6u1-linux-i586.bin

    6. 파이어폭스의 플러그인에서 사용하는 java의 링크를 변경합니다.
    ln -s /opt/jdk1.6.0_01/jre/plugin/i386/ns7/libjavaplugin_oji.so /usr/local/firefox/plugins/libjavaplugin_oji.so
    자세한 경로는 저와 다를 수 있습니다. 각각 자바 설치 폴더와 파이어폭스 설치 폴더로 변경해 주시면 됩니다.

    7. 패스 설정
    vi /etc/profile.d/java.sh
    편집기 열고 다음과 같이 패스를 넣어 줍니다.
    export J2RE_HOME=/opt/jdk1.6.0_01/jre
    export PATH=$J2RE_HOME/bin:$PATH

    8. 위에서 만든 파일을 사용하도록 합니다.
    source /etc/profile.d/java.sh

    9. 패스 설정 확인
    which java
    명령으로 방금 설치한 java 디렉토리가 나오는지 확인합니다.

    10. 시스템에서 사용할 java 변경
    /usr/sbin/alternatives --install /usr/bin/java java /opt/jdk1.6.0_01/jre/bin/java 2
    /usr/sbin/alternatives --config java
    마지막 줄에서 선택 가능한 java가 두 개 나올 것 입니다. 이 때 2 를 입력합니다.

    11. 변경 됐는지 확인
    /usr/sbin/alternatives --display java

    12. 마지막으로 자바 버전 확인
    java -version1
    posted by 좋은느낌/원철
    2009. 5. 13. 17:21 개발/Oracle
    instr(object_name,'abcd')>0

    where 절 밑에  object_name like '%abcd%' 로 검색하는 것보다 

    instr(object_name,'abcd') > 0 로 검색하면 더 빠르다..
    posted by 좋은느낌/원철
    2009. 5. 13. 11:08 개발/Oracle
    SGA - System Global Area

    오라클이 사용하는 글로벌 메모리영역
    쿼리가 발생하면 이 영역에 해당 데이터가 있는지 확인하고 있으면 이 영역에서 읽어간다..
    존재하지 않으면 디스크에서 읽어서 SGA에다가 옮긴 후 SGA에 있는 데이터를 읽어간다..


    System Global Area (SGA) - Overview

    SGA refers to a Shared Global Area. As the term global implies, this area is accessible to all Oracle processes and users. Each instance will have its own SGA. Oracle processes and users must share large amounts of data. If all of the processes had to get the data from the disk, the IO load would soon render response times that would be totally unacceptable. To prevent this, Oracle uses Global Memory areas, that is, CPU memory. This memory is dedicated to use for Oracle alone. The SGA contains data buffer areas, redo log buffers and the shared pool (context areas). Each area is important to the database overall performance. On Oracle8 an additional area the large pool is also configured.

    The Shared pool context areas and Database buffers provide immediate access to data that has been pre-read from either the Data Dictionary tables or the data tables. The Oracle kernel process uses an LRU (Least Recently Used) algorithm to write data back to the disks. Data is never altered on the disks directly, but is altered in memory first.

    The redo buffers contain row change information, transaction commit history and checkpoint history. This data is written into the Redo logs and eventually to the Archive logs. A commit will force a disk write as will the filling of a redo log buffer or the reaching of a pre-defined checkpoint.

    The queue and request areas store data that is being transferred between processes such as servers and other Oracle processes. The shared SQL area stores all SQL statements in a parsed form. When a user or process issues a SQL command, the shared SQL area is checked to see if the command already exists in parsed form, if it does, this shared version is used. If the multi-threaded server option is utilized, some of the user process global area is also placed in the shared pool.

    Large Pool

    Oracle8 added an optional structure called the large pool. The large pool area is used for two main purposes:

    • Contains the User Global Area (UGA) when sessions are connected using MTS
       
    • Buffers for sequential file I/O

    Before Oracle8, Oracle stored MTS user connection information in the UGA structure of the shared pool. As the number of users would increase, it was possible for the SGA to run out of space. This additional memory requirement imposed by the use of MTS would reduce the shared pool memory available for the data dictionary cache and the library cache. Oracle now uses the large pool for the session's UGA if the DBA has configured it. The large pool is protected by the shared pool latch and does not use any LRU (least recently used) algorithm to manage space. Therefore, memory must be allocated and freed by each session. An ORA-4031 message will occur if the large pool runs out of memory. You can see the space usage of the large pool by querying the V$SGASTAT view.

    Another use of the large pool is as a memory buffering area for slaved DB writers. You use the writers to attempt to mimic asynchronous I/O on various systems that do not provide this feature. Check your system's specific documentation to determine if you might benefit from multiple DB writers.

    To configure the large pool in the init.ora, use the LARGE_POOL_SIZE and LARGE_POOL_MIN_ALLOC parameters. The values can be expressed in kilobytes (KB) or megabytes (MB). Keep in mind that in allocating these structures, you are allocating additional memory to the SGA. Be careful that you do not allocate the large pool so that memory starts paging out to disk, because this can have serious performance impacts.

    SGA Structure

    The SGA is divided into the following sections:

    The DC_ parameters are internally controlled and the DBA cannot control how the cache is partitioned. The cache size is determined empirically from the SHARED_POOL_SIZE parameter.

    The Shared pool is a shared resource area that stores the cache information and the parsed images of SQL and PL/SQL procedures, packages and triggers. The cache area can be monitored and if poor hit ratio statistics are shown, increasing the init.ora SHARED_POOL_SIZE parameter will help reduce it. In addition the view V$LIBRARYCACHE helps to monitor the parsed images.

    Multiple Buffer Pools

    The way objects use blocks in the SGA depends on the nature of the object (table, index, and so forth) and the way the object is used (for example, an object may be a small, static, but constantly used lookup table, or a large, static, but rarely used data warehouse table). The different usage characteristics of these objects often demand different types of storage. Some objects should be kept in memory as long as possible and others should be cleared out of memory soon after use. To deal with these types of situations, Oracle8 provides a method of allowing more granular control over the SGA storage of database blocks and how long blocks are maintained in memory. Oracle8 provides three pools for database data block storage:

    • Default buffer cache
       
    • KEEP buffer pool
       
    • RECYCLE buffer pool

    Each of these pools allows you to assign specific database objects to them and to retain the blocks from those objects using different retention criteria. The KEEP buffer pool and the RECYCLE buffer pool segment memory from the default buffer pool, so be careful that you do not leave the default buffer pool short of memory. DBAs may use the V$BUFFER_POOL view to monitor the various buffer pool settings currently in use.

    The Default Buffer Pool

    The default buffer pool (still referred to as the database buffer cache) is always allocated in an Oracle database. To allocate memory to the default buffer pool, set the number of database buffer blocks you want the cache to be and do so by setting the DB_BLOCK_BUFFERS setting in the init.ora parameter file. The total size of this cache then is calculated as DB_BLOCK_BUFFERS * DB_BLOCK_SIZE. The LRU algorithm manages the data blocks in the default buffer pool.

    The KEEP Buffer Pool

    A CACHE option is available on database tables. This option causes database blocks that are read in from a table during a full table scan to be put onto the MRU (most recently used) end of the LRU (least recently used) list, as opposed to the LRU end. Thus, the data blocks associated with that table remain in the database buffer cache for a longer period of time before being aged out. The idea is to allow for as close to a 100 percent cache hit ratio as possible on these often-hit, smaller tables. The KEEP buffer pool gives you a dedicated segment of database buffer cache memory in which to load the blocks of these tables. Typically, these are smaller tables, such as lookup tables.

    You can set the BUFFER_POOL_KEEP parameter in init.ora to reserve part of the database buffer cache for pinned data blocks. Once the KEEP buffer pool is created, you can assign objects to this pool, and if the pool is sized properly, the data blocks from these objects will remain in memory. You must exercise caution when setting up the KEEP buffer pool. Ensure that you allocate only enough memory to store the blocks you wish kept in the buffer pool, and yet not over-allocate to the pool memory that will go unused. You determine how much memory to allocate to the pool by adding up the sizes of all the objects you intend to assign to the pool. Keep in mind that as you allocate memory to the pool, you reduce the amount of memory available in the database buffer cache to the default pool. If you undersize the pool, objects will be aged out using the LRU algorithm, as with the default buffer pool. An example of assigning a table to the KEEP buffer pool is shown below.

    CREATE TABLE small_table
     (pk_id NUMBER NOT NULL PRIMARY KEY,
     table_info VARCHAR2 NOT NULL)
    STORAGE (INITIAL 1M, NEXT 1M, BUFFER_POOL KEEP)

    The RECYCLE Buffer Pool

    The RECYCLE buffer pool's purpose is to store memory blocks that are not likely to be reused again soon. In the case of very large objects, access to individual blocks may be very random and scattered. In these circumstances, you may wish to assign such objects to the RECYCLE buffer pool.

    It is important not to size the RECYCLE buffer pool too small. Doing so may cause blocks to age out of the pool before an application or SQL statement uses them completely. To configure the RECYCLE pool, set the BUFFER_POOL_RECYCLE parameter in the init.ora file.

    If the block is aged out before the transaction is done with it, it needs to be re-read, causing more I/O. You can determine if this is happening by using one of the trace methods (for example, turning on trace and using tkprof to format the output trace file). To do so, compare disk accesses that occur in the default pool to disk access occurring in the RECYCLE buffer pool. In both cases, disk accesses should be the same. If the statement that ran and that was using the RECYCLE buffer pool has more disk accesses, you may conclude that the pool is too small. Another method of monitoring the pool is to monitor the free buffer waits and log file sync statistics. If either of these starts to grow after you allocate the RECYCLE buffer pool, it may mean that you have not allocated enough memory to the pool.

    The following is a guide for determining which objects should fit in the RECYCLE buffer pool:

    • A good candidate for a segment to put into the RECYCLE buffer pool is one that is at least twice the size of the default buffer pool and has incurred at least a few percent of the total I/Os in the system. 
       
    • A good candidate for a segment to put into the KEEP pool is one that is smaller than 10 percent of the size of the default buffer pool and has incurred at least 1 percent of the total I/Os in the system.
       
    • Calculate the ratio of blocks for a segment of the object in question that is used frequently to those used rarely. For that object, count the number of blocks that exist in the hot half of the cache (the MRU end) to the number of blocks in the cold half (the LRU end). If the ratio for a segment is close to 1, the segment may be a good candidate for the RECYCLE cache. If the ratio is high (perhaps 3), the segment might be a good candidate for the KEEP cache.

    An example of assigning a table to the RECYCLE buffer pool is shown below.

    CREATE TABLE small_table
     (pk_id NUMBER NOT NULL PRIMARY KEY,
     table_info VARCHAR2 NOT NULL)
    STORAGE (INITIAL 1M, NEXT 1M, BUFFER_POOL RECYCLE)

    SGA Fixed and Variable Portions

    The fixed portion of the SGA refers to the area unaffected by the INIT{sid}.ORA parameter values. The fixed portion may however vary between Oracle versions because of additional INIT{sid}.ORA parameters in the newer versions. This size can also vary between different Unix platforms due to different alignment Procedures. The fixed component of SGA is not tunable.

    The variable portion of the SGA consists of arrays of variables that are allocated based upon the INIT.ORA parameters.

    The list below states the impact that different INIT.ORA parameters have on the variable portion of the SGA:

    • DB_FILES - The lower the value of this parameter, the less the space needed. If this is set to 10 the gain in the space is about 6240 Bytes.
       
    • DB_FILE_MULTIBLOCK_READ_COUNT - The higher the value for this parameter, the less space needed.
       
    • All Dictionary cache parameters ( i.e. all DC_XXX Paratamers ) - Space needed for additional values of these parameters is not too high.
       
    • DDL_LOCKS - Space needed for additional value of 100 for this parameter is ~ 5.0k.
       
    • DML_LOCKS - Space needed for additional value of 100 for this parameter is ~ 9.76K.
       
    • ENQUEUE_RESOURCES - Space needed for additional value of 10 for this parameter is ~ 0.7k.
       
    • PROCESSES - Space needed for additional value of 10 for this parameter is ~ 19.5k.
       
    • ROW_CACHE_ENQUEUES - Space needed for additional value of 100 for this parameter is ~ 3.5K
       
    • SEQUENCE_CACHE_ENTRIES - Space needed for additional value of 10 for this parameter is ~ 1.17k
       
    • SEQUENCE_CACHE_HASH_BUCKETS - Space needed for additional value of 10 for this parameter is ~ 0.08k
       
    • SESSIONS - Space needed for additional value of 10 for this parameter is ~ 5.3K
       
    • TRANSACTIONS - Space needed for additional value of 10 for this parameter is ~ 0.85K.
       
    • TRANSACTIONS_PER_ROLLBACK_SEGMENT - More space is needed for lower values of this parameter

    Data Block Buffers

    The data block buffers are a cache in the SGA used to hold the data blocks read from the data segments in the database (e.g., tables, indexes, and clusters). The size of the data block buffer cache is determined by the INIT.ORA parameter DB_BLOCK_BUFFERS.

    The data block buffer cache is fixed in size and is usually smaller than the space used by database segments. This means it cannot hold all of the database's segments in memory at one time. The SGA retains the information stored in its cache buffers in accordance with the Least Recently Used (LRU) algorithm. The LRU algorithm determines what objects haven't been used for a given period of time and allows those objects to be over-written as needed to make way for additional data.

    Dictionary Cache

    The dictionary cache is used to store information about the database objects. This includes:

    • User account data
       
    • Datafile names
       
    • Segment names
       
    • Extent locations
       
    • Table descriptions
       
    • Privileges

    When any of this information is needed by the database, that data dictionary tables are read and the data is returned and stored in the SGA (in the dictionary cache).

    The dictionary cache is also managed using the LRU algorithm. The dictionary cache is part of the shared SQL Pool and is managed internally by the database. The size of the cache is set via the init.ora SHARED_POOL_SIZE parameter.

    Care should be given not to define the dictionary cache too small. This will result in the database repeatedly querying the data dictionary tables for the information it requires. These are known as recursive hits and are much slower than queries against the dictionary cache in memory.

    Redo Log Buffer

    Redo log files contain entries that describe the changes that have been made to the database. These entries are used in roll-forward operations during a database recovery. Before the entries are written to the online redo log files, they are first cached in the SGA. This area of the SGA is known as the redo log buffer.

    The size of the redo log buffer is set via the LOG_BUFFER parameter in the init.ora file.

    Click Here for additional information on Redo Log configuration.

    Shared SQL Pool

    The shared SQL pool is used to store the Dictionary Cache as well as information about SQL statements that are being run against the database. This shared SQL information consists of the execution plan and parse tree for the SQL statement. This enables subsequent (identical) SQL statements to reuse the parse information to accelerate its execution.

    SGA Size

    The size of the SGA is controlled by buffer sizes, and the buffer sizes are controlled by the database block size, which is specified at database creation and cannot be changed without rebuilding the database. This usually defaults to 2 KB. We usually suggest at least 4KB, and in most cases 8 KB works best. If in doubt, set the block size to the largest supported on your system.

    The five major components of the SGA are the database buffers, log buffers, large pool, Java pool, and the shared pool The SGA also contains the redo log buffers. The ideal situation would be to size the SGA to hold the entire database in memory. For small systems, this may be a real situation; for most, it is not feasible. Therefore, you must decide how much to allocate. Many times, especially for development databases, this will be a rough guess. For systems already designed with detailed data storage estimates, it may be better defined. A general rule of thumb for a pure Oracle system (no other applications) is 50 percent to 60 percent of available RAM for your SGA. Note that for small databases this may be overkill. In general, we have found that sizing the SGA data block buffers (the product of DB_BLOCK_SIZE and DB_BLOCK_BUFFERS) to 1/50 to 1/100 of the total physical size of the database is a good starting point. Under Oracle8i, new default sizes in the supplied sample initialization file are more realistic, but in general will still be too small for most production databases, so use them with caution.

    Oracle provides tools to analyze buffer performance. Unfortunately, they can only be used once a system is operating and running under a normal load.

    If you have no idea whatsoever, make the buffer area at least 60 to 100 MB or so (you will usually outgrow the Oracle default rather quickly) for a database that is near 1 gigabyte in total physical size, and up to 400 MB for one that is around 20 gigabytes in size. For databases smaller than 1 gigabyte physical size, the Oracle defaults may be usable. Make the shared pool at least 20 to 40 MB (not the 9 MB it will default to).

    If you overspecify the shared memory size on NT or Open-VMS you may get into a situation known as swapping. This is where all or part of your application is swapped out to disk because physical memory just isn't large enough to hold it all. Needless to say, this has a very negative impact on performance. Usually overspecification of the SGA on UNIX will lead to not being able to start the database.


    posted by 좋은느낌/원철