Document Properties
KbidC24927
Last Modified04-Feb-2020
Added to KB16-Jul-2013
Public AccessEveryone
StatusOnline
Doc TypeGuidelines, Concepts & Cookbooks
Product
  • ICM 7.6
  • ICM 7.7

Concept - DBMigrate and DBInit (valid to 7.7)

1 Introduction

This document describes the DBInit and DBMigrate tool available since Intershop version 7.4.

Goals

The DBInit is a tool for initially creating the database schema objects and for preparing the database content of one or more cartridges. DBInit is not designed to migrate the database content and structure.

The DBMigrate tool is used to migrate the data and the database structure of an Intershop installation from defined former releases to an installed current release. It defines one global migration process, which can be executed on different environments. DBMigrate reuses some recurring migration steps (e.g., table creation), supports different development teams to create their own migration processes, and can minimize the effort to upgrade the development environment.

2 Glossary

This glossary describes the terms in this concept:

TermDescription

Cartridge

From a developer's perspective, a code container for implementation artifacts like templates, pipelines, Java code etc. that provide business logic or technical functionality to Intershop 7.

From a system administrator's perspective, a type of deployment component for implementation artifacts that provide business logic or technical functionality to Intershop 7.

Preparer

A preparer implements a database initialization or migration processor. The preparer can be processed by DBInit or DBMigrate to prepare the database content of one or more cartridges.

3 General Processing

There are three processing phases in the DBInit and DBMigrate tools with the following processing order:

  1. pre-processing
  2. main-processing
  3. post-processing

For additional information about the processing phases, see also the section on DBInit below.

Each phase loops through the list of cartridges. See also the DBInit description for the property cartridges.dbinit within cartridgelist.properties.

Each cartridge executes the preparers defined in the version-independent property file(s) and in the version-specific property file(s) (DBMigrate only).

3.1 DBInit

The following picture illustrates this processing behavior for DBInit:

DBInit_processing

List of cartridges:

  • Configuration file: cartrigelist.properties
  • Property: cartridges.dbinit = Cartridge_1 Cartridge_2 ... Cartridge_n

Cartridge-specific preparer:

  • Configuration file: dbinit.properties
  • Property: [pre.|post.]ClassN = Preparer [params]
    • N - floating point number support, >= 0

3.2 DBMigrate

The following picture illustrates this processing behavior for DBMigrate:

DBMigrate_process

List of cartridges:

  • configuration file: cartrigelist.properties
  • property: cartridges.dbinit = Cartridge_1 Cartridge_2 ... Cartridge_n

Cartridge-specific preparer:

  • Configuration file:
    • Version-independent: migration.properties
    • Version-dependent: migration-to-<version>.properties
  • Property: [pre.|post.]ClassN = Preparer [params]
    • N - floating point number support , >= 0

Default Migration Path:

  • Configuration file: migration.properties
  • Property: intershop.migration.MigrationPath = Version_1 Version_2 ... Version_n

Mapping requirement between migration path string values and configuration files should map to the corresponding file name:

  • Version_1 , Version_2 , ... Version_n string should map to the corresponding file name
    • migration-to- Version_1.properties ,
    • migration-to- Version_2.properties ...
    • migration-to- Version_N.properties

4 DBInit

4.1 General Information

The list of cartridges to be processed by the DBInit and DBMigrate tools is specified in IS_SHARE/system/cartridges/cartridgelist.properties. The property name is specified by cartridges.dbinit. The supported value type is a space-separated list of cartridges.

Syntax for cartridges.dbinit in cartridgelist.properties:

cartridges.dbinit = cartridge1 cartridge2 ...

The DBInit process is configured using dbinit.properties files that exist for each cartridge at the location staticfiles/cartridge/dbinit.properties.

The file follows the standard Java property file format. It contains a list of preparers that must be invoked during the DBInit process.

Each preparer is defined by an artificial property key with name Class, which is followed by a number. The number indicates the order in which the preparers will be called.

In addition, there are three preparer phases:

Phase

Property Key Prefix

Pre-processing

pre.ClassN

Main-processing

ClassN

Post-processing

post.ClassN

Syntax for the preparers in dbinit.properties:

[pre|post.]ClassN = cartridgePackage.prepareName [parameter1 parameter2 ...]
N - positive floating point number, example N = {0.0, ... 0.5, 0.75, 1, 2, 3, 3.5, ..., n}
n - largest positive finite floating point value, see java Double.MAX_VALUE

4.2 Preparer Parameters and Input Files

The currently known and used DBInit preparer parameters include:

  • Files
    • Java properties
    • SQL scripts
  • Simple String, Boolean or Numeric Parameter

The location patterns for preparer input files are:

Java properties:

  • IS_SOURCE/<cartridge>/javasource/com/intershop/beehive/<cartridge>/dbinit/data/<type_of_data> or
  • IS_SHARE/system/cartridges/<cartridge>/release/lib/com/intershop/beehive/<cartridge>/dbinit/data/<type_of_data>

Example of DBInit preparer input file for <type_of_data> : job, locking, organization, preference, ..., user, ...

SQL scripts:

  • IS_SOURCE/<cartridge>/staticfiles/cartridge/lib/resources/<cartridge>/dbinit/scripts or
  • IS_SHARE/system/cartridges/<cartridge>/release/lib/resources/<cartridge>/dbinit/scripts

5 DBMigrate

5.1 Precondition

DBMigrate save fine-grained migration steps with unique keys rather than the last migrated version of a cartridge. This approach allows the exact calculation of migration steps for a given migration path and avoids that newer database changes of older maintenance releases are never executed in newer migration operations.

The version based migration step processing works as follows:

  • Load version based migration steps within correct execution order
  • Load already completed migrations steps from database
  • Detect all not and not yet successful before processed migrations steps
  • Execute the resulting list of version based migration steps
  • Save information about processed (success/failure) migrations steps

The unique key for a preparation step consist of:

  • cartridgeUUID- The cartridge uuid within for the preparation step.
  • ID- The property key of the preparation step, [pre|post.]ClassN.
  • version- The version for the preparation step, e.g.: 7.4.3.0 or n/a.
  • type- The preparation type, known types dbmigrate or dbinit.

Additional -classic command line parameters supports functionality for

  • dry-run
  • and/or re-execution
  • and/or version-[in]dependent-exclude

5.1.1 Migration Path

The migration path defines a space-separated path of versions that specifies how to iterate from a previous to the current version.

The global migration properties are stored in

  • IS_SHARE/system/config/cluster/migration.properties.

This file defines the

  • intershop.migration.MigrationPath = ..., global migration path of all Intershop cartridges
  • <custom-migration-path-key> = ..., global migration path of all customer-(project-)specific cartridges
  • intershop.migration.DropTables = [true|false], global property that specifies whether old database tables should be dropped during the migration

The Intershop syntax for a global migration path is:

[...].MigrationPath = version1 version2 version3 ...

A version can be a simple string, e.g.: 7.0.0.0, v1.0.0, v1, foo.

The default cartridge-specific migration path:

  • Can reference to the global setting within migration.properties.
    • intershop.migration.MigrationPath (default Intershop property)
    • <custom-migration-path-key> (a custom specific property), or
  • Can be specified by an individual migration path.

The location for these cartridge specific configuration files is:

  • IS_SHARE/system/config/cartridges/<cartridge>.properties.

The syntax for the cartridge-specific migration path (global or individual) for all cartridges is:

Intershop default
intershop.cartridges.<cartridge>.MigrationPath = ${intershop.migration.MigrationPath} | version1 version2 version3 ...
Project and custom specific
intershop.cartridges.<custom_cartridge>.MigrationPath = ${<custom-migration-path-key>} | version1 version2 version3 ...

After DBInit and DBMigrate have run, the last entry of the migration path for each cartridge is committed to the database table CartridgeInformation into the column MigrationVersion.

5.1.1.1 Example A:

Migrated Intershop installation to 7.4.3.0 is stored cartridge-specific within CartridgeInformation:

UUID

...

InternalName

...

MigrationVersion

...

G3M...

core

7.4.3.0

XAc...

bc_foundation

7.4.3.0

...

...

7.4.3.0

5.1.1.2 Example B:

Migration steps for an Intershop cartridge <example> with the following starting situation:

  • Global migration path of cartridge <example>: 7.4.2.0 7.4.3.0 7.4.4.0 7.4.5.0
  • Previous migration of cartridge <example> to version: 7.4.3.0
  • Migration preparation steps stored within database for cartridge <example> during previous migration to 7.4.3.0:

    Property Key

    Version

    Preparation Class

    Preparation Status

    pre.Class1

    7.4.2.0

    ExecuteSQLScriptPreparer

    SUCCESS

    Class1

    7.4.3.0

    DropTable

    SUCCESS

    Class2

    7.4.3.0

    UpdateJobsPreparer

    FAILURE

    post.Class1

    7.4.3.0

    MigrateStagingEnvironment

    SUCCESS

  • Installed version for cartridge <example> within file system: 7.4.5.0
  • Migration steps within file system for cartridge <example>:

    Property Key

    Version

    Preparation Class

    pre.Class1

    7.4.2.0

    ExecuteSQLScriptPreparer

    pre.Class1

    7.4.4.0

    ExecuteSQLScriptPreparer

    Class1

    7.4.3.0

    DropTable

    Class2

    7.4.3.0

    UpdateJobsPreparer

    Class1

    7.4.5.0

    DropTable

    post.Class1

    7.4.3.0

    MigrateStagingEnvironment

    post.Class1

    7.4.5.0

    DeletePreferenceDefinition

  • Executed migration preparation steps for cartridge <example> during migration to 7.4.5.0:

    Property Key

    Version

    Preparation Class

    Why Execution

    Preparation Status

    Class2

    7.4.3.0

    UpdateJobsPreparer

    previous failure

    SUCCESS

    pre.Class1

    7.4.4.0

    ExecuteSQLScriptPreparer

    new step

    SUCCESS

    Class1

    7.4.5.0

    DropTable

    new step

    SUCCESS

    post.Class1

    7.4.5.0

    DeletePreferenceDefinition

    new step

    SUCCESS

5.1.2 Cartridge-specific Migration Properties

The locations for various cartridge-specific migration properties are:

  • IS_SOURCE/<cartridge>/staticfiles/cartridge, or
  • IS_SHARE/system/cartridges/<cartridge>/release

The file names are migration*.properties and contains pre.ClassN, ClassN and post.ClassN preparer, see also dbinit.properties syntax.

  • migration.properties, a version-independent preparer file and all preparers that are always to be executed
  • migration-to-<version>.properties, preparer to be executed if the database version resides before this version in the migration path

Generally, version-independent migration properties are used for:

  • Structural database migration like tables, indexes, constraints and procedural SQL like packages, functions and procedures
  • Data-replication (staging) environment migration globally over all cartridges

5.2 Preparer Parameters and Input Files

The currently known and used DBMigrate preparer parameters include:

  • Files
    • Java properties
    • SQL scripts
    • UUIDs
  • Simple string, boolean or numeric parameter

The location patterns for DBMigrate preparer input files are:

Java properties:

  • see DBinit, the DBMigrate preparers use the original properties initially used by DBinit.
    For example, see also the "version-dependent migration-to-....properties example" below.

Class1= .... dbmigrate .preparer.job.AddJobsPreparer root \
com/intershop/beehive/core/dbinit/data/job/JobConfigurations.properties \
com/intershop/beehive/core/dbmigrate/data/<version>/job/JobConfigurationUUIDs.properties

SQL scripts:

  • version-independent
    • IS_SOURCE/<cartridge>/staticfiles/cartridge/lib/resources/<cartridge>/dbinit/scripts or
    • IS_SHARE/system/cartridges/<cartridge>/release/lib/resources/<cartridge>/dbinit/scripts
  • version-dependent
    • IS_SOURCE/<cartridge>staticfiles/cartridge/lib/com/intershop/<cartridge>/dbmigrate/data/<version>/scripts or
    • IS_SHARE/system/cartridges/<cartridge>/release/lib/com/intershop/<cartridge>/dbmigrate/data/<version>/scripts

UUID files (version-dependent only):

  • IS_SOURCE/<cartridge>staticfiles/cartridge/lib/com/intershop/<cartridge>/dbmigrate/data/<version>/<type_of_data>, or
  • IS_SHARE/system/cartridges/<cartridge>/release/lib/com/intershop/<cartridge>/dbmigrate/data/<version>/<type_of_data>

5.3 Programming Initial and Migration Preparer

5.3.1 General

5.3.1.1 Style Guide: Localization Resource Bundle File Names

For all new files it is required to use the *Localization_en.properties naming. All old files with name *Information s _en.properties are deprecated.

dbinit|dbmigrate.properties
ClassN = com.intershop.beehive.<>.dbinit.preparer.<>.PrepareFooBar \
         com.intershop.beehive.<>.dbinit.data.<>.FooBar \
         com.intershop.beehive.<>.dbinit.data.<>.FooBarLocalization
bundle files
FooBarLocalization_en.properties
FooBarLocalization_de.properties
FooBarLocalization_<language>.properties

If no locale-specific bundle can be found an extra dbinit/dbmigrate fallback locale is used to get a suitable localized bundle before an unknown-localized base.properties resource bundle is used as last fallback.

The following property controls the dbinit/dbmigrate fallback locale handling, see IS_SHARE/system/config/cluster/dbinit.properties:

  • intershop.dbinit.fallbackLocale=en_US, default: feature enabled and value en_US

5.3.1.2 Others

DBMigrate preparers can be recalled several times. They call the migrate() method of each preparer. DBMigrate preparers should reside in the *.dbmigrate.* packages.

The Java documentation has to document the usage in migration property files. The migration preparers are derived from the class com.intershop.beehive.core.dbinit.capi.Preparer.

5.3.2 Golden Rules

  1. Create always a new key=value entry into migration-to-<version>.properties for preparation steps during branch-development where version ranges (sub-numbering) exists and the affected migration steps are under construction (changes for: parameters, file content and code).
  2. Verify if database changes are already done, and use semantic keys for this check.
  3. Do not create UUIDs during the migration. Add and use static UUID property files for the DBMigrate processing. A replication environment does not support different UUIDs on semantically identical objects.
  4. Each migration preparer is "idempotent". That is, it has to be re-executable several times on the same database dump with the same configuration, whereby only the first run performs the changes.
  5. Each preparer has to detect if it has been run before. This simplifies the troubleshooting if something goes wrong in the production system.
  6. Return false or throw an exception on failure in order to give the migrator the possibility to decide whether the error should be ignored or not.
  7. The SQLScriptPreparer does not allow ORA- errors during the execution of SQL scripts. Blind drops of tables, materialized views, etc. lead to failures.
  8. Do not try to develop the single, all-purpose preparer – there is no such thing as the "Swiss army knife" of preparers.
  9. Separate update, delete and insert statements in several preparers, e.g.: UpdateJobPreparer, DeleteJobsPreparer, AddJobsPreparer

5.3.3 How to Create and Get UUIDs

  1. Open a development shell IS_HOME/bin/environment.bat.
  2. Go to IS_HOME/tools/misc.
  3. Call ant uuid.

Syntax:

ant uuid
ant uuid [-DamountUUID=number]

Example:

Example
ant uuid -DamountUUID=2
createuuid:
  [echo] Generating an amount of 2 UUIDs...
  [java] UUID: 8rKsFt249DIAAAExssSBUPak
  [java] UUID: CKOsFt24gu8AAAExtMSBUPak

6 Available Preparer for DBInit and Migration Preparer for DBMigrate

To find all currently available preparers (DBInit and DBMigrate), check the installed Java documentation of the Intershop server installation.

  1. Open the main entry point IS_SHARE/docs/html/index.html for the Intershop API documentation.
  2. Select a component (cartridge) and navigate to the cartridge-specific DBInit and DBMigrate preparers.
  3. The DBInit and DBMigrate package naming is specified by com.intershop.*.<cartridge>.<dbinit|dbmigrate>.preparer.*.

Example of core cartridge:

Package

Classes

com.intershop.beehive.core.dbinit.
preparer.preference

PrepareDomainPreferences,
PreparePreferenceDefinitions,
PreparePreferenceGroups,

com.intershop.beehive.core.dbmigrate.
preparer.preference

AddDomainPreferencesPreparer,
AddPreferenceDefinitionsInformationPreparer,
AddPreferenceDefinitionsPreparer,
... UpdateDomainPreferencesPreparer

7 Usage

The execution of DBInit and DBMigrate supports the execution in a non-interactive console-based made called classic mode.

The following property controls the further preparer execution if an error occurs, see IS_SHARE/system/config/cluster/dbinit.properties:

  • intershop.dbinit|dbmigrate.breakOnError=true|false, default false

The optional command line parameters for DBInit and DBMigrate are:

Mode

Both
DBinit
DBMigrate

Only
DBInit

Only
DBMigrate

Default Value

Description

Non-Interactive

breakOnError handling for dbinit/dbmigrate:

Failed preparers are listed but ignored. The processing continues to the end
if the default breakOnError=false is configured.

Example:
Success: bc_mvc:Class6          ...Preparer ...ms
Failure: bc_mvc:7.1.0.0:Class10 ...Preparer ...ms
Success: bc_preview_orm:Class1  ...Preparer ...ms

-!,-classic

classic mode, no beginning prompt to continue processing

-c=<KEYS>,--property-keys=<KEYS>

all

comma-separated list of preparer property <KEYS> to execute
(optional; <KEYS> = propertyKey,..., default: all for all preparer property keys)
example: -c=pre.Class42,post.Class13

-d=<FLAG>,--drop-useless-indexes=<FLAG>

true

drop useless indexes if <FLAG> is true
(optional; <FLAG> = true|false, default: true)

-h,--h,-help,--help,-?,?,/help,/h,/?

print this message

-i=<FLAG>,--move-indexes=<FLAG>

true

move database indexes to a separate tablespace if <FLAG> is true
(optional; <FLAG> = true|false, default: true)

-m=<FLAG>,--table-monitoring=<FLAG>

true

enable the database table monitoring for optimization reasons if <FLAG> is true
(optional; <FLAG> = true|false, default: true)

-t=<CARTRIDGES>,--cartridges=<CARTRIDGES>

all

process the comma-separated <CARTRIDGES> list
(optional; default: all for all entries in cartridgelist.properties)
example: -t=core,bc_foundation

-v=<FLAG>,-verbose=<FLAG>,--verbose=<FLAG>

false

display more information if <FLAG> is true
(optional; <FLAG> = true|false, default: false)

--dry-run

show only the preparation execution steps and do not execute any preparer

-is.share=<PATH>

the <PATH> location of shared directory
optional; default: reads the shared location from intershop.properties

-r=<FLAG>,--recreate-tables=<FLAG>

true

re-create database tables if <FLAG> is true
(optional; <FLAG> = true|false, default: true)

--exec-id=<IDs>

execution for a comma separated list of <IDs>
<IDs> = cartridge:propertyKey,...
example: --exec-id=core:pre.Class1,xcs:Class1

-b=<FLAG>,--database-backup=<FLAG>

true

backup the database before migration processing if <FLAG> is true
(optional; <FLAG> = true|false, default: true)

--dry-run-save

like --dry-run but additional save preparation steps to database to avoid
re-execution of long running steps during migration to the new DBmigrate program

--exclude-version-dependent

suppress execution of version dependent preparer

--exclude-version-independent

suppress execution of version independent preparer

--force-exec-all

re-execution for all steps

--force-exec-id=<IDs>

re-execution for a comma separated list of <IDs>
<IDs> = cartridge[:version]:propertyKey,...
example: --force-exec-id=core:Class1,core:7.4.0.0:Class1,xcs:post.Class1

--force-exec-name=<NAMES>

re-execution for a comma separated list of preparer <NAMES>
<NAMES> = name,name,...
example: --force-exec-name=DatabaseTablesPreparer

--force-exec-version=<VERSIONS>

re-execution for a comma separated list of <VERSIONS>
<VERSIONS> = version,version,...
example: --force-exec-version=7.4.0.0,7.4.1.0

--force-exec-prefix=<PREFIXES>

re-execution for a comma separated list of <PREFIXES>
<PREFIXES> = pre.Class|Class|post.Class
example: --force-exec-prefix=pre.Class,post.Class

7.1 DBInit

7.1.1 Startup

  1. Execute IS_HOME/bin/dbinit[.bat|.sh].

7.1.2 Preparer Configuration Files

The content of the (version-independent) dbinit.properties files looks like this:

dbinit.properties (core)
pre.Class1   = com.intershop.beehive.core.dbinit.preparer.database.DatabaseTablesPreparer
...
Class1       = com.intershop.beehive.core.dbinit.preparer.database.SQLScriptPreparer \
               resources/core/dbinit/scripts/utctimestamp.sql
...
post.Class50 = com.intershop.beehive.core.dbinit.preparer.locking.RemoveAllProcesses

7.2 DBMigrate

7.2.1 Startup

  1. Execute IS_HOME/bin/dbmigrate[.bat|.sh].

7.2.2 Preparer Configuration Files

Example: The content of the migration*.properties files looks like this:

migration.properties (core) version-independent
pre.Class0.5 = com.intershop.beehive.core.dbmigrate.preparer.database.DatabaseTablesPreparer
pre.Class1   = com.intershop.beehive.core.dbmigrate.preparer.database.BackupDatabasePreparer
...
Class1 = com.intershop.beehive.core.dbmigrate.preparer.database.DatabaseTablesPreparer
Class2 = com.intershop.beehive.core.dbmigrate.preparer.database.ExecuteSQLScriptPreparer \
         resources/core/dbinit/scripts/spmainfile.ddl
Class3 = com.intershop.beehive.core.dbmigrate.preparer.database.DatabaseIndexesPreparer \
         resources/core/dbinit/scripts/dbindex.ddl
Class4 = com.intershop.beehive.core.dbmigrate.preparer.database.DatabaseConstraintsPreparer \
         resources/core/dbinit/scripts/dbconstraints.ddl
...
post.Class50 = com.intershop.beehive.core.dbmigrate.preparer.locking.ReleaseAllResources

migration-to-7.3.0.0.properties (core) version-dependent
Class1 = com.intershop.beehive.core.dbmigrate.preparer.job.AddJobsPreparer \
         root \
         com/intershop/beehive/core/dbinit/data/job/JobConfigurations.properties \
         com/intershop/beehive/core/dbmigrate/data/7.3.0.0/job/JobConfigurationUUIDs.properties

Class2 = com.intershop.beehive.core.dbmigrate.preparer.job.UpdateJobsPreparer \
         root \
         com.intershop.beehive.core.dbinit.data.job.JobConfigurations

8 Error Analysis

All log files reside in IS_SHARE/system/log. The general log files of preparers are:

- General log files: <loglevel>-*-migration|dbinit-<date>.log
- SQL log files: <IS_SHARE>/system/log/dbmigrate|dbinit-sql/*/*.log

The main log file of DBInit and DBMigrate tool is:

- dbinit-*.log
- migration-*.log

General Java debugging is possible with IS_HOME/bin/dbinit|dbmigrate[.bat|.sh]. Remove the REM or # before the debug setting, example:

Windows
SET DEBUG=-Xdebug -Xnoagent -Xrunjdwp:transport=dt_socket,server=y,address=6666,suspend=n -Xint
Unix
DEBUG="-Xdebug -Xnoagent -Xrunjdwp:transport=dt_socket,server=y,address=6666,suspend=n -Xint"

Example log files:

dbinit-<host>-<install-ID>-dbinit.<date>.log
Startup DBInit (appserver mode DBInit)...
Startup finished in 34s
-------------------- pre-processing ---------------------
Success: core:pre.Class1 DatabaseTablesPreparer 1169ms
...
-------------------- main-processing --------------------
Success: core:Class1 SQLScriptPreparer [resources/core/dbinit/scripts/utctimestamp.sql] 194ms
...
-------------------- post-processing --------------------
Success: core:post.Class2 StagingEnvironmentPreparer [all] 0ms
...
-------------------- preparation summary ----------------
DBInit with 513 initialization steps (success: 513, failure: 0) finished in 1.037s
dbmigrate-<host>-<install-ID>-dbmigrate.<date>.log
Startup DBMigrate (appserver mode DBMigrate)...
Startup finished in 51s
-------------------- pre-processing ---------------------
Success: core:pre.Class0.5 DatabaseTablesPreparer 548ms
Success: core:pre.Class1 BackupDatabasePreparer 12ms
...
-------------------- main-processing --------------------
Success: core:Class1 DatabaseTablesPreparer 538ms
Success: core:Class2 ExecuteSQLScriptPreparer [resources/core/dbinit/scripts/spmainfile.ddl,disableLogging] 334ms
...
-------------------- post-processing --------------------
Success: core:7.3.2.0:post.Class1 MigrateStagingEnvironment 17447ms
Success: core:post.Class50 ReleaseAllResources 3ms
...
-------------------- preparation summary ----------------
Failure: bc_mvc:7.1.0.0:pre.Class2 ...
Failure: bc_marketing:7.3.1.0:pre.Class1 ....
...
DBMigrate with 446 executed (success: 434, failure: 12) and 0 skipped migration steps finished in 515s

Disclaimer

The information provided in the Knowledge Base may not be applicable to all systems and situations. Intershop Communications will not be liable to any party for any direct or indirect damages resulting from the use of the Customer Support section of the Intershop Corporate Web site, including, without limitation, any lost profits, business interruption, loss of programs or other data on your information handling system.

Customer Support
Knowledge Base
Product Resources
Support Tickets