//**************************************************************************
// (c) Copyright IBM Corp. 2007 All rights reserved.
//
// The following sample of source code ("Sample") is owned by International
// Business Machines Corporation or one of its subsidiaries ("IBM") and is
// copyrighted and licensed, not sold. You may use, copy, modify, and
// distribute the Sample in any form without payment to IBM, for the purpose of
// assisting you in the development of your applications.
//
// The Sample code is provided to you on an "AS IS" basis, without warranty of
// any kind. IBM HEREBY EXPRESSLY DISCLAIMS ALL WARRANTIES, EITHER EXPRESS OR
// IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. Some jurisdictions do
// not allow for the exclusion or limitation of implied warranties, so the above
// limitations or exclusions may not apply to you. IBM shall not be liable for
// any damages you suffer as a result of using, copying, modifying or
// distributing the Sample, even if IBM has been advised of the possibility of
// such damages.
//**************************************************************************
//
// SOURCE FILE NAME: GetLogs.java
//
// SAMPLE: How to get the customer view of diagnostic log file entries
//
// This sample shows:
// 1. How to retrieve messages from the notification log starting
// at a specified point in time.
// 2. How to retrieve messages from the notification log written
// over the last week.
// 3. How to get all critical log messages logged in the last 24
// hours using the PDLOGMSGS_LAST24HOURS view.
//
// SQL STATEMENTS USED:
// SELECT
// TERMINATE
//
// JAVA 2 CLASSES USED:
// Statement
// ResultSet
//
// Classes used from Util.java are:
// Data
// JdbcException
//
//
// Output will vary depending on the JDBC driver connectivity used.
//**************************************************************************
//
// For more information on the sample programs, see the README file.
//
// For information on developing Java applications see the Developing Java Applications book.
//
// For information on using SQL statements, see the SQL Reference.
//
// For the latest information on programming, compiling, and running DB2
// applications, visit the DB2 Information Center at
// http://publib.boulder.ibm.com/infocenter/db2luw/v9r7/index.jsp
//**************************************************************************
import java.lang.*;
import java.sql.*;
class GetLogs
{
public static void main(String argv[])
{
String argvDate = null;
String argvTime = null;
String alias = null;
String userId = null;
String password = null;
String url = null;
Connection con = null;
try
{
// check and assign command line arguments
switch (argv.length)
{
case 2:
alias = "sample";
userId = "";
password = "";
argvDate = argv[0];
argvTime = argv[1];
break;
case 3:
alias = argv[2];
userId = "";
password = "";
argvDate = argv[0];
argvTime = argv[1];
break;
case 5:
alias = argv[2];
userId = argv[3];
password = argv[4];
argvDate = argv[0];
argvTime = argv[1];
break;
default:
System.out.println(
"USAGE: GetLogs <TimeStamp> [dbname] [userid password]\n" +
" Timestamp Format: YYYY-MM-DD HOUR:MINUTE:SECOND" +
" Example1: GetLogs 2005-12-22 06.44.44\n" +
" Example2: GetLogs 2005-12-22 06.44.44 <dbname>\n" +
" Example3: GetLogs 2005-12-22 06.44.44 <dbname> <userID> <passwd>\n");
System.exit(0);
}
url = "jdbc:db2:" + alias;
Class.forName("com.ibm.db2.jcc.DB2Driver").newInstance();
con = DriverManager.getConnection( url );
System.out.println();
System.out.println(
" THIS SAMPLE SHOWS HOW TO RETRIEVE NOTIFICATION LOGS MESSAGES.\n");
// Retrieve all the notification messages written after the specified
// timestamp. If NULL is specified as the input timestamp to
// PD_GET_LOG_MSGS UDF, then all the entries will be returned.
getPdLogMesgs(con, argvDate, argvTime);
// Retrieve all notification messages written in the last week from all
// partitions in chronological order.
getPdLogMesgsWeek(con);
// Get all critical log messages logged in the last 24 hours, order by
// most recent
getPdLogMesgs24Hours(con);
// disconnect from 'sample' database
con.close();
}
catch (Exception e)
{
JdbcException jdbcExc = new JdbcException(e) ;
jdbcExc.handle();
}
} // main
// Retrieve all the notification messages written after
// the specified timestamp
static void getPdLogMesgs(Connection con, String date, String time)
{
try
{
Statement stmt = con.createStatement();
System.out.println(
"--------------------------------------------------------------\n" +
"NOTIFICATION MESSAGES STARTING AT A SPECIFIED POINT IN TIME \n" +
"FROM ALL PARTITIONS\n" +
"--------------------------------------------------------------\n");
System.out.println(
"SELECT timestamp,\n" +
" instancename,\n" +
" dbpartitionnum,\n" +
" dbname,\n" +
" processname,\n" +
" appl_id,\n" +
" msgtype,\n" +
" msgseverity,\n" +
" msg \n" +
"FROM TABLE ( PD_GET_LOG_MSGS( TIMESTAMP('2005-12-22', '06.44.44') ) )\n" +
"AS t ORDER BY TIMESTAMP;\n\n" );
String query = "SELECT timestamp, instancename, dbpartitionnum, " +
" dbname, processname, appl_id, msgtype, msgseverity, " +
" msg FROM TABLE (PD_GET_LOG_MSGS (TIMESTAMP('" +
date + "' , '" +
time + "' ))) AS t ORDER BY TIMESTAMP";
ResultSet rs = stmt.executeQuery(query);
while (rs.next())
{
System.out.println("TimeStamp : " + rs.getString(1) + "\n" +
"Instance Name : " + rs.getString(2) + "\n" +
"DBPartition No : " + rs.getInt(3) + "\n" +
"DB Name : " + rs.getString(4) + "\n" +
"ProcessName : " + rs.getString(5) + "\n" +
"Application ID : " + rs.getString(6) + "\n" +
"Message Type : " + rs.getString(7) + "\n" +
"Message Severity : " + rs.getString(7) + "\n" +
"Message : " + rs.getString(8) + "\n") ;
}
rs.close();
stmt.close();
}
catch (Exception e)
{
JdbcException jdbcExc = new JdbcException(e);
jdbcExc.handle();
}
} // getPdLogMesgs
// Retrieve all the notification messages written over the last week
static void getPdLogMesgsWeek(Connection con)
{
try
{
Statement stmt = con.createStatement();
System.out.println(
"--------------------------------------------------------------\n" +
"NOTIFICATION MESSAGES WRITTEN IN THE LAST WEEK FROM \n" +
"FROM ALL PARTITIONS\n" +
"--------------------------------------------------------------\n");
System.out.println(
"SELECT timestamp,\n" +
" instancename,\n" +
" dbpartitionnum,\n" +
" dbname,\n" +
" processname,\n" +
" appl_id,\n" +
" msgtype,\n" +
" msgseverity,\n" +
" msg \n" +
"FROM TABLE ( PD_GET_LOG_MSGS( current_timestamp - 7 days) )\n" +
"AS t ORDER BY TIMESTAMP;\n");
String query = "SELECT timestamp, instancename, " +
"dbpartitionnum, dbname, processname, appl_id, " +
"msgtype, msgseverity, msg FROM TABLE ( PD_GET_LOG_MSGS" +
"( current_timestamp - 7 days ) ) AS t ORDER BY TIMESTAMP";
ResultSet rs = stmt.executeQuery(query);
while (rs.next())
{
System.out.println("TimeStamp : " + rs.getString(1) + "\n" +
"Instance Name : " + rs.getString(2) + "\n" +
"DBPartition No : " + rs.getInt(3) + "\n" +
"DB Name : " + rs.getString(4) + "\n" +
"ProcessName : " + rs.getString(5) + "\n" +
"Application ID : " + rs.getString(6) + "\n" +
"Message Type : " + rs.getString(7) + "\n" +
"Message Severity : " + rs.getString(7) + "\n" +
"Message : " + rs.getString(8) + "\n") ;
}
rs.close();
stmt.close();
}
catch (Exception e)
{
JdbcException jdbcExc = new JdbcException(e) ;
jdbcExc.handle();
}
} // getPdLogMesgsWeek
// Retrieve all the notification messages written in the last 24 hours
static void getPdLogMesgs24Hours(Connection con)
{
try
{
Statement stmt = con.createStatement();
System.out.println(
"--------------------------------------------------------------\n" +
"NOTIFICATION MESSAGES WRITTEN OVER LAST 24 HOURS FROM\n" +
"FROM ALL PARTITIONS\n" +
"--------------------------------------------------------------\n");
System.out.println(
"SELECT timestamp,\n" +
" instancename,\n" +
" dbpartitionnum,\n" +
" dbname,\n" +
" processname,\n" +
" appl_id,\n" +
" msgtype,\n" +
" msgseverity,\n" +
" msg \n" +
"FROM SYSIBMADM.PDLOGMSGS_LAST24HOURS WHERE msgseverity = 'C'\n" +
"ORDER BY TIMESTAMP DESC;\n" );
String query = "SELECT timestamp, instancename, dbpartitionnum, " +
"dbname, processname, appl_id, msgtype," +
"msgseverity, msg FROM SYSIBMADM.PDLOGMSGS_LAST24HOURS " +
"WHERE msgseverity = 'C' ORDER BY TIMESTAMP DESC";
ResultSet rs = stmt.executeQuery(query);
while (rs.next())
{
System.out.println("TimeStamp : " + rs.getString(1) + "\n" +
"Instance Name : " + rs.getString(2) + "\n" +
"DBPartition No : " + rs.getInt(3) + "\n" +
"DB Name : " + rs.getString(4) + "\n" +
"ProcessName : " + rs.getString(5) + "\n" +
"Application ID : " + rs.getString(6) + "\n" +
"Message Type : " + rs.getString(7) + "\n" +
"Message Severity : " + rs.getString(7) + "\n" +
"Message : " + rs.getString(8) + "\n") ;
}
rs.close();
stmt.close();
}
catch (Exception e)
{
JdbcException jdbcExc = new JdbcException(e) ;
jdbcExc.handle();
}
} // getPdLogMesgs24Hours
} // GetLogs