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

% ENV không hoạt động và tôi không thể sử dụng thư viện được chia sẻ

LD_LIBRARY_PATH biến môi trường phải được đặt trước chương trình của bạn bắt đầu - trước perl chính nó đã được tải. Thay đổi nó trong BEGIN{} sẽ ảnh hưởng đến các chương trình mới mà bạn bắt đầu, nhưng nó sẽ không ảnh hưởng đến việc tải thư viện được chia sẻ - trong trường hợp này (mặc dù tôi chưa bao giờ sử dụng DBD ::Oracle), bạn đang tải một .so của Oracle vào chương trình đã chạy, vì vậy đã “quá muộn” để thay đổi LD_LIBRARY_PATH . Trình liên kết động /lib/ld.so (hoặc lâu hơn) được bắt đầu trước perl , do đó, vào thời điểm tập lệnh của bạn được biên dịch và BEGIN{} đang chạy, nó đã được thiết lập.

Bạn có thể cố gắng thực thi lại tập lệnh của bạn dưới dạng kế thừa của chính nó hoặc thứ gì đó *, nhưng một tập lệnh shell ngắn gần như chắc chắn sẽ là giải pháp đơn giản nhất:

  #!/bin/sh
  export LD_LIBRARY_PATH=/usr/lib/oracle/10.2.0.3/client64/lib
  export ORACLE_SID=prod
  exec /usr/local/bin/your-db-program "[email protected]"

* - điều này hơi điên rồ, nhưng TIMTOWTDI:

  eval { 
     use DBD::Oracle foo bar baz; …
  };
  if ([email protected] =~ /install_driver\(Oracle\) failed/) {
     $ENV{LD_LIBRARY_PATH} .= ':/usr/lib/oracle/10.2.0.3/client64/lib';
     $ENV{ORACLE_SID} = 'prod';
     warn "Restarting with LD_LIBRARY_PATH reset:\n\[email protected]\n";
     exec { $0 } $0 => @ARGV;
  }


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Vấn đề tính toán tuần của Oracle

  2. Sử dụng DISTINCT cho các cột cụ thể

  3. làm thế nào để lặp lại việc chấp nhận đầu vào của người dùng với pl / sql?

  4. Chọn số lượng (*) từ nhiều bảng

  5. Tại sao Oracle 9i xử lý một chuỗi rỗng là NULL?