8i | 9i | 10g | 11g | 12c | 13c | 18c | 19c | 21c | 23c | Misc | PL/SQL | SQL | RAC | WebLogic | Linux

Home » Articles » 11g » Here

Oracle Data Integrator (ODI) 11g Silent Installation on Oracle Linux 6 and 7 (OL6 and OL7)

Work In Progress

This article demonstrates how to perform a silent installation of Oracle Data Integrator (ODI) 11g on Oracle Linux 6 and 7 (OL6 and OL7) using Oracle Database 12c Release 1 (12.1) for the repository created by the Repository Creation Utility (RCU).

Related articles.

Assumptions

To keep this article as brief as possible I'm going to make the following assumptions.

I don't work with ODI, but I do have to provide basic support of some infrastructure that runs it (database and WebLogic).

Downloads

There is a lot of software to download before you can begin. I've purposely not included the latest critical updates.

Response Files

The following response files are necessary for the silent installations shown below. The values you may need to amend are shown in bold.

weblogic-silent.xml

<?xml version="1.0" encoding="UTF-8"?>
   <bea-installer> 
     <input-fields>
       <data-value name="BEAHOME" value="/u01/app/oracle/middleware" />
       <data-value name="WLS_INSTALL_DIR" value="/u01/app/oracle/middleware/wlserver_10.3" />
       <data-value name="COMPONENT_PATHS"
        value="WebLogic Server/Core Application Server|WebLogic Server/Administration Console|WebLogic Server/Configuration Wizard and Upgrade Framework|WebLogic Server/Web 2.0 HTTP Pub-Sub Server|WebLogic Server/WebLogic JDBC Drivers|WebLogic Server/Third Party JDBC Drivers|WebLogic Server/WebLogic Server Clients|WebLogic Server/WebLogic Web Server Plugins|WebLogic Server/UDDI and Xquery Support|Oracle Coherence/Coherence Product Files" />
       <data-value name="INSTALL_NODE_MANAGER_SERVICE" value="yes" />
       <data-value name="NODEMGR_PORT" value="5556" />
       <data-value name="INSTALL_SHORTCUT_IN_ALL_USERS_FOLDER" value="no"/>
       <data-value name="LOCAL_JVMS" value="/u01/app/oracle/jdk1.7.0_80"/>
   </input-fields> 
</bea-installer>

oraInst.loc

inventory_loc=/u01/app/oraInventory
inst_group=oinstall

odi.rsp

[ENGINE]

#DO NOT CHANGE THIS.
Response File Version=1.0.0.0.0

[GENERIC]

#Set this to true if you wish to specify a directory where latest updates are downloaded. This option would use the software updates from the specified directory
SPECIFY_DOWNLOAD_LOCATION=false

#
SKIP_SOFTWARE_UPDATES=true

#If the Software updates are already downloaded and available on your local system, then specify the path to the directory where these patches are available and set SPECIFY_DOWNLOAD_LOCATION to true
SOFTWARE_UPDATES_DOWNLOAD_LOCATION=

#Provide the Oracle Home location. The location has to be the immediate child under the specified Middleware Home location ( Applicable only if any of the J2EE Server Components are selected ). The Oracle Home directory name may only contain alphanumeric , hyphen (-) , dot (.) and underscore (_) characters, and it must begin with an alphanumeric character. The total length has to be less than or equal to 128 characters. The location has to be an empty directory or a valid ODI Oracle Home.
ORACLE_HOME=/u01/app/oracle/middleware/Oracle_ODI1

#Provide existing Middleware Home location.
MIDDLEWARE_HOME=/u01/app/oracle/middleware

#Application Server choices are WLS, WAS, JBoss
APPSERVER_TYPE=WLS

#Enter true if existing Master and Work repositories needs to be configured
USE EXISTING REPOSITORY=false

#Enter true if Repository Configuration needs to be skipped
SKIP REPOSITORY CREATION=true


[APPLICATIONS]

#Enter true if STUDIO component needs to be installed
ODI_STUDIO=true

#Enter true if SDK component needs to be installed
ODI_SDK=true

#Enter true if Server components needs to be installed and configured. The standalone agent will be configued
STANDALONE_AGENT=false

#Enter true if J2EE Agent needs to be installed. The user has to configured this component using Weblogic Configuration Wizard.
ORACLE_DATA_INTEGRATOR_J2EE_AGENT=true

#Enter true if ODI Console needs to be installed. The user has to configured this component using Weblogic Configuration Wizard.
ORACLE_DATA_INTEGRATOR_CONSOLE=true

#Enter true if Public Webservices needs to be installed. The user has to configured this component using Weblogic Configuration Wizard.
ORACLE_DATA_INTEGRATOR_PUBLIC_WEB_SERVICE=true

odi_rcu_paramfile.txt

SysPasswd1
OdidevPasswd1
001
SVPasswd1
D
001
WORKREP
WRPasswd1

Additional OS Packages

Install the following package for the Fusion Middleware prerequisites to be met. Many of them will already be present because of the database prerequisites.

# OL6 and OL7.
yum install binutils -y
yum install compat-libcap1 -y
yum install compat-libstdc++-33 -y
yum install compat-libstdc++-33.i686 -y
yum install gcc -y
yum install gcc-c++ -y
yum install glibc -y
yum install glibc.i686 -y
yum install glibc-devel -y
yum install libaio -y
yum install libaio-devel -y
yum install libgcc -y
yum install libgcc.i686 -y
yum install libstdc++ -y
yum install libstdc++.i686 -y
yum install libstdc++-devel -y
yum install ksh -y
yum install make -y
yum install sysstat -y
yum install numactl -y
yum install numactl-devel -y

# OL7 Only.
yum install motif -y
yum install motif-devel -y

# OL6 Only.
yum install libXext.i686 -y
yum install libXtst.i686 -y
yum install libXi.i686 -y
yum install openmotif -y
yum install openmotif22 -y
yum install redhat-lsb -y

Database Software Installation

Assuming you have completed all the OS prerequisites for a database installation, you can install the database software as follows.

Unzip the software.

cd /u01/software
unzip -o linuxamd64_12102_database_1of2.zip
unzip -o linuxamd64_12102_database_2of2.zip

Install the database software in silent mode.

cd database

./runInstaller -ignoreSysPrereqs -showProgress -silent \
  -responseFile /u01/software/database/response/db_install.rsp \
  oracle.install.option=INSTALL_DB_SWONLY \
  ORACLE_HOSTNAME=ol7-odi.localdomain \
  UNIX_GROUP_NAME=oinstall \
  INVENTORY_LOCATION=/u01/app/oraInventory \
  SELECTED_LANGUAGES=en,en_GB \
  ORACLE_HOME=/u01/app/oracle/product/12.1.0.2/db_1 \
  ORACLE_BASE=/u01/app/oracle \
  oracle.install.db.InstallEdition=EE \
  oracle.install.db.DBA_GROUP=dba \
  oracle.install.db.BACKUPDBA_GROUP=dba \
  oracle.install.db.DGDBA_GROUP=dba \
  oracle.install.db.KMDBA_GROUP=dba \
  SECURITY_UPDATES_VIA_MYORACLESUPPORT=false \
  DECLINE_SECURITY_UPDATES=true

When prompted, run the root scripts.

# Run root scripts as directed.
#
# As a root user, execute the following script(s):
#         1. /u01/app/oraInventory/orainstRoot.sh
#         2. /u01/app/oracle/product/12.1.0.2/db_1/root.sh

Database Creation

Start the listener.

lsnrctl start

Create the database using the Database Creation Assistant (DBCA) in silent mode.

#dbca -silent -deleteDatabase -sourceDB repdevcdb -sysDBAUserName sys -sysDBAPassword SysPasswd1

dbca -silent -createDatabase \
 -templateName General_Purpose.dbc \
 -gdbname repdevcdb -sid repdevcdb -responseFile NO_VALUE \
 -characterSet AL32UTF8 \
 -sysPassword SysPasswd1 \
 -systemPassword SysPasswd1 \
 -createAsContainerDatabase true \
 -numberOfPDBs 1 \
 -pdbName repdev \
 -pdbAdminPassword PdbPasswd1 \
 -databaseType MULTIPURPOSE \
 -automaticMemoryManagement false \
 -totalMemory 1536 \
 -storageType FS \
 -datafileDestination "/u01/app/oracle/oradata/" \
 -redoLogFileSize 500 \
 -emConfiguration NONE \
 -ignorePreReqs

Set minimum parameter levels and make sure the pluggable database starts when the instance starts.

sqlplus / as sysdba <<EOF
ALTER SYSTEM SET shared_pool_size=150M SCOPE=SPFILE;
--ALTER SYSTEM SET sga_target 150M SCOPE=SPFILE;
ALTER SYSTEM SET session_cached_cursors=100 SCOPE=SPFILE;
ALTER SYSTEM SET processes=500 SCOPE=SPFILE;
ALTER SYSTEM SET open_cursors=800 SCOPE=SPFILE;
ALTER SYSTEM SET db_files=600 SCOPE=SPFILE;

ALTER SESSION SET CONTAINER = repdev;
ALTER PLUGGABLE DATABASE SAVE STATE;

CONN / AS SYSDBA
SHUTDOWN IMMEDIATE;
STARTUP;
EXIT;
EOF

WebLogic Installation

Set the required environment variables.

export MW_HOME=/u01/app/oracle/middleware
export WLS_HOME=$MW_HOME/wlserver_10.3
export WL_HOME=$WLS_HOME
export DOMAIN_HOME=$MW_HOME/user_projects/domains/odiDomain
# Set to the appropriate JAVA_HOME.
export JAVA_HOME=/u01/app/oracle/jdk1.7.0_80
export PATH=$JAVA_HOME/bin:$PATH

Install JDK7.

cd /u01/app/oracle/
tar -xvzf /u01/software/jdk-7u80-linux-x64.tar.gz

Create the middleware location.

mkdir -p /u01/app/oracle/middleware

Install WebLogic in silent mode.

$JAVA_HOME/bin/java -Xmx1024m -jar /u01/software/wls1036_generic.jar -mode=silent -silent_xml=/u01/software/weblogic-silent.xml

Repository Configuration Utility (RCU) Installation

Install the BI RCU in a temporary location.

mkdir -p $MW_HOME/odi_rcu
cd $MW_HOME/odi_rcu
unzip /u01/software/ofm_rcu_linux_11.1.1.9.0_64_disk1_1of1.zip

Repository Configuration Utility (RCU)

Use the following command to run the RCU in silent mode.

$MW_HOME/odi_rcu/rcuHome/bin/rcu -silent -createRepository \
  -connectString ol7-odi.localdomain:1521/repdev -dbUser SYS -dbRole SYSDBA \
  -useSamePasswordForAllSchemaUsers true \
  -schemaPrefix ODIDEV \
  -component ODI -component IAU \
  -component OPSS < /u01/software/odi_rcu_paramfile.txt

ODI Installation

Unzip the software.

cd /u01/software
unzip -o ofm_odi_generic_11.1.1.9.0_disk1_1of2.zip
unzip -o ofm_odi_generic_11.1.1.9.0_disk1_2of2.zip

Install the ODI software in silent mode.

cd /u01/software/Disk1

./runInstaller -silent -responseFile /u01/software/odi.rsp -invPtrLoc /u01/software/oraInst.loc

Enter the Java home (/u01/app/oracle/jdk1.7.0_80) when prompted.

ODI Configuration

Work In Progress

Create a file called "create_odi_domain.py" in the "/u01/software" directory with the following contents. Remember to adjust the variables at the start of the script to suit your installation.

#!/usr/bin/python

print('Set variables.')
host_name = 'ol7-odi.localdomain'
admin_user = 'weblogic'
admin_password = 'Admin123'
admin_port = '7001'
mw_home = '/u01/app/oracle/middleware'
domain_name = 'odiDomain'
domain_home = mw_home + '/user_projects/domains/' + domain_name   # Check path is correct.
wl_home = mw_home + '/wlserver_10.3'
db_url = 'jdbc:oracle:thin:@ol7-odi.localdomain:1521/repdev'
db_user = 'ODIDEV_ODI_REPO'   
db_password = 'OdidevPasswd1'
db_driver = 'oracle.jdbc.OracleDriver'
odi_port = '8001'
nm_name = 'LocalODIMachine'
nm_port = 5556
ds_name = 'LocalSvcTblDataSource'

print('Create domain (' + domain_name + ').')
print('Load templates.')
readTemplate(wl_home + '/common/templates/domains/wls.jar')

addTemplate(mw_home + '/oracle_common/common/templates/applications/jrf_template_11.1.1.jar')
addTemplate(mw_home + '/oracle_common/common/templates/applications/oracle.em_11_1_1_0_0_template.jar')

addTemplate(mw_home + '/Oracle_ODI1/common/templates/applications/odi_base_template.jar')
addTemplate(mw_home + '/Oracle_ODI1/common/templates/applications/odi_sdk_template.jar')
addTemplate(mw_home + '/Oracle_ODI1/common/templates/applications/odi_webservices_template.jar')
addTemplate(mw_home + '/Oracle_ODI1/common/templates/applications/agent_template.jar')
addTemplate(mw_home + '/Oracle_ODI1/common/templates/applications/jrfws_template.jar')
addTemplate(mw_home + '/Oracle_ODI1/common/templates/applications/repository_explorer_template.jar')
addTemplate(mw_home + '/Oracle_ODI1/common/templates/applications/oracle.emai_odi_template_11.1.1.jar')

print('AdminServer settings.')
cd('/Security/base_domain/User/' + admin_user)
cmo.setPassword(admin_password)
cd('/Server/AdminServer')
cmo.setName('AdminServer')
cmo.setListenPort(int(admin_port))
cmo.setListenAddress(host_name)

print('Create data source.')
cd('/')
create(ds_name,'JDBCSystemResource');
cd('/JDBCSystemResource/' + ds_name + '/JdbcResource/' + ds_name + '/JDBCDriverParams/NO_NAME_0')
create('NO_NAME_0', 'JDBCDriverParams')
cd('JDBCDriverParams/NO_NAME_0')
cmo.setPasswordEncrypted(db_password)
cmo.setUrl(db_url)
cmo.setDriverName(db_driver)
create('NO_NAME_0', 'Properties')
cd('Properties/NO_NAME_0')
create('user', 'Property')
cd('Property/user')
cmo.setValue(db_user)


print('Amend template data sources.')
cd('/JDBCSystemResource/odiMasterRepository/JdbcResource/odiMasterRepository/JDBCDriverParams/NO_NAME_0')
cmo.setPasswordEncrypted(db_password)
cmo.setUrl(db_url)
cmo.setDriverName(db_driver)
cd('Properties/NO_NAME_0/Property/user')
cmo.setValue(db_user)

cd('/JDBCSystemResource/odiWorkRepository/JdbcResource/odiWorkRepository/JDBCDriverParams/NO_NAME_0')
cmo.setPasswordEncrypted(db_password)
cmo.setUrl(db_url)
cmo.setDriverName(db_driver)
cd('Properties/NO_NAME_0/Property/user')
cmo.setValue(db_user)


print('Create node manager.')
cd('/')
machine = create(nm_name, 'UnixMachine')
cd('Machines/' + nm_name)
create(nm_name, 'NodeManager')
cd('NodeManager/' + nm_name)
set('ListenAddress', host_name)
set('ListenPort', int(nm_port))

print('Associate Node Manager with servers.')
cd('/Servers/AdminServer')
cmo.setMachine(machine)
cd('/Servers/odi_server1')
cmo.setMachine(machine)

print('odi_server1 settings')
cd('/Servers/odi_server1')
cmo.setListenAddress(host_name)
cmo.setListenPort(int(odi_port))

#getDatabaseDefaults()

print('Run in production mode.')
setOption('ServerStartMode','prod')

print('Write the domain and close the template.')
setOption('OverwriteDomain', 'true')
writeDomain(domain_home)
closeTemplate()

exit()

The following command creates a new ODI domain.

cd $MW_HOME/oracle_common/common/bin

./wlst.sh /u01/software/create_odi_domain.py

Make sure the "AdminServer" and "ODI_Server1" servers can start/stop without credentials by creating "boot.properties" files.

mkdir -p $DOMAIN_HOME/servers/AdminServer/security/
echo "username=weblogic" > $DOMAIN_HOME/servers/AdminServer/security/boot.properties
echo "password=Admin123" >> $DOMAIN_HOME/servers/AdminServer/security/boot.properties

mkdir -p $DOMAIN_HOME/servers/odi_server1/security/
cp $DOMAIN_HOME/servers/AdminServer/security/boot.properties $DOMAIN_HOME/servers/odi_server1/security/

Start the AdminServer. It's going to take a few minutes to start.

export MW_HOME=/u01/app/oracle/middleware
export WLS_HOME=$MW_HOME/wlserver_10.3
export WL_HOME=$WLS_HOME
export DOMAIN_HOME=$MW_HOME/user_projects/domains/odiDomain
# Set to the appropriate JAVA_HOME.
export JAVA_HOME=/u01/app/oracle/jdk1.7.0_80
export PATH=$JAVA_HOME/bin:$PATH

nohup $DOMAIN_HOME/bin/startWebLogic.sh > /dev/null 2>&1 &

Create a file called "set_odi_supervisor.py" in the "/u01/software" directory with the following contents. Remember to adjust the variables at the start of the script to suit your installation.

#!/usr/bin/python

print('Set variables.')
host_name = 'ol7-odi.localdomain'
admin_port = '7001'
admin_user = 'weblogic'
admin_password = 'Admin123'
domain_name = 'odiDomain'
supervisor_user = 'SUPERVISOR'
supervisor_password = 'SVPasswd1'

connect(admin_user,admin_password,'t3://' + host_name + ':' + admin_port)
createCred(map="oracle.odi.credmap", key=supervisor_user, user=supervisor_user, password=supervisor_password, desc="Key for Supervisor")
disconnect()
exit()

The following command creates a supervisor password.

cd $MW_HOME/oracle_common/common/bin

./wlst.sh /u01/software/set_odi_supervisor.py

The installation is now complete, but the agent definition must be created in the Master Repository, which must be done using the ODI Studio GUI tool. This can be done on the server using X, or from your client PC client, connecting to the repository database. The example in the next section is done using X on the server.

ODI Agent Config

If we started the "ODI_server1" managed server now we would see the following type of error in the "ODI_server1.log" file.

<BEA-149231> <Unable to set the activation state to true for the application "oraclediagent".
weblogic.application.ModuleException: ODI-1405: Agent OracleDIAgent start failure: the agent is not defined in the topology for master repository.

We have created the physical agent, but we need to create the agent in the Master Repository using the ODI Studio.

$MW_HOME/Oracle_ODI1/oracledi/client/odi.sh

Click the "Connect to Repository..." link.

ODI Studio

Click the "+" button.

ODI Studio

Enter the connection information and click the "Test" button. If successful, click the "OK" button.

ODI Studio

Enter a wallet password and click the "OK" button.

ODI Studio

The credentials should now be set, so click the "OK".

ODI Studio

Click on the "Topology" tab. Right-click on the "Agents" node and select the "New Agent" menu option.

ODI Studio

Set the agent name to "OracleDIAgent", not "OracleDIAgent1" that may be shown by default. Set the host (ol7-odi.localdomain) host and port (8001) values to be consistent with the physical agent definition in the domain. Click the "Save All" icon in the top toolbar.

ODI Studio

The agent will now be visible in the tree.

ODI Studio

Now the agent topology matches the physical agent definition in the domain, we can start the domain components as described below.

Startup/Shutdown

The database is started and stopped in the normal way.

export ORAENV_ASK=NO
export ORACLE_SID=repdevcdb
. oraenv
export ORAENV_ASK=YES

dbstart $ORACLE_HOME
dbshut $ORACLE_HOME

Make sure you have the environment set correctly.

export MW_HOME=/u01/app/oracle/middleware
export WLS_HOME=$MW_HOME/wlserver_10.3
export WL_HOME=$WLS_HOME
export DOMAIN_HOME=$MW_HOME/user_projects/domains/odiDomain
# Set to the appropriate JAVA_HOME.
export JAVA_HOME=/u01/app/oracle/jdk1.7.0_80
export PATH=$JAVA_HOME/bin:$PATH

With then environment in place we can start, check the status and stop OBIEE using the following commands.

# Start
nohup $WLS_HOME/server/bin/startNodeManager.sh > /dev/null 2>&1 &
sleep 10
nohup $DOMAIN_HOME/bin/startWebLogic.sh > /dev/null 2>&1 &
sleep 120
nohup $DOMAIN_HOME/bin/startManagedWebLogic.sh odi_server1 > /dev/null 2>&1 &


# Stop
$DOMAIN_HOME/bin/stopManagedWebLogic.sh odi_server1
$DOMAIN_HOME/bin/stopWebLogic.sh

Check out the log files here.

tail -f $DOMAIN_HOME/nodemanager/nodemanager.log
tail -f $DOMAIN_HOME/servers/AdminServer/logs/AdminServer.log
tail -f $DOMAIN_HOME/servers/odi_server1/logs/odi_server1.log

ODI URLs

Once the domain is running the main URLs you will need on the server are as follows.

Domain Cleanup

During the process of working out the WLST build of the domain I had to recreate the domain several times. This is how I cleaned up between attempts.

# If the domain processed are running, stop them.
$DOMAIN_HOME/bin/stopManagedWebLogic.sh odi_server1
$DOMAIN_HOME/bin/stopWebLogic.sh

# Remove the domain entry in the "domain-registry.xml" file.
sed '/odiDomain/d' $MW_HOME/domain-registry.xml > $MW_HOME/domain-registry.xml2
mv $MW_HOME/domain-registry.xml2 $MW_HOME/domain-registry.xml

# Remove the domain and application files.
rm -Rf /u01/app/oracle/middleware/user_projects/domains/odiDomain
rm -Rf /u01/app/oracle/middleware/user_projects/applications/odiDomain

# Uninstall the repository using the RCU.
$MW_HOME/odi_rcu/rcuHome/bin/rcu -silent -dropRepository \
  -connectString ol7-odi.localdomain:1521/repdev -dbUser SYS -dbRole SYSDBA \
  -schemaPrefix ODIDEV -component ODI -component IAU \
  -component OPSS < /u01/software/odi_rcu_paramfile.txt

Now repeat the process from running the RCU onward.

For more information see:

Hope this helps. Regards Tim...

Back to the Top.