IT

【ORACLE】セッションが実行中のSQLを調べる


ここに挙げたやり方に則り
実際によく使ってる簡易的にセッションの情報を取得するSQL。
リンク先で挙げたようなV$SESSIONとV$SESSION_LONGOPSに加えて
V$SQLを結合してSQL_FULLTEXTを取得します
(そのセッションがどんなSQL投げてるのか調べる)。


 


javaによるHTTP接続(UserAgentの偽装)

ここに書いた javaによるHTTP接続のサンプルにおける②と③の間で、 con.setRequestParameter("User-Agent" , "iPhone***"); というような実装を施すと、 UserAgent情報を上書きしてタイ

javaによるHTTP接続サンプル


javaでHTTP接続するプログラムのサンプル。

 

 // ①URLを生成

 URL url = new URL("/");

 

 // ②接続してHttpURLConnectionを生成

 HttpURLConnection con = (HttpURLConnection)new URL(url).openConnection();

 

 // ③InputStreamからレスポンスをもらう

 BufferedReader br = new BufferedReader(new InputStreamReader(con.getInputStream(),"Shift-JIS"));

 

 // ④まわす

 while(br.ready()) {

  System.out.println(br.readLine());

 }

 

 // ⑤とじる

 con.disconnect();

 br.close();

 

 


JDBC接続サンプル(+雑談)


JDBCで接続してSQL発行するプログラムのサンプル。(データソースを使う)

その辺探せばどこにでもあるけど個人の備忘録として。

 // ①データソースの生成

 OracleConnectionPoolDataSource opds = new OracleConnectionPoolDataSource();

 

 // ②DBのURLを設定

 opds.setURL("jdbc:oracle:thin:@192.168.0.100:1521:TESTDB");

 

 // ③DB接続ユーザーを設定

 opds.setUser("TESTDBUSER");

 

 // ④DB接続パスワードを設定

 opds.setPassword("TESTDBPASS");

 

 // ⑤Connection生成

 Connection con = opds.getConnection();

 

 // ⑥Statement生成

 Statement st = con.createStatement();

 

 // ⑦SQL実行+ResultSetをもらう

 ResultSet rs = st.executeQuery("SELECT ID,NAME FROM EMP");

 

 // ⑧とりあえず全フェッチ

 while(rs.next()) {

  //何もしない

 }

 

 // ⑨close

 st.close();

 rs.close();

 con.close();


【ORACLE】テーブル容量の確認


テーブルの容量はDBA_SEGMENTS.BYTESに格納されているので、
SEGMENT_NAMEにテーブル名を与えればゲットすることが出来る
 
 SELECT SEGMENT_NAME,BYTES
 FROM DBA_SEGMENTS
 WHERE SEGMENT_NAME = :TAB_NAME
 
BYTESは単位が本当に「バイト」なので、
キロバイトにするなら÷1024
メガバイトにするなら÷(1024^2)
ギガバイトにするなら÷(1024^3)
をする必要がある。
取得してきた後にEXCELとか電卓とかで計算してもいいけど
面倒な場合は取得するときに割ればよい。
 

 SELECT SEGMENT_NAME  
    ,BYTES  
    ,BYTES/1024 K_BYTES  
    ,BYTES/1024/1024 M_BYTES  
    ,BYTES/1024/1024/1024 G_BYTES  
 FROM DBA_SEGMENTS  
 WHERE SEGMENT_NAME = :TAB_NAME  
 

 
なお、パーティション表の場合は、
SEGMENT_NAMEがテーブル名
PARTITION_NAMEがパーティション名になり、
単にSEGMENT_NAMEだけ与えただけではパーティションの数だけ結果が返ってくる。
SELECT項目にPARTITION_NAMEを加えた方が良い。
 
続きがあります
 


【ORACLE】セッションの強制KILL

セッションを切断するには下記のSQLを発行する。 sysdbaじゃなくてもOK。 ALTER SYSTEM KILL SESSION '[SID],[SERIAL#]'; たとえばSID=100、SERIAL#が12345な

SEが使う変な専門用語

「落ちる」 システムエラーが発生すること。 java的にいえばcatchしきれないExceptionが最上層まで投げ切られてしまった状態。 画面な

ORACLEの面倒な仕様(分散トランザクション)


1つのトランザクション内で

DBリンク経由等から異なるインスタンスのデータを"参照"(SELECT)した場合、

そのトランザクションは「分散トランザクション」になる。

通常のJDBCからの接続(OracleDataSourceとか)でもそうなる。

ただOracleXADataSourceからConnectionつくると

「別インスタンスの」という条件を満たさなくても分散トランザクションになる。


word-break問題

tableタグ内にむちゃくちゃ長い文字をいれると、 なにも指定してない場合widthを突き抜けて文字が外にはみ出す たとえば aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa となるわけだが テー