Package org.h2.tools

Class Recover

  • All Implemented Interfaces:
    DataHandler

    public class Recover
    extends Tool
    implements DataHandler
    Helps recovering a corrupted database.
    • Field Detail

      • databaseName

        private java.lang.String databaseName
      • storageId

        private int storageId
      • storageName

        private java.lang.String storageName
      • recordLength

        private int recordLength
      • valueId

        private int valueId
      • trace

        private boolean trace
      • schema

        private java.util.ArrayList<MetaRecord> schema
      • objectIdSet

        private java.util.HashSet<java.lang.Integer> objectIdSet
      • tableMap

        private java.util.HashMap<java.lang.Integer,​java.lang.String> tableMap
      • columnTypeMap

        private java.util.HashMap<java.lang.String,​java.lang.String> columnTypeMap
      • lobMaps

        private boolean lobMaps
    • Constructor Detail

      • Recover

        public Recover()
    • Method Detail

      • main

        public static void main​(java.lang.String... args)
                         throws java.sql.SQLException
        Options are case sensitive.
        Supported options
        [-help] or [-?] Print the list of options
        [-dir <dir>] The directory (default: .)
        [-db <database>] The database name (all databases if not set)
        [-trace] Print additional trace information
        [-transactionLog] Print the transaction log
        Encrypted databases need to be decrypted first.
        Parameters:
        args - the command line arguments
        Throws:
        java.sql.SQLException - on failure
      • runTool

        public void runTool​(java.lang.String... args)
                     throws java.sql.SQLException
        Dumps the contents of a database file to a human readable text file. This text file can be used to recover most of the data. This tool does not open the database and can be used even if the database files are corrupted. A database can get corrupted if there is a bug in the database engine or file system software, or if an application writes into the database file that doesn't understand the file format, or if there is a hardware problem.
        Specified by:
        runTool in class Tool
        Parameters:
        args - the command line arguments
        Throws:
        java.sql.SQLException - on failure
      • readBlobMap

        public static java.io.InputStream readBlobMap​(java.sql.Connection conn,
                                                      long lobId,
                                                      long precision)
                                               throws java.sql.SQLException
        INTERNAL
        Parameters:
        conn - to use
        lobId - id of the LOB stream
        precision - not used
        Returns:
        InputStream to read LOB content from
        Throws:
        java.sql.SQLException - on failure
      • readClobMap

        public static java.io.Reader readClobMap​(java.sql.Connection conn,
                                                 long lobId,
                                                 long precision)
                                          throws java.lang.Exception
        INTERNAL
        Parameters:
        conn - to use
        lobId - id of the LOB stream
        precision - not used
        Returns:
        Reader to read LOB content from
        Throws:
        java.sql.SQLException - on failure
        java.lang.Exception
      • trace

        private void trace​(java.lang.String message)
      • traceError

        private void traceError​(java.lang.String message,
                                java.lang.Throwable t)
      • execute

        public static void execute​(java.lang.String dir,
                                   java.lang.String db)
                            throws java.sql.SQLException
        Dumps the contents of a database to a SQL script file.
        Parameters:
        dir - the directory
        db - the database name (null for all databases)
        Throws:
        java.sql.SQLException - on failure
      • process

        private void process​(java.lang.String dir,
                             java.lang.String db)
      • getWriter

        private java.io.PrintWriter getWriter​(java.lang.String fileName,
                                              java.lang.String suffix)
      • getSQL

        private void getSQL​(java.lang.StringBuilder builder,
                            java.lang.String column,
                            Value v)
      • setDatabaseName

        private void setDatabaseName​(java.lang.String name)
      • dumpMVStoreFile

        private void dumpMVStoreFile​(java.io.PrintWriter writer,
                                     java.lang.String fileName)
      • dumpLayout

        private static void dumpLayout​(java.io.PrintWriter writer,
                                       MVStore mv)
      • dumpMeta

        private static void dumpMeta​(java.io.PrintWriter writer,
                                     MVStore mv)
      • dumpTypes

        private static void dumpTypes​(java.io.PrintWriter writer,
                                      MVStore mv)
      • dumpLobMaps

        private void dumpLobMaps​(java.io.PrintWriter writer,
                                 MVStore mv)
      • setStorage

        private java.lang.String setStorage​(int storageId)
      • writeMetaRow

        private void writeMetaRow​(Row r)
      • resetSchema

        private void resetSchema()
      • writeSchemaSET

        private void writeSchemaSET​(java.io.PrintWriter writer)
      • writeSchema

        private void writeSchema​(java.io.PrintWriter writer)
      • isLobTable

        private static boolean isLobTable​(java.lang.String name)
      • isSchemaObjectTypeDelayed

        private static boolean isSchemaObjectTypeDelayed​(MetaRecord m)
      • createTemporaryTable

        private void createTemporaryTable​(java.io.PrintWriter writer)
      • extractTableOrViewName

        private static java.lang.String extractTableOrViewName​(java.lang.String sql)
      • writeError

        private void writeError​(java.io.PrintWriter writer,
                                java.lang.Throwable e)
      • getDatabasePath

        public java.lang.String getDatabasePath()
        INTERNAL
        Specified by:
        getDatabasePath in interface DataHandler
        Returns:
        the database path
      • openFile

        public FileStore openFile​(java.lang.String name,
                                  java.lang.String mode,
                                  boolean mustExist)
        INTERNAL
        Specified by:
        openFile in interface DataHandler
        Parameters:
        name - the file name
        mode - the mode
        mustExist - whether the file must already exist
        Returns:
        the file
      • getLobSyncObject

        public java.lang.Object getLobSyncObject()
        INTERNAL
        Specified by:
        getLobSyncObject in interface DataHandler
        Returns:
        the synchronization object
      • readLob

        public int readLob​(long lobId,
                           byte[] hmac,
                           long offset,
                           byte[] buff,
                           int off,
                           int length)
        INTERNAL
        Specified by:
        readLob in interface DataHandler
        Parameters:
        lobId - the lob id
        hmac - the message authentication code
        offset - the offset within the lob
        buff - the target buffer
        off - the offset within the target buffer
        length - the number of bytes to read
        Returns:
        the number of bytes read