DBCP 설정중 validationQuery를 할 수 있는데, 그 query에 넣어야 하는데, 아무것도 안넣으면, 다음과 같은 에러가 뜬단다.

헐~~ 왜 그런거 했어

 

http://www.techonthenet.com/oracle/errors/ora00900.php

 

 

 

Error:

ORA-00900: invalid SQL statement

Cause:

The statement that you've tried to execute is not a valid SQL statement.

Action:

The options to resolve this Oracle error are:
  1. This error commonly occurs when you are trying to create a procedure and the Procedural Option is not installed.

To determine if the Procedural Option has been installed, open an Oracle session using SQL*Plus. If the PL/SQL banner does not display, then you know that the Procedural Option has not been installed.

Below is what a sample PL/SQL banner looks like:

'DB' 카테고리의 다른 글

풀 쿼리 스캔의 악영향  (0) 2008.04.02
mytop mysql 모니터링 툴!  (0) 2008.04.02
RAC 구축  (0) 2008.03.06
오라클 테이블 내용 복구하기  (0) 2008.02.18
mysql 에서 root 암호 잃어버렸을 때  (0) 2007.12.31
Posted by '김용환'
,

RAC 구축

DB 2008. 3. 6. 03:06

오라클 10g를 사용하는데, RAC 구축과 관련한 이슈가 있어서 소개한다.

 

http://blog.naver.com/ukja?Redirect=Log&logNo=120041609632

 

지금은 오라클에서 해결한 상태이다.

 

 

오라클 10g만 RAC가 구축이 가능한데. 9i는 RAC 구축이 되지 않는다.

하지만, 3rd party 툴을 이용하면 RAC구축이 가능한다.

 

http://www.quest.com/shareplex-for-oracle/

 

 

'DB' 카테고리의 다른 글

mytop mysql 모니터링 툴!  (0) 2008.04.02
ORA-00900 에러 와 validationQuery  (0) 2008.03.06
오라클 테이블 내용 복구하기  (0) 2008.02.18
mysql 에서 root 암호 잃어버렸을 때  (0) 2007.12.31
mysql  (0) 2007.11.09
Posted by '김용환'
,

이 문제는 어쩌다가 일어난다. 혹시 이런 문제에 고생하는 분에게 힌트가 되었으면 한다.

 

문제

아파치의 RewriteRule을 이용하여 특정서버로 redirect를 하는데, 한쪽 서버에만 접근하는 문제가 발생했다.

A클래스 타입의 ip만 접근하고, B클래스 타입의 ip는 접근하지 않는다.

 

해결

아파치 내부에서 gethostbyname함수를 사용하도록 한다.

 

자세한 내용.
ipv6 의 스펙 문서 "Default Address Selection for IPV6"를 참조한다. ftp://ftp.rfc-editor.org/in-notes/rfc3484.txt
RFC3484 를 의거하면, DNS 에서 돌려주는(round robin) IP 가 어떤 variation 을 갖느냐에 따라서 한쪽으로 몰릴 수 있다.
다음은 RFC3484의 Rule 9이다.

 

Rule 9:  Use longest matching prefix.
   When DA and DB belong to the same address family (both are IPv6 or both are IPv4): If CommonPrefixLen(DA, Source(DA)) > CommonPrefixLen(DB, Source(DB)), then prefer DA.  Similarly, if CommonPrefixLen(DA, Source(DA)) < CommonPrefixLen(DB, Source(DB)), then prefer DB.

 

즉, 주어진 아이피에 따라  getaddrinfo메소드는  특정 ip대역만을 얻어오게 한다. 따라서 캐쉬 서버 한 대만 줄기차게 요청하는 문제가 생겼다.
(A클래스, B클래스의 ip가 존재하면, A클래스 ip만 준다.)

 

사실 사람들이 이미 고민을 하고 있다.
http://people.redhat.com/drepper/linux-rfc3484.html

내부 소스를 까보면, xor를 하고 있는 구조로 되어 있다.


glibc 의 rfc3484_sort 함수를 보면 다음과 같다.

static int
rfc3484_sort (const void *p1, const void *p2)
{
  const struct sort_result *a1 = (const struct sort_result *) p1;
  const struct sort_result *a2 = (const struct sort_result *) p2;

  ...

  /* Rule 9: Use longest matching prefix.  */
  if (a1->got_source_addr
      && a1->dest_addr->ai_family == a2->dest_addr->ai_family)
    {
      int bit1 = 0;
      int bit2 = 0;

      if (a1->dest_addr->ai_family == PF_INET)
        {
          assert (a1->source_addr.ss_family == PF_INET);
          assert (a2->source_addr.ss_family == PF_INET);

          struct sockaddr_in *in1_dst;
          struct sockaddr_in *in1_src;
          struct sockaddr_in *in2_dst;
          struct sockaddr_in *in2_src;

          in1_dst = (struct sockaddr_in *) a1->dest_addr->ai_addr;
          in1_src = (struct sockaddr_in *) &a1->source_addr;
          in2_dst = (struct sockaddr_in *) a2->dest_addr->ai_addr;
          in2_src = (struct sockaddr_in *) &a2->source_addr;

          bit1 = fls (ntohl (in1_dst->sin_addr.s_addr
                             ^ in1_src->sin_addr.s_addr));
          bit2 = fls (ntohl (in2_dst->sin_addr.s_addr
                             ^ in2_src->sin_addr.s_addr));
        }
      else if (a1->dest_addr->ai_family == PF_INET6)
         {

         ...

         }

      if (bit1 > bit2)
        return -1;
      if (bit1 < bit2)
        return 1;
    }

/* Rule 10: Otherwise, leave the order unchanged.  */
  return 0;
}

 

 

          bit1 = fls (ntohl (in1_dst->sin_addr.s_addr
                             ^ in1_src->sin_addr.s_addr));
          bit2 = fls (ntohl (in2_dst->sin_addr.s_addr
                             ^ in2_src->sin_addr.s_addr));

 

A클래스의 ip와 B클래스의 ip 소팅시, 항상 A클래스만 줄 수 있는 구조이다.

 

따라서 gethostbyname을 쓰도록 해서, 사용해야 한다. 아파치 설치시
/home/www/src/httpd-2.0.52/srclib/apr/include/arch/unix/apr_private.h 파일에서 해야할 일이 있다.
HAVE_GETNAMEINFO, HAVE_GETADDRINFO이 선언된 부분을 삭제한다.
sed  -i -e '/HAVE_GETADDRINFO/d' -e '/HAVE_GETNAMEADDR/d' srclib/apr/include/arch/unix/apr_private.h

이렇게 되면, 캐쉬서버를 여러 개를 볼 수 있어서 캐쉬서버가 문제가 없도록 할 수 있다.

 

이렇게 설치하고 나서 netstat를 하게 되면,

Posted by '김용환'
,

gethostbyname, getaddrinfo 관련 한 재미있는 소스이다.

 

 

cat gethostbyname.c


#include <netdb.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <netinet/in.h>

int main(int argc, char **argv)
{
    struct hostent     *myent;
    struct in_addr  myen;
    long int *add;

    printf ("%s\n", argv[1]);

    myent = gethostbyname(argv[1]);
    if (myent == NULL)
    {
        printf("ERROR : ");
        exit(0);
    }

    printf("%s\n", myent->h_name);

    while(*myent->h_addr_list != NULL)
    {
        add = (long int *)*myent->h_addr_list;
        myen.s_addr = *add;
        printf("%s\n", inet_ntoa(myen));
        myent->h_addr_list++;
    }
    return 0;
}
 

 

 

cat getaddr.c

#include <stdio.h>
#include <netdb.h>
#include <netinet/in.h>

int main(int argc, char **argv)
{
    struct addrinfo *res;
    char hostname[NI_MAXHOST];
    char addrstr[100];
    void *ptr;
    struct addrinfo hints;
    int error;

  memset (&hints, 0, sizeof (hints));
  hints.ai_family = PF_UNSPEC;
  hints.ai_socktype = SOCK_STREAM;
  hints.ai_flags |= AI_CANONNAME;


    printf("%s\n", argv[1]);
    if (error = getaddrinfo(argv[1], NULL, &hints, &res))
    //if (error = getaddrinfo(argv[1], NULL, NULL, &res))
    {
        printf("error using getaddrinfo: %s\n", gai_strerror(error));
    }

    if (res) {
        if (error = getnameinfo(res->ai_addr, sizeof(struct sockaddr), hostname, sizeof(hostname), NULL,0,0)) {
            printf("error using getnameinfo: %s\n", gai_strerror(error));
            return 0;
        }
    }


    while (res)
    {
      inet_ntop (res->ai_family, res->ai_addr->sa_data, addrstr, 100);

      switch (res->ai_family)
        {
        case AF_INET:
          ptr = &((struct sockaddr_in *) res->ai_addr)->sin_addr;
          break;
        case AF_INET6:
          ptr = &((struct sockaddr_in6 *) res->ai_addr)->sin6_addr;
          break;
        }
      inet_ntop (res->ai_family, ptr, addrstr, 100);
      //printf ("getaddinfo test : IPv%d address: %s (%s)\n", res->ai_family == PF_INET6 ? 6 : 4, addrstr, res->ai_canonname);
      printf("%s(%s)\n", addrstr, res->ai_canonname);
      res = res->ai_next;
    }

    freeaddrinfo(res);

}

 

 

 

 

Posted by '김용환'
,

버핏의 투자

Trend 2008. 2. 24. 11:11

1 사랑받고 있는 사람중에 자신이 실패 했다고 생각하는 이가 없고

   사랑 받지 못하면서 자신이 성공 했다고 말하는 이도 없다

 

2.나를 움직이는 것은 일의 결과 보다 일하는 과정에서 맛보는 재미와 열정이다.

 

3.골프에서 매일 홀인원을 한다면 골프를 오래 즐길수 없다.

 

4.명성을 쌓는데는 20년이 걸리지만 잃는데는 5분도 채 되지 않는다.

이를 진심으로 깨 닫는다면 분명 지금과는 다르게 행동 할것이다.

 

5.나는 내가 넘지못한 높은 높이의 막대를 뛰어 넘으려 하지 않는다.

충분히 넘을수 있는 낮은 막대를 넘으면 그만이다.

 

6오늘 비용을 절감하겠다는 관리자는 그다지 훌륭하다고 볼수없다.

오늘부터 숨쉬기 운동을 해야겠다는 말과 다를바 없다.

 

7.가끔은 빠른 두뇌회전 보다는 묵직한 엉덩이가 돈을 벌게 해준다.

'Trend' 카테고리의 다른 글

짧막한 발크리드 전기 리뷰  (0) 2008.03.21
구글 칼렌더 싱크  (0) 2008.03.18
linux find 샘플  (0) 2008.02.16
방화벽으로 웹 막기.  (0) 2008.02.12
Common Development and Distribution License (CDDL)  (0) 2008.01.21
Posted by '김용환'
,

나만의 차별적인 프레젠테이션 기법


1.프레젠테이션으로 얻을 수 있는 것을 강조하자
귀하게 내준 사람들에게 프레젠테이션 시간을 통해서 얻을 수 있는 것을 설명하자. 얻어갈 수 있는 것이 바로 프레젠테이션의 목적이다.


2. 재미없으면 하지 않는다.
남들이 내 준 시간을 좀 더 흥미진진하게 할 필요가 있다. 하품하면서 조는 프레젠테이션은 아무 의미없는 시간 낭비이다.

3. 끝까지 긴장한다.
긴장이 풀리는 순간 끝이다. 긴장감없으면 끝없이 나태해지는 것이 사람 마음이다. 성공적으로 하기 위해서는 상대방의 얼굴 모습까지도 캐치하여 속도와 방향성을 조절하는 것이 중요하다.

4. 항상 파격적이 되어라.
남들과 똑같은 프레젠테이션은 흥미를 잃게 한다. 파격적인 시도는 진보를 의미한다. 계속적인 자기 계발이 되는 것이다.

5. 자신감을 가진다.
자신감이 없으면 목소리와 억양이 작다. 또한 억양은 항상 일정하게 되어 듣는 이에게 졸음과 불편함을 줄 수 있다. 자신감은 상대방을 압도하는 리더십이라고 생각할 수 있다. 자신감을 통해서 상대방에게 나의 진의를 알려, 설득을 할 수 있다.

Posted by '김용환'
,

Why I love Perl

unix and linux 2008. 2. 20. 08:24

 

 

재미있는 펄 이야기~~~

해보시면 안다!!! 펄 공부는 잼있다~

 

http://aplawrence.com/Unixart/loveperl.html

 

Why I love Perl

This article is written for people who have at least some experience writing shell scripts or who have at least a basic understanding of another programming or scripting language. To understand it, you will need to have Perl installed so that you can test these ideas for yourself and see what happens.

I'm a fairly recent convert to Perl, having only started using it a few years ago. Switching to something new is always somewhat uncomfortable; there's new syntax to learn, and sometimes whole new ways of doing things. That was certainly the case with Perl, but the pain was offset by the sheer joy of being able to do so many formerly clumsy tasks so simply and elegantly.


 

Let's dispose of one thing first: I'm not a Perl expert. I'm not an expert at anything- there's just too many things in the world that catch my attention that I can never spend the time necessary to become really proficient at anything. So I am a Perl dabbler: I write a lot of my scripts with it, but I don't for a minute pretend that these are shining examples of Perl at its best.

However, I have learned a few things, and if you are getting ready to start using Perl, you might find my experiences useful.

If you haven't yet installed Perl on your SCO system, use your Skunkware CD or get it from Skunkware. Perl usually installs automatically on Linux systems.

SCO 5.0.6 now includes Perl, and free or low cost Perl ports for Windows are easily found on the web.

Those wonderful <>'s

Let's start with a really simple program that just emulates "cat".


 


#!/usr/bin/perl5
while (<>) {
  print $_;
}


Never mind that "$_" for now; we'll get to that later. For now, just accept that it's the line read. See those <> inside the ()'s? That's the entire magic. That will read data from standard input or from a file given on the command line. That means you can use this as a filter or give it an argument; all of these do the same thing:


 


cat.pl < somefile 
cat somefile | cat.pl 
cat.pl somefile


That's pretty cool all by itself. Most languages would make you jump through hoops to do just that. But here's the most wonderful part: you can give it multiple filenames


 


cat.pl file1 file2 file3


and those magic <>'s will just keep on reading with absolutely no effort on your part. If you don't need to, there's no reason to pay any attention at all to the arguments; Perl handles them for you.

If you do need to know when one file closes and another opens, the "eof" command will tell you. Try this with multiple files:


 


#!/usr/bin/perl5
while (<>) {
  print $_;
  print "--------------------------\n" if eof;
}


You can even get the file names if you want them:


 


#!/usr/bin/perl5
while (<>) {
  print $_;
  print "--- End of $ARGV ----\n" if eof;
}


Are you starting to like this? It gets better. Those angle brackets have more magic: they can read an entire file in one gulp. You can do this, for example:


 


#!/usr/bin/perl5
@files=<>;
print @files;


Everything got read into "@files", which is an array. Here we just printed it, but there's much more you can do.

There's more magic in those angle brackets, too. Take a look at this little snippet:


 


while (<[A-Z]*/*.html [a-e]*.html [g-z]*.html>) {
...
}


That loops through the names of files matched by the wildcards. What could be easier?

What if you actually want to open a specific file? Still easy:


 


open(MYFILE,".profile") or die "Can't open .profile";
while (<MYFILE>) {
...
}


That "open" isn't limited to files. Here's something you'll see a lot of:


 


open(MAIL,"|/usr/bin/mail myaddress\@mydomain.com");
print MAIL "Special message from a Perl program";
close MAIL;


In general, Perl goes out of its way to make things easy for you. Look at this sequence:


 


open(INFOFILE,"totalclicks");
$totalclicks=<INFOFILE>;
open(INFOFILE,"totalhits");
$totalhits=<INFOFILE>;
open(INFOFILE,"costperyear");
$costperyear=<INFOFILE>;


Did you notice that I didn't bother to "close INFOFILE"? Perl assumes that if you are opening the same filehandle again, you must want to close the file you had open previously, so it just does it- no whining, no crashing out, no nagging.

That's true throughout the entire language. As another example, Perl makes no hard and fast distinction betwwen numbers and strings that look like numbers. If you have "713" in a variable, you can treat it as a number or a string and Perl will do the right thing:


 


$whatisit="713";
$whatisit++;
print $whatisit;
# prints 714
print "\n";
$whatisit .= " apples";
print $whatisit;
# prints '714 apples'
print "\n";
$whatisit++;
print $whatisit;
# back to just a number again: 715
print "\n";


Easy arrays

Perl has two kinds of arrays, and you are going to love them. The first kind is the traditional type you might know from Basic or C; it's indexed by numbers. This should make sense to anyone who's worked with arrays in any other language:


 


@month=("Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec");
print "$month[11]\n";
# prints Dec (array starts at 0, which is Jan)


The other kind of array is a "hash". If you know "awk", you already know about these, but if not, this might give you the idea:


 


%names= (
"scotest" => "Unix Skills Test",
"linuxtest" => "Linux Skills Test",
"quickppp" => "PPP HOW-TO",
"ipfilter" => "IPFILTER Firewalls",
);
print $names{"scotest"};


At first, this is confusing, because we refer to the array in two different ways, using "@month" for the whole array and "$month[somenumber]" for a particular element. Hashes are worse, because that uses "%arrayname" when we're referring to the whole thing and "$arrayname{some_element}" for one element (notice the squiggly brackets).

Here's how I remembered the difference when I first started Perl. Square brackets are "square", or "conservative"- so they are the old, traditional arrays. An element is "at" a particular position in such an array, so "@" is its type. "Hash", on the other hand is all ground up- the brackets get distorted by the grinding, so they are squiggly. And if you use your imagination to squish an "@" symbol, you might get a "%".

None of that helps with learning to use the "$" sign when you want an element. You'll just have to get used to it.

If that was all there is to arrays, they'd be useful, but Perl gives you some great ways to loop through them. Traditional, numerically indexed arrays are easy, of course. But how do you run through all the elements in a hash array?


 


foreach (%names ) {
  print "$_\n";
}


That's all it takes. It works, but it's a little strange, and not very useful (try it). Of course, Perl has a better way:


 


foreach (keys %names ) {
  print "$_ is $names{$_}\n";
}


That's better, but this is better yet:


 


foreach (sort keys %names ) {
  print "$_ is $names{$_}\n";
}


And how about this?


 


foreach (reverse sort keys %names ) {
  print "$_ is $names{$_}\n";
}


Pattern Matching

Perl's pattern matching is an absolute joy. It can be a little confusing at first, but once the concept clicks in, it becomes natural, and so much easier than anything else you've ever worked with. If you are used to "sed" and"awk", Perl is those tools super-charged. Let's look through a file for a certain word:


 


while (<>) {
  print "$_" if /\bhello\b/i;
}


That "\b" is a neat little helper. It says that "hello" has to be at a "word boundary", which is not necessarily a space. It could be the beginning of a line, the end, or it could follow punctuation. The little "i" says "ignore case". There's more little modifiers like that, but I'm not going to cover them here.

In this case, the /\bhello\b/ tests against "$_" (which I still haven't fully explained). It can test any variable, though:


 


foreach $line (@files) {
  print $line if $line =~ /hello/i;
}


That weird little "=~" is what makes the match test work against $line. Did you notice the "do something if.." way of testing? You could also do:


 


if ( $line =~ /hello/i ) {
  print $line;
}


There's another thing to notice about that: I didn't use "$_". That's because it isn't available when I specifically say "foreach $line": the "$_" appears only when I don't specify a variable (as I did in the earlier examples).

There are many places where you can just assume "$_" will be available, but you do have to watch out for things like this that disable it.

Substitutions

Add an "s" in front and it starts working like "sed":


 


$line =~ s/hello/greetings/;


will change "hello" to "greetings" if it occurs in $line. But it's really much more powerful than that. I don't have the space in this article to go into the incredible power of Perl's pattern matching and substitution features, but believe me, it is just incredible. I'll just give one little example without explanation:

Some of you may use "uncgi" for your cgi scripts. That's fine, but it's so easy to do in Perl. Here's what I use for POST scripts:


 


#!/usr/bin/perl5
$query=""; # simply to prevent warning in read about uninitialized
read (STDIN,$query,$ENV{'CONTENT_LENGTH'});
@pairs=split(/&/,$query);
foreach $keyv (@pairs) {
        ($key,$value)=split(/=/,$keyv);
        $value =~ tr/+/ /;
        $value =~ s/%([\dA-Fa-f][\dA-Fa-f])/pack ("C",hex($1))/eg;
        $formdata{$key}=$value;
        }
foreach $key (keys %formdata) {
 $$key=$formdata{$key};
}


That works very much like "uncgi". For example, if you have a form element called "search", its value will be in "$search", etc. It's that "$$key=" that pulls off that trick. But it's that


 


        $value =~ s/%([\dA-Fa-f][\dA-Fa-f])/pack ("C",hex($1))/eg;


that does most of the work. As I said, I'm not going to explain it here, but if you know what the POST method delivers to your script, you should really appreciate the power.

(Actually- it's even easier, because what you'd really use is the CGI module which means you don't have to worry about any of it, but this shows you how you COULD do such things.)

For scripts that get passed arguments on the command line, it's even easier: Perl stores all the arguments in an array called @ARGV. Therefor, you can refer to $ARGV[0] to get the first, you can extract the arguments and remove them from the array with something like


 


$first=shift @ARGV;
$second=shift @ARGV;


Or you can just run through the whole thing with


 


foreach (@ARGV) {
  print "$_;\n";
}


or:


 


print "$p\n" while ($p = shift @ARGV);


That's Perl: there's a dozen ways to do it, and you use what makes sense at the time.

Split and join

You have a file like this that you want to extract elements from:


 


field|more|stuff
one|this|that
two|the other|more data


Piece of cake:


 


while (<>) {
 @stuff=split /\|/, $_;
 print "$stuff[0] $stuff[2]\n";
}


The opposite of split is join:


 


while (<>) {
 @stuff=split /\|/, $_;
 $f=join "+",@stuff;
 print "$f\n";
}


That changes the "|" separators to "+"'s.

So much more

You could write useful programs with just the few little ideas you've learned here. That, is, in fact, one of the other things I love about Perl: you can get started using it with a very minimal understanding and with lots of things still confusing you. Many of the early Perl programs I wrote did things like this:


 


print "<p align=\"center\"><a href=\"/index.html\">
<img src=\"/image21.gif\" BORDER=0 WIDTH=69 
HEIGHT=76></a> <br><p align=center><font size=2>
<b>A.P. Lawrence Home</b></font>";


There's a lot of confusing quoting in that print statement, and (of course) there are easier ways to do it:


 


print <<EOF;
<p align="center"><a href="/index.html">
<img src="/image21.gif" BORDER=0 WIDTH=69 
HEIGHT=76></a> <br><p align=center><font size=2>
<b>A.P. Lawrence Home</b></font>
EOF


Or even:


 


print q?<p align="center"><a href="/index.html">
<img src="/image21.gif" BORDER=0 WIDTH=69 
HEIGHT=76></a> <br><p align=center><font size=2>
<b>A.P. Lawrence Home</b></font>?;


If you want to get started with Perl, you'll need some books. See these for starters:

Learning Perl
Programming Perl
Perl Cookbook
Advanced Perl

You may want to look at some of the other programming articles here; several of them are written with Perl:

Posted by '김용환'
,

http://www.latimes.com/sports/la-sp-dodrep18feb18,1,4997959.story?ctrack=1&cset=true

 

Park is happy to be where it all began

Jon Soohoo / EPA
Chan Ho Park, who started his career with the Dodgers, returned this spring to Vero Beach as a non-roster player in an attempt to earn a spot on the pitching staff.
Pitcher figures he might as well take his shot at reclaiming major-league glory in the place where he was once an All-Star.
By Dylan Hernandez, Los Angeles Times Staff Writer
February 18, 2008
VERO BEACH, Fla. -- This possibly being his last spring in baseball, Chan Ho Park figured that he might as well take his shot at reclaiming major-league glory in the place where he was once an All-Star.

The details of the contract didn't matter. He wanted to be a Dodger again.

The 34-year old Korean right-hander is back in Dodgertown for the first time in seven years. The man who once signed a five-year, $65-million contract with the Texas Rangers is in camp as a non-roster player who will earn $500,000 if he makes the team, and that's a big if, considering that he is one of 35 pitchers vying to be on the Dodgers' opening-day roster.

"I know it's not going to be easy," Park said.

But neither were the last six years, marked by repeated trips to the disabled list, a decline in the velocity of his fastball that used to be in the mid-90s and the constant reminders of failed expectations. He spent most of last season in the minors, posting earned-run averages of 5.57 and 6.21 with the triple-A affiliates of the New York Mets and Houston Astros, respectively.

Park said he considered walking away from baseball in recent years, but couldn't.

Raised in South Korea, he was taught never to quit, a trait that he now thinks derailed his once-promising career and nearly cost him his life.

Whenever he was hurt with Texas, he said, "I was trying to come back before I was 100% ready and I would get hurt again."

He lasted 3 1/2 seasons with the Rangers, posting a 22-23 record and 5.79 ERA.

But it was two years ago with the San Diego Padres that he barely averted disaster.

Finding massive amounts of blood in his stool in late July, Park had a stint on the disabled list but returned to action without discovering the source of the bleeding.

The bleeding returned on a day Park was scheduled to pitch and only an angry phone call from teammate Woody Williams convinced him to go to the operating table instead of the mound.

As it was, Park said, he lost half of his blood.

"[Williams] was yelling," Park recalled. "He said, 'Think about your family. You have a daughter on the way.' If I was single, I probably would've pitched. My wife and baby probably saved my life."

Doctors removed a small bulge in the small intestine, and, a week later, his wife, Rie, gave birth to their daughter, Elynne. Park's life was spared, but he wasn't sure if his career had been.

"I lost 20 pounds," he said. "I lost power. I felt weird. I wasn't sure if I could come back."

Park said he felt that way when he went to camp with the New York Mets last spring. He failed to make the opening-day roster, was called up once and pounded for seven runs in four innings in his only big-league start of the season. He was designated for assignment and signed to a minor-league deal by the Houston Astros, but never made their 40-man roster.

When the season ended, Park told his agent to get him a contract with the Dodgers, whatever the terms were.

Park risked losing an agreed-upon deal by pitching in the Olympic qualifiers for South Korea in the winter, but emerged from the games unscathed and signed a deal. For the first time in years, he said, he felt healthy.

Park will forgo the next round of Olympic qualifying in March to remain with the Dodgers, noting, "This could be my last chance in baseball." Asked if he might retire if he doesn't make the club, Park smiled and replied, "No comment."

He threw a side session on Saturday, with pitching coach Rick Honeycutt observing that his fastball was "fairly consistent" and changeup "pretty good," but that his breaking pitches required fine-tuning.

"There's some life to the ball coming out of his hand that maybe we haven't seen in a couple of years," Honeycutt said.

Park said he often imagines what it would be like to pitch at Dodger Stadium again.

"I picture it as much as I can so I can believe it," he said. "It's my dream."

Though it would've been financially impractical for him to not to have signed with the Rangers, he admitted to sometimes wondering how his career would've unfolded had he never left the Dodgers.

"Yeah, honestly, I've thought about it," Park said. "Maybe I wouldn't have gotten hurt.

"But I'm glad I went through what I went through. It made me focus better, made me stronger."

 

 

 

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

 

공부할만한 재미있는 문장

 

"But I'm glad I went through what I went through. It made me focus better, made me stronger."

 Park told his agent to get him a contract with the Dodgers, whatever the terms were

 

Raised in South Korea, he was taught never to quit, a trait that he now thinks derailed his once-promising career and nearly cost him his life.

'영어앤영문권' 카테고리의 다른 글

직장에서 쓰는 용어  (0) 2008.04.05
garbage disposal system(unit )  (0) 2008.04.05
굳은 얼굴  (0) 2008.04.05
죄송합니다. 나는 회의중입니다.  (0) 2008.04.05
미얀마 사태 - 야후  (1) 2007.09.29
Posted by '김용환'
,
org.apache.jasper.JasperException: Unable to compile class for JSP
at org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:572)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:303)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)

 

 

잘돌아가다가 이런  에러를 만나면.. 톰캣 컨테이너 문제일 수 있다.

 

배포된 서버에서 WEB-INF  디렉토리를 지우고, 다시 배포한 후, 재시작을 해보자..

 

바로 된다...^^

 

이런 경우는 정확한 이유를 찾는 것보다. 다른 일을 많이 하는 게 낫다. 지우고 다시 배포, 시작하기!

Posted by '김용환'
,

오라클 10g에서 모르고 지운 테이블 보고가 발생되었다.
delete BANK where itemcode = 'C14';

 

다음과 같이 복구.

insert into  BANK select * from BANK  as of timestamp(systimestamp - interval '60'minute);

'DB' 카테고리의 다른 글

ORA-00900 에러 와 validationQuery  (0) 2008.03.06
RAC 구축  (0) 2008.03.06
mysql 에서 root 암호 잃어버렸을 때  (0) 2007.12.31
mysql  (0) 2007.11.09
mysql 로그가 차면??  (0) 2007.10.20
Posted by '김용환'
,