Nathaniel J. Graham


DBIx::Migrate - DBI extension for 'batch-mode' table migration


  use DBI;
  use DBIx::Migrate;

$source = DBI->connect('dbi:Oracle:dbase1', ...);

$target = DBI->connect('dbi:mysql:dbase2', ...);

$migration = DBIx::Migrate->new(SOURCE => $source, TARGET => $target, # optional CLOBBER => 1, TABLES => [ qw(tbl1 tb12 ..etc..) ] # optional TYPE_TRANSLATE => $hash_ref );

$tables_copied = $migration->migrate;


DBIx::Migrate is a DBI extension for 'batch-mode' table migration. Let's suppose you want to create a MySQL mirror of several related tables in an Oracle database. DBIx::Migrate will do just that. If the target MySQL table does not exist, an attempt is made to create a MySQL version of the original Oracle table structure. The big problem here is that not all databases use universal data types. So depending on the driver, you'll probably need to alter the TYPE_TRANSLATE parameter. By default, the TYPE_TRANSLATE parameter looks like this:

TYPE_TRANSLATE = { qw! 1 char 2 numeric 3 decimal 4 integer 5 smallint 6 float 7 real 8 double 9 date 10 time 11 timestamp 12 varchar -1 text -2 binary -3 varbinary -4 blob -5 bigint -6 tinyint -7 bit -8 wchar -9 wvarchar -10 wlongvarchar ! };

Please note that DBIx::Migrate does not create indexes on target tables. You'll have to do that by hand.

Also, a fatal error will result if you attempt to create a table that already exists in the target database. If you want to override this behavior, set the CLOBBER parameter to true.

SEE ALSO is the official home page for DBIx::Migrate.


Nathaniel Graham, <>


Copyright 2003 by Nathaniel Graham

This module is free software; you can redistribute it and/or modify it under the same terms as Perl itself.