perl分析ORACLE監聽日誌(登入情況)

2021-07-25 13:28:09 字數 4302 閱讀 9781

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++) ; }

print 

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...