On Sat, Sep 13, 2003 at 01:08:27PM -0400, Jeff Urlwin <[EMAIL PROTECTED]> wrote:
> >
> > Is there a way to execute an SQL command and get the
> > messages, not the records?
> >
> > I mean, I'd like to run
> > DBCC CHECKDB ('databasename')
> > parse the output and add the result to a daily report of my
> > servers' health. The question is how do I get the messages.
> >
> > I'm using DBI+DBD::ODBC and MS SQL Server 2000.
>
> Buried in the DBD::ODBC t/20SqlServer.t is an example. You need to set an
> error handler and set odbc_async_exec. In there is the snippet that calls
> "dbcc TRACESTATUS(-1)" which runs during the tests (the safest thing I think
> I could find to run on generic tests, but I believe DBCC
> CHECKDB('databasename') was the reason the original patches were submitted
> by David L. Good and included by me... The only "clear" documentation is in
> the Changes file. The Changes file also points to a specific file which
> calls checkdb...
You don't really need to set odbc_async_exec unless you need to get the
messages as soon as possible after they are generated. In my case, I wanted
to be able to send an alert as soon as my program saw a DBCC error but still
let the DBCC continue. Unfortunately, it seems that ODBC buffers the output,
so even with odbc_async_exec set you get the messages in chunks, so an error
could sit in a buffer for quite some time (say, while a really large table
is being DBCC'd) before you'll see it.
>
> use strict;
>
> use DBI;
>
> sub err_handler {
> my ($state, $msg) = @_;
> # Strip out all of the driver ID stuff
> $msg =~ s/^(\[[\w\s]*\])+//;
> print "===> state: $state msg: $msg\n";
> return 0;
> }
>
> my $dbh = DBI->connect("dbi:ODBC:PERL_TEST_SQLSERVER", $ENV{DBI_USER},
> $ENV{DBI_PASS})
> || die "Can't connect: $DBI::errstr\n";
>
> $dbh->{odbc_err_handler} = \&err_handler;
> $dbh->{odbc_async_exec} = 1;
> print "odbc_async_exec is: $dbh->{odbc_async_exec}\n";
>
> my $sth;
> $sth = $dbh->prepare("dbcc checkdb(model)") || die $dbh->errstr;
> $sth->execute || die $dbh->errstr;
> $sth->finish;
> $dbh->disconnect;
>
>
> Regards,
>
> Jeff
>
> >
> > Thanks, Jenda
> > (And sorry if it's on line XX of the fine manual and I just
> > did not find it:) ===== [EMAIL PROTECTED] ===
> > http://Jenda.Krynicky.cz ===== When it comes > to wine, women
> > and song, wizards are allowed to get drunk and croon as much
> > as they like.
> > -- Terry Pratchett in Sourcery
> >
> >
> >
> >
>
--
David Good [EMAIL PROTECTED]
This space intentionally left blank.