使用shell指令碼檢測資料庫連線訪問情況
最近要遷移幾套環境,涉及的資料庫有Oracle,MySQL,數量還不少,能夠達到的目標就是整合後的伺服器縮減幅度達到70%,這樣一種遷移場景,就涉及到很多的網路連線情況,如果本身業務優先順序高,涵蓋的是全域性業務,那麼這個影響就會無限放大。所以對於網路連線情況的監控也尤為重要。
其實對於這方面的內容,嚴格來說,DBA能夠根據防火牆資訊列表篩查到對應的應用伺服器IP,然後交由負責的專人來負責跟進就可以了,但是這個時候因為重重原因,我要ipositive一些。這件事情就希望我能夠有自己的資訊,不至於到了後面,資料庫遷移過去了,應用連不上去,然後大家再花一些時間來確認是之前就如此,還是因為修改不當導致。其實這種事情想想就挺悶的。
那麼我就positive一些,怎麼樣得到客戶端的資料庫連線情況呢,這個過程中就要重點關注資料庫的連線情況,一種思路就是檢視監聽日誌,另外一種思路就是抓取網路的訪問情況。
我們兩者結合一下,可以提前收集這些訪問的資訊。
簡單想想,刷開膀子來幹,指令碼內容如下:
function get_conn_info
{
ORACLE_HOME=`cat /etc/oratab | tail -1 | awk -F: '{print $2}'`
DB_LISTEN_PORT=`grep -i PORT $ORACLE_HOME/network/admin/listener.ora|awk -F\( '{print $5}'|sed -e 's/PORT//g' -e 's/=//g' -e 's/)//g'`
for TMP_PORT in $DB_LISTEN_PORT
do
netstat -nalp|grep ESTABLISHED|awk '{print $5 " " $4}'|grep $TMP_PORT|awk -F: '{print $4}'| sort|uniq|sed /^[[:space:]]*$/d|awk -v TMP_PORT=$TMP_PORT '{print $1" "TMP_PORT}'
done
}
get_conn_info > conn_info.lst
while true
do
get_conn_info > tmp_conn_info.lst
sdiff conn_info.lst tmp_conn_info.lst|grep \> |awk '{print $2" "$3}' >> diff.lst
sleep 60
done
我們從$ORACLE_HOME/network/admin下分析listener.ora,得到一個埠列表,比如1521,1522,1523等
然後拿著這些埠資訊去和網路訪問中的記錄去做匹配,如果有匹配的記錄,就記錄下來,如果有新增的資訊記錄,就寫入一個臨時檔案,把結果整合起來,這樣得到的列表就是一個持續更新的IP資訊列表,當然這個頻率我根據目前的業務情況做了改變,很多連線都是長連線,有部分是短連線,所以我就把這個頻率做了調整。目前是1分鐘收集一次。
檢視得到的連線資訊列表,這樣哪個埠訪問的,哪臺伺服器都是一目瞭然。
$ less conn_info.lst
10.11.1.158 1522
10.11.128.169 1523
10.11.133.82 1523
10.11.2.140 1525
10.11.2.145 1526
其實對於這方面的內容,嚴格來說,DBA能夠根據防火牆資訊列表篩查到對應的應用伺服器IP,然後交由負責的專人來負責跟進就可以了,但是這個時候因為重重原因,我要ipositive一些。這件事情就希望我能夠有自己的資訊,不至於到了後面,資料庫遷移過去了,應用連不上去,然後大家再花一些時間來確認是之前就如此,還是因為修改不當導致。其實這種事情想想就挺悶的。
那麼我就positive一些,怎麼樣得到客戶端的資料庫連線情況呢,這個過程中就要重點關注資料庫的連線情況,一種思路就是檢視監聽日誌,另外一種思路就是抓取網路的訪問情況。
我們兩者結合一下,可以提前收集這些訪問的資訊。
簡單想想,刷開膀子來幹,指令碼內容如下:
function get_conn_info
{
ORACLE_HOME=`cat /etc/oratab | tail -1 | awk -F: '{print $2}'`
DB_LISTEN_PORT=`grep -i PORT $ORACLE_HOME/network/admin/listener.ora|awk -F\( '{print $5}'|sed -e 's/PORT//g' -e 's/=//g' -e 's/)//g'`
for TMP_PORT in $DB_LISTEN_PORT
do
netstat -nalp|grep ESTABLISHED|awk '{print $5 " " $4}'|grep $TMP_PORT|awk -F: '{print $4}'| sort|uniq|sed /^[[:space:]]*$/d|awk -v TMP_PORT=$TMP_PORT '{print $1" "TMP_PORT}'
done
}
get_conn_info > conn_info.lst
while true
do
get_conn_info > tmp_conn_info.lst
sdiff conn_info.lst tmp_conn_info.lst|grep \> |awk '{print $2" "$3}' >> diff.lst
sleep 60
done
我們從$ORACLE_HOME/network/admin下分析listener.ora,得到一個埠列表,比如1521,1522,1523等
然後拿著這些埠資訊去和網路訪問中的記錄去做匹配,如果有匹配的記錄,就記錄下來,如果有新增的資訊記錄,就寫入一個臨時檔案,把結果整合起來,這樣得到的列表就是一個持續更新的IP資訊列表,當然這個頻率我根據目前的業務情況做了改變,很多連線都是長連線,有部分是短連線,所以我就把這個頻率做了調整。目前是1分鐘收集一次。
檢視得到的連線資訊列表,這樣哪個埠訪問的,哪臺伺服器都是一目瞭然。
$ less conn_info.lst
10.11.1.158 1522
10.11.128.169 1523
10.11.133.82 1523
10.11.2.140 1525
10.11.2.145 1526
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/23718752/viewspace-2129434/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 使用shell指令碼檢視資料庫負載情況指令碼資料庫負載
- 使用shell指令碼檢視資料庫負載情況(第二篇)指令碼資料庫負載
- 通過shell指令碼檢視資料庫表空間使用情況指令碼資料庫
- 透過shell指令碼檢視資料庫表空間使用情況指令碼資料庫
- check_postgres指令碼集檢查資料庫健康情況指令碼資料庫
- 巧用shell生成資料庫檢查指令碼資料庫指令碼
- 檢查備份情況的指令碼指令碼
- 【JDBC】java連線池模擬測試連線Oracle資料庫指令碼參考JDBCJavaOracle資料庫指令碼
- 巧用shell指令碼分析資料庫使用者指令碼資料庫
- 如何在資料訪問層中引用資料庫連線池?資料庫
- 使用shell 指令碼備份資料指令碼
- 檢視過去的session鎖情況指令碼Session指令碼
- shell 指令碼訪問oracle 寫法 (ZT)指令碼Oracle
- 檢視PG資料庫的許可權情況資料庫
- linux系統檢視網路連線情況Linux
- 巧用shell指令碼統計磁碟使用情況指令碼
- 監控系統使用情況shell指令碼指令碼
- MySQL資料庫備份的shell指令碼MySql資料庫指令碼
- 建立管理MySQL資料庫的shell指令碼MySql資料庫指令碼
- 用連線池提高Servlet訪問資料庫的效率 (轉)Servlet資料庫
- 如何檢視MySQL資料庫一段時間內的連線情況?兩種方式來解鎖~MySql資料庫
- 關於WebLogic 訪問Oracle 資料庫(建立連線池)問題WebOracle資料庫
- 檢測ftp連線問題FTP
- java Jdbc連線oracle資料庫連線測試JavaJDBCOracle資料庫
- 使用Sequelize連線資料庫資料庫
- 使用JPA連線資料庫資料庫
- 《四 資料庫連線池原始碼》手寫資料庫連線池資料庫原始碼
- 資料庫連線池-Druid資料庫連線池原始碼解析資料庫UI原始碼
- (轉)PHP連線資料庫之PHP連線MYSQL資料庫程式碼PHP資料庫MySql
- [20230214]資料庫連線訪問asm相關檢視.txt資料庫ASM
- 通過shell指令碼批量操作mysql資料庫指令碼MySql資料庫
- Liunx備份mysql資料庫的shell指令碼MySql資料庫指令碼
- 簡單資料庫及表建立shell指令碼資料庫指令碼
- 監控Oracle資料庫的常用shell指令碼Oracle資料庫指令碼
- bash shell指令碼訪問PostgreSQL的三種方式指令碼SQL
- 檢視oracle資料庫的連線數以及使用者檢視Oracle資料庫
- 檢視使用 MySQL Shell 的連線狀態MySql
- 搭建springboot專案,檢測資料庫是否連線成功Spring Boot資料庫