Cách cài đặt Perl DBD :: Oracle với Oracle Instant Client trên macOS Catalina

Dec 17 2020

Tôi đang chạy macOS Catalina 10.15.7 và tôi cần cài đặt Oracle Instant Client để chạy tập lệnh Perl kết nối với DB.

1. Cài đặt Oracle Instant Client

Tôi đã tải xuống các gói tôi cần:

  • Gói ánh sáng cơ bản (DMG)
  • Gói SDK (DMG)
  • Gói ODBC (DMG)

Từ Instant Client 19.8 và làm theo hướng dẫn cài đặt mà không gặp bất kỳ sự cố nào (chỉ sao chép và dán)

Các tệp được trích xuất trong /Users/username/Downloads/instantclient_19_8

2. Cài đặt ORACLE_HOME

Tiếp theo, tôi đã đặt ORACLE_HOME thành /Users/username/Downloads/instantclient_19_8

export ORACLE_HOME=/Users/username/Downloads/instantclient_19_8

3. Cài đặt DBD::Oracle

Khi tôi cố gắng cài đặt, DBD::Oracletôi gặp lỗi sau:

$ cpanm DBD::Oracle
--> Working on DBD::Oracle
Fetching http://www.cpan.org/authors/id/M/MJ/MJEVANS/DBD-Oracle-1.80.tar.gz ... OK
Configuring DBD-Oracle-1.80 ... N/A
! Configure failed for DBD-Oracle-1.80. See /Users/username/.cpanm/work/1608142485.48272/build.log for details.

Nội dung của tệp nhật ký:

$ cat /Users/username/.cpanm/work/1608142485.48272/build.log
cpanm (App::cpanminus) 1.7044 on perl 5.032000 built for darwin-thread-multi-2level
Work directory is /Users/username/.cpanm/work/1608142485.48272
You have make /usr/bin/make
You have LWP 6.47
You have /usr/bin/tar: bsdtar 3.3.2 - libarchive 3.3.2 zlib/1.2.11 liblzma/5.0.5 bz2lib/1.0.6
You have /usr/bin/unzip
Searching DBD::Oracle () on cpanmetadb ...
--> Working on DBD::Oracle
Fetching http://www.cpan.org/authors/id/M/MJ/MJEVANS/DBD-Oracle-1.80.tar.gz
-> OK
Unpacking DBD-Oracle-1.80.tar.gz
Entering DBD-Oracle-1.80
Checking configure dependencies from META.json
Checking if you have Config 0 ... Yes (5.032000)
Checking if you have Encode 0 ... Yes (3.06)
Checking if you have Math::BigInt 0 ... Yes (1.999818)
Checking if you have Devel::Peek 0 ... Yes (1.28)
Checking if you have Test::More 0 ... Yes (1.302177)
Checking if you have ExtUtils::MakeMaker 6.58 ... Yes (7.44)
Checking if you have Data::Dumper 0 ... Yes (2.174)
Checking if you have DBI 1.623 ... Yes (1.643)
Checking if you have Test::NoWarnings 0 ... Yes (1.04)
Configuring DBD-Oracle-1.80
Running Makefile.PL
Using DBI 1.643 (for perl 5.032000 on darwin-thread-multi-2level) installed in /usr/local/Cellar/perl/5.32.0/lib/perl5/site_perl/5.32.0/darwin-thread-multi-2level/auto/DBI/
Configuring DBD::Oracle for perl 5.032000 on darwin (darwin-thread-multi-2level)

If you encounter any problem, a collection of troubleshooting
guides are available under lib/DBD/Oracle/Troubleshooting.
'DBD::Oracle::Troubleshooting' is the general troubleshooting
guide, while platform-specific troubleshooting hints
live in their labelled sub-document (e.g., Win32
hints are gathered in 'lib/DBD/Oracle/Troubleshooting/Win32.pod').

Trying to find an ORACLE_HOME
Your DYLD_LIBRARY_PATH env var is set to ''

      The ORACLE_HOME environment variable is not set and I couldn't guess it.
      It must be set to hold the path to an Oracle installation directory
      on this machine (or a machine with a compatible architecture).
      See the appropriate troubleshooting guide for your OS for more information.
      ABORTED!

-> N/A
-> FAIL Configure failed for DBD-Oracle-1.80. See /Users/username/.cpanm/work/1608142485.48272/build.log for details.

Tôi đã đọc ở đây mà ORACLE_HOMEnên được thiết lập với giá trị của các thư mục chứa các /binthư mục nhưng tôi không thể tìm thấy bất kỳ /bin.

Trả lời

2 ChristopherJones Dec 17 2020 at 05:12

macOS luôn thay đổi, nhưng trên Mojave, tôi đã cài đặt Instant Client từ DMG và sau đó:

brew install perl
ln -s $HOME/Downloads/instantclient_19_8 $HOME/instantclient
export DYLD_LIBRARY_PATH=$HOME/instantclient
cpan -i -T DBI
cpan -i -T DBD::Oracle

Nói chung, không bao giờ đặt ORACLE_HOME cho Ứng dụng khách tức thì. (Nó có thể khiến các tệp cấu hình sai được đọc). ORACLE_HOME được sử dụng cho cơ sở dữ liệu 'đầy đủ' hoặc cài đặt ứng dụng khách đầy đủ, không dành cho Ứng dụng khách tức thì. Tuy nhiên, một số trình cài đặt vẫn tham chiếu đến biến để tìm tệp xây dựng, vì vậy bạn sẽ cần nó - ít nhất là tại thời điểm xây dựng. DBD :: Oracle sẽ tìm kiếm nội bộ cho Ứng dụng khách tức thời và sử dụng $ HOME / Instantclient nếu $ ORACLE_HOME không được đặt.

macOS đã dần dần loại bỏ tính hữu ích của DYLD_LIBRARY_PATH, vì nó không được phổ biến đến các biểu mẫu con. Điều này có nghĩa là nó không thể được sử dụng một cách đáng tin cậy. Trên Mojave, tôi thấy mình có thể sao chép các thư viện Ứng dụng khách tức thì sang $ HOME / lib / và không cần đặt DYLD_LIBRARY_PATH.

Lưu ý: nếu bạn đang sử dụng DBD :: Oracle, bạn không cần gói ODBC Ứng dụng khách tức thì.