|
|
sybperl-l Archive
Up Prev Next
From: Michael Burstin <mikeb at concerto dot com>
Subject: Re: Error in the script execution
Date: Jan 13 2003 6:09PM
Are you sure you are getting a valid database handle in the first
place? I don't think your check is valid:
> ###############################################
> ## Connect to the Target Server
> ###############################################
> my $tdbh = Sybase::CTlib->ct_connect("$opt_u", "$tpwd" ,"$opt_s");
>
> if($tdbh eq undef)
I didn't think you could test something being eq undef, just as in
Sybase, NULL != NULL. I am pretty sure you need
unless(defined($tdbh))
for this test. Don't know that this is your problem, but might be a
something to keep in mind.
On Mon, Jan 13, 2003 at 11:45:16AM -0500, Sabherwal, Balvinder (MBS) wrote:
> Gurus,
>
> I have a script to perform the dump and load for given database. The section
> of the script is given below. There are 2 parts of this script. Part 1
> handles the dump of the database and part 2 handles the load of the
> database.
>
> I'm trying to debug the script as it's not loading the database. The command
> it send to the server is working in the isql session, not from the script.
> The dump command is working fine and the same way is used to do the load.
> Could anyone help me figure this out as why my load command would not from
> the script?? Secondly, When I check for the errors after executing the load
> command, I'm getting error as "Can't use string
> ("ARRAY(0x42987c)ARRAY(0x429888)") as an ARRAY ref while "strict refs" in
> use at DBDumpLoad.pl line 313.".
>
> Thanks for all your help.
>
> ###############################################
> ## Execute the Database Dump command
> ###############################################
>
> $dlog = $sdbh->ct_sql("$dumpcmd");
>
> ###############################################
> ## Check for the errors in the dump command execution
> ###############################################
>
> ## I don't know if this is ok. I get no errors on execution ##
> if ( @$dlog =~ /Msg/m || @$dlog =~ /Error/m )
> {
> $errmsg .= "\n\n*** ERROR *** Dump of the database $opt_D on $opt_S
> failed \n";
> $errmsg .= @$dlog ;
> msg_send("$opt_M","DBDumpLoad.pl FAILED for $opt_S","$errmsg");
> exit(1);
> }
>
> ###############################################
> ## Connect to the Target Server
> ###############################################
> my $tdbh = Sybase::CTlib->ct_connect("$opt_u", "$tpwd" ,"$opt_s");
>
> if($tdbh eq undef)
> {
> $errmsg .= "\n\n*** ERROR *** Cannot open connection to $opt_s
> dataserver. \n The user id is $opt_u The location for the pwd file
> is $tfile \n ";
> msg_send("$opt_M","DBDumpLoad.pl FAILED for $opt_s","$errmsg");
> exit(1);
> }
> else
> {
> if ( uc("$opt_K") eq "Y" )
> {
> ###############################################
> ## Kill the users in the database before load
> ###############################################
> my $killcmd = $tdbh->ct_sql("select \"kill \"+convert(char,spid)
> from master..sysprocesses where db_name(dbid) = \"$opt_d\"");
> foreach my $cmd (@$killcmd)
> {
> $tdbh->ct_sql("@$cmd");
> }
> }
>
> ###########################################################################
> ## LOAD DATABASE COMMAND
> ###########################################################################
> if ( uc("$opt_t") eq "DISK" and uc("$opt_O") eq "L" and $opt_P > 1 )
> {
> open(FL,"< $opt_f");
> while ( FL )
> {
> chomp($_);
> $dmpfile .= "stripe on $_";
> }
> }
> my $cmd = substr($dmpfile,10);
> $dmpfile = $cmd;
>
> if ( uc("$opt_t") eq "DISK" and ( !$opt_G or uc("$opt_G") eq "N" ) )
> {
> $dmpfile = "$opt_f"."/"."$opt_D.dmp";
> }
>
> if ( uc("$opt_t") eq "TAPE" )
> {
> $dmpfile = "$opt_f";
> }
>
> if ( uc("$opt_T") eq "D" )
> {
> if ( $opt_C )
> {
> $dumpcmd = "Load database $opt_d from
> \"compress::"."$opt_C"."::$dmpfile\"" ;
> }
> else
> {
> $dumpcmd = "Load database $opt_D from \"$dmpfile\"" ;
> }
> }
> else {
> if ( $opt_C )
> {
> $dumpcmd = "Load tran $opt_D from
> \"compress::"."$opt_C"."::$dmpfile\"" ;
> }
> else
> {
> $dumpcmd = "Load tran $opt_D from \"$dmpfile\"" ;
> }
> }
>
> ###############################################
> ## Execute the Database Load command
> ###############################################
> $llog = $tdbh->ct_sql("$dmpfile");
>
> ###############################################
> ## Execute the online Database command
> ###############################################
> if ( uc("$opt_o") eq "Y")
> {
> $llog .= $tdbh->ct_sql("online database $opt_d");
> }
> ###############################################
> ## Check for the errors in load and online database commands
> ###############################################
>
> ####################################
> foreach my $l ( @$llog ) ## This is line 313 in the script ##
> { ####################################
> if ( @$l =~ /Msg/m )
> {
> $errmsg .= "\n\n*** ERROR *** Load of the database $opt_d
> failed \n";
> $errmsg .= @$llog ;
> msg_send("$opt_M","DBDumpLoad.pl FAILED for
> $opt_S","$errmsg");
> exit(1);
> }
> }
>
> ############################
> ## DEBUG Screen Outputs
> ############################
> #######################################
> ## Load cmd being sent to dataserver ##
> #######################################
> DB<8> p $dumpcmd
> Load database RepStd from "compress::3::/tmp/RepAct.dmp"
>
> #######################################
> ## value for the database handle ##
> #######################################
> DB<9> p $tdbh
> Sybase::CTlib=HASH(0x429894)
>
--
Michael Burstin
NPI Engineer
Concerto Software
978-952-0842
mikeb@concerto.com
|