Another motivation is the fact that in the FreeBSD HandBook the chapter dedicated to installing Oracle is referred to version Oracle 8.0.5, which is quite old, this circumstance stimulated my curiosity.
For failing be certified by Oracle, this platform is not suitable for a production environment, which does not diminish the utility as a test environment and even a development environment for small projects, depends on the risk you want to take.
The advantages of using FreeBSD as an infrastructure for virtualized environments are:
- ZFS File System.
- Virtual network stack.
- Network security with pf.
- Dtrace performance analysis.
- Debian GNU is one of the most reliable Linux distribution and have a very predictable release cycle.
- Using a complete distribution saves us a lot of work when you install Oracle.
- Provide updated technical documentation.
Preinstallation Tasks for Oracle
In all installations of Oracle database, must be prepared the OS so that you can install and run properly. These preliminary tasks are specific to each OS and Oracle version.Specific tasks in FreeBSD
The following tasks must be run as root:
1.- We cloned the predefined Jail deb-master , using Lenny version, to create the new Jail debora:
root@morsa:/root # zfs clone fbsdzpool1/jailz/deb-master@deboostrap fbsdzpool1/jailz/debora2.- We configure semaphores, shared memory and asynchronous I/O according to the requirements of Oracle 11gR2, for this we edit the files /boot/loader.conf and /etc/sysctl.conf:
// Start the excerpt of file /boot/loader.conf
kern.ipc.shmmni=4096// End the excerpt of file/boot/loader.conf
kern.ipc.semmns=32000
kern.ipc.semmni=128
aio_load="YES"
// Start the excerpt of file /etc/sysctl.conf
security.jail.sysvipc_allowed=1// End the excerpt of file /etc/sysctl.conf
kern.ipc.shmall=2097152
kern.ipc.shmseg=128
kern.ipc.shmmin=1
kern.ipc.shmmax=1073741824
kern.ipc.semaem=16384
kern.ipc.semvmx=32767
kern.ipc.semusz=632
kern.ipc.semume=50
kern.ipc.semopm=100
kern.ipc.semmsl=340
kern.ipc.semmnu=150
3.- We enable shared memory in the Jail debora:
// Start the excerpt of file /jailz/etc/jail.conf
debora {// End the excerpt of file /jailz/etc/jail.conf
path = /jailz/debora;
allow.mount;
allow.sysvipc;
host.hostname = debora;
mount.devfs;
mount.fstab="/jailz/etc/fstab.debora";
ip4.addr = 127.0.0.25;
interface = lo0;
exec.start = "/etc/init.d/rc 3";
exec.stop = "/etc/init.d/rc 0";
}
4.- Start the Jail and login:
root@morsa:/root # jail -f /jailz/etc/jail.conf -c debora
debora: created
Starting periodic command scheduler: crond.
root@morsa:/root # jls
JID IP Address Hostname Path
1 127.0.0.25 debora /jailz/debora
root@morsa:/root # jexec 1 /bin/bash
debora:/# uname -a
Linux debora 2.6.16 FreeBSD 9.1-RELEASE-p4 #0: Mon Jun 17 11:42:37 UTC 2013 i686
GNU/Linux
Specific tasks in Debian
The following steps are done inside the Jail debora as root.5 .- Install the required packages for Oracle 11gR2 on Debian:
debora:/# apt-get install gcc make binutils lesstif2 rpm libaio1 libdb4.6 libstdc++5 unzip openjdk-6-jdkNote: Package openjdk-6-jdk jre is installed to provide an alternative jre to that supplied by the Oracle installer.
6.- Create the following symbolic links:
debora:/# ln -s /usr/bin/awk /bin/awk
debora:/# ln -s /usr/bin/rpm /bin/rpm
debora:/# ln -s /usr/bin/basename /bin/basename
7.- Create the groups dba, oinstall and the oracle user:
debora:/# groupadd oinstall -g 1000
debora:/# groupadd dba -g 1001
debora:/# useradd -m -g oinstall -G dba -p passwd -s /bin/bash -d /home/oracle -u 1000 oracle
debora:/# passwd oracle
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully
8.- Create the directories for the software and the database and change the owner to the oracle user:
debora:/# mkdir -p /oracle/product/11.2.0
debora:/# mkdir -p /oracle/admin/ORATEST/create
debora:/# mkdir /oracle/admin/ORATEST/adump
debora:/# mkdir /oracle/admin/ORATEST/logbook
debora:/# mkdir /oracle/oraInventory
debora:/# mkdir /oracle/oradata
debora:/# mkdir /oracle/flash_recovery_area
debora:/# chown oracle.oinstall /oracle
debora:/# chown -R oracle.oinstall /oracle/product
debora:/# chown oracle.oinstall /oracle/oraInventory
debora:/# chown -R oracle.dba /oracle/admin
debora:/# chown oracle.dba /oracle/oradata
debora:/# chown oracle.dba /oracle/flash_recovery_area
9.- Add the hostname to the file /etc/hosts.
debora:/# echo '127.0.0.25 debora' >> /etc/hosts
10.- Create the file /etc/oraInst.loc and change the owner to the oracle user:
// Begin file /etc/oraInst.loc
inventory_loc=/oracle/oraInventory
inst_group=oinstall
// End File /etc/oraInst.locdebora:/# chown oracle.oinstall /etc/oraInst.loc
Installing the Oracle Database Software
The following steps are done inside the Jail debora as oracle.
11.- Change the root user to oracle:
debora:/# su - oracle
oracle@debora:~$ id12.- Copy to the /oracle directory (for example) the files linux_11gR2_database_1of2.zip and linux_11gR2_database_2of2.zip that contains the installer and unzip:
uid=1000(oracle) gid=1000(oinstall) groups=1000(oinstall),1001(dba)
oracle@debora:~$
oracle@debora:/oracle $ unzip linux_11gR2_database_1of2.zip13.- To perform an unattended installation, create the response file /oracle/database/response/install_debora.rsp. Marked in bold are the values that can be useful to modify the rest of the file should be left unchanged, as this version of the installer is problematic and this is the format that it must maintain by the response file:
oracle@debora:/oracle $ unzip linux_11gR2_database_2of2.zip
// Begin file install_debora.rsp
oracle.install.responseFileVersion=/oracle/install/rspfmt_dbinstall_response_schema_v11_2_0//End file install_debora.rsp
oracle.install.option=INSTALL_DB_SWONLY
ORACLE_HOSTNAME=debora
UNIX_GROUP_NAME=oinstall
INVENTORY_LOCATION=/oracle/oraInventory
SELECTED_LANGUAGES=en
ORACLE_HOME=/oracle/product/11.2.0
ORACLE_BASE=/oracle
oracle.install.db.InstallEdition=SE
oracle.install.db.isCustomInstall=false
oracle.install.db.customComponents=
oracle.install.db.DBA_GROUP=dba
oracle.install.db.OPER_GROUP=dba
oracle.install.db.CLUSTER_NODES=
oracle.install.db.config.starterdb.type=GENERAL_PURPOSE
oracle.install.db.config.starterdb.globalDBName=
oracle.install.db.config.starterdb.SID=
oracle.install.db.config.starterdb.characterSet=AL32UTF8
oracle.install.db.config.starterdb.memoryOption=false
oracle.install.db.config.starterdb.memoryLimit=
oracle.install.db.config.starterdb.installExampleSchemas=false
oracle.install.db.config.starterdb.enableSecuritySettings=true
oracle.install.db.config.starterdb.password.ALL=
oracle.install.db.config.starterdb.password.SYS=
oracle.install.db.config.starterdb.password.SYSTEM=
oracle.install.db.config.starterdb.password.SYSMAN=
oracle.install.db.config.starterdb.password.DBSNMP=
oracle.install.db.config.starterdb.control=DB_CONTROL
oracle.install.db.config.starterdb.gridcontrol.gridControlServiceURL=
oracle.install.db.config.starterdb.dbcontrol.enableEmailNotification=false
oracle.install.db.config.starterdb.dbcontrol.emailAddress=
oracle.install.db.config.starterdb.dbcontrol.SMTPServer=
oracle.install.db.config.starterdb.automatedBackup.enable=false
oracle.install.db.config.starterdb.automatedBackup.osuid=
oracle.install.db.config.starterdb.automatedBackup.ospwd=
oracle.install.db.config.starterdb.storageType=
oracle.install.db.config.starterdb.fileSystemStorage.dataLocation=
oracle.install.db.config.starterdb.fileSystemStorage.recoveryLocation=
oracle.install.db.config.asm.diskGroup=
oracle.install.db.config.asm.ASMSNMPPassword=
MYORACLESUPPORT_USERNAME=username@mailaddress.com
MYORACLESUPPORT_PASSWORD=
SECURITY_UPDATES_VIA_MYORACLESUPPORT=false
DECLINE_SECURITY_UPDATES=true
PROXY_HOST=
PROXY_PORT=
PROXY_USER=
PROXY_PWD=
14.- Run the installer with the options listed as they are:
oracle@debora:~$ /oracle/database/runInstaller -silent -ignorePrereq -jreloc /usr/lib/jvm/java-6-openjdk -responseFile /oracle/database/response/install_debora.rsp
Starting Oracle Universal Installer...
Checking Temp space: must be greater than 80 MB. Actual -2147483648 MB Passed
Checking swap space: must be greater than 150 MB. Actual 4096 MB Passed
Preparing to launch Oracle Universal Installer from /tmp/OraInstall2013-09-01_08-30-45PM. Please wait ...
[WARNING] [INS-32055] The Central Inventory is located in the Oracle base.
CAUSE: The Central Inventory is located in the Oracle base.
ACTION: Oracle recommends placing this Central Inventory in a location outside the Oracle base directory.
[WARNING] [INS-32055] The Central Inventory is located in the Oracle base.
CAUSE: The Central Inventory is located in the Oracle base.
ACTION: Oracle recommends placing this Central Inventory in a location outside the Oracle base directory.
You can find the log of this install session at:
/oracle/oraInventory/logs/installActions2013-09-01_08-30-45PM.log
The following configuration scripts need to be executed as the "root" user.
#!/bin/sh
#Root scripts to run
/oracle/oraInventory/orainstRoot.sh
/oracle/product/11.2.0/root.sh
To execute the configuration scripts:
1. Open a terminal window
2. Log in as "root"
3. Run the scripts
4. Return to this window and hit "Enter" key to continue
Successfully Setup Software.
15.- Check the installer logs:
debora:~# tail -10 /oracle/oraInventory/logs/installActions2013-09-01_08-30-45PM.log16.- If the installation is successful, run as root the scripts orainstRoot.sh and root.sh:
INFO: Validating state <finish>
WARNING: Validation disabled for the state finish
INFO: Completed validating state <finish>
INFO: Terminating all background operations
INFO: Terminated all background operations
INFO: Successfully executed the flow in SILENT mode
INFO: Finding the most appropriate exit status for the current application
INFO: Exit Status is 0
INFO: Shutdown Oracle Database 11g Release 2 Installer
INFO: Unloading Setup Driver
oracle@debora:~$ logout
debora:~# id
uid=0(root) gid=0(root) groups=5(tty)
debora:~# /oracle/oraInventory/orainstRoot.sh
Changing permissions of /oracle/oraInventory.
Adding read,write permissions for group.
Removing read,write,execute permissions for world.
Changing groupname of /oracle/oraInventory to oinstall.
The execution of the script is complete.
debora:~# /oracle/product/11.2.0/root.sh
Check /oracle/product/11.2.0/install/root_debora_2013-09-01_20-39-01.log for the
output of root script
debora:~# more /oracle/product/11.2.0/install/root_debora_2013-09-01_20-39-01.log
Running Oracle 11g root.sh script...
The following environment variables are set as:
ORACLE_OWNER= oracle
ORACLE_HOME= /oracle/product/11.2.0
Creating /etc/oratab file...
Entries will be added to the /etc/oratab file as needed by Database Configuration Assistant when a database is created
Finished running generic part of root.sh script.
Now product-specific root actions will be performed.
Finished product-specific root actions.
Creating a test Database
Prior to create an Oracle database is required an init.ora parameter file and a script with the SQL commands that perform the database creation.17.- Create the file /oracle/admin/ORATEST/create/initORATEST.ora:
// Begin file initORATEST.ora
db_name='ORATEST'//End file initORATEST.ora
db_domain=''
sga_target=512M
sga_max_size=1G
pga_aggregate_target=1G
processes = 150
audit_trail ='db'
db_block_size=8192
db_recovery_file_dest='/oracle/flash_recovery_area'
db_recovery_file_dest_size=2G
diagnostic_dest='/oracle/'
#dispatchers='(PROTOCOL=TCP) (SERVICE=ORCLXDB)'
open_cursors=300
remote_login_passwordfile='EXCLUSIVE'
undo_tablespace='UNDOTBS1'
compatible ='11.2.0'
db_create_file_dest='/oracle/oradata'
filesystemio_options = SETALL
disk_asynch_io = TRUE
18.- Create the files /oracle/admin/ORATEST/create/ORATEST.sh and /oracle/admin/ORATEST/create/cr_ORATEST.sh:
// Begin file ORATEST.sh
ORACLE_HOME=/oracle/product/11.2.0
ORACLE_SID=ORATEST
NLS_LANG=American_america.WE8ISO8859P15
ORA_NLS11=${ORACLE_HOME}/nls/data
PATH=$PATH:$ORACLE_HOME/bin
export PATH
export ORACLE_BASE
export ORACLE_HOME
export ORACLE_SID
export NLS_LANG
export ORA_NLS33
//End file ORATEST.sh
// Begin file cr_ORATEST.sh
#!/bin/bash
. ./ORATEST.sh
rm ${ORACLE_HOME}/dbs/orapw${ORACLE_SID}
orapwd file=${ORACLE_HOME}/dbs/orapw${ORACLE_SID} password=diablo entries=2
rm -r /oracle/oradata/${ORACLE_SID}
sqlplus /nolog << EOF
spool ../logbook/cr_${ORACLE_SID}.log
conn / as sysdba;
CREATE SPFILE
FROM PFILE='/oracle/admin/${ORACLE_SID}/create/init${ORACLE_SID}.ora';
DISCONNECT;
conn / as sysdba;
STARTUP NOMOUNT;
CREATE DATABASE ${ORACLE_SID}
CHARACTER SET WE8ISO8859P15
NATIONAL CHARACTER SET UTF8
USER SYS IDENTIFIED BY diablo
USER SYSTEM IDENTIFIED BY diablo
EXTENT MANAGEMENT LOCAL
DEFAULT TEMPORARY TABLESPACE temp
UNDO TABLESPACE undotbs1
DEFAULT TABLESPACE users;
@?/rdbms/admin/catalog.sql
@?/rdbms/admin/catproc.sql
@?/sqlplus/admin/pupbld.sql
SHUTDOWN IMMEDIATE;
EXIT
spool off
EOF
// End file de cr_ORATEST.sh
19.- Grant execute permissions to the scripts:
oracle@debora:/oracle/admin/ORATEST/create$ chmod 750 *.sh
oracle@debora:/oracle/admin/ORATEST/create$ ls -la
total 31
drwxr-xr-x 2 oracle dba 5 Sep 1 21:04 .
drwxr-xr-x 5 oracle dba 5 Sep 1 20:11 ..
-rwxr-x--- 1 oracle dba 258 Sep 1 21:02 ORATEST.sh
-rwxr-x--- 1 oracle dba 782 Sep 1 21:04 cr_ORATEST.sh
-rw-r--r-- 1 oracle dba 490 Sep 1 21:01 initORATEST.ora
20.- Start creating the database.
oracle@debora:/oracle/admin/ORATEST/create$ nohup ./cr_ORATEST.sh &21.- Check that the creation of the database was completed successfully:
oracle@debora:/oracle/admin/ORATEST/create$ tail -10 nohup.out
SQL> CREATE PUBLIC SYNONYM PRODUCT_USER_PROFILE FOR SYSTEM.PRODUCT_PRIVS;
Synonym created.
SQL>
SQL> -- End of pupbld.sql
SQL> SQL> Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> SQL> Disconnected from Oracle Database 11g Release 11.2.0.1.0 - Production
22.- Start the database and login:
oracle@debora:/oracle/admin/ORATEST/create$ . ./ORATEST.sh
oracle@debora:/oracle/admin/ORATEST/create$ sqlplus /nolog
SQL*Plus: Release 11.2.0.1.0 Production on Sun Sep 1 22:09:58 2013
Copyright (c) 1982, 2009, Oracle. All rights reserved.
SQL> conn / as sysdba;
Connected to an idle instance.
SQL> startup;
ORACLE instance started.
Total System Global Area 1071333376 bytes
Fixed Size 1341312 bytes
Variable Size 750782592 bytes
Database Buffers 314572800 bytes
Redo Buffers 4636672 bytes
Database mounted.
Database opened.
SQL>
SQL> select * from v$instance;
INSTANCE_NUMBER INSTANCE_NAME
--------------- ----------------
HOST_NAME
----------------------------------------------------------------
VERSION STARTUP_T STATUS PAR THREAD# ARCHIVE LOG_SWITCH_WAIT
----------------- --------- ------------ --- ---------- ------- ---------------
LOGINS SHU DATABASE_STATUS INSTANCE_ROLE ACTIVE_ST BLO
---------- --- ----------------- ------------------ --------- ---
1 ORATEST
debora
11.2.0.1.0 01-SEP-13 OPEN NO 1 STOPPED
ALLOWED NO ACTIVE PRIMARY_INSTANCE NORMAL NO
SQL> !uname -a
Linux debora 2.6.16 FreeBSD 9.1-RELEASE-p4 #0: Mon Jun 17 11:42:37 UTC 2013 i686
GNU/Linux
SQL>
Done.
Oracle 11gR2 running on FreeBSD9 |
23.- Shut down ORATEST database.
SQL> SHUTDOWN IMMEDIATE;24.- Shut down debora Jail.
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> SQL> Disconnected from Oracle Database 11g Release 11.2.0.1.0 - Production
root@morsa:/root # jail -f /jailz/etc/jail.conf -r debora24.- Make a snapshot of the debora jail, so as to have a template of a Jail configured for Oracle databases.
Using makefile-style concurrent boot in runlevel 0.
Stopping device state change daemon: devd.
Asking all remaining processes to terminate...done.
All processes ended within 1 seconds....done.
Stopping enhanced syslogd: rsyslogd.
/etc/init.d/umountnfs.sh: 106: cannot open /etc/mtab: No such file
Deconfiguring network interfaces...done.
Cleaning up ifupdown....done.
Deactivating swap...done.
mount: /: unknown special file or file system
Will now halt.
ifdown: shutdown usbus0: Operation not permitted
ifdown: shutdown ath0: Operation not permitted
ifdown: shutdown usbus1: Operation not permitted
ifdown: shutdown lo0: Operation not permitted
ifdown: shutdown wlan0: Operation not permitted
startpar: service(s) returned failure: umountnfs.sh ... failed!
deb-master: removed
root@morsa:/root # zfs snapshot fbsdzpool1/jailz/debora@oracle11gR2
Final Thoughts
The decision to install in the Jail the Lenny version of Debian GNU/Linux is motivated by two reasons: first, the kernel version of Linux that the Oracle Installer requires as a prerequisite is 2.6.9, and on the other hand, the minimum kernel version for squeeze is 2.6.18, which is higher than that supported by the Linux compatibility module for FreeBSD 9.// Start the excerpt of file installActions.log
INFO: *********************************************// End the excerpt of file installActions.log
INFO: OS Kernel Version: This is a prerequisite condition to test whether the system kernel version is at least "2.6.9".
INFO: Severity:CRITICAL
INFO: OverallStatus:SUCCESSFUL
INFO: -----------------------------------------------
INFO: Verification Result for Node:debora
INFO: Expected Value:2.6.9
INFO: Actual Value:2.6.16
INFO: -----------------------------------------------
INFO: *********************************************
During the development of this Post, I detected a problem while running Oracle Installer, that randomly failed on at initial startup. One way to avoid this problem is to use an alternate jre to the provided with the installer.
I have not been able to configure the Automatic Memory Management (AMM) which is one of the new features introduced in version 11g. This is because I have not managed to configure the device /dev/shm within the Jail.
Therefore, there is no choice but to use the Automatic Shared Memory Management (ASMM) giving values to the parameters SGA_TARGET and SGA_MAX_SIZE in the parameter file initORATEST.ora.
The file system on which you created the database is not optimized for the files in the database, is an issue that should be improved to a more intensive use of the database.
What version freebsd did you use ? 32bit or 64bit ?
ReplyDeletei got stuck to running java as oracle user inside jail , i cannot running java when used oracle user , but running smooth when using root user , can you help me ?
First of all, this guide was developed under FreeBSD 9.1-RELEASE-p4 amd64 .Next openjdk-6-jdk must run flawlessly, however in your case check permissions for the jdk executables.
ReplyDeleteRegards
Thanks for this tutorial. It's very helpful. Do you think Oracle 12c could be installed on FreeBSD 10 using this tutorial as a guide?
ReplyDeleteAwesome blog you shared with us and is very useful for everyone who is looking for this kind of blog information. Keep updating more technologies and ideas!!
ReplyDeleteThanks a lot!!!!
Germany VPS Server