1. 程式人生 > >一次簡單實現登錄多系統的需求小程序

一次簡單實現登錄多系統的需求小程序

周報 crm ctdb title dbi 技術 don 權限 性問題

【環境介紹】

系統環境:Linux + shell

【背景描述】

需求:由於數據庫維護較多同時涉及較多的系統類型,對於不熟悉系統的同事來說,及時登錄一些數據庫顯然是需要時間,登錄雖然簡單,先查到信息再登錄系統,顯然會降低效率。為了解決這個問題,同事建議是否能寫個腳本,能比較方便的登錄系統。

對於這個問題,考慮的問題如下:

1, 從一臺主機登錄多臺主機,相當於跳轉服務器,網絡上一定要互通;

2, 根據不同業務的系統劃分列表信息;

3, 涉及到資產列表信息,服務器的安全性一定要高。

結果:之前申請了一臺專門監控的服務器,用於提取周報信息。剛好能滿足這個條件。

【針對性設計結構】

1, 顯示信息的方式,根據業務系統不同顯示信息;---根據比多的業務域分類

2, 登錄服務器的方式選擇,多個節點登錄;---能選擇性的多個節點登錄,例如RAC

3, 使用哪個用戶登錄。---考慮到也有單機主機,決定用Oracle用戶登錄

經過對上面的問題考慮,決定用Oracle用戶根據不同系統可多個節點選擇登錄。最終結果如下:

主要信息列表文件:

技術分享圖片

主要功能輸出信息:

技術分享圖片

主要實現功能的部分腳本如下:

#!/bin/sh

######################################################################

# login3.sh

# This script is conn db hosts instance

# Author CZT

######################################################################

function connectdb() 》》》主要實現輸出主機信息的函數

{

title=`cat ${list_dest}|head -1`

result=`cat ${list_dest}|grep -i ${Dbname}`

echo "+---------------+---------------+---------------+---------------+---------------+-----+"

printf "|"

printf "%-15s|" $title

printf "\n"

echo "+---------------+---------------+---------------+---------------+---------------+-----+"

printf "|"

printf "%-15s|" $result

printf "\n"

echo "+---------------+---------------+---------------+---------------+---------------+-----+" v_instancenum=4

read -p "Enter host instancenum:" v_instance

while [ ! $v_instance ]

do

read -p "Enter host instancenum:" v_instance

done

if [[ $v_instance =~ "^[1-2]*$" ]]

then

v_instancenum=$[$v_instancenum+$v_instance]

dbip=`cat ${list_dest}|grep -i ${Dbname}|awk ‘{print $"‘$v_instancenum‘"}‘`

echo "Note:You are current try to connect "$Dbname$v_instance

ssh $dbip

else

echo "Note:You are current try to connect "$Dbname$v_instance" does not exist,Please enter the right instancenum!!!"

fi

}

list_dest=‘/home/oracle/tmp/liebiao.txt‘ 》》》創建不同業務域系統的列表數組

LISTS="$(cat /home/oracle/tmp/xitong.txt) QUIT" 》》》創建不同系統的列表數組

echo "+-------------------------------+This is the system list+---------------------------------------+"

select Dest in $LISTS;do 》》》創建不同業務域系統的列表數組

case $Dest in

"CRM") 》》》CRM業務域系統選項信息

DB="$(cat /home/oracle/tmp/CRMDB.TXT) QUIT"

echo "+--------------------------------+This is the $Dest db list+-------------------------------+"

select Dbname in $DB;do

case $Dbname in

"YYDB") 》》》營業數據庫系統信息

connectdb $Dbname; 》》》調用第一步涉及的connectdb函數輸出信息

;;

"GGDB")

connectdb $Dbname;

;;

"DZQD")

connectdb $Dbname;

;;

"QUIT")

echo "Note:You are quit of the option!"

break;

;;

esac

done;

;;

"QUIT") 》》》選擇退出時,退出

echo "Ignorant"

break;

;;

esac

done;

【問題思考】

1, 總體實現的思路邏輯是比較簡單,但是功能確實比較實用,特別適用於不熟悉系統的同事,腳本同時也實現其他庫,比如測試庫,開發庫進行擴展;

2, 對於網絡這段時間出現的問題由於權限限制,無法解決,有些數據庫還是需要手動登錄;

3, 對於輸出信息的顯示也是非常重要,參考MySQL的輸出信息格式,花了不少時間進行調整,用戶體驗也是非常重要的一個關註點;

4, 對於用戶密碼安全性問題,盡量使用加密的方法進行對密碼加密。

【總結】:

1, 根據實際情況,根據需求一定要仔細羅列一下邏輯思路,必會事半功倍;

2, 涉及比較多的主機信息時,寫些小程序對工作的效率也是非常有效提高的;

關於資產安全信息一定評估好,對於數據庫而言數據安全是必不可少的重要環節。

一次簡單實現登錄多系統的需求小程序