Ich habe mir eine Prozedur erstellt, die im jeweiligen Datenbankschema Objekte ausliest und mir deren DDL in eine .sql-Datei speichert.
Solange ich Häppchen verwende, die klein genug sind, klappt das wunderbar. Aber bei 20-30 Dateien bekomme ich plötzlich eine Exception bei jeder weiteren Datei!
Zuerst ein Auszug aus der Ausgabe:
Mein PLSQL-Code ist wie folgt:
Kann sich jemand dieses Verhalten erklären? Normalerweise zeigt diese Fehlermeldung Rechteprobleme. Aber das kann in diesem Fall wohl kaum der Grund sein.
Aufgefallen ist mir ansonsten nur die "Logging-Seite", die mehrfach die Meldung "Exception while updating observer[6]: oracle.jdeveloper.java.provider.ProjectFileProvide r$ProjectObserver@1afb94af" bringt - ob es damit zusammenhängt weiß ich nicht. Die Anzahl der Fehlermeldungen aus dem Ausführungsfenster stimmen damit nämlich nicht überein.
Solange ich Häppchen verwende, die klein genug sind, klappt das wunderbar. Aber bei 20-30 Dateien bekomme ich plötzlich eine Exception bei jeder weiteren Datei!
Zuerst ein Auszug aus der Ausgabe:
create_table_protokoll.sql
create_table_reklamationen.sql
create_table_rueckmelde_codes.sql
create_table_rueckmeldestufen.sql
-29283ORA-29283: invalid file operation
ORA-06512: at "SYS.UTL_FILE", line 536
ORA-29283: invalid file operation
create_table_scanner.sql
-29283ORA-29283: invalid file operation
ORA-06512: at "SYS.UTL_FILE", line 536
ORA-29283: invalid file operation
create_table_reklamationen.sql
create_table_rueckmelde_codes.sql
create_table_rueckmeldestufen.sql
-29283ORA-29283: invalid file operation
ORA-06512: at "SYS.UTL_FILE", line 536
ORA-29283: invalid file operation
create_table_scanner.sql
-29283ORA-29283: invalid file operation
ORA-06512: at "SYS.UTL_FILE", line 536
ORA-29283: invalid file operation
Code:
CREATE OR REPLACE PROCEDURE SICHERUNG_ERSTELLEN AS vFHandle UTL_FILE.FILE_TYPE; vDatei varchar2(1024); vInhalt CLOB; c_amount CONSTANT BINARY_INTEGER := 32767; l_buffer VARCHAR2(32767); l_chr10 PLS_INTEGER; l_clobLen PLS_INTEGER; l_pos PLS_INTEGER := 1; CURSOR curData IS SELECT owner, object_type, object_name, last_ddl_time, status FROM all_objects WHERE owner='VERSAND' AND object_type = 'TABLE' -- IN ('TABLE', 'VIEW', 'PACKAGE', 'FUNCTION', 'PROCEDURE', 'TRIGGER') ORDER BY object_name ASC; BEGIN FOR cur_rec IN curData LOOP BEGIN --Datei erstellen vDatei := lower('create_' || cur_rec.object_type || '_' || cur_rec.object_name || '.sql'); dbms_output.put_line(vDatei); vFHandle := UTL_FILE.FOPEN('dpump_prod', vDatei, 'W'); --DDL anfordern SELECT DBMS_METADATA.GET_DDL(cur_rec.object_type,cur_rec.object_name) INTO vInhalt FROM dual; l_clobLen := DBMS_LOB.GETLENGTH(vInhalt); l_pos := 1; vFHandle := UTL_FILE.FOPEN('dpump_prod', vDatei, 'W', c_amount); --DDL-Text durchlaufen und zeilenweise speichern WHILE l_pos < l_clobLen LOOP BEGIN l_buffer := DBMS_LOB.SUBSTR(vInhalt, c_amount, l_pos); l_chr10 := INSTR(l_buffer,CHR(10),-1); IF l_chr10 != 0 THEN l_buffer := SUBSTR(l_buffer,1,l_chr10-1); END IF; UTL_FILE.PUT_LINE(vFHandle, l_buffer, TRUE); l_pos := l_pos + LEAST(LENGTH(l_buffer)+1,c_amount); EXCEPTION WHEN OTHERS THEN dbms_output.put_line(sqlcode || sqlerrm); END; END LOOP; EXCEPTION WHEN OTHERS THEN dbms_output.put_line(sqlcode || sqlerrm); END; END LOOP; UTL_FILE.FCLOSE(vFHandle); END SICHERUNG_ERSTELLEN;
Aufgefallen ist mir ansonsten nur die "Logging-Seite", die mehrfach die Meldung "Exception while updating observer[6]: oracle.jdeveloper.java.provider.ProjectFileProvide r$ProjectObserver@1afb94af" bringt - ob es damit zusammenhängt weiß ich nicht. Die Anzahl der Fehlermeldungen aus dem Ausführungsfenster stimmen damit nämlich nicht überein.
Comment