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


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

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

回答の条件
  • 1人3回まで
  • 登録:
  • 終了:2007/05/18 00:14:42
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:b-wind No.2

回答回数3344ベストアンサー獲得回数440

ポイント140pt

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

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

id:eimu

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

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

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

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

2007/05/18 00:10:56

その他の回答1件)

id:wnagata No.1

回答回数170ベストアンサー獲得回数18

ポイント100pt

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

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

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

id:eimu

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

2007/05/18 00:00:04
id:b-wind No.2

回答回数3344ベストアンサー獲得回数440ここでベストアンサー

ポイント140pt

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

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

id:eimu

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

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

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

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

2007/05/18 00:10:56

コメントはまだありません

この質問への反応(ブックマークコメント)

トラックバック

  • Android端末での時刻同期 rootとらないと自動設定出来ないっぽい。(いくつかNTPクライアントはあるが、手動で設定する形) クライアント・サーバ型をとっているからサーバに合わせる形に
「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません