Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Gọi tập lệnh shell từ PL / SQL, nhưng shell được thực thi dưới dạng người dùng lưới, không phải oracle

Vấn đề, như đã chỉ ra trong các nhận xét, là Runtime.getRuntime ().. Thực thi chạy qua EXTPROC và do đó thông qua Grid Listener. Vì chúng tôi có sự cô lập người dùng hệ điều hành giữa DB và GRID trên cấu hình mới của chúng tôi, điều này đã gây ra sự cố về quyền trên FS.

Giải pháp cho vấn đề này là một trong những giải pháp dưới đây:

  • Sửa quyền FS để cho phép người dùng lưới ghi tệp và thay đổi umask thành một thứ gì đó như 774 hoặc 664, vì vậy cả người dùng lưới và người dùng oracle đều có thể sửa đổi tệp sau này;

  • thay đổi tệp sudoers và cho phép lưới thực thi các lệnh cần thiết như oracle mà không cần mật khẩu và thay đổi tập lệnh shell để bao gồm sudo;

  • tạo trình lắng nghe mới trên DB Home trên một cổng khác và thay đổi mục nhập TNSNAMES.ORA để trỏ đến cổng mới. Sau đó, extproc sẽ được thực thi với tư cách là tiên tri người dùng hệ điều hành. Bạn sẽ phải chỉnh sửa thủ công LISTENER.ORA trên $ OH và bắt đầu nó bằng lsnrctl, vì những người nghe đã đăng ký với srvctl sẽ luôn được bắt đầu bằng lưới;

  • thay đổi bộ nghe chính sang nhà db. Tôi không khuyến nghị điều đó (xem mục ở trên).

[EDIT] Như đã chỉ ra bởi @AlexPoole và @jonearles, có hai tùy chọn khác không phù hợp với trường hợp của tôi nhưng có thể dành cho những người khác:

  • nếu bạn chạy tập lệnh cục bộ trên sqlplus, thiết lập ORACLE_SID, thì quyền truy cập FS sẽ được thực hiện bởi người dùng OS đang chạy sqlplus. Vì vậy, bạn có thể chạy với tư cách là nhà tiên tri hoặc một số người dùng khác và sửa các quyền FS;
  • nếu bạn lên lịch công việc trên bộ lập lịch dbms_job dưới dạng SYS, công việc sẽ được oracle thực thi (hành vi này có thể phụ thuộc vào phiên bản, vì vậy cần phải kiểm tra thêm).

Trân trọng,

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. Chế độ xem cụ thể hóa với Oracle

  2. Làm cách nào để chuyển đổi ngày được lưu trữ dưới dạng VARCHAR2 thành 'MM / DD / YYYY HH24:MI:SS'?

  3. cx_Oracle và Xử lý ngoại lệ - Các phương pháp hay?

  4. Oracle SQLPlus ORA-01017 thông tin đăng nhập không hợp lệ khi chỉ định lược đồ

  5. Tự động tạo biểu thức lambda với các hằng số từ các biến