Search in sources :

Example 6 with DatabaseEnvironmentCleanupException

use of com.axway.ats.environment.database.exceptions.DatabaseEnvironmentCleanupException in project ats-framework by Axway.

the class OracleEnvironmentHandler method restore.

/**
     * @see com.axway.ats.environment.database.model.RestoreHandler#restore(java.lang.String)
     */
public void restore(String backupFileName) throws DatabaseEnvironmentCleanupException {
    BufferedReader backupReader = null;
    Connection connection = null;
    //we need to preserve the auto commit option, as
    //the connections are pooled
    boolean isAutoCommit = true;
    try {
        log.debug("Starting restoring db backup from file '" + backupFileName + "'");
        backupReader = new BufferedReader(new FileReader(new File(backupFileName)));
        connection = ConnectionPool.getConnection(dbConnection);
        isAutoCommit = connection.getAutoCommit();
        connection.setAutoCommit(false);
        StringBuilder sql = new StringBuilder();
        String line = backupReader.readLine();
        while (line != null) {
            sql.append(line);
            if (line.endsWith(EOL_MARKER)) {
                // does not require it, as opposing to any other, excluding blocks ([DECLARE]BEGIN-END;)
                if (line.contains("END;")) {
                    // in this case semicolon is mandatory
                    sql.delete(sql.length() - EOL_MARKER.length(), sql.length());
                } else {
                    sql.delete(sql.length() - EOL_MARKER.length() - 1, sql.length());
                }
                PreparedStatement updateStatement = connection.prepareStatement(sql.toString());
                //catch the exception and rollback, otherwise we are locked
                try {
                    updateStatement.execute();
                } catch (SQLException sqle) {
                    log.error("Error invoking restore satement: " + sql.toString());
                    //we have to roll back the transaction and re throw the exception
                    connection.rollback();
                    throw sqle;
                } finally {
                    try {
                        updateStatement.close();
                    } catch (SQLException sqle) {
                        log.error("Unable to close prepared statement", sqle);
                    }
                }
                sql = new StringBuilder();
            } else {
                //add a new line
                //FIXME: this code will add the system line ending - it
                //is not guaranteed that this was the actual line ending
                sql.append(LINE_SEPARATOR);
            }
            line = backupReader.readLine();
        }
        try {
            //commit the transaction
            connection.commit();
        } catch (SQLException sqle) {
            //we have to roll back the transaction and re throw the exception
            connection.rollback();
            throw sqle;
        }
        log.debug("Finished restoring db backup from file '" + backupFileName + "'");
    } catch (IOException ioe) {
        throw new DatabaseEnvironmentCleanupException(ERROR_RESTORING_BACKUP + backupFileName, ioe);
    } catch (SQLException sqle) {
        throw new DatabaseEnvironmentCleanupException(ERROR_RESTORING_BACKUP + backupFileName, sqle);
    } catch (DbException dbe) {
        throw new DatabaseEnvironmentCleanupException(ERROR_RESTORING_BACKUP + backupFileName, dbe);
    } finally {
        try {
            IoUtils.closeStream(backupReader, "Could not close reader for backup file " + backupFileName);
            if (connection != null) {
                connection.setAutoCommit(isAutoCommit);
                connection.close();
            }
        } catch (SQLException sqle) {
            log.error(ERROR_RESTORING_BACKUP + backupFileName, sqle);
        }
    }
}
Also used : DatabaseEnvironmentCleanupException(com.axway.ats.environment.database.exceptions.DatabaseEnvironmentCleanupException) SQLException(java.sql.SQLException) BufferedReader(java.io.BufferedReader) Connection(java.sql.Connection) FileReader(java.io.FileReader) PreparedStatement(java.sql.PreparedStatement) IOException(java.io.IOException) File(java.io.File) DbException(com.axway.ats.core.dbaccess.exceptions.DbException)

Aggregations

DatabaseEnvironmentCleanupException (com.axway.ats.environment.database.exceptions.DatabaseEnvironmentCleanupException)6 DbException (com.axway.ats.core.dbaccess.exceptions.DbException)5 File (java.io.File)5 IOException (java.io.IOException)5 BufferedReader (java.io.BufferedReader)4 FileReader (java.io.FileReader)4 Connection (java.sql.Connection)3 PreparedStatement (java.sql.PreparedStatement)3 SQLException (java.sql.SQLException)3 DbQuery (com.axway.ats.common.dbaccess.DbQuery)1 ColumnDescription (com.axway.ats.core.dbaccess.ColumnDescription)1 DbRecordValuesList (com.axway.ats.core.dbaccess.DbRecordValuesList)1 CassandraDbProvider (com.axway.ats.core.dbaccess.cassandra.CassandraDbProvider)1 ColumnHasNoDefaultValueException (com.axway.ats.environment.database.exceptions.ColumnHasNoDefaultValueException)1 DbTable (com.axway.ats.environment.database.model.DbTable)1 FileWriter (java.io.FileWriter)1 ParseException (java.text.ParseException)1