jdbcでoracleの起動・停止する方法

これは本当にすごい!!!!
ojdbc6.jar(ojdbc5.jarでも可能)を使うとJDBC経由でoracleのstartup, shutdownが可能になります。


僕が試したのは、oracle9iのDBに対してojdbc6.jarを使用してDBの起動・停止。


Database : oracle9i
Java : 1.6.0_02
JDBC : ojdbc6.jar


StarupTest.java

package jp.co.abby.ojdbc6test;

import java.sql.Statement;
import java.util.Properties;

import oracle.jdbc.OracleConnection;
import oracle.jdbc.pool.OracleDataSource;

public class StartupTest {

    private static final String DB_URL = "jdbc:oracle:thin:@yone03:1521:test";

    /**
     * jdbc経由でoracle起動
     */
    public static void main(String[] args) throws Exception {
        // Starting up the database:
        OracleDataSource ds = new OracleDataSource();
        Properties prop = PropertyUtil.getProperties();
        prop.setProperty("prelim_auth", "true");
        ds.setConnectionProperties(prop);
        ds.setURL(DB_URL);
        OracleConnection conn = (OracleConnection) ds.getConnection();
        System.out.println("Connect Success!");
        conn.startup(OracleConnection.DatabaseStartupMode.NO_RESTRICTION);
        conn.close();
        System.out.println("NO MOUNT SUCCESS!");

        // Mounting and opening the database
        OracleDataSource ds1 = new OracleDataSource();
        prop = PropertyUtil.getProperties();
        ds1.setConnectionProperties(prop);
        ds1.setURL(DB_URL);
        OracleConnection conn1 = (OracleConnection) ds1.getConnection();
        System.out.println("Connect Success!");
        Statement stmt = conn1.createStatement();
        stmt.executeUpdate("ALTER DATABASE MOUNT");
        stmt.executeUpdate("ALTER DATABASE OPEN");
        stmt.close();
        conn1.close();
        System.out.println("Startup SUCCESS!");
    }
}

ShutdownTest.java

package jp.co.abby.ojdbc6test;

import java.sql.Statement;
import java.util.Properties;

import oracle.jdbc.OracleConnection;
import oracle.jdbc.pool.OracleDataSource;

public class ShutdownTest {

    private static final String DB_URL = "jdbc:oracle:thin:@yone03:1521:test";

    /**
     * jdbc経由でoracle停止
     */
    public static void main(String[] args) throws Exception {
        // Shutting down the database
        OracleDataSource ds = new OracleDataSource();
        Properties prop = PropertyUtil.getProperties();
        ds.setConnectionProperties(prop);
        ds.setURL(DB_URL);
        OracleConnection conn = (OracleConnection) ds.getConnection();
        System.out.println("Connect Success!");
        conn.shutdown(OracleConnection.DatabaseShutdownMode.IMMEDIATE);
        Statement stmt1 = conn.createStatement();
        stmt1.executeUpdate("ALTER DATABASE CLOSE NORMAL");
        stmt1.executeUpdate("ALTER DATABASE DISMOUNT");
        stmt1.close();
        conn.shutdown(OracleConnection.DatabaseShutdownMode.FINAL);
        conn.close();
        System.out.println("Shurdown SUCCESS!");
    }
}

もうこれで携帯からoracleの起動・停止も可能になります。
これはちょっと衝撃的でした!

oracle11gについてはもう少し追いかけてみようと思いました。