Foreword
This article introduces DBA daily responsibilities to monitor Oracle databases, telling how to complete these duplicate monitoring efforts through the shell script. This article first reviews some of the DBA common UNIX commands, and explains how to execute DBA scripts to schedule through UNIX CRON. At the same time, the article also introduces eight important scripts to monitor Oracle databases:
Check the availability of the availability of the instance
Check the error message in the Alert log file to empty the old log file before the log file
Analyze Table and INDEX to get better performance
Check the usage of the table space
Find an invalid object
Monitor users and transactions
UNIX basic knowledge required by DBA
Basic UNIX command
Here are some common UNIX commands:
PS - Display Process Grep - Some text mode Mailx in the search file Mailx - Read or send a mail catch - connection file or display them CUT - Select the displayed column awk - mode matching language DF - Display remaining Disk space
The following is some examples of how DBA uses these commands:
Display the available examples on the server: $ ps -ef | grep swamonoracle21832 1 0 Feb 24? 19:05 ora_smon_oradb1racle 898 1 0 Feb 15? 0:00 ora_smon_oradb2dliu 25199 19038 0 10:48:57 PTS / 6 0:00 grep smonoracle 27798 1 0 05:43:54? 0:00 Ora_SMON_ORADB3Oracle 28781 1 0 Mar 03? 0:01 Ora_SMON_ORADB4,
Display the available listener on the server: $ ps -ef | grep listener | grep -v grep (Translator Note: GREP command should add -i parameter, "Grep -i Listener, the role of this parameter is ignored, because Sometimes listener is capitalized, then see the result) Oracle 23879 1 0 Feb 24? 33:36 /8.1.7/bin/tnslsnr listener_db1 -inheritorracle 27939 1 0 05:44:02? 0:00 / 8.1.7 / bin / tnslsnr listener_db2 -inheritoracle 23536 1 0 Feb 12? 4:19 /8.1.7/bin/tnslsnr listener_db3 -inheritorracle 28891 1 0 Mar 03? 0:01 /8.1.7/bin/tnslsnr listener_db4 -inherit
View Oracle Archive Directory File System Usage $ DF -K | GREP ORAARCH / DEV / VX / DSK / PRODDG / ORAARCH 71123968 4754872 65850768 7% / U09 / Oraarch
Counting the number of rows in the alter.log file: $ cat alert.log | wc -l2984
List all Oracle error in the alert.log file: $ grep ora - alert.logora-00600: Internal Error Code, Arguments: [Kcrrrrfswda.1], [], [], [], [], [] ORA -00600: Internal Error Code, Arguments: [1881], [25857716], [25857716]
Crontab basics
There are six fields in a crontab file:
Minutes 0-59
Hours 0-23
The first few days in the month 1-31
Month 1 - 12
Week 0 - 6, with 0 = Sunday
UNIX command or shell script
To edit a crontab file, type: crontab -e
To view a crontab file, type: crontab -l0 4 * * 5 /dba/admin/analyze_table.ksh30 3 * * 3, 6 /dba/admin/hotbackup.ksh / dev / null 2> & 1
In the above example, the first line shows a script of the analysis table to run at 4:00 AM of each week. The second line shows a script that performs hot backups at 3:00 A.m every Wednesday and Saturday. Surveillance database common shell scripts
The eight shell scripts provided below covered 90% of DBA daily monitoring work, and you may also need to modify UNIX environment variables.
Check availability for Oracle instances
The ORATAB file lists all databases on the server $ CAT / VAR / OPT / ORACLE / ORATAB ################################## ####################################################################################################################################################################################################################################################################################### ######################################################################################################################################################################################################################################################################################################## ################ odb1: /u01/app/oracle/product/8.1.7: yoradb2: /u01/app/oracle/Product/8.1.7: YORADB3: / U01 / App / Oracle / Product / 8.1.7: Noradb4: /u01/app/oracle/Product/8.1.7: Y
The following scripts check all the databases listed in the ORATAB file, and find the status of the database (start or close) ########################## ############################ ################################################################################################################################################################################################################################################################## ######################################################################################################################################################################################################################################################################################################## ################ oatab = / var / opt / oracle / oracabecho "` date` "echo" Oracle Database (s) status `Hostname`: / n" db = `EGREP -i ": y |: n" $ oracab | cut -d ":" -f1 | grep -v "/ #" | grep -v "/ *" `pslist =" `ps -ef | grep pmon`" for i in $ db; doecho "$ pslist" | GREP "ORA_PMON_ $ I"> / dev / null 2> $ 1IF (($?)); Thenecho "Oracle Instance - $ I: Down" Elseecho "Oracle Instance - $ I : Up "Fidone
Use the following command to confirm that the script is available: $ chmod 744 CKinstance.Ksh $ ls -l ckinstance.ksh-rwxr - r - 1 Oracle DBA 657 Mar 5 22:59 ckinstance.ksh *
The following are examples of usability report: $ ckinstance.kshMon Mar 4 10:44:12 PST 2002 Oracle Database (s) Status for DBHOST server: Oracle Instance - oradb1: UpOracle Instance - oradb2: UpOracle Instance - oradb3: DownOracle Instance - oradb4: Up Check the availability of Oracle listeners
There is a similar script to check the Oracle listener. If the listener stops, the script will restart the listener: ###################################################################################################################################################################################################################################################################################### ######################################################################################################################################################################################################################################################################################## ######################################################################################################################################################################################################################################################################################################## ###################@@ company.com "; export dbalistcd / var / opt / oraclerm -flsnr @ company.com .exist ps -ef | GREP MYLSNR | GREP MYLSNR | GREP -V GREP> Lsnr.existif [-s lsnr.exist] Thenecho elseecho "Alert" | mailx -s "listener 'mylsnr' on` Hostname` is down "$ dbalist tns_admin = / var / opt / oracle; export TNS_ADMINORACLE_SID = db1; export ORACLE_SID ORAENV_ASK = NO; export ORAENV_ASKPATH = $ PATH: / bin: / usr / local / bin; export PATH oraenvLD_LIBRARY_PATH = $ {ORACLE_HOME} / lib; export LD_LIBRARY_PATHlsnrctl start mylsnrfi.
Check Alert Logs (ORA-XXXXX)
Some environment variables used by each script can be placed in a profile: ####################################################### ####################################################################################################################################################################################################################################### ######################################################################################################################################################################################################################################################################################################## ############### Editor = vi; export editor oracle_base = / u01 / app / oracle; export oracle_base oracle_home = $ oracle_base / product / 8.1.7; export oracle_home ld_library_path = $ oracle_home / lib; export LD_LIBRARY_PATH TNS_ADMIN = / var / opt / oracle; export TNS_ADMIN NLS_LANG = american; export NLS_LANG NLS_DATE_FORMAT = 'Mon DD YYYY HH24: MI: SS'; export NLS_DATE_FORMAT oRATAB = / var / opt / oracle / oratab; export oRATAB PATH = $ PATH: $ ORACLE_HOME: $ oracle_home / bin: / usr / ccs / bin: / bin: / usr / bin: / usr / sbin / bin: / usr / openwin / bin: / opt / bin: EXPORT Path dbalist = "primary.dba @ company.com"; EXPORT DBALIST The following scripts first call Oracle.profile to set all environment variables. If any Oracle error is found, the script also sends a warning email to the DBA. ######################################################################################################################################################################################################################################################################################################## ############# CKALERTLOG.SH ################################################################################################################################################################################################################################################################################### ######################################! / bin / ksh. . / Etc/oracle.profilefor Sid in `Cat $ Oracle_Home / Sidlist`docd $ Oracle_Base / Admin / $ SID / BDUMPIF [-f alert _ $ {sid} .log] thenmv alert _ $ {sid} .log alert_work.logtouch alert_ $ {SID} .logcat alert_Work.log >> Alert _ $ {sid} .histgrep ora-alert_work.log> alert.rrfiif [`cat alert.err | wc -l` -gt 0] ThenMailx -s" $ {sid} Oracle Alert Errors "$ dbalist Clear old archive file The following scripts will empty the old archive when the log file reaches 90% capacity: $ DF -K | GREP Archfilesystem Kbytes Used Avail Capacity Mounted ON / DEV / VX / DSK / PRODDG / Archive 71123968 30210248 40594232 43% / U08 / Archive ############################################################################################################################################################################################################################ ################## Clean_arch.ksh ############################################################################################################################################################################################################################################################################### ######################################################################################################################################################################################################################################################################################################## ##! / bin / kshdf -k | grep arch> dfk.resultational_filesystem = `awk -f" "{print $ 6} 'DFK.Result`archive_capacity =` awk -f "" {print $ 5}' DFK.Result `if [[$ archive_capacity> 90%]] thenecho" Filesystem $ {archive_filesystem} is $ {archive_capacity} filled "# try one of the following option depend on your needfind $ archive_filesystem -type f -mtime 2 -exec rm -r {} /; Tar RMANFI analysis table and index (to get better performance) I will show it if the transfer parameter is sent to a script: ######################################################################################################################################################################################################################################### #################################################################################################################################################################################################################################################################################################### ######################################################################################################################################################################################################################################################################################################## ######! / bin / ksh # INPUT Parameter: 1: Password # 2: SID IF (($ # <1)) Then Echo "please enter 'Oracle' User Password as the first parameter!" EXIT 0 FI IF (($ # <2)) THEN Echo "please enter instance name as the second parameter!" EXIT 0FI To pass the parameters to perform this script, type: $ analysis_table.sh manager ORADB1 The first part of the script generates an Analyze.SQL file with the statement of the analysis. The second part of the script analysis all the table: ################################################################## ########################################################################################################################################################################################################################################################################################################## ######################################################################################################################################################################################################################################################################################################## '.' ##### sqlplus -s Check the use of the table space The following script is used to detect the use of table space. If there is only 10% left in the table space, it will send a warning Email. ######################################################################################################################################################################################################################################################################################################## ############## CK_TBSP.SH ##################################################################################################################################################################################################################################################################### ###################################################### kshsqlplus -s Find an invalid database object The following finds the invalid database object: ######################################################################################################################################################################################################################################################################################## #################### ## invalid_object_lert.sh ## #################### ######################################################################################################################################################################################################################################################################################################## ### #! / bin / ksh. /etc/oracle.profile sqlplus -s The following script sends a warning E-mail: ###################################################################################################################################################################################################################### ###################################################################################################################################################################################################################################### ######################################################################################################################################################################################################################################################################################################## ########! / bin / ksh .. /etc/oracle.profilesqlplus -s Through the above scripts, you can greatly reduce your work. You can use these to do more work, such as performance adjustments.