równoległe zaplanowane zadania i ora-27477

0

Potrzebujesz: aby Oracle uruchomił skrypt powłoki, który wykonuje przetwarzanie tabel i danych w bazie danych Oracle. Skrypt jest tworzony przez określoną aktywność klientów internetowych.

Problem: Klienci sieci Web wykonują to zadanie jednocześnie. Aby wykonać skrypty powłoki z Oracle, musisz to zrobić za pomocą harmonogramu Oracle. To zadanie jest ustawione na natychmiastowe wykonanie z Oracle. W dokumentacji ORA-27477 widzę, że Oracle nie zezwala na jednoczesne uruchamianie zadań o tej samej nazwie.

Tło: Musimy uruchomić to konkretne zadanie przetwarzania z powłoki, ponieważ używa C do ciężkiego podnoszenia. Przeniesienie tego kodu do PL / SQL nie jest opcją. W grze jest też wiele starszych kodów, co mnie zasmuca, ale takie jest życie.

mlehmeher
źródło

Odpowiedzi:

0

Możesz utworzyć nowe zadanie dla każdego uruchomienia lub skopiować istniejące zadanie za pomocą DBMS_SCHEDULER.COPY_JOB. W obu przypadkach możesz użyć DBMS_SCHEDULER.GENERATE_JOB_NAMEdo wygenerowania unikalnych nazw zadań.

Balazs Papp
źródło
Nie wiedziałem o tej funkcji generowania nazw, która wygląda obiecująco. Czy po utworzeniu i korzystaniu z zadania odrzucenie go byłoby właściwą metodą, aby uniknąć z czasem pojawienia się 1000 unikatowych zadań?
mlehmeher
Nie ma potrzeby ręcznego usuwania zadań. Możesz ustawić auto_dropatrybut na PRAWDA podczas tworzenia zadania, więc zadanie zostanie automatycznie odrzucone po zakończeniu.
Balazs Papp,
Wszystko to działa. Świetna informacja. Następnym krokiem byłoby przekazanie wygenerowanej nazwy do programu docelowego. Czy jest na to sposób? Przydatne byłoby przekazanie tego do skryptu systemu operacyjnego, aby uniknąć kolizji, gdy uruchomionych jest wiele zadań jednocześnie.
mlehmeher
Spójrz na DBMS_SCHEDULER.CREATE_JOB( number_of_arguments => ..., ...)i DBMS_SCHEDULER.SET_JOB_ARGUMENT_VALUE.
Balazs Papp,