Re: DBD::ODBC - SQL Server - odbc_err_handler - inconsistent results

From: Chuck Fox (chuckfox2_at_aol.com)
Date: 12/11/03

  • Next message: Gil Vidals: "Client Hanging on Execute. How to debug?"
    Date: Thu, 11 Dec 2003 14:19:10 -0500
    To: Louise.Mitchell@pnl.gov
    
    

    Louise,

    Louise.Mitchell@pnl.gov wrote:

    >All,
    >
    >Several days ago, I learned how to use the odbc_err_handler subroutine
    >provided by DBD::ODBC... in order to capture the 'message' spit out for
    >non-DDL/DML commands in a SQL Server, such as 'backup' or 'dbcc'.
    >
    >The first batch of commands tested were a variety of backup commands and
    >then DBCC CHECKDB... and the output was all in the variable, as
    >expected...
    >
    >But then I tested a DBCC INDEXDEFRAG.... in the Query Analyzer it spews
    >out some output (not much)... but when I run it thru my process, no
    >output is returned...
    >
    >Anybody have any clues? Code snippet below..
    >
    >
    did you set dbcc traceon( 3604 ) first ? Doesn't appear below. The
    traceon ( 3604 ) sends the output to the client, otherwise it falls into
    the error log of the server.

    >L
    >********************
    >Snippet for connection:
    >
    > $dbh_actions = DBI->connect
    > ("dbi:ODBC:Driver={SQL
    >Server};Server=$action_server;Trusted_Connection=yes;",'','',
    > { PrintError => 0,
    > RaiseError => 0,
    > LongReadLen => 65536,
    > odbc_async_exec => 0,
    > odbc_err_handler => sub {
    > my ($state, $msg) = @_;
    > # Strip out all of the driver ID
    >stuff
    > $msg =~ s/^(\[[\w\s]*\])+//;
    > $err_text .= $msg."\n";
    > return 0;
    > }
    > }
    > );
    >
    >Snippet to execute:
    >
    >sub just_do_it
    >{
    > my $command = shift;
    > my $sth = $dbh_actions->prepare($command);
    > my $rc;
    > print "** command in sub: $command \n";
    >
    > if ( $sth )
    > {
    > $rc = $sth->execute(); # This is the 'do it'.....
    > if ( ! $rc ) # Error
    > {
    > # Save error messages to email
    > $err_msgs{"GROUP: $group_name - ITEM: $item_id"} =
    > "Command executed:
    >$command\n-------------------------------------\nError
    >Message:\n$err_text";
    > }
    > }
    > else
    > {
    > # Save error messages to email
    > $err_msgs{"GROUP: $group_id - ITEM: $item_id"} =
    > "Command executed:
    >$command\n--------------------------------------\nError
    >Message:\n$err_text";
    > }
    >
    > print "\nCOMMAND OUTPUT:\n$err_text\n";
    > $err_text = '';
    > return $rc;
    >
    >

    HTH,

    Chuck


  • Next message: Gil Vidals: "Client Hanging on Execute. How to debug?"