Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Wywoływanie skryptu powłoki z PL/SQL, ale powłoka jest wykonywana jako użytkownik siatki, a nie wyrocznia

Problem, jak wskazano w komentarzach, polega na tym, że Runtime.getRuntime().exec działa przez EXTPROC, a więc przez odbiornik siatki. Ponieważ w naszej nowej konfiguracji mamy izolację użytkowników systemu operacyjnego między DB i GRID, spowodowało to problem z uprawnieniami w FS.

Rozwiązaniem tego jest jedno z poniższych:

  • Napraw uprawnienia FS, aby umożliwić użytkownikowi grida zapisywanie plików i zmianę umask na coś takiego jak 774 lub 664, dzięki czemu zarówno użytkownicy grida, jak i Oracle będą mogli później modyfikować pliki;

  • zmień plik sudoers i zezwól gridowi na wykonywanie poleceń wymaganych jako wyrocznia bez hasła i zmień skrypt powłoki, aby zawierał sudo;

  • utwórz nowy nasłuch w DB Home na innym porcie i zmień wpis TNSNAMES.ORA tak, aby wskazywał na nowy port. Następnie extproc zostanie uruchomiony jako wyrocznia użytkownika systemu operacyjnego. Będziesz musiał ręcznie wyedytować LISTENER.ORA na $OH i uruchomić go z lsnrctl, ponieważ detektory zarejestrowane z srvctl będą zawsze uruchamiane przez siatkę;

  • zmień głównego słuchacza na db home. Nie polecam (patrz punkt powyżej).

[EDIT]Jak wskazał @AlexPoole i @jonearles, istnieją dwie inne opcje, które nie pasowały do ​​mojego przypadku, ale mogą być dla innych:

  • jeżeli uruchomisz skrypt lokalnie na sqlplus, ustawiając ORACLE_SID, dostęp do FS będzie wykonywany przez użytkownika systemu operacyjnego używającego sqlplus. Możesz więc uruchomić jako oracle lub inny użytkownik i poprawić uprawnienia FS;
  • Jeśli zaplanujesz zadanie w harmonogramie zadań dbms_job jako SYS, zadanie zostanie wykonane przez Oracle (to zachowanie może być zależne od wersji, więc potrzebne są dalsze testy).

Pozdrawiam,

Daniel Stolf



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oracle Rolling lub Running sumy według miesiąca

  2. SQL - Jak wybrać wiersz mający kolumnę o maksymalnej wartości

  3. Używanie procedury składowanej Oracle PL/SQL do przyznawania praw do tabel innego użytkownika

  4. Wyrażenie regularne SQL do dzielenia kolumny (ciągu) na wiele wierszy na podstawie separatora '/n'

  5. PL SQL :Jak pokazać nanosekundy TIMESTAMP