Hey gang-

This is the same code I've been running for weeks as part of my hot backup
script, but last night it failed with an error message contradicted by what
was in the log file. I can't get it to error this morning, despite my best
efforts, so I'm thinking there's an external factor here. Does anyone know
of anything external that might cause DBI and Oracle to trip on a do
statement?

Log entries (the alter statements are EXACTLY what went in the do statements
- first two succeeded, last one failed):
03:02:28 08/28/2001: Resizing datafile /data01/oradata/prd1/temp02.dbf
 alter database datafile '/data01/oradata/prd1/temp02.dbf' resize 1058799616
03:02:30 08/28/2001: Resizing datafile /data01/oradata/prd1/temp01.dbf
 alter database datafile '/data01/oradata/prd1/temp01.dbf' resize 1064148992
03:02:32 08/28/2001: Resizing datafile /data01/oradata/prd1/temp03.dbf
 alter database datafile '/data01/oradata/prd1/temp03.dbf' resize 5248565248

Code:

    if ($tsName eq "TEMP") {

      $getBlockSizeSQL = "SELECT blocksize
                          FROM sys_dba_segs
                          WHERE segment_name = 'DUAL'";
      $getBlockSizeHandle = $dbh->prepare($getBlockSizeSQL);
      $getBlockSizeHandle->execute()
        || die "Can't get blocksize from sys_dba_segs " .
$getBlockSizeHandle->e
rrstr;
      $getBlockSizeHandle->bind_columns(undef, \$blocksize);
      $getBlockSizeHandle->fetch;

      $getFileNumSql = "SELECT file_name, file_id
                        FROM dba_data_files
                        WHERE tablespace_name = 'TEMP'";
      $getFileNumHandle = $dbh->prepare($getFileNumSql);
      $getFileNumHandle->execute();
      $getFileNumHandle->bind_columns(undef, \$filename, \$fileID);

      while ($getFileNumHandle->fetch) {
        $files{$fileID} = $filename;
      }

      $releaseSpaceSql = "ALTER TABLESPACE temp
                          DEFAULT STORAGE (PCTINCREASE 0)";
      $dbh->do($releaseSpaceSql);

      foreach $id (keys %files) {
        $getResizeToSql = "SELECT max(block_id + blocks)*$blocksize +
5242880
                           FROM dba_extents
                           WHERE file_id = $id";
        $getResizeToHandle = $dbh->prepare($getResizeToSql);
        $getResizeToHandle->execute();
        $getResizeToHandle->bind_columns(undef, \$size);

        while ($getResizeToHandle->fetch) {
          if ($size) {
            $resizeSql = "alter database datafile '$files{$id}' resize
$size";
          } else {
            $resizeSql = "alter database datafile '$files{$id}' resize 10M";
          }
          log_message("Resizing datafile $files{$id}\n $resizeSql");
          $dbh->do($resizeSql);
        }
      }
    }

Reply via email to