Avatar billede Swift Praktikant
15. juli 2008 - 13:33 Der er 7 kommentarer og
1 løsning

DBI - BACKUP DATABASE rapporterer ikke fejl??

Jeg har et script der tager backup, men det fanger ikke fejl fra MS SQL.
Scriptet melder OK, men via SQL Server Logs kan man se at nogle backups fejler. Og det er tilfældigt hvilke og hvornår de fejler. (Og har ikke noget med pladsproblemer at gøre)

Her er den teknik jeg p.t. bruger:
my $sql = qq{
  BACKUP DATABASE "$database->{database}"
  TO DISK = '$local_filename'
  WITH NAME = N'$database->{database} backup',
  INIT,
  NOSKIP,
  NOFORMAT
};
my $rows = $dbh->do($sql) or die $dbh->errstr;
if ($dbh->err || ($rows!=-1)) {
  print "\tERRSTR: " . $dbh->errstr . "\n";
} else {
  print "\tDET GIK FINT!\n";
}

Men som sagt, så fejler nogle backups uden at denne kode opdager det.

Jeg har siddet og kigget på:
  $dbh->{odbc_err_handler} = \&sql_err_handler;
  $dbh->{odbc_exec_direct} = 1;
Men jeg kan ikke få det til at fungere.

JEG VIL JO BARE HAVE EN INDIKATION FOR OM BACKUP'en GIK GODT ELLER EJ.
(Ja, okay, hvis det er en teknik der er bedre så der aldrig sker fejl, så ville det jo selvfølgelig være bedre!)

NOGLE FORSLAG?
Avatar billede Slettet bruger
15. juli 2008 - 13:43 #1
hvad med denne

my $rows = $dbh->do($sql) or die $dbh->errstr;

hvis af en eller anden grund $dbh->errstr er tom så ser du ikke noget.

Måske en ide hvis du smider en eval uden om den så du kan fange den die og derved levere en pæn afsnitning af dit program. Det er generelt en god ide at anvende eval.
Avatar billede Swift Praktikant
15. juli 2008 - 15:25 #2
Jeg har prøvet at udskrive 'err', 'errstr' og et par andre feedbacks på DBH, men der er hverken noget i dem når det går godt eller når det går skidt...
Og den dør iøvrigt aldrig, så en eval er ikke relevant for det aktuelle problem.
Avatar billede Slettet bruger
15. juli 2008 - 15:37 #3
så prøb at sætte nogle warn "blah" ind rundt omkring (eller noget som skriver til en fil) for at se om de enkelte ting faktisk går godt, hvordan kan du være sikker på at den ikke dør?
Avatar billede Swift Praktikant
17. juli 2008 - 09:18 #4
Jeg har faktisk allerede en eval, jeg tog den bare ikke med, da jeg ikke synes det er vigtigt - og derfor ved jeg at den aldrig dør, den logger til nogle flade filer.

Andre gode forslag?
Avatar billede Slettet bruger
17. juli 2008 - 10:21 #5
ikke andet end at du manuelt forsøger at få programmet til at dø rundt omkrign for at se om den behandler det korrekt.

Det er jo heller ikke til at sige hvad der skal rettes når man ikke kan se hele programmet.
Avatar billede Swift Praktikant
17. juli 2008 - 17:20 #6
Jeg har bare på fornemmelsen at det ikke vil føre nogen vejne, medmindre man begynder at ændre i koden i DBI modulet.

Jeg har på fornemmelsen at ->do() bare ikke er ordentlig implementeret til at returnere den slags "ikke tabel tekst" som kommer retur fra SQL serveren?

Er der nogle der har info om den idé ?
Avatar billede Slettet bruger
17. juli 2008 - 17:42 #7
jeg tror nu nok at de folk som har lavet DBI ved hvad de gør, men jeg er slet ikke klar over hvad det er du forsøger at lave.

Men ok det er MS SQL og supporten til denne kunne tænkes at halte, anvender selv MySQL
Avatar billede Swift Praktikant
26. februar 2009 - 22:13 #8
Lukker og slukker uden at have fundet en løsning.

Hvis der er nogle der kommer i tanke om en måde hvorpå man via Perl kan starte SQL jobs, og med sikkerhed få feedback om det er fået godt, så vil jeg gerne vide det...
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester