#!/usr/bin/perl # requires psexec from sysinternals # exp should not be used for backup purposes... but that is exactly what I am doing here :-( # Any and all advice is greatly appreciated require DBI; my ($dbh, $sth); $dbh = DBI->connect('DBI:ODBC:DSN,'system','pass'); # ODBC connect unless ($dbh->ping) { print "Error opening database: $DBI::errstr\n"; exit; } else { #print "\n\nQuerying DB\n\n"; } my $connected = $dbh->ping; $sql = "SELECT username FROM all_users"; my $sth = $dbh->prepare($sql); $sth->execute() or die $dbh->errstr; while(my @result=$sth->fetchrow_array) { push @username, $result[0]; } foreach( @username ) { if ( (not($_ =~ /(SQLNAV$)/)) and (not($_ =~ /(ENTMGR$)/)) and (not($_ =~ /(SYS$)/)) and (not($_ =~ /(SYSTEM$)/)) and (not($_ =~ /(SQLNAV$)/)) and (not($_ =~ /(PUBLIC$)/)) and (not($_ =~ /(ORA_MONITOR$)/)) and (not($_ =~ /(OSE\$HTTP\$ADMIN$)/)) and (not($_ =~ /(ORA_MONITOR$)/)) and (not($_ =~ /(OUTLN$)/)) and (not($_ =~ /(ENTMGR2$)/)) and (not($_ =~ /(AURORA\$JIS\$UTILITY\$$)/)) and (not($_ =~ /(AURORA\$ORB\$UNAUTHENTICATED$)/)) and (not($_ =~ /(DBSNMP$)/)) and (not($_ =~ /(QUEST$)/)) and (not($_ =~ /(QNXO$)/)) ) { print $_ . "\n"; system ("psexec \\\\oracle_server_IP_or_NetBIOS -u domain\\administrator -p password exp " . $_ . "/" . $_ . "\@DB_Instance file=D:\\orabacks\\" . "$_" . ".dmp grants=Y owner=" . $_ . " rows=Y compress=Y"); print "\n"; #die; } }