Oracleの新しいVM、GraalVM
- Fri
- 19:07
- Oracle
オラクル、JavaやJavaScript、Ruby、Pythonなど多言語対応を単一ランタイムで実現する「GraalVM」をオープンソースで公開。Twitterが本番環境で採用 - Publickey
パッと見すごいんだけど、どうなんだろ。分かれてる方がアップデートやパッチ適用しやすそうだけど。
Twitterがプロダクション環境でscalaを動かしてるようだけど、どのような機能で利用してるのか知りたい。
GraalVMはJavaScript、Python、Ruby、R、JavaやScala、KotlinなどJVMベースの言語、CやC++のようなLLVMベースの言語などを実行するためのユニバーサルな仮想マシンです。
パッと見すごいんだけど、どうなんだろ。分かれてる方がアップデートやパッチ適用しやすそうだけど。
Twitterがプロダクション環境でscalaを動かしてるようだけど、どのような機能で利用してるのか知りたい。
OracleのSQLPlusを見やすくする
- Thu
- 00:38
- Oracle
SQL Plus のログインメッセージ等を非表示に。
表示領域の設定
出力カラムの設定
sqlplus -s USERID/PASSWORD@HOST
表示領域の設定
set heading off set wrap off set linesize 133
出力カラムの設定
数値型の一括設定 set numformat 9999999999999999999 カラム毎のカラム長設定 col COL_STRING for a20 col COM_NUMBER for 9999999999
ORACLEの件数指定によるSELECT (MySQLのlimit)
- Sun
- 18:53
- Oracle
MySQLのlimitによる何件目から何件を取得、をOracleで実装。
MySQLの場合
Oracleの場合
注意点は、何番目からの指定方法。
MySQLのstartは0からなのに対し、OracleのROWNUMを使う場合のstartは1から。
また、ROWNUMは各select毎にあるので、件数指定したいROWNUMのカラム名がユニークになるように別名(この例では、rn)を付け、その別名に対して件数指定を行う。
さらに、order byのソートを使う場合は例のようにROWNUM指定の副問い合わせとしてorder byのselectを発行する必要がある。
MySQLの場合
select * from tbl_test order by colA desc limit 0, 10;
Oracleの場合
SELECT * FROM ( SELECT dmy.*, ROWNUM rn FROM ( SELECT * FROM tbl_test WHERE ORDER BY colA DESC ) dmy ) WHERE rn >= 1 AND rn <= 10;
注意点は、何番目からの指定方法。
MySQLのstartは0からなのに対し、OracleのROWNUMを使う場合のstartは1から。
また、ROWNUMは各select毎にあるので、件数指定したいROWNUMのカラム名がユニークになるように別名(この例では、rn)を付け、その別名に対して件数指定を行う。
さらに、order byのソートを使う場合は例のようにROWNUM指定の副問い合わせとしてorder byのselectを発行する必要がある。
JAVA JDCB thin接続の自動再接続(connectionProperties、oracle.jdbc.ReadTimeout、oracle.net.CONNECT_TIMEOUT)
- Fri
- 21:14
- Oracle
Oracleへのjdbc thin 接続の方法でコネクションを張ってOracleの再起動や何かしらの影響でコネクションが切れた場合、thin接続しているプロセスを再起動したりして再度コネクションを張る必要があります。
が、実際はパラメータの設定のみで自動再接続が可能。
設定するパラメータは、「connectionProperties」プロパティの
oracle.jdbc.ReadTimeout
oracle.net.CONNECT_TIMEOUT
例:
ただし、再接続されるタイミングは、thinアプリからDBを参照した時。
この時、切れてるかチェックして切れてれば接続する。なので、一発目のリクエストは失敗する可能性が高い。
が、実際はパラメータの設定のみで自動再接続が可能。
設定するパラメータは、「connectionProperties」プロパティの
oracle.jdbc.ReadTimeout
oracle.net.CONNECT_TIMEOUT
例:
connectionProperties="oracle.jdbc.ReadTimeout=600000;oracle.net.CONNECT_TIMEOUT=60000"
ただし、再接続されるタイミングは、thinアプリからDBを参照した時。
この時、切れてるかチェックして切れてれば接続する。なので、一発目のリクエストは失敗する可能性が高い。
Oracleへのjdbc thin 接続
- Sun
- 23:08
- Oracle
JAVAによる、OracleへのJDCB(thin)接続の方法
実行用スクリプト(JAVAコンパイル兼用)
JAVAソース
実行用スクリプト(JAVAコンパイル兼用)
#!/bin/sh CLASS=test_jdbc_oracle_thin javac -classpath $HOME/jdbc/lib/jars/ojdbc14.jar $CLASS.java echo "*** finished build." SQL="select table_name from all_tables" java -classpath $HOME/jdbc/lib/jars/ojdbc14.jar:./ -client $CLASS "$SQL" echo "*** finished process."
JAVAソース
import java.sql.*; //気が向いたら下記のも試してみたい //import oracle.jdbc.*; //import oracle.jdbc.pool.OracleConnectionCacheManager; //import oracle.jdbc.pool.OracleDataSource; public class test_jdbc_oracle_thin { public static void main (String args[]) throws SQLException, ClassNotFoundException { String sql = args[0]; System.out.println ("*** SQL=["+ sql +"]"); // driver load Class.forName("oracle.jdbc.driver.OracleDriver"); Connection conn = DriverManager.getConnection ( "jdbc:oracle:thin:@host-name.com1521:oracle-sid" , "CHANGE_USER" , "CNAHGE_PASS" ); Statement stmt = conn.createStatement(); ResultSet rset = stmt.executeQuery(sql); int i = 0; while ( rset.next() ) { i++; //System.out.println (rset.getString(1)); //System.out.println(rset.getInt(1) + "\t" + rset.getString(2)); System.out.println(rset.getInt(1)); if (i > 10) break; } // close rset.close(); // close stmt.close(); // close conn.close(); } }