perl分析oracle監聽日誌(登入情況)
perl分析oracle監聽日誌
longshine-dba
關鍵字:perl
listener分析,分析oracle登入 、 分析oracle連線
開發中心長期不使用的資料庫
,可以將此例項停掉
或資料庫備份後移出伺服器,從而高效的利用主機記憶體和硬碟空間。
那麼幾百套資料庫,如何高效準確的檢查出那些資料庫是長期不用的呢?
於是利用shell指令碼編寫了乙個日誌分析,將分析的資料生成sql檔案,結果發現shell分析速度不太理想,太慢。
改用perl分析監聽日誌,速度用極快來形容。
以下監聽日誌內容格式:
\ anlog.sh inputlog.sh listener.log perllog.pl sqlnet.log temp.sql test.pl
[oracle@tanxuefeng log]$ pwd
[oracle@tanxuefeng log]$ tail -100 listener.log
23-may-2013 07:38:01 * service_update * ora * 0
23-may-2013 07:48:02 * service_update * ora * 0
23-may-2013 08:58:11 * service_update * ora * 0
23-may-2013 09:08:12 * service_update * ora * 0
23-may-2013 09:12:18 * (connect_data=(service_name=ora)(cid=(program=d:\oracle\plsql?developer9\plsql?developer\plsqldeveloper9.exe)(host=xuefengt-pc)(user=xuefengt))) * (address=(protocol=tcp)(host=192.168.164.1)(port=3776)) * establish * ora * 0
23-may-2013 09:12:19 * service_update * ora * 0
23-may-2013 09:12:22 * (connect_data=(service_name=ora)(cid=(program=d:\oracle\plsql?developer9\plsql?developer\plsqldeveloper9.exe)(host=xuefengt-pc)(user=xuefengt))) * (address=(protocol=tcp)(host=192.168.164.1)(port=3779)) * establish * ora * 0
23-may-2013 09:12:24 * (connect_data=(service_name=ora)(cid=(program=d:\oracle\plsql?developer9\plsql?developer\plsqldeveloper9.exe)(host=xuefengt-pc)(user=xuefengt))) * (address=(protocol=tcp)(host=192.168.164.1)(port=3781)) * establish * ora * 0
監聽日誌格式
大致分四段:
時間 * 客戶端連線資訊 * 客戶ip及埠資訊 * 標識 * 例項名 * 0
以下**將功能 :
1、獲取本地主機ip資訊
2、分解帶識別符號的記錄行資訊,分解出其中的時間,標識、例項名 資訊。
3、將分解出的資訊拼裝成陣列
4、在陣列僅保留例項最後一次寫入的時間點。
perl原始碼:
#!/usr/bin/perl
#use strict;
usesocket;
usesys::hostname;
my @array_instance=();
my $array_instance_ln = \@array_instance; #陣列長度
my @array_print=();
#自定義函式get_mon 用於將英文月份簡寫轉為兩位數字
sub get_mon ; }
$i=$i+1;
if ($i
if ($i > 12)
$j; # 返回 結果 即函式的輸出結果。 }
#以下獲取主機名與ip位址,實際讀取/etc/hosts檔案
my $host = hostname; #獲取主機名
print "host name: ",$host,"\n";
my $name = gethostbyname($host);
my $ip_addr = inet_ntoa($name); #轉義為ip
print $ip_addr,"\n";
print "anlay listener.log on login database;\n";
#獲取本地時間,並格式分顯示出來
my ($sec,$min,$hour,$mday,$mon,$year,$wday, $yday,$isdst)=localtime();
printf "%4d-%02d-%02d %2d:%2d:%2d\n", $year+1900, $mon+1, $mday,$hour,$min,$sec;
print "-------------------------------------\n";
#print "create sql file temp.sql ,begin.......\n";
$year=$year+1900;
$mon =$mon+1;
my $dat= $year.'-'.$mon.'-'.$mday;
#唯讀開啟 監聽日誌
open(file,"d:/log/listener.log") ordie "open error: $!";
#覆蓋寫入方式開啟檔案
open
(sqlfile,">d:/log/temp".$dat.".txt")
ordie "open temp.sql error:$!";
print sqlfile "host name: ",$host,"\n";
print sqlfile $ip_addr,"\n";
print sqlfile "anlay listener.log on login database;\n";
printf sqlfile "%4d-%02d-%02d %2d:%2d:%2d\n", $year+1900, $mon+1, $mday,$hour,$min,$sec;
print sqlfile "-------------------------------------\n";
while()
# }
# 將值增加
# push @array_instance, $instance.' '.$date.' '.$ip_addr.' '.$host;
my $i=0;
for ( $ii=0; $ii<= $#$array_instance_ln; $ii++)
}if ($is>-1)
else
}; }
#列印陣列
#for $row (@array_instance)
for ( $ji=0; $ji<= $#$array_instance_ln; $ji++) ; }
sqlfile
".............................................ok,end!\n";
close(file);
close(sqlfile);
print ".............................................ok,end!\n";
#獲取本地時間,分解出秒,分,時,日,月,年
($sec,$min,$hour,$mday,$mon,$year,$wday, $yday,$isdst)=localtime();
printf "%4d-%02d-%02d %2d:%2d:%2d\n", $year+1900, $mon+1, $mday,$hour,$min,$sec;
以上**執行結果:
從oracle 監聽日誌中,分解出 客戶端 連線例項的詳細資訊。
以上內容僅供參考,歡迎拍磚。
Oracle 清理監聽日誌
隨著警告日誌和監聽日誌越來越大,占用本來就不多的儲存。監聽日誌 listener.log 不得超過2g,會無法處理新連線。監聽日誌 listener.log 太大,效能會有影響,肯能無法寫入,同2。find mtime 30 type f name log xml exec cp u02 dump ...
Oracle監聽日誌定期清理
環境 oracle 11.2.0 win server 2008 r2 enterprise 原因 oracybzdfle監聽日誌檔案大小超過4g,oracle監聽連線時斷時續 解決辦法 重新建立新的日誌檔案,通過計畫任務定期執行,為方便,我這裡每天執行一次。批處理檔案內容如下 echo off r...
清理監聽日誌
在資料庫的執行中,會產生很多監聽日誌,堆積久了會占用很大的記憶體。監聽日誌listener.log日誌放在了 oracle base diag tnslsnr listener trace目錄下 同時,可以通過檢視監聽狀態的命令,找到監聽日誌檔案的存放位置 grid rac1 lsnrctl sta...