ablog

不器用で落着きのない技術者のメモ

SQL

複数のSQLが記述されたテキストファイルを1SQL=1ファイルに分割する bash スクリプト

以下のような1ファイルにファイル名とSQLテキストがまとめて書かれているファイルを filename1.sql、filename2.sql、filename3.sql のように別々のファイルに分割して、ファイルの中身に "select * from t1;" のような SQL テキストになるようにする bash ス…

SQLチューニング原論(仮)

もわっとしたイメージ重視のテキトーメモ。正確性、網羅性は重視していない。 チューニングの三原則 仕事量(計算量)を減らす 仕事量は CPUコスト + I/Oコスト とも言える 行単位でデータが必要な場合は行指向、列方向でデータが必要な場合は列指向など 圧…

SQLチューニングに関する資料

動画 Tanel Poder’s Hacking Session: How Oracle SQL Plans Are Really Executed – Part 1 Tanel Poder’s Hacking Session: How Oracle SQL Plans Are Really Executed – Part 2 Tanel Poder’s Exadata Snapper Hacking session videos Oracle full table s…

HASH_VALUE から OLD_HASH_VALUE を求める

select snap_id, sql_id, hash_value, old_hash_value, plan_hash_value, cost from stats$sql_plan_usage where hash_value = 3805929877; 参考 Secret ORACLE: Unleashing the Full Potential of the ORACLE DBMS by Leveraging Undocumented Features作者…

partition by で分類した後に row_number() を使って絞り込む

select * from ( select address, hash_value, plan_hash_value, child_number, users_opening, fetches, executions, row_number() over (partition by length(sql_fulltext), plan_hash_value, parsing_user_id order by executions desc, address) rn fro…

DBMS_SQLDIAG パッケージ

In our previous blog post I described how you can use the new diagnostic event infrastructure in Oracle Database 11g to capture an Optimizer trace (10053) for any SQL statement once you have its SQL_ID. The approach I showed using the trad…

SQLスクリプトを実行して成功か否かを戻り値で判定する

WHENEVER SQLERROR EXIT SQL.SQLCODE SHUTDOWN IMMEDIATE EXIT 0 こんな感じで良かったはず。 $ sqlplus / as sysdba @db_shutdown.sql SQL*Plus: Release 10.2.0.4.0 - Production on Fri Dec 11 20:30:39 2009 Copyright (c) 1982, 2007, Oracle. All Righ…

テーブルの数値列が連続して空いている箇所を探すSQL

ユーザテーブルから使われていないユーザIDの範囲を調べたいようなときに使えるかも。 テーブルを作って、データを入れる。 SQL> create table test(id number(4)); SQL> begin for i in 1..500 loop insert into test (id) values(i); end loop; commit; en…

欠番を探して insert する PL/SQL

表usersには列id1(number型)と列id2(number型)がある。 両方とも欠番があり、列id1と列id2の欠番を探し、欠番があったら insert する。 ということをやってみた。 テーブルを作って欠番ができるよう insert する。 SQL> create table users(id1 number(4), i…

欠番を見つけるSQL

テーブル作って、 SQL> create table users (id number(4)); 欠番になるよう insert して、 SQL> insert into users (id) values (1); SQL> insert into users (id) values (2); SQL> insert into users (id) values (4); SQL> insert into users (id) value…

連続する数値を作成するSQL

SQLクックブック ―データベースエキスパートのための実践レシピ集作者: Anthony Molinaro,木下哲也,有限会社福龍興業出版社/メーカー: オライリー・ジャパン発売日: 2007/01/25メディア: 大型本購入: 2人 クリック: 84回この商品を含むブログ (19件) を見るP…