<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html><head> <meta http-equiv="Content-Language" content="en"> <title>Oracle Database Output Module</title> </head> <body> <a href="rsyslog_conf_modules.html">rsyslog module reference</a> <h1>Oracle Database Output Module</h1> <p><b>Module Name: omoracle</b></p> <p><b>Author: </b>Luis Fernando Muñoz Mejías <Luis.Fernando.Munoz.Mejias@cern.ch></p> <p><b>Available since: </b>: 4.3.0 <p><b>Status: </b>: contributed module, not maitained by rsyslog core authors <p><b>Description</b>:</p> <p>This module provides native support for logging to Oracle databases. It offers superior performance over the more generic <a href="omlibdbi.html">omlibdbi</a> module. It also includes a number of enhancements, most importantly prepared statements and batching, what provides a big performance improvement. </p> <p>Note that this module is maintained by its original author. If you need assistance with it, it is suggested to post questions to the <a href="http://lists.adiscon.net/mailman/listinfo/rsyslog">rsyslog mailing list</a>. <p>From the header comments of this module: <p><pre> This is an output module feeding directly to an Oracle database. It uses Oracle Call Interface, a propietary module provided by Oracle. Selector lines to be used are of this form: :omoracle:;TemplateName The module gets its configuration via rsyslog $... directives, namely: $OmoracleDBUser: user name to log in on the database. $OmoracleDBPassword: password to log in on the database. $OmoracleDB: connection string (an Oracle easy connect or a db name as specified by tnsnames.ora) $OmoracleBatchSize: Number of elements to send to the DB on each transaction. $OmoracleStatement: Statement to be prepared and executed in batches. Please note that Oracle's prepared statements have their placeholders as ':identifier', and this module uses the colon to guess how many placeholders there will be. All these directives are mandatory. The dbstring can be an Oracle easystring or a DB name, as present in the tnsnames.ora file. The form of the template is just a list of strings you want inserted to the DB, for instance: $template TestStmt,"%hostname%%msg%" Will provide the arguments to a statement like $OmoracleStatement \ insert into foo(hostname,message)values(:host,:message) Also note that identifiers to placeholders are arbitrary. You need to define the properties on the template in the correct order you want them passed to the statement! </pre> <p>Some additional documentation contributed by Ronny Egner: <pre> REQUIREMENTS: -------------- - Oracle Instantclient 10g (NOT 11g) Base + Devel (if you´re on 64-bit linux you should choose the 64-bit libs!) - JDK 1.6 (not neccessary for oracle plugin but "make" didd not finsished successfully without it) - "oracle-instantclient-config" script (seems to shipped with instantclient 10g Release 1 but i was unable to find it for 10g Release 2 so here it is) ====================== /usr/local/bin/oracle-instantclient-config ===================== #!/bin/sh # # Oracle InstantClient SDK config file # Jean-Christophe Duberga - Bordeaux 2 University # # just adapt it to your environment incdirs="-I/usr/include/oracle/10.2.0.4/client64" libdirs="-L/usr/lib/oracle/10.2.0.4/client64/lib" usage="\ Usage: oracle-instantclient-config [--prefix[=DIR]] [--exec-prefix[=DIR]] [--version] [--cflags] [--libs] [--static-libs]" if test $# -eq 0; then echo "${usage}" 1>&2 exit 1 fi while test $# -gt 0; do case "$1" in -*=*) optarg=`echo "$1" | sed 's/[-_a-zA-Z0-9]*=//'` ;; *) optarg= ;; esac case $1 in --prefix=*) prefix=$optarg if test $exec_prefix_set = no ; then exec_prefix=$optarg fi ;; --prefix) echo $prefix ;; --exec-prefix=*) exec_prefix=$optarg exec_prefix_set=yes ;; --exec-prefix) echo ${exec_prefix} ;; --version) echo ${version} ;; --cflags) echo ${incdirs} ;; --libs) echo $libdirs -lclntsh -lnnz10 -locci -lociei -locijdbc10 ;; --static-libs) echo "No static libs" 1>&2 exit 1 ;; *) echo "${usage}" 1>&2 exit 1 ;; esac shift done =============== END ============== COMPILING RSYSLOGD ------------------- ./configure --enable-oracle RUNNING ------- - make sure rsyslogd is able to locate the oracle libs (either via LD_LIBRARY_PATH or /etc/ld.so.conf) - set TNS_ADMIN to point to your tnsnames.ora - create a tnsnames.ora and test you are able to connect to the database - create user in oracle as shown in the following example: create user syslog identified by syslog default tablespace users quota unlimited on users; grant create session to syslog; create role syslog_role; grant syslog_role to syslog; grant create table to syslog_role; grant create sequence to syslog_role; - create tables as needed - configure rsyslog as shown in the following example $ModLoad omoracle $OmoracleDBUser syslog $OmoracleDBPassword syslog $OmoracleDB syslog $OmoracleBatchSize 1 $OmoracleBatchItemSize 4096 $OmoracleStatementTemplate OmoracleStatement $template OmoracleStatement,"insert into foo(hostname,message) values (:host,:message)" $template TestStmt,"%hostname%%msg%" *.* :omoracle:;TestStmt (you guess it: username = password = database = "syslog".... see $rsyslogd_source/plugins/omoracle/omoracle.c for me info) </pre> <p>[<a href="rsyslog_conf.html">rsyslog.conf overview</a>] [<a href="manual.html">manual index</a>] [<a href="http://www.rsyslog.com/">rsyslog site</a>]</p> <p><font size="2">This documentation is part of the <a href="http://www.rsyslog.com/">rsyslog</a> project.<br> Copyright © 2008, 2009 by <a href="http://www.gerhards.net/rainer">Rainer Gerhards</a> and <a href="http://www.adiscon.com/">Adiscon</a>. Released under the GNU GPL version 3 or higher.</font></p> </body></html>