Oracle FAQ Your Portal to the Oracle Knowledge Grid
HOME | ASK QUESTION | ADD INFO | SEARCH | E-MAIL US
 

Home -> Community -> Mailing Lists -> Oracle-L -> Re: Raw device backup script

Re: Raw device backup script

From: Steven Lembark <lembark_at_wrkhors.com>
Date: Thu, 09 May 2002 12:26:35 -0800
Message-ID: <F001.0045D8A6.20020509122635@fatcity.com>

> but I need a script that backups over 20 raw devices
> datafiles to a TAPE without using a FS to store these
> datafiles first.

To a single tape or multiple ones? If it's a single tape then you are in for a real fun time trying to restore the stuff...

This is skeletal but should give you a reasonable starting point for a working backup:

#!/usr/bin/perl -w

$\ = "\n";
$, = "\n\t";

use Carp;

my @rawvolz =
qw(

    /dev/foo
    /dev/bar
);

sub run
{

    for my $cmd ( @_ )
    {

        print "$$: system($cmd)";

        if( my $exit = system($cmd) )
        {
            print "STDERR: coredump" if $exit & 128;

            if( $exit < 0 )
            {
                croak "$$: failed system call: $!";
            }
            elsif( my $status = $exit >> 8 )
            {
                croak "$$: Nonzero exit: $exit";
            }
            elsif( my $signal = $exit & 0xFF )
            {
                croak "$$: Zapped by SIG-$signal";
            }
        }

    }
}

sub mt
{

    for my $cmd ( @_ )
    {

        if( system "mt $cmd" < 0 )
        {
            croak "$$: Failed system call: $!";
        }
        elsif( $? == 1 )
        {
            croak "$$: Invalid tape device: $ENV{TAPE}";
        }
        elsif( $? == 2 )
        {
            croak "$$: Tape operation failed: $!";
        }
        else
        {
            croak "$$: Flaky exit from mt: $!";
        }

    }
}

print "$$: Checking tape: $ENV{TAPE}";

# if these don't work there's little chance the backups will.

mt 'erase', 'status';

# ok., some hope, start the fireworks...

print "$$: Backing up:", @rawvolz;

my $blocksize = 1024 * 1024 * 80; # whatever

my $file = 0;

for my $raw ( @rawvolz )
{

    # keep track of the file order for later restore.

    print "$$: $raw :" . ++$file;

    run qq{dd if='$raw' of='$ENV{TAPE}' obs='$blocksize'};

    mt 'eof';
}

# avoid cinches in the tape and make sure not to overwrite
# a valid backup with a new one if someone forgets to change
# the tape.

mt 'retension', 'rewoffl';

# this isn't a module

0

__END__

--
Steven Lembark                               2930 W. Palmer
Workhorse Computing                       Chicago, IL 60647
                                            +1 800 762 1582
-- 
Please see the official ORACLE-L FAQ: http://www.orafaq.com
-- 
Author: Steven Lembark
  INET: lembark_at_wrkhors.com

Fat City Network Services    -- (858) 538-5051  FAX: (858) 538-5051
San Diego, California        -- Public Internet access / Mailing Lists
--------------------------------------------------------------------
To REMOVE yourself from this mailing list, send an E-Mail message
to: ListGuru_at_fatcity.com (note EXACT spelling of 'ListGuru') and in
the message BODY, include a line containing: UNSUB ORACLE-L
(or the name of mailing list you want to be removed from).  You may
also send the HELP command for other information (like subscribing).
Received on Thu May 09 2002 - 15:26:35 CDT

Original text of this message

HOME | ASK QUESTION | ADD INFO | SEARCH | E-MAIL US