Folgende Ausgangssituation:
Eine Datenbank (Oracle 8i) muß oft mit vielen Datensätzen gefüllt werden (ca.500000). Blöderweise können sie nicht einfach importiert werden, sondern müssen zuvor übersetzt werden und braucht viel Zeit.
Die Daten werten gezippt im csv-format via uploadskript auf den Server gelegt und entpackt.
Mein 1. Versuch war ein PHP Skript, dass Übersetzt und dann mit INSERT einfügt. Dauert aber über 30 Minuten....solange darf die PHP-Andendung nicht blockiert sein.
Daher mein 2. Versuch:
eine Batchdatei, die zuerst die Datensätze in eine temporäre Tabelle improtiert und dann ein PL-Skript in Oracle startet, welches die Übersetzung vornimmt und die Daten dann in die richtige Tabelle befördert, nicht ohne nachher die temporäre Tabelle zu löschen. Das dauert fast gleichlang wie Versuch 1 aber kann im Hintergrund rennen und ist somit akzeptabel.
Hier nun das Problem: wenn ich die Batchdatei anklicke, rennt alles problemlos. Wenn ich sie aber mit PHP durch
exec('d:\\wwwroot\\TGW\\include\\scripts\\ldcsv.bat > &');
aufrufe, passiert nichts.
Muß ich der php.exe spezielle Recht geben, damit ich die batchdatei in vollem Umfang ausführen kann?
Inhalt der Batchdatei ldcsv.bat:
@echo off
title Datenimport nach ORACLE
echo Import startet
set ORACLE_SID=TEST
if exist lockimport.txt goto LOCK
date /t > lockimport.txt
sqlldr userid=test/test control=ldcsv.ctl
sqlplus test/test @start_import.sql
del lockimport.txt
goto ENDE
:LOCK
rem schreibe protokoll
sqlplus test/test @schreibelockfehler.sql
:ENDE
exit
____________________________-
System:
Windows XP Pro, IIS 5, PHP 4.3.8, Oracle 8i.
Dank im Voraus, Martin
Eine Datenbank (Oracle 8i) muß oft mit vielen Datensätzen gefüllt werden (ca.500000). Blöderweise können sie nicht einfach importiert werden, sondern müssen zuvor übersetzt werden und braucht viel Zeit.
Die Daten werten gezippt im csv-format via uploadskript auf den Server gelegt und entpackt.
Mein 1. Versuch war ein PHP Skript, dass Übersetzt und dann mit INSERT einfügt. Dauert aber über 30 Minuten....solange darf die PHP-Andendung nicht blockiert sein.
Daher mein 2. Versuch:
eine Batchdatei, die zuerst die Datensätze in eine temporäre Tabelle improtiert und dann ein PL-Skript in Oracle startet, welches die Übersetzung vornimmt und die Daten dann in die richtige Tabelle befördert, nicht ohne nachher die temporäre Tabelle zu löschen. Das dauert fast gleichlang wie Versuch 1 aber kann im Hintergrund rennen und ist somit akzeptabel.
Hier nun das Problem: wenn ich die Batchdatei anklicke, rennt alles problemlos. Wenn ich sie aber mit PHP durch
exec('d:\\wwwroot\\TGW\\include\\scripts\\ldcsv.bat > &');
aufrufe, passiert nichts.
Muß ich der php.exe spezielle Recht geben, damit ich die batchdatei in vollem Umfang ausführen kann?
Inhalt der Batchdatei ldcsv.bat:
@echo off
title Datenimport nach ORACLE
echo Import startet
set ORACLE_SID=TEST
if exist lockimport.txt goto LOCK
date /t > lockimport.txt
sqlldr userid=test/test control=ldcsv.ctl
sqlplus test/test @start_import.sql
del lockimport.txt
goto ENDE
:LOCK
rem schreibe protokoll
sqlplus test/test @schreibelockfehler.sql
:ENDE
exit
____________________________-
System:
Windows XP Pro, IIS 5, PHP 4.3.8, Oracle 8i.
Dank im Voraus, Martin
Kommentar