oracleの最近のブログ記事

ほぇ??

 

なんで、今まで普通だったのに??っということで調査してみた

 

該当のプログラム抜粋

 

sub login {
    my $self = shift;
    my ($user, $pass) = @_;
    my $loginForm = "https://www.google.com/accounts/ServiceLoginBox?service=analytics&nui=1&hl=en-US&continue=http://ww
w.google.com/analytics/home/%3Fet%3Dreset%26hl%3Den-US";

        my $ua = $self->{ua};
        my $req = HTTP::Request->new (GET => $loginForm);
        my $res = $ua->request ($req);

    die "Request failed" if (!$res->is_success);

 

あー、analyticsのpluginで、is_successで、こけてるのね

 

URL変わった??ってことで、URLを直にブラウザで叩いてみると・・・

 

ちゃんと表示される・・・あれ??

 

Request failedだけじゃ、わからん!!

 

レスポンスコードも出してみる

 

    die "Request failed(". $res->code. ")" if (!$res->is_success);

 

結果は、「Request failed(501)」

 

501?????

 

ということで、チャチャっとググった感じで、以下のパラメータを変更してみた

 

SQL> ALTER SYSTEM SET SGA_TARGET=32M SCOPE=SPFILE;

システムが変更されました。

SQL> ALTER SYSTEM SET PGA_AGGREGATE_TARGET=8M SCOPE=SPFILE;

システムが変更されました。

 

そんで、SHUTDOWNして、STARTUPすると・・・

 

SQL> STARTUP
ORA-00093: pga_aggregate_target must be between 10M and 4096G-1

 

おーーーーーぃ、10Mないとダメなんかいな・・・

 

じゃぁ、最初から設定させんでくれよ・・・orz

 

ということで、色々試してみたww

 

こんなのすると、怒られます

 

SELECT user_id, COUNT(id) FROM TABLE WHERE user_id = '10';

 

まー、そのままですね

 

SELECT COUNT(id) FROM TABLE WHERE user_id = '10';

 

これが正解ww

 

まー、データが大きかったり、レコード数が多かったりで

起こることがあります。

 

対策というか、全件検索するようなバッチ処理は、

ちょこちょこ取得しましょう

 

    my @rs;
    my $r = 0;
    while(1) {
        my $from = $r * 50000 + 1;
        my $to = ($r + 1) * 50000;
        $sql = "SELECT id FROM (SELECT id, ROWNUM AS r FROM test) WHERE r >= $from AND r <= $to";
        $data = execute($sql);
        last if (scalar(@$data) <= 0);
        push(@rs, @$data);
        $r ++
    }

 

たとえば、こんな感じで

 

DISTINCT とか、GROUP BY で FOR UPDATE は使えませんねw

 

いじょ!!

INSERTの最中のSELECTで、INSERT待ちをしたいときに

 

SELECT * FROM TABLE FOR UPDATE NOWAIT;

 

すると、出ますw

罠っていうわけじゃないですけど、TIMESTAMP型のカラムを

普通にSELECTして、表示したら・・・

 

oracle.sql.TIMESTAMP@976148

 

what's???

なので、こうしましょぅww

 

まー、エラーを見れば一発ですなw

ユニーク制限にひっかかる INSERT しちゃった時とかですね

 

自分は、負荷試験の時に出て、まぁ、しょうがないかといった感じww

 

やってることは、テーブルの3カラムでユニーク制限をかけて

1カラムは、auto_incrementならぬ、Sequenceで、1づつ足す処理で

2リクエストを全く同時にやったらでました

 

データの不整合が出ないのは、さすがですね~

 

「)」を変なとこで閉じたり、WHEREが2個あったりで怒られますw

 

自分は、

  

SELECT * FROM (SELECT * FROM TABLE) ORDER BY A WHERE A > 0;

 

プログラムで、整形してるので、こんなこともありますw

 

DATE型に対して、以下のような

SELECT、または INSERTをすると、言われますw

たとえば、

 

SELECT * FROM TABLE WHERE DATE = '2008/06/06';

 

怒られるので、こう書きます

 

Perl 勉強本

Oracle 勉強本

J2EE 勉強するなら、これしかなくね?

ブログ管理人

SE perler@29

アイテム

  • image001.gif
  • modperl.png

アドパートナー

tooland

Pingo!

boox