前言
這篇文章介紹了DBA每天在監控Oracle數據庫方面的職責,講述了如何通過shell腳本來完成這些重復的監控工作。本文首先回顧了一些DBA常用的Unix命令,以及解釋了如何通過Unix Cron來定時執行DBA腳本。同時文章還介紹了8個重要的腳本來監控Oracle數據庫:
檢查實例的可用性
檢查監聽器的可用性
檢查alert日志文件中的錯誤信息
在存放log文件的地方滿以前清空舊的log文件
分析table和index以獲得更好的性能
檢查表空間的使用情況
找出無效的對象
監控用戶和事務
DBA需要的Unix基本知識
基本的UNIX命令
以下是一些常用的Unix命令:
ps--顯示進程
grep--搜索文件中的某種文本模式
mailx--讀取或者發送mail
cat--連接文件或者顯示它們
cut--選擇顯示的列
awk--模式匹配語言
df--顯示剩余的磁盤空間
以下是DBA如何使用這些命令的一些例子:
顯示服務器上的可用實例:
$ ps -ef | grep smon
oracle 21832 1 0 Feb 24 ? 19:05 ora_smon_oradb1
oracle 898 1 0 Feb 15 ? 0:00 ora_smon_oradb2
dliu 25199 19038 0 10:48:57 pts/6 0:00 grep smon
oracle 27798 1 0 05:43:54 ? 0:00 ora_smon_oradb3
oracle 28781 1 0 Mar 03 ? 0:01 ora_smon_oradb4、
顯示服務器上的可用監聽器:
$ ps -ef | grep listener | grep -v grep
(譯者注:grep命令應該加上-i參數,即grep -i listener,該參數的作用是忽略大小寫,因為有些時候listener是大寫的,這時就會看不到結果)
oracle 23879 1 0 Feb 24 ? 33:36 /8.1.7/bin/tnslsnr listener_db1 -inherit
oracle 27939 1 0 05:44:02 ? 0:00 /8.1.7/bin/tnslsnr listener_db2 -inherit
oracle 23536 1 0 Feb 12 ? 4:19 /8.1.7/bin/tnslsnr listener_db3 -inherit
oracle 28891 1 0 Mar 03 ? 0:01 /8.1.7/bin/tnslsnr listener_db4 -inherit
查看Oracle存檔目錄的文件系統使用情況
$ df -k | grep oraarch
/dev/vx/dsk/proddg/oraarch 71123968 4754872 65850768 7% /u09/oraarch
統計alter.log文件中的行數:
$ cat alert.log | wc -l
2984
列出alert.log文件中的全部Oracle錯誤信息:
$ grep ORA- alert.log
ORA-00600: internal error code, arguments: [kcrrrfswda.1], [], [], [], [], []
ORA-00600: internal error code, arguments: [1881], [25860496], [25857716], []
CRONTAB基本
一個crontab文件中包含有六個字段:
分鐘 0-59
小時 0-23
月中的第幾天 1-31
月份 1 - 12
星期幾 0 - 6, with 0 = Sunday
Unix命令或者Shell腳本
要編輯一個crontab文件,輸入:
Crontab -e
要查看一個crontab文件,輸入:
Crontab -l
0 4 * * 5 /dba/admin/analyze_table.ksh
30 3 * * 3,6 /dba/admin/hotbackup.ksh /dev/null 2>&1
在上面的例子中,第一行顯示了一個分析表的腳本在每個星期5的4:00am運行。第二行顯示了一個執行熱備份的腳本在每個周三和周六的3:00a.m.運行。