phpbar.de logo

Mailinglisten-Archive

[php] OCICommit-Problem

[php] OCICommit-Problem

Grewing, Sebastian Sebastian.Grewing_(at)_telekom.de
Tue, 24 Oct 2000 15:04:04 +0200


> 
> "snapshot too old: rollback segment number 2 with name 'RBS1 
> too small"

Du musst das Rollback Segmet vergroessern, das wird helfen.
 
> while ( OCIFetch($stmt) ) {
>   \\** innerhalb dieser Schleife x-mal aehnliche Anweisungen 
> wie folgt:
>   $sql1 = "INSERT INTO ".$table01." (xx,yy,zz) VALUES (XX,YY,ZZ)";
>   $stmt2 = ociparse($conn,$sql1);
>   ociexecute($stmt2,OCI_DEFAULT);
>   ...
>   OCIFreeStatement($stmt2);
>   ...
>   ocicommit($conn);
> }
> ocicommit($connsrc);
> OCIFreeStatement($stmt);
> ...

Du fuehrst in Deinem Script wahrscheinlich erst mal mehrere
hundert inserts aus, diese gehen zunaechst mal in das
Rollback-Segment, und dann kommt erst der commit.

> Wieso gibt es ueberhaupt einen rollback-Fehler? Nach einem 
> commit sollte
> doch kein Rollback mehr moeglich sein - wozu werden also 
> anscheinend immer
> noch rollback-Infos irgendwo im Speicher "aufgehoben"?
> 
> Wo muss ich den Fehler suchen? In meinem Script? Bei Oracle? 
> Bei PHP 3.0.16?
Bei Oracle ...

Bei Oracle werden zunaechst alle Aenderungsdaten erst in die 
Rollbacksegmente geschrieben und anschließend bei einem Commit
in das eigentliche Datenfile geschrieben. Das hat den Vorteil
einer "Undo"-Funktion. So ist es moeglich Aenderungen nochmal 
zurueck zu nehmen.

Bei einer Standardinstallation sind die RB-Segmente nur 1MB groß,
das sollte bei Deinen Datenmengen schon zu klein sein.

-- Seb


php::bar PHP Wiki   -   Listenarchive