Solaris10 では「date -a [-]秒」で時刻を修正できる。
5分進めたいなら、
# date -a 300
5分遅らせたいなら、
# date -a -300
コマンドを実行すると、徐々に時刻が修正される。
Oralce が動いている Solaris で時刻を修正し、その間に別のマシンで常駐プログラム*1を実行してみた。
- Solaris マシンの時刻を進める。
# uname -a SunOS solaris101 5.10 Generic_137138-09 i86pc i386 i86pc # date Wed Apr 8 15:56:36 JST 2009 # date -a 360
- 別のマシンで常駐プログラムを実行する。
$ java HogeSelect 2009-04-08 15:57:21.0 2009-04-08 15:58:23.0 2009-04-08 15:59:27.0 2009-04-08 16:00:30.0 ... 2009-04-08 17:39:21.0 2009-04-08 17:40:23.0 2009-04-08 17:41:23.0 2009-04-08 17:42:23.0 2009-04-08 17:43:23.0
- HogeSelect.java
import java.sql.Connection; import java.sql.DriverManager; import java.sql.Statement; import java.sql.ResultSet; import java.sql.SQLException; public class HogeSelect { public static void main(String args[]) { Connection conn = null; Statement stmt = null; ResultSet resultSet = null; try { Class.forName ("oracle.jdbc.driver.OracleDriver"); conn = DriverManager.getConnection ("jdbc:oracle:thin:@192.168.45.101:1521:orcl","scott","tiger"); stmt = conn.createStatement(); for (;;) { resultSet = stmt.executeQuery("select sysdate from dual"); for(;resultSet.next();) { System.out.println(resultSet.getString(1)); try { Thread.sleep(60000); } catch(InterruptedException e) { e.printStackTrace(); } } } } catch (SQLException e) { System.out.println("Error code: " + e.getErrorCode()); System.out.println("SQL state: " + e.getSQLState()); e.printStackTrace(); } catch (ClassNotFoundException e) { e.printStackTrace(); } finally { try { if (resultSet != null) { resultSet.close(); } } catch (SQLException e){ e.printStackTrace(); } try { if (stmt != null) { stmt.close(); } } catch (SQLException e){ e.printStackTrace(); } try { if (conn != null) { conn.close(); } } catch (SQLException e){ e.printStackTrace(); } System.out.println("finally at Hoge#main()"); } } }