Oracle Datenbank-Monitoring-Shell-Skript verwendet



Vorwort

Dieser Artikel beschreibt einen Tag in der Überwachung der Oracle DBA Datenbank Rolle, beschrieb, wie Shell-Skripte, um die doppelten Kontrollen abgeschlossen. Dieser Artikel zuerst einen Überblick über einige häufig verwendete Befehle Unix DBA, und erklärt, wie die Umsetzung der DBA Unix Cron Script Zeit. Inzwischen hat die Artikel beschreibt außerdem acht wichtige Skript zu Oracle-Datenbank zu überwachen:

Prüfen Sie die Verfügbarkeit von Beispielen

Prüfen Sie die Verfügbarkeit des Hörers

Überprüfen Sie die Warnung Protokolldatei Fehlermeldung

Melden Sie sich in den Laden leer Ort voll von alten Log-Dateien Datei vor

Analyse von Tabellen und Indizes für bessere Performance

Check Tablespace Nutzung

Suchen Sie ungültige Objekte

Überwachung von Nutzern und Services

Grundlegende Kenntnisse der Unix DBA erforderlich

Grundlegende UNIX-Befehle

Hier sind einige häufig verwendete Unix-Befehle:

ps - Anzeige Prozess grep - Suchen Sie in einem Text-Modus-Datei mailx - E-Mail lesen oder Katze - link Dateien oder zeigt sie geschnitten - wählen Sie die Spalte awk-Display - Pattern-Matching Sprache df - Anzeige verbleibenden Disk Space

Das folgende ist ein DBA, wie Sie mit diesen Befehlen einige Beispiele:

Lassen Sie sich die verfügbaren Server-Instanz:

$ Ps-ef | grep smonoracle 21.832 1 0 24. Februar? 19.05 ora_smon_oradb1oracle 898 1 0 15 Februar? 00.00 ora_smon_oradb2dliu 25.199 19.038 0 10.48.57 pts / 6 0:00 grep smonoracle 27.798 1 0 5.43: 54? 00.00 ora_smon_oradb3oracle 28.781 1 0 3 März? 00.01 ora_smon_oradb4,

Display Monitor ist auf dem Server zur Verfügung:

$ Ps-ef | grep Zuhörer | grep-v grep (Übersetzer Hinweis: grep-Befehl hinzugefügt werden soll-i-Parameter, der grep-i Zuhörer, die Rolle des Parameters Fall ist unempfindlich, weil die Zuhörer manchmal aktiviert ist, die Die Zeit wird es nicht sehen, Ergebnisse) Oracle 23879 1 0 24. Februar? 33:36 / 8.1.7/bin/tnslsnr listener_db1-inheritoracle 27.939 1 0 05.44.02? 0.00 / 8.1.7/bin/tnslsnr listener_db2 inheritoracle-23536 1 0 12. Februar? 4.19 / 8.1.7/bin/tnslsnr listener_db3-inheritoracle 28.891 1 0 3 März? 0.01 / 8.1.7/bin/tnslsnr listener_db4-erben

Siehe Oracle-Archiv-Verzeichnis Dateisystem Nutzung

$ Df-k | grep oraarch / dev / vx / dsk / proddg / oraarch 65850768 71123968 4754872 7% / u09/oraarch

Statistik alter.log Datei Zeilen:

$ Cat alert.log | wc-l2984

Alert.log Datei listet alle Oracle-Fehlermeldung:

$ Grep ORA-alert.logORA-00600: Interner Fehlercode, Argumente: [kcrrrfswda.1], [], [], [], [], [] ORA-00600: Interner Fehlercode, Argumente: [1881], [25860496], [25857716], []

CRONTAB Basic

Eine crontab-Datei enthält sechs Felder:

0-59 Minuten

Stunden 0-23

Die ersten paar Tage, 1-31 Monate

Monat 1 bis 12

Woche 0-6, wobei 0 = Sonntag

Unix Shell-Befehl oder ein Skript

So bearbeiten Sie eine crontab-Datei ein: crontab-e

Um eine crontab-Datei ein:

Crontab-l0 4 Backup bin conf config Daten eshow_sitemap.html generate.sh log maint sitemap.html svn tmp Backup bin conf config Daten eshow_sitemap.html generate.sh log maint sitemap.html svn tmp 5 / 3 dba/admin/analyze_table.ksh30 Backup bin conf config Daten eshow_sitemap.html generate.sh log maint sitemap.html svn tmp Backup bin conf config Daten eshow_sitemap.html generate.sh log maint sitemap.html svn tmp 3,6 / dba / admin / hotbackup.ksh / dev / null 2 & 1

In dem obigen Beispiel zeigt die erste Zeile der Tabelle ein Skript um 4.00 Uhr jede Woche, Laufen 5. Die zweite Zeile zeigt eine Implementierung des Hot-Backup-Skript jeden Mittwoch und Samstag 03.00 Uhr zu laufen.

Shell-Skript zur Überwachung einer Datenbank der am häufigsten verwendeten

Hier sind die acht Shell-Skript DBA Abdeckung für 90% der täglichen Überwachung der Arbeiten, müssen Sie möglicherweise auch auf die UNIX-Umgebungsvariablen ändern.

Prüfen Sie die Verfügbarkeit von Oracle-Instanzen

oratab Datei listet alle Datenbanken auf dem Server

$ Cat / var / opt / oracle / oratab

# # / Var / opt / oracle / oratab # #

oradb1: / 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

Das folgende Skript überprüft oratab Datei listet alle der Datenbank und finden Sie heraus den Status der Datenbank (Start-oder auszuschalten)

# # Ckinstance.ksh oratab = / var / opt / oracle / oratabecho `date` echo Oracle Database (s) Status `hostname`: db = `egrep-i: Y |: N $ oratab | 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 Instanz - $ i: Downelseecho Oracle Instanz - $ i: Upfidone

Verwenden Sie den folgenden Befehl ein, um zu überprüfen, dass das Skript ausgeführt wird:

$ Chmod 744 ckinstance.ksh $ ls-l-rwxr-ckinstance.ksh-r - 1 Oracle DBA 657 5. März 22.59 ckinstance.ksh *

Die folgenden sind Beispiele für Usability-Bericht:

$ Ckinstance.kshMon 4. März 2002 10.44.12 PST Oracle Database (s) Status für DBHOST Server: Oracle Instanz - oradb1: UpOracle Instanz - oradb2: UpOracle Instanz - oradb3: DownOracle Instanz - oradb4: Bis

Prüfen Sie die Verfügbarkeit der Oracle-Listener

Nach einem ähnlichen Skript zu prüfen, den Oracle-Listener. Wenn der Zuhörer beendet wird, wird das Skript starten Sie den Hörer:

cklsnr.sh bin / kshDBALIST = primary.dba @ company.com, another.dba @ company.com; Export DBALISTcd / var / opt / f-oraclerm lsnr.exist ps-ef | grep mylsnr | grep-v grep lsnr . existif [-s lsnr.exist] thenecho elseecho Alert | mailx-s Listener "mylsnr 'auf` hostname `ist ab $ DBALIST TNS_ADMIN = / var / opt / oracle; Export TNS_ADMINORACLE_SID = db1; Export ORACLE_SID ORAENV_ASK = nein; Export ORAENV_ASKPATH = $ PATH: / bin: / usr / local / bin; export PATH. oraenvLD_LIBRARY_PATH = $ (ORACLE_HOME) / lib; Export LD_LIBRARY_PATHlsnrctl starten mylsnrfi

Check Alert Logs (ORA-XXXXX)

Jedes Skript verwendet eine Reihe von Umwelt-Variablen können in einem Profil gestellt werden:

oracle.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: / sbin: / usr / openwin / bin: / opt / bin:.; export PATH = DBALIST primary.dba @ company.com, ein weiteres . dba@company.com; Export DBALIST

Das folgende Skript ruft zuerst oracle.profile alle Umgebungsvariablen setzen. Wenn einer der Oracle-Fehler, wird das Skript eine Warnung an die DBA-Mail senden.

# Ckalertlog.sh ###!/ bin / ksh .. / etc / oracle.profilefor in `cat $ SID ORACLE_HOME / sidlist` DOCD $ ORACLE_BASE / admin / $ SID / bdumpif [-f $ alert_ (SID). Login] thenmv alert_ log $ (SID). alert_work.logtouch alert_ $ (SID). logcat alert_work.log alert_ $ (SID). histgrep ORA-alert_work.log alert.errfiif [`cat alert.err | wc -l `-gt 0] thenmailx-s $ (SID) ORACLE ALERT ERRORS DBALIST $ -f-f alert.errfirm alert.errrm alert_work.logdone

Entfernen Sie das alte Archiv

Das folgende Skript wird 90% werden in der Protokolldatei, wenn die leeren Kapazität der alten Archivdateien:

$ Df-k | grep archFilesystem KBytes nützen Kapazität auf / dev / vx / dsk / proddg / archive 40594232 71123968 30210248 43% / u08/archive Mounted verwendet

# Clean_arch.ksh! / Bin / kshdf-k | grep Bogen dfk.resultarchive_filesystem = `awk-F '(print $ 6)" dfk.result archive_capacity `=` awk-F' (print $ 5) "dfk.result` if [[$ archive_capacity 90%]] Filesystem thenecho $ (archive_filesystem) ist $ (archive_capacity) gefüllt # eine der folgenden Option hängt von Ihrer needfind $ archive_filesystem-type f-mtime versuchen +2- exec rm-r () ; tar rmanfi

Analyse von Tabellen und Indizes (um eine bessere Leistung)

Im Folgenden werde ich zeigen, wenn die Übertragungs-Parameter, um ein Skript:

analyze_table.sh # #

bin / ksh # Eingabeparameter: 1: password # 2: SID wenn (($# 1)) then echo "Bitte geben Sie Oracle User-Passwort als ersten Parameter!" exit 0 fi wenn (($# 2)) then echo "Bitte geben Sie beispielsweise Namen wie der zweite Parameter!" exit 0 fi

Parameter zu übergeben, um das Skript auszuführen, geben Sie ein:

$ Analyze_table.sh manager oradb1

Der erste Teil des Skriptes hatte eine analyze.sql Datei, die Analyse der Tabelle enthält die Anweisung. Der zweite Teil des Skripts alle Tabellen:

analyze_table.sh

sqlplus-s Oracle / $ 1 $ @ 2set Position offset offset-Feeds pagesize 200set linesize 100spool analyze_table.sqlselect ANALYZE TABLE | | Besitzer | |. | | segment_name | | ESTIMATE STATISTICS SAMPLE 10 Prozent, von dba_segmentswhere segment_type = TABLEand Eigentümer nicht in ( SYS, SYSTEM); spool offexit! sqlplus-s Oracle / $ 1 $ 2 @ @. / analyze_table.sqlexit!

Das folgende ist ein Beispiel für analyze.sql:

$ Cat analyze.sqlANALYZE HIRWIN.JANUSAGE_SUMMARY TABLE ESTIMATE STATISTICS SAMPLE 10 Prozent; ANALYZE TABLE HIRWIN.JANUSER_PROFILE ESTIMATE STATISTICS SAMPLE 10 Prozent; ANALYZE TABLE APPSSYS.HIST_SYSTEM_ACTIVITY ESTIMATE STATISTICS SAMPLE 10 Prozent; ANALYZE TABLE HTOMEH.QUEST_IM_VERSION ESTIMATE STATISTICS SAMPLE 10 Prozent; ANALYZE TABLE JSTENZEL.HIST_SYS_ACT_0615 ESTIMATE STATISTICS SAMPLE 10 Prozent; ANALYZE TABLE JSTENZEL.HISTORY_SYSTEM_0614 ESTIMATE STATISTICS SAMPLE 10 Prozent; ANALYZE TABLE JSTENZEL.CALC_SUMMARY3 ESTIMATE STATISTICS SAMPLE 10 Prozent; ANALYZE TABLE IMON.QUEST_IM_LOCK_TREE ESTIMATE STATISTICS SAMPLE 10 Prozent; ANALYZE TABLE APPSSYS.HIST_USAGE_SUMMARY ESTIMATE STATISTICS SAMPLE 10 Prozent; ANALYZE TABLE PATROL.P $ LOCKCONFLICTTX ESTIMATE STATISTICS SAMPLE 10 Prozent;

Überprüfen Sie die Tabelle Raum zu bedienen

Das folgende Skript erkennt den Gebrauch der Tabelle Raum. Wenn die Tabelle Raum nur 10%, wird es eine Warnung per E-Mail.

ck_tbsp.sh

! / Bin / kshsqlplus-s Oracle / $ 1 $ @ 2set Futtermittel ausgeglichen linesize 100SET pagesize 200spool tablespace.alertSELECT F. tablespace_name, TO_CHAR ((T. TOTAL_SPACE - F. FREE_SPACE), 999,999) "USED (MB)" , TO_CHAR (F. FREE_SPACE, 999,999) "FREE (MB)", TO_CHAR (T. TOTAL_SPACE, 999,999) "TOTAL (MB)", TO_CHAR ((ROUND ((F. FREE_SPACE / T. TOTAL_SPACE) * 100)), 999) | |% PER_FREEFROM (SELECT tablespace_name, ROUND (SUM (Blöcke * (SELECT VALUE/1024FROM V $ PARAMETER WHERE NAME = DB_BLOCK_SIZE) / 1024)) FREE_SPACEFROM DBA_FREE_SPACEGROUP BY tablespace_name) F, (SELECT tablespace_name, ROUND ( SUM (BYTES/1048576)) TOTAL_SPACEFROM DBA_DATA_FILESGROUP BY tablespace_name) TWHERE F. tablespace_name = T. TABLESPACE_NAMEAND (ROUND ((F. FREE_SPACE / T. TOTAL_SPACE) * 100)) 10; spool offexit! if [`cat tablespace.alert | wc-l `-gt 0] thencat tablespace.alert-l tablespace.alert tablespace.tmpmailx-s" Alarm für TABLESPACE $ (2) "$ DBALIST tablespace.tmpfi

Beispiele für Produkt-Warnung per E-Mail wie folgt:

Tablespace_name USED (MB) KOSTENLOS (MB) GESAMT (MB) PER_FREE SYSTEM 2.047 203 2.250 9% STBS01 302 25 327 8% STBS02 241 11 252 4% STBS03 233 19 252 8%

Finden Sie heraus, ungültige Datenbank-Objekte

Finden Sie das folgende ungültige Datenbank-Objekte:

# # # # Invalid_object_alert.sh

#! / Bin / ksh. / Etc / oracle.profile sqlplus-s Oracle / $ 1 @ $ 2 genannten Futtermittel OFF Position off Spalte object_name Format A30 spool invalid_object.alert SELECT besitzer, OBJECT_NAME, Objekttyp,

STATUS FROM DBA_OBJECTS WHERE STATUS =

INVALID ORDER BY OWNER, Objekttyp, OBJECT_NAME; spool off Ausfahrt! Wenn [`cat invalid_object.alert | wc-l`-gt 0] then mailx-s "ungültige Objekte für $ (2)" $ DBALIST invalid_object. alert fi $ cat invalid_object.alertOWNER OBJECT_NAME object_type ---------------------------------------- STATUS ----

HTOMEH DBMS_SHARED_POOL PACKAGE BODY INVALIDHTOMEH X_ $ KCBFWAIT VIEW INVALIDIMON IW_MON PACKAGE PACKAGE BODY INVALIDIMON IW_MON INVALIDIMON IW_ARCHIVED_LOG VIEW INVALIDIMON IW_FILESTAT VIEW VIEW INVALIDIMON IW_SQL_FULL_TEXT INVALIDIMON IW_SYSTEM_EVENT1 VIEW VIEW INVALIDIMON IW_SYSTEM_EVENT_CAT INVALIDLBAILEY CHECK_TABLESPACE_USAGE VERFAHREN INVALIDPATROL P $ AUTO_EXTEND_TBSP VIEW INVALIDSYS DBMS_CRYPTO_TOOLKIT PACKAGE PACKAGE BODY INVALIDSYS DBMS_CRYPTO_TOOLKIT INVALIDSYS UPGRADE_SYSTEM_TYPES_TO_816 VERFAHREN INVALIDSYS AQ $ _DEQUEUE_HISTORY_T TYPE INVALIDSYS HS_CLASS_CAPS VIEW INVALID SYS HS_CLASS_DD VIEW INVALID

Überwachung von Anwendern und-dienste (Deadlocks, etc.)

Das folgende Skript in einem Deadlock tritt auf, wenn das Senden einer Warnung per E-Mail:

deadlock_alert.sh

# #! / Bin / ksh .. / etc / oracle.profilesqlplus-s Oracle / $ 1 $ @ 2set Feed Offset Position offspool deadlock.alertSELECT SID, die Entschlüsselung (Block, 0, NO, YES) Blocker, DECODE (Antrag, 0, NO, YES) WAITERFROM V $ LOCK REQUEST WHERE 0 oder BLOCK 0 ORDER BY DESC-Block; spool offexit! if [`cat deadlock.alert | wc-l`-gt 0] thenmailx-s "Deadlock Alarm für $ (2) "$ DBALIST deadlock.alertfi

Abschluss

0,20,40 17.7 Backup bin conf config Daten eshow_sitemap.html generate.sh log maint sitemap.html svn tmp Backup bin conf config Daten eshow_sitemap.html generate.sh log maint sitemap.html svn tmp 1-5 / dba / scripts / ckinstance.sh / dev / null 2 & 10,20,40 17.07 Backup bin conf config Daten eshow_sitemap.html generate.sh log maint sitemap.html svn tmp Backup bin conf config-Daten zu generieren eshow_sitemap.html . sh log maint sitemap.html svn tmp 1-5 / dba / scripts / cklsnr.sh / dev / null 2 & 10,20,40 17.07 Backup bin conf config Daten eshow_sitemap.html generate.sh log maint sitemap.html svn tmp Backup bin conf config Daten eshow_sitemap.html generate.sh log maint sitemap.html svn tmp 1-5 / dba / scripts / ckalertlog.sh / dev / null 2 & 130 Backup bin conf config Daten eshow_sitemap.html generate.sh log maint sitemap.html svn tmp Backup bin conf config Daten eshow_sitemap.html generate.sh log maint sitemap.html svn tmp Backup bin conf config Daten eshow_sitemap.html generate.sh log maint sitemap.html svn tmp 0-6 / dba / scripts / clean_arch.sh / dev / null 2 & 1 * 5 Backup-bin conf config Daten eshow_sitemap.html generate.sh log maint sitemap.html svn tmp Backup bin conf config Daten eshow_sitemap.html generate.sh log maint sitemap.html svn 1,3 tmp / dba / scripts / analyze_table.sh / dev / null 2 & 1 * 5 Backup-bin conf config Daten eshow_sitemap.html generate.sh log maint sitemap.html svn tmp Backup bin conf config Daten eshow_sitemap.html generate.sh log maint sitemap.html svn 0-6 tmp / dba / scripts / ck_tbsp.sh / dev / null 2 & 1 * 5 Backup-bin conf config Daten eshow_sitemap . html generate.sh log maint sitemap.html svn tmp Backup bin conf config Daten eshow_sitemap.html generate.sh log maint sitemap.html svn 0-6 tmp / dba / scripts / invalid_object_alert.sh / dev / null 2 & ; 10,20,40 17.07 Backup bin conf config Daten eshow_sitemap.html generate.sh log maint sitemap.html svn tmp Backup bin conf config Daten eshow_sitemap.html generate.sh log maint sitemap.html svn tmp 1-5 / dba / scripts / deadlock_alert.sh / dev / null 2 & 1

Durch das oben genannte Skript kann erheblich reduzieren Sie Ihre Arbeit. Sie können diese ist es, mehr wichtige Aufgaben wie die Performance-Tuning zu tun.