人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

現在時刻取得、oracleとJavaどっちがいい?

質問内容
現在時刻を取得する場合、oracle等のDBから
SELECT TO_CHAR(SYSDATE, 'YYYY/MM/DD' ) AS SYS_DATE FROM DUAL
のような感じで取得する方法と、
JavaのCalendarクラスで取得する方法があるかと思いますが、
保守を考えるとどちらで
現在時刻を取得するのがいいのでしょうか?

私は、DBから取得することを考えると、
oracle->DB2リプレース等に
なった時にOracleSQL文の修正が入りそうなのでちょっと嫌かな、
と思っているのですが。DBから取得するメリットがそれ以上にあればDBからの取得を考えている状態です。
状況によって使い分けがいるんでしょうか。。。

●質問者: eimu
●カテゴリ:コンピュータ ウェブ制作
✍キーワード:as dB DB2 DD Java
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● wnagata
●100ポイント

DBに接続するJavaクライアントが複数ある場合、NTPなどで時刻の同期が取れていないと、保存された時刻データの前後が食い違って登録されてしまうという現象が生じ、大きな問題となることがあります。その時刻を用いて楽観的ロックを行っていると、稀なタイミングで変更が上書きされてしまいます。

DBのクライアントがアプリケーションサーバなど1つに限られているのであれば、Javaの方で現在時刻を取得しても問題はないでしょう。

http://sdc.sun.co.jp/java/docs/j2se/1.4/ja/docs/ja/api/java/util...

◎質問者からの返答

なるほど、クライアントごとに時刻が微妙に違うと確かに問題がおきそうです。大抵は、アプリケーションサーバは負荷に応じて増える可能性はありますからね。。。


2 ● b-wind
●140ポイント ベストアンサー

基本的にはサーバーの時刻同期が合っていればどちらでも同じ結果になるはず、ですがたまにミスでずれている時があるので自分ならDBの時刻に合わせます。

大抵の場合アプリケーションサーバーが複数あってもDBは1台(もしくは少数)ですから、どれか一つにあわせるとなるとそうなるかと。

◎質問者からの返答

やはり時刻同期に関する問題が大きいですか。。

時刻同期に関連するバグは再現性が低そうですね、DBの時刻に合わせた方がいいという考えにまとまりそうです。

SQL文はなるべくSQL92等環境非依存の記述を心がけてリプレースに備えるという意識で行こうと思います。

同じ部署に長くいると、なかなか他所のシステムがどうなっているのか分からないので参考になりました。ありがとうございます。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ