gDBClone «gDBClone_Snap.pm line 1292»

Si estás utilizando gDBClone para hacer snapshots de tus bases de datos sobre acfs, habrás notado que en la última versión (3.0.2-19) publicada el 2017-06-30, cuando haces un snap de tus bases de datos, previamente clonadas, aparece un error en el momento:

INFO: 2017-07-07 18:09:08: ...Creating controlfile for database 'test11gd'
Unsuccessful open on filename containing newline at /opt/gDBClone/lib/gDBClone_Snap.pm line 1292.
ERROR: 2017-07-07 18:09:08: SNAP DB creation phase 2 cannot be continued due to errors

Bueno, no está todo perdido, si buceas en el log del gDBClone ejecutado, aparece:

2017-07-07 18:09:08: INFO: ...Creating controlfile for database 'test11gd'
2017-07-07 18:09:08: Generating the control file script for 'test11gd' from the controlfile backup 'SYS@test11gt> alter session set tracefile_identifier='ctrlbackup';
2017-07-07 18:09:08: Unable to open the file SYS@test11gt> alter session set tracefile_identifier='ctrlbackup';
2017-07-07 18:09:08: ERROR: SNAP DB creation phase 2 cannot be continued due to error

 

si buceas un poco más en los scripts y abres el lib/gDBClone_Queries.pm

sub bkupCtrlFile { my ($db_name, $passwd) = @_;
trace("Taking backup of controlfile for the database '$db_name'");
my %conn_attr = getDbConAttr($db_name, $passwd) ;
my $sid = getSID($db_name); $conn_attr{'sid'} = $sid;
my $ctrlbkuptag = "ctrlbackup";
my @sql_stmts = ( 
"alter session set tracefile_identifier='$ctrlbkuptag'",
"alter database backup controlfile to trace",
"oradebug setmypid",
"oradebug tracefile_name", 
"exit" );
my $sqlname = "bkupctrlfile"."_".$db_name."_".$PID.".sql";
my @output = execSqlStmts(\%conn_attr, \@sql_stmts, $sqlname);
my $rc = shift @output; if ($rc == SQL_EXECUTION_FAILED) { die("Unable to take the backup of control file");
}
my @out = grep (/$ctrlbkuptag/i, @output);
trace(@output);
logInfo(\@sql_stmts, \@output);
return $out[0];
}

 

puedes resolverlo cambiando esta línea:

my @out = grep (/$ctrlbkuptag/i, @output);

por esta otra:

my @out = grep (/$db_name/i, @output);

Porque nosotros queremos recibir el nombre del tracefile, con este script lo recibimos dos veces, pero solo la primera entrada es la que utiliza… tu puedes ver los nombres de los tracefiles generados:

[oracle@xxxxx trace]$ pwd
/u01/app/oracle/diag/rdbms/test11gt/test11gt/trace
[...]
-rw-rw---- 1 oracle dba   255 jul  7 22:28 test11gt_ora_82462_ctrlbackup.trm
-rw-rw---- 1 oracle dba 33372 jul  7 22:28 test11gt_ora_82462_ctrlbackup.trc

 

Si ahora ejecutamos nuevamente el script, vemos que ya continua el script sin pararse en el anterior punto:

INFO: 2017-07-08 00:36:48: ...Creating controlfile for database 'test11gd'
INFO: 2017-07-08 00:36:51: ...Opening the database 'test11gd' with resetlogs
INFO: 2017-07-08 00:37:03: ...Setting the temporary tablespace for database 'test11gd'

 

Espero que esta información sea útil para cualquiera y os ahorre tiempo 😉

Añadiendo valor con Arumel!!