Categories
Mac Mac setup Tech

Oracle 12.1.0.2.0 in Vagrant CentOS virtual machine

Running Oracle on macOS is impossible? No, I show you how to install the Oracle database in a Vagrant CentOS virtual machine on your Mac.

VirtualBox

Go to the webpage of VirtualBox and download the latest version from their download page, e.g. version 5.1.10 as DMG file. If you have previously installed an earlier version of VirtualBox, that’s no problem. Just install the new version over the older one by running the setup.

Vagrant

Download the latest Vagrant version from their downloads webpage, e.g. version 1.9.0 from here. If you already installed an older version just install the new version over the old version.

CentOS virtual machine

To install Oracle, first create a directory where you want to install the Oracle version. From the Terminal run:

$ cd ~/
$ mkdir oracle12vm
$ cd oracle12vm/

We want to install Oracle on a CentOS 7.1 machine, so we setup the CentOS 7.1 machine first. Fortunately, we don’t need to do that as Vagrant already provides one:

$ vagrant init centos/7; vagrant up --provider virtualbox

Note that you have to enable X11Forwarding on your host Mac in the file /etc/ssh/sshd_config to allow the Oracle setup window to be forwarded from the guest CentOS virtual machine to the host Mac system. Check the file, remove the # in front of the X11Forwarding and set its value to yes:

X11Forwarding yes

Now, connect to the guest CentOS virtual machine that we have just created:

$ vagrant ssh

As soon as you are connected, you will see the following message:

Last login: Wed Jan 4 16:10:20 2017 from 10.0.2.2
[vagrant@localhost ~]$

Now install gcc, kernel headers, and some more on the guest machine using the yum package manager:

[vagrant@localhost ~]$ yum install -y dkms binutils gcc make patch libgomp glibc-headers glibc-devel kernel-headers kernel-devel

On the Mac host system, go to the VirtualBox website again and download the VirtualBox guest additions and place them in the shared directory, where they are available in the guest virtual machine. I’ve downloaded the file VBoxGuestAdditions_5.1.10.iso and placed it in ~/oracle12vm.

In the guest virtual machine, mount the VirtualBox guest additions that are placed within the shared directory and install them:

[vagrant@localhost ~]$ sudo mkdir /media/VBoxGuestAdditions
[vagrant@localhost ~]$ sudo mount -o loop,ro /vagrant/VBoxGuestAdditions_5.1.10.iso /media/VBoxGuestAdditions
[vagrant@localhost ~]$ sudo sh /media/VBoxGuestAdditions/VBoxLinuxAdditions.run --nox11

Now test that the X11Forwarding is working and start an X11 application on the guest that should be displayed on the host Mac system. You can e.g. install clock, then disconnect:

[vagrant@localhost ~]$ sudo yum install -y clock
[vagrant@localhost ~]$ exit

Connect again to the guest virtual machine, but allow X11 forwarding:

$ vagrant ssh -- -vvv -X

After you are connected, you can run xclock and check whether the forwarding is working:

[vagrant@localhost ~]$ xclock

If you see the clock appearing on your Mac operating system, it works!

Oracle

While staying connected with the X11 forwarding enabled, we first have to do some preparation.

Create swap file

To install Oracle, an 8 GB swap file is required on the guest virtual machine.
To set up the swap file run the commands (note that my system is German):

[vagrant@localhost ~]$ sudo dd if=/dev/zero of=/swapfile count=8192 bs=1M
8192+0 Datensätze ein
8192+0 Datensätze aus
8589934592 Bytes (8,6 GB) kopiert, 15,3429 s, 560 MB/s
[vagrant@localhost ~]$ sudo chmod 600 /swapfile
[vagrant@localhost ~]$ sudo mkswap /swapfile
Swapbereich Version 1 wird angelegt, Größe = 8388604 KiB
kein Label, UUID=58d89ea9-4eb8-4e87-82a8-3611fe91e08c
[vagrant@localhost ~]$ sudo swapon -v /swapfile
swapon /swapfile
swapon: /swapfile: found swap signature: version 1, page-size 4, same byte order
swapon: /swapfile: pagesize=4096, swapsize=8589934592, devsize=8589934592

Download Oracle software

The Oracle software can be downloaded from the Oracle webpage after login. The following two files will be needed:
File 1: http://download.oracle.com/otn/linux/oracle12c/121020/linuxamd64_12102_database_1of2.zip
File 2: http://download.oracle.com/otn/linux/oracle12c/121020/linuxamd64_12102_database_2of2.zip

Place the two files in the shared directory on your Mac system in ~/oracle12vm.

Install Oracle

For the installation I recommend to follow the guide on the CentOS wiki at https://wiki.centos.org/HowTos/Oracle12onCentos7.

Troubleshooting

If you receive the error:

INFO: /usr/bin/ld: cannot find -ljavavm12
collect2: Fehler: ld gab 1 als Ende-Status zurück
INFO: /usr/bin/ld: cannot find -ljavavm12
collect2: Fehler: ld gab 1 als Ende-Status zurück

Then run the following copy command (note that the paths may be different for you):

[vagrant@localhost ~]$ sudo cp /u01/app/oracle/product/12.1.0/dbhome_1/javavm/jdk/jdk6/lib/libjavavm12.a /u01/app/oracle/product/12.1.0/dbhome_1/lib/

Environment variables

Also on the guest virtual machine, set the Oracle environment variables.
Create the following file:

[vagrant@localhost ~]$ sudo vi /etc/profile.d/oracle.sh

Add the following content to the file:

TMPDIR=$TMP
ORACLE_BASE=/u01/app/oracle
ORACLE_HOME=$ORACLE_BASE/product/12.1.0/dbhome_1;
ORACLE_SID=orcl
PATH=$ORACLE_HOME/bin:$ORACLE_HOME/lib:$ORACLE_HOME/lib32:$PATH
LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib:/usr/lib64
CLASSPATH=$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib
export TMPDIR;
export ORACLE_BASE;
export ORACLE_HOME;
export ORACLE_SID;
export PATH;
export LD_LIBRARY_PATH
export CLASSPATH;

Create tablespace

Create a new bigfile tablespace called “data”. Login as oracle user:

[vagrant@localhost ~]$ sudo su - oracle
[oracle@localhost ~]$

Connect to the database as SYSDBA:

[oracle@localhost ~]$ sqlplus / as sysdba

SQL*Plus: Release 12.1.0.2.0 Production on Wed Jan 4 21:57:07 2017

Copyright (c) 1982, 2014, Oracle. All rights reserved.

Connected to an idle instance.

SQL>

Now run the following Oracle SQL commands.
Create the tablespace:

create bigfile tablespace DATA datafile '/u02/orcl/data.dbf' SIZE 100M AUTOEXTEND ON EXTENT MANAGEMENT LOCAL UNIFORM SIZE 128K;

Set the tablespace called “data” as default:

ALTER DATABASE DEFAULT TABLESPACE DATA;

Remove the default tablespace called “users”:

DROP TABLESPACE users INCLUDING CONTENTS AND DATAFILES;

Oracle client

Up to now, we have installed the Oracle server on the guest virtual machine. Disconnect from the guest virtual machine (exit) and return to your host Mac system. There, we need to install the Oracle client.

You can download the client at http://www.oracle.com/technetwork/topics/intel-macsoft-096467.html. The two files of interest are

Download both files to your Mac and unpack them to ~/Downloads/instantclient_12_1/.

Then run the commands:

$ mkdir -p /Applications/oracle/product/instantclient_64/12.1.0.2.0/bin
$ mkdir -p /Applications/oracle/product/instantclient_64/12.1.0.2.0/lib
$ mkdir -p /Applications/oracle/product/instantclient_64/12.1.0.2.0/jdbc/lib
$ mkdir -p /Applications/oracle/product/instantclient_64/12.1.0.2.0/rdbms/jlib
$ mkdir -p /Applications/oracle/product/instantclient_64/12.1.0.2.0/network/admin
$ mkdir -p /Applications/oracle/product/instantclient_64/12.1.0.2.0/sqlplus/admin
$ cd ~/Downloads/instantclient_12_1/
$ mv ojdbc* /Applications/oracle/product/instantclient_64/12.1.0.2.0/jdbc/lib/
$ mv x*.jar /Applications/oracle/product/instantclient_64/12.1.0.2.0/rdbms/jlib/
$ mv glogin.sql /Applications/oracle/product/instantclient_64/12.1.0.2.0/sqlplus/admin/
$ mv *dylib* /Applications/oracle/product/instantclient_64/12.1.0.2.0/lib/
$ mv *README /Applications/oracle/product/instantclient_64/12.1.0.2.0/
$ mv * /Applications/oracle/product/instantclient_64/12.1.0.2.0/bin/

Create the tnsnames.ora file:

$ vi /Applications/oracle/product/instantclient_64/12.1.0.2.0/network/admin/tnsnames.ora

Add the following content to it:

ORCL=
(DESCRIPTION=
(ADDRESS=
(PROTOCOL=TCP)
(HOST=localhost)
(PORT=1523)
)
(CONNECT_DATA=
(SERVER=dedicated)
(SID=ORCL)
)
)

Afterwards, you can should be able to login from Mac (host) with the command

$ sqlplus system/system@orcl

Leave a Reply