8

I am trying to install Perl module DBD::Oracle on my RHEL6.1 server. While doing so, I followed following steps:

  1. Installation of following RPMs:

    • oracle-instantclient12.1-basic-12.1.0.2.0-1.x86_64.rpm
    • oracle-instantclient12.1-devel-12.1.0.2.0-1.x86_64.rpm
    • oracle-instantclient12.1-sqlplus-12.1.0.2.0-1.x86_64.rpm
  2. Exporting environment variables

    export ORACLE_HOME=/usr/lib/oracle/12.1/client64

    export LD_LIBRARY_PATH=/usr/lib/oracle/12.1/client64/lib

  3. Installing DBD::Oracle

    cpan -i DBD::Oracle

While doing so, it gives following error message:

Installing on a linux, Ver#2.6
Using Oracle in /usr/lib/oracle/12.1/client64
DEFINE _SQLPLUS_RELEASE = "1201000200" (CHAR)
Oracle version 12.1.0.2 (12.1)

        Unable to locate an oracle.mk or other suitable *.mk
        file in your Oracle installation.  (I looked in
        /usr/lib/oracle/12.1/client64/rdbms/demo/demo_xe.mk /usr/lib/oracle/12.1/client64/rdbms/lib/oracle.mk /usr/lib/oracle/12.1/client64/rdbms/demo/oracle.mk /usr/lib/oracle/12.1/client64/rdbms/demo/demo_rdbms.mk /usr/lib/oracle/12.1/client64/rdbms/demo/demo_rdbms64.mk /usr/lib/oracle/12.1/client64/rdbms/lib/ins_rdbms.mk /usr/share/oracle/12.1/client64/demo.mk under /usr/lib/oracle/12.1/client64)

        The oracle.mk (or demo_rdbms.mk) file is part of the Oracle
        RDBMS product.  You need to build DBD::Oracle on a
        system which has one of these Oracle components installed.
        (Other *.mk files such as the env_*.mk files will not work.)
        Alternatively you can use Oracle Instant Client.

        In the unlikely event that a suitable *.mk file is installed
        somewhere non-standard you can specify where it is using the -m option:
                perl Makefile.PL -m /path/to/your.mk

        See the appropriate README file for your OS for more information and some alternatives.

     at Makefile.PL line 1187.
Warning: No success on command[/usr/bin/perl Makefile.PL INSTALLDIRS=site]
  PYTHIAN/DBD-Oracle-1.74.tar.gz
  /usr/bin/perl Makefile.PL INSTALLDIRS=site -- NOT OK
Running make test
  Make had some problems, won't test
Running make install
  Make had some problems, won't install

What's wrong with the installation process? I followed this guide.

Community
  • 1
  • 1
Mandar Shinde
  • 1,735
  • 4
  • 20
  • 28

5 Answers5

25

After the installation and setup of the Oracle Instant Client, use the normal build steps without the cpan tool, and pass the -l option to the Makefile.PL

  1. Download the tar.gz package and unpack it

  2. Build it

    perl Makefile.PL -l
    make && make test
    
  3. Install

    make install
    
Miller
  • 34,962
  • 4
  • 39
  • 60
Miguel Prz
  • 13,718
  • 29
  • 42
  • I have wasted half a day trying to find this. Thanks, it solved my problem. Though what does the -l flag actually do? – sbnarra Mar 03 '15 at 15:48
  • same here!! everywhere I searched, people were being admonished to read the README file, but the file said VERY little about InstantClient! I'm in total shock that it came down to adding -l. Holy smokes. THANK YOU! – Glenn Mar 20 '16 at 00:19
  • One other detail: among my failed attempts to get the ding-dong thing to install, I did SOMETHING that caused two softlinks to be created: ## sudo ln -s libclntsh.so.11.1 libclntsh.so ## sudo ln -s libocci.so.11.1 libocci.so ## And yes, I verified that creating those links was not sufficient; the magic was in adding that '-l' as above. – Glenn Mar 20 '16 at 23:31
  • @Arran Check out lines 132..134 or 192 of [DBD::Oracle's Makefile.PL](https://metacpan.org/source/PYTHIAN/DBD-Oracle-1.74/Makefile.PL) – tjd Jun 14 '16 at 17:00
15

Actually if you want to use the rpms and cpan to install, you have to set ORACLE_HOME to the lib folder, not just client64 and add sqlplus to the path :

export ORACLE_HOME=/usr/lib/oracle/12.1/client64/lib
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/lib/oracle/12.1/client64/lib/
export PATH=$PATH:/usr/lib/oracle/12.1/client64/bin

with that cpan -i DBD::Oracle returns no error.

QuickFix
  • 11,661
  • 2
  • 38
  • 50
  • Did you install instant client rpms or the entire oracle database? When I install with instant client I dont see the demo/demo.mk mentioned in the error. – partyd Mar 01 '18 at 19:10
1

The only thing the CPAN installer can't find is a suitable *.mk file. Oracle must be playing a game of cat and mouse with the CPAN installer because the installer is searching in several locations for several filenames.

I used the command

locate -r '\.mk$'

to find that demo.mk is now located in /usr/lib/oracle/12.1/client64/demo/ instead of /usr/lib/oracle/12.1/client64/

So I created a symbolic link

sudo ln -s /usr/share/oracle/12.1/client64/demo/demo.mk /usr/share/oracle/12.1/client64/demo.mk

and the CPAN installer succeeded.

chadclan
  • 68
  • 5
  • Did you do a full DB install or just the instant client? I cant find this demo/demo.mk file when installing just the instant client. – partyd Mar 01 '18 at 18:55
  • Thanks for this answer, it works. It's important that CPAN installers work because we do everything we can not to be running needed modules form the system Perl directories (using Carton). – Marcus Apr 18 '18 at 13:09
1

I was able to use CPAN to install DBD::Oracle for 11.2.0.4 by installing the following 3 instant client RPM packages:

  • oracle-instantclient11.2-sqlplus-11.2.0.4.0-1.x86_64
  • oracle-instantclient11.2-devel-11.2.0.4.0-1.x86_64
  • oracle-instantclient11.2-basic-11.2.0.4.0-1.x86_64

Once I got those installed, cpan was able to build. This is with CentOS 7.3.1611.

0

Before you begin you need to:

  • Download Oracle 12c instant client and SDK:

    • instantclient-basic-linux.x64-12.2.0.1.0.zip
    • instantclient-sdk-linux.x64-12.2.0.1.0.zip
    • instantclient-sqlplus-linux.x64-12.2.0.1.0.zip
  • Install with the command:

    sudo apt-get install libaio1

  • Download and unwrap DBD::Oracle package witn the command:

    cpan get DBD::Oracle

If you've got DBD::Oracle 1.74 + Oracle 12c (12.2.0.1) and Ubuntu 18 Application under Windows 10 then you need more changes.

  1. Comment row 1613 in Makefile.PL

    #local $ENV{PATH} = join $Config{path_sep}, "$OH_path/bin", $OH_path, $ENV{PATH} if $OH;

  2. Replace row 1630

    my $sqlplus_release = `sqlplus -S /nolog \@define.sql`;

with the rows

my $sqlplus_release = qq {SQL> DEFINE _SQLPLUS_RELEASE
DEFINE _SQLPLUS_RELEASE = "1202000100" (CHAR)
SQL> QUIT};
  1. Execute Perl script as:

    perl Makefile.PL -l

  2. Replace rows 569-581 (because Ubuntu under Windows does not support paths with colon) with the rows below:

    lib/DBD/Oracle.pm $(INST_MAN3DIR)/DBD_Oracle.$(MAN3EXT) \ lib/DBD/Oracle/GetInfo.pm $(INST_MAN3DIR)/DBD_Oracle_GetInfo.$(MAN3EXT) \ lib/DBD/Oracle/Object.pm $(INST_MAN3DIR)/DBD_Oracle_Object.$(MAN3EXT) \ lib/DBD/Oracle/Troubleshooting.pod $(INST_MAN3DIR)/DBD_Oracle_Troubleshooting.$(MAN3EXT) \ lib/DBD/Oracle/Troubleshooting/Aix.pod $(INST_MAN3DIR)/DBD_Oracle_Troubleshooting_Aix.$(MAN3EXT) \ lib/DBD/Oracle/Troubleshooting/Cygwin.pod $(INST_MAN3DIR)/DBD_Oracle_Troubleshooting_Cygwin.$(MAN3EXT) \ lib/DBD/Oracle/Troubleshooting/Hpux.pod $(INST_MAN3DIR)/DBD_Oracle_Troubleshooting_Hpux.$(MAN3EXT) \ lib/DBD/Oracle/Troubleshooting/Linux.pod $(INST_MAN3DIR)/DBD_Oracle_Troubleshooting_Linux.$(MAN3EXT) \ lib/DBD/Oracle/Troubleshooting/Macos.pod $(INST_MAN3DIR)/DBD_Oracle_Troubleshooting_Macos.$(MAN3EXT) \ lib/DBD/Oracle/Troubleshooting/Sun.pod $(INST_MAN3DIR)/DBD_Oracle_Troubleshooting_Sun.$(MAN3EXT) \ lib/DBD/Oracle/Troubleshooting/Vms.pod $(INST_MAN3DIR)/DBD_Oracle_Troubleshooting_Vms.$(MAN3EXT) \ lib/DBD/Oracle/Troubleshooting/Win32.pod $(INST_MAN3DIR)/DBD_Oracle_Troubleshooting_Win32.$(MAN3EXT) \ lib/DBD/Oracle/Troubleshooting/Win64.pod $(INST_MAN3DIR)/DBD_Oracle_Troubleshooting_Win64.$(MAN3EXT)

    1. Make with the command:

    make && make test

    1. Install with the command

    sudo make install

And hope that you've got all prerequisites installed before you begin.