6f429244e498457b8400e72e4af683b0 Alberto Blog: Complex_view_merging - DataPump

venerdì 25 marzo 2011

Complex_view_merging - DataPump

Un paio di giorni fa mi sono imbattuto in un bug Oracle precisamente il 5879865 presente nel mia 10.2.0.3.
Dopo delle ricerche in internet ho pensato di sfruttare il Metalink e in effetti il bug è ben noto e viene presentata la risoluzione finale applicando la patch oppure un accrocchio (workaround) finchè la patch non fosse uscita, questo documento veniva scritto nel Gennaio 2008 e modificato a settembre 2010.
Ad oggi ho verificato,  la patch è stato rilasciata ma non ovviamente per tutti gli OS, infatti per Windows non c'è ancora.
Allora sono intervenuto come descritto nel workaround.
In pratica l'errore che si verificava era questo usando DataPump nel mio caso:

ORA-39014: One or more workers have prematurely exited.
ORA-39029: worker 1 with process name "DW01" prematurely terminated
ORA-31672: Worker process DW01 died unexpectedly.
The alert log shows a core dump:
ORA-07445: exception encountered: core dump [ACCESS_VIOLATION] [_evaopn2+578]

Il problema è che se una sub-query utilizza l'EXISTS e va ad intterogare una vista non-mergeable si verifica questo errore.

La soluzione proposta in assenza di patch è quella di modificare principalmente 3 parametri:

_complex_view_merging
event
_optimizer_cost_based_transformation

in

alter system set event= '38066 trace name context forever, level 2' scope=spfile;
alter system set "_complex_view_merging" = false scope=spfile;
alter system set "_optimizer_cost_based_transformation"=off scope=spfile;

Ho preferito farlo utilizzando anche scope=spfile anche se dopo l'istanza andava riavviata, tuttavia si poteva fare anche a livello solo di system eliminando il parametro scope.

In effetti dopo questa modifica il Data Pump ha ripreso a funzionare.

L'unica cosa che mi stupisce è che in un altro database sempre Oracle 10.2.0.3 però nella versione Enterprise,  questo errore non è mai avvenuto.

Nessun commento:

Posta un commento