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);
}
}
}