Great idea, Lisa! I may not have much to give back to the List for all that It's done for me, but this little ditty I just threw together might help someone:
I've been struggling with grep, awk, and sed on the listener.log file to help me get an idea of how we're hitting our production DBs. Without much luck (not very good w/awk), a dim 10-watt bulb switched on when I thought of dumping the pertinent parts of the log into a DB so we can SQL some reports off of them. Since I rotate our listener.log daily to prevent them from growing too large (~10K attaches/day), a simple table and accompanying SQL*Load script ought to do the job. First, the simple table, indexes, and a trigger: CREATE TABLE LISTENER_LOG ( TIMESTAMP DATE, SIDNAME VARCHAR2(10), PROGRAM VARCHAR2(80), HOSTNAME VARCHAR2(32), OSUSER VARCHAR2(32), IPADDR VARCHAR2(15) ); CREATE INDEX LISTENER_LOG_HOSTNAME ON LISTENER_LOG (HOSTNAME); CREATE INDEX LISTENER_LOG_OSUSER ON LISTENER_LOG (OSUSER); CREATE INDEX LISTENER_LOG_PROGRAM ON LISTENER_LOG (PROGRAM); REM Trigger used to remove Windohs directory specs from program name. CREATE OR REPLACE TRIGGER LISTENER_LOG_I BEFORE INSERT ON LISTENER_LOG FOR EACH ROW DECLARE BEGIN :NEW.program := LOWER(SUBSTR(:NEW.program,INSTR(:NEW.program,'\',-1)+1)); END listener_log_i; / SHOW ERRORS; Obviously, the above can be modified for size, tablespace, etc. Next, we need a SQL*Loader control file: load data infile '$ORACLE_HOME/network/log/listener.log' badfile 'listener.err' append into table listener_log when (43) = 'P' trailing nullcols (timestamp position(1:20) date "DD-MON-YYYY HH24:MI:SS", skip1 FILLER char terminated by '=', sidname enclosed by "(SID=" and ")", skip2 FILLER char terminated by "=", program enclosed by "(PROGRAM=" and ")", hostname enclosed by "(HOST=" and ")", osuser enclosed by "(USER=" and ")))", skip3 FILLER char terminated by '=', skip4 FILLER char terminated by '=', skip5 FILLER char terminated by ')', ipaddr enclosed by "(HOST=" and ")" ) I used the "WHEN" clause to only pickup those rows in the listener.log file that actually log a connection to our production DB. For this example, our production DB might be "PROD". The placement of the "(SID=PROD)" section will vary depending on how the service is defined in Oracle Networking (e.g. TNSNAMES.ORA, ONAMES, LDAP). Ours happens to start at column 43. Modify the "WHEN" clause according to your own listener.log. Additionally, with 8i (I think) there could be a "(SRVR=DEDICATED)" or "(SERVER=DEDICATED)" block -- unless you're using MTS (we're not). For this, I needed to change "skip2" to read: skip2 FILLER char enclosed by "(SRVR=" and "=", Finally, we need to call SQL*Loader (for me this is on 8.1.7 on HP/UX): sqlldr MYSCHEMANAME control=listener.sqlload log=listener_sqlload.log direct=false rows=2000 bindsize=10000000 readsize=10000000 ...where MYSCHEMANAME is the same user that owns the LISTENER_LOG table. Expect many many "Discarded - failed all WHEN clauses" in the listener_sqlload.log file. That's it! Afterwards, you can have all sorts of Holiday fun whilst querying your newly poplulated table. When we get to 9i, I'm thinking that an external table and a CTAS or other load script might do the trick, too. Ho-Ho-Hope this can help someone! Merry Christmas! Happy New Year! :) Rich Rich Jesse System/Database Administrator [EMAIL PROTECTED] Quad/Tech International, Sussex, WI USA -----Original Message----- Sent: Thursday, December 19, 2002 11:30 AM To: Multiple recipients of list ORACLE-L Hello everyone - I've been trying to write more Perl lately and after showing my Perl mentor some of the stuff I had written over the last couple of weeks the first thing he said was "why don't you give back to the community". So I figure if I offer up my latest creation I could 1. give back and maybe help a person or two and 2. receive comments on my coding. My coding style is rather simplistic and I would appreciate any comments about what I'm doing wrong/how something could be done differently (TMTOWTDI), etc. My environment is W2K sp2/8.1.7.2. I slapped together a script that fires backup controlfile to trace (including the stored proc) and ftp's it off to another server. If anyone is interested in seeing it please email me directly. Lisa Koivu Oracle Diaper Administrator Fairfield Resorts, Inc. 5259 Coconut Creek Parkway Ft. Lauderdale, FL, USA 33063 -- Please see the official ORACLE-L FAQ: http://www.orafaq.net -- Author: Jesse, Rich INET: [EMAIL PROTECTED] Fat City Network Services -- 858-538-5051 http://www.fatcity.com San Diego, California -- Mailing list and web hosting services --------------------------------------------------------------------- To REMOVE yourself from this mailing list, send an E-Mail message to: [EMAIL PROTECTED] (note EXACT spelling of 'ListGuru') and in the message BODY, include a line containing: UNSUB ORACLE-L (or the name of mailing list you want to be removed from). You may also send the HELP command for other information (like subscribing).