RE: Migration dbi files ?



Henrik Nilsson wrote:
What Perl binary hash file? I was referring to the contents of the
database (tables, procedures, constraints, etc). If you have a binary
object stored in the dB, export/import won't make it portable.

No, this was no Oracle database matter but a Perl hash file (which I
think is in binary format) matter. Sorry, perhaps I didn't make this
clear. So the problem is really, how to make such a file work on
another os...?

1) If you can get the data you need out of Oracle, use its
exp/imp programs, otherwise:

2) If you're trying to move a small DBM file (one of the AnyDBM_File
derivatives) from one platform to another, follow these steps. By
"small", I mean that it will fit in your system's virtual memory.

A) Open the database with tie() like usual.

# replace "SOME_File" with the right module name.
tie my %database, 'SOME_File', 'filename', ...

B) use Storable's nstore to store a portable binary representation:

# note, you cannot store by reference, you must make a copy.
use Storable qw(nstore);
nstore({%database}, 'filename.bin') || die $!;

C) On the destination system, use Storable's retrieve to load the
data, and put it back into the database.

use Storable qw(retrieve);
$db_data = retrieve('filename.bin') || die $!;
%database = %$db_data;

3) If you're trying to move a *large* DBM file (larger than will fit in
virtual memory), you'll need to dump it a little at a time. Using a
CSV file is an option:

A) Open the database with tie() like usual.

# replace "SOME_File" with the right module name
tie my %database, 'SOME_File', 'filename', ...

B) Iterate over the name/value pairs (using "each" -- not "keys"), and
store each one in the CSV file.

use Text::CSV_XS;
my $csv = Text::CSV_XS->new(); # be sure to read perldoc
while (my ($k,$v) = each %database) {
$csv->combine($k,$v)
|| die "can't combine row for key '$k'";
print OUTFILE $csv->string(), "\n";
}

C) On the destination system, read the CSV file and populate the
database file with its contents.

use Text::CSV_XS;
my $csv = Text::CSV_XS->new();
while (<>) {
$csv->parse($_) || die "can't parse line $.";
my ($k,$v) = $csv->fields;
$database{$k} = $v;
}


Regards,
Philip
.



Relevant Pages

  • Re: public and private mailboxes randomly dismounting
    ... When posting logs an important piece is the Event ID and Source. ... Information Store First Storage Group: An attempt to move the file ... An error occurred while writing to the database log file of storage group ...
    (microsoft.public.windows.server.sbs)
  • Re: cant mount information store
    ... I then reinstalled exchange and then installed exchange 2003 ... Information Store First Storage Group: Database recovery failed ... Microsoft Exchange Information Store. ...
    (microsoft.public.windows.server.sbs)
  • Re: Many Exchange errors!
    ... Event Source: ESE ... Information Store First Storage Group: An attempt to move the file ... An error occurred while writing to the database log file of storage group ...
    (microsoft.public.windows.server.sbs)
  • Re: Many Exchange errors!
    ... Event Source: ESE ... Information Store First Storage Group: An attempt to move the file ... An error occurred while writing to the database log file of storage group ...
    (microsoft.public.windows.server.sbs)
  • Re: Many Exchange errors!
    ... Event Source: ESE ... Information Store First Storage Group: An attempt to move the file ... An error occurred while writing to the database log file of storage group ...
    (microsoft.public.windows.server.sbs)