Często musimy monitorować sesję bazy danych Oracle ze względu na wydajność, sprawdzać blokady, uzyskiwać lokalizację plików danych, ponawiać pliki, uzyskać informacje o db_links. Oto najlepsze skrypty Oracle dba o bazę danych Oracle do celów administracyjnych i monitorowania
Skrypt do znalezienia strony sesji, na którą jesteś zalogowany
wybierz differ(sid) z v$mystat;
Skrypt, aby zobaczyć wszystkie aktywne sesje
wybierz nazwę użytkownika,osuser,sid,numer seryjny, program,sql_hash_value,moduł z v$session, gdzie nazwa użytkownika nie jest pusta, status =„AKTYWNY”, a moduł nie jest pusty;
Skrypt do zobaczenia kelnerów
ustaw rozmiar linii 1000kolumna nagłówek sesji oczekującej „OCZEKIWANIE|SESJA”kolumna nagłówek trzymająca_sesję „WSTRZYMANIE|SESJA”kolumna format_blokady_typ a15kolumna format_tryb_zatrzymany a15kolumna format_żądany_tryb a15selectwaiting_session,holding_session,lock_type,baza_zatrzymany,waiters2_pred>Skrypt określający aktywność transakcji w bazie danych
col format RBS a15 trunccol format SID 9999col format USER a15 trunccol format POLECENIA a60 trunccol format statusu a8 truncselect r.name "RBS", s.sid, s.numer seryjny, s.username "USER", t.status, t.cr_get, t.phy_io, t.used_ublk, t.noundo,substr(s.program, 1, 78) "POLECENIE" z v$session s, v$transaction t, v$rollname rgdzie t.addr =s. taddrand t.xidusn =r.usnorder przez t.cr_get, t.phy_io/Skrypt do monitorowania długo działających zapytań
ustaw rozmiar linii 1000selectOPNAME,sid,SOFAR/TOTALWORK*100,to_char(start_time,'dd-mon-yy hh:mi') uruchomiony,elapsed_seconds/60,time_remaining/60fromv$session_longopswheresid =&sidSkrypt, aby zobaczyć wszystkie zablokowane obiekty
ustaw termin na;ustaw wiersze 130;kolumna format sid_ser a12 nagłówek 'sesja,|numer seryjny';format kolumny nazwy użytkownika a12 nagłówek 'użytkownik os/|użytkownik db';format procesu kolumny a9 nagłówek 'os|proces';kolumna format spid nagłówek a7 „trace|number”;format właściciela_obiektu kolumny a35 nagłówek „owner.object”;format kolumny w trybie zablokowanym a13 nagłówek „zablokowany|tryb”;format statusu kolumny a8 nagłówek „status”;selectsubstr(to_char(l.session_id)| |','||to_char(s.serial#),1,12) sid_ser,substr(l.os_user_name||'/'||l.oracle_username,1,12) username,l.process,p.spid, substr(o.owner||'.'||o.object_name,1,35) owner_object,decode(l.locked_mode,1,'Bez blokady',2,'Udostępnianie wierszy',3,'Wyłącznie wierszy',4 ,'Share',5,'Share Row Excl',6,'Exclusive',null) tryb_zablokowany,substr(s.status,1,8) statusfromv$locked_object l,all_objects o,v$session s,v$process pwherel .object_id =o.object_idand l.session_id =s.sidand s.paddr =p.addrand s.status !=„ZABIJANY”/Skrypt do wyświetlania zdarzeń oczekiwania
ustaw rozmiar linii 1000kolumna format sid 999kolumna nazwa użytkownika format a15 opakowana kolumna format spid a8column format zdarzenia a30 opakowana kolumna format osuser a12 opakowana kolumna format maszyny a25 opakowana kolumna format programu a30 opakowanaselect sw.sid sid, p.spid spid, s.nazwa użytkownika nazwa użytkownika, s. osuser, zdarzenie sw.event, maszyna s.machine, program s.programfrom v$session_wait sw, v$session s, v$process pwhere s.paddr =p.addrand zdarzenie not in ('pipe get','wiadomość klienta' ) i sw.sid =s.sid/Skrypt, aby zobaczyć konkretną sesję czeka
wybierz sid,seq#,wait_time,event,seconds_in_wait,stan z v$session_wait gdzie sid in (&sid);Skrypt, aby zobaczyć wszystkich użytkowników uzyskujących dostęp do tych obiektów
format obiektu kolumny a30format właściciela kolumny a10select * z v$access gdzie object='&nazwa_obiektu'/Skrypt podaje informacje o sesjach użytkownika blokujących określony obiekt
ustaw rozmiar linii 1000-kolumnowy format programu a15kolumna format obiektu a15select substr(username||'('|| se0.sid||')',1,5) "Sesja użytkownika",substr(owner,1,5) "Object Owner",substr(object,1,15) "Object",se0.sid,substr(serial#,1,6) "Serial#",substr(program,1,15) "Program",logon_time "Czas logowania" ,process "Proces uniksowy"z v$access ac, v$session se0where ac.sid =se0.sidand Object ='&PAKIET'kolejność według czasu logowania,"Właściciel obiektu","Object"/Skrypt, aby zobaczyć plan wyjaśnienia w Oracle dla instrukcji w pamięci podręcznej biblioteki
ustaw rozmiar linii 9999kolumny format zapytania a999set stron 250set head offset sprawdź offselect id,lpad(' ',2*(głębokość-1)) || głębokość ||'.' || nvl(pozycja,0) || ' '|| operacja || ' '|| opcje || ' '|| nazwa_obiektu ||' '||'koszt='|| to_char(koszt)||' '|| optymalizator „QUERY” z v$sql_planwhere hash_value =&sql_hash_valueorder według numer_dziecka,id/Skrypt do znajdowania lokalizacji serwera
select nvl(username,'ORACLE SHADOW PROCESS'),maszyna zv$session, gdzie nazwa użytkownika to nulland rownum <2/Skrypt, aby zobaczyć użycie segmentu najwyższego sortowania
col format sid 999999col format spid a6col format przestrzeni tabel a10col format nazwy użytkownika a25col noexts format 9999 nagłówek EXTScol format proginfo a25 trunccol mbused format 999,999.90col status format a1 truncset weryfikacja offselect * z (wybierz s.sid,s.status,b.spid ,s.sql_hash_value sesshash,u.SQLHASH sorthash,s.username,u.tablespace,sum(u.blocks*p.value/1024/1024) mbused ,sum(u.extents) noexts,u.segtype,s.module || ' - ' || s.program proginfofrom v$sort_usage u, v$session s, v$parameter p, v$process bwhere u.session_addr =s.saddrand p.name ='db_block_size'and b.addr =s .paddrgroup według s.sid,s.status,b.spid,s.sql_hash_value,u.sqlhash,s.username,u.tablespace,u.segtype,s.module || ' - ' || s.programorder by 8 opis,4)gdzie rownum <11;Skrypt sprawdzający ostatnią analizę tabel w instrukcji sql
set lin 1000set sprawdź format właściciela offcol a15col format nazwy obiektu a25col format typ_obiektu a12col format "LAST ANALYZED" a13 wybierz do.OWNER,do.OBJECT_NAME,OBJECT_TYPE,decode (OBJECT_TYPE,'TABLE' , (Wybierz LAST_ANALYZED z dba_tables, gdzie właściciel=do.owner i TABLE_NAME=do.object_name) ,'INDEX' , (Wybierz LAST_ANALYZED z dba_indexes, gdzie owner=do.owner i INDEX_NAME=do.object_name) ,'UNKNOWN') "OSTATNIA ANALIZA",STATUS z DBA_OBJECTS dowhere (' TABLE','INDEX')i (WŁAŚCICIEL,OBJECT_NAME) w (wybierz OBJECT_OWNER,OBJECT_NAME z V$SQL_PLAN, gdzie HASH_VALUE=&1)/Aby sprawdzić blokady i przypiąć pamięć podręczną biblioteki
wybierz /*+ all_rows */ w1.sid wait_session,h1.sid holding_session,w.kgllktype lock_or_pin,w.kgllkhdl address,decode(h.kgllkmod, 0, 'None', 1, 'Null', 2, „Udostępnianie”, 3, „Ekskluzywne”, „Nieznane”) mode_held,decode(w.kgllkreq, 0, „Brak”, 1, „Null”, 2, „Udostępnianie”, 3, „Ekskluzywne”, „Nieznane”) mode_requestedfrom dba_kgllock w, dba_kgllock h, v$session w1, v$session h1where(((h.kgllkmod !=0) and (h.kgllkmod !=1)and ((h.kgllkreq =0) lub (h.kgllkreq =1)))and(((w.kgllkmod =0) lub (w.kgllkmod=1))and ((w.kgllkreq !=0) i (w.kgllkreq !=1))))i w.kgllktype =h.kgllktypeand w.kgllkhdl =h.kgllkhdland w.kgllkuse =w1.saddrand h.kgllkuse =h1.saddr/Aby sprawdzić lokalizację pliku kontrolnego
format nazwy kolumny a60 nagłówek „Pliki kontrolne” wybierz nazwę z sys.v_$controlfile/Aby sprawdzić ponownie lokalizację dziennika
col Format Grp 9999col format elementu członkowskiego a50 nagłówek "Dzienniki Online REDO"col Format pliku 9999col format nazwy a50 nagłówek "Dzienniki Online REDO"przerwa w Grpselect group#,memberfrom sys.v_$logfile/Aby sprawdzić lokalizację pliku danych
col Format Tspace a25col format statusu a3 nagłówek Stacol Id format 9999col Mbyte format 999999999col format nazwy a50 nagłówek "Database Data Files"col Format odczytu 99.999.999col Format zapisu 99.999.999przerwa w raporcie Etykieta sumy obliczeń 'Total(MB)' w Mbajtach w raporcieselect F.file_id Id,F.nazwa_nazwa_pliku,F.bytes/(1024*1024) Mbyte,decode(F.status,'DOSTĘPNY','OK',F.status) status,F.tablespace_name Tspacefrom sys.dba_data_files Forder by nazwa_obszaru_tabeli;Sprawdzanie włączenia/wyłączenia automatycznego rozszerzania przestrzeni tabel:
select substr(file_name,1,50), AUTOEXTENSIBLE z dba_data_files(OR)SQL> select tablespace_name,AUTOEXTENSIBLE z dba_data_files;Jak sprawdzić parametry podkreślenia
SELECT X.KSPPINM NAZWA, DECODE(BITAND(KSPPPIFLG/256, 1), 1, 'PRAWDA', 'FAŁSZ') SESMOD,DECODE( BITAND(KSPIFLG/65536, 3), 1, 'NATYCHMIAST', 2 , 'ODROCZONY', 3, 'NATYCHMIASTOWY', 'FALSE') SYSMOD,KSPPDESC OPIS Z SYS.X_$KSPPI X WHERE X.INST_ID =USERENV('INSTANCE') ANDTRANSLATE(KSPPINM,'_','#') LIKE ' #%' ZAMÓWIENIE WEDŁUG 1;Jak wyświetlać linki DBA
ustaw rozmiar linii 128 stron 1000col format właściciela a15col format db_link a15col format nazwy użytkownika a20col format hosta a15col format nazwy a30Prompt Łącza do bazy danych:wybierz właściciela, db_link, nazwa użytkownika, host z dba_db_links kolejność według właściciela,db_link,nazwa użytkownika/Podpowiedź właściciel, db_link z dba_synonyms, gdzie db_link nie ma wartości NULL/Pytaj o linki do migawek:wybierz właściciela, imię i nazwisko, zastąp(master_link,'@','') db_link z dba_snapshotsgdzie master_link nie ma wartości NULL/Identyfikacja segmentu według DBA_extents przy użyciu identyfikatora pliku i bloku
SELECT nazwa_segmentu, typ_segmentuFROM dba_extentsWHERE file_id =AND BETWEEN block_id i block_id + bloki - 1; Wykaz zadań uruchomionych z DBMS_SCHEDULER
USTAW NAGŁÓWEK ONSET LINESIZE 300SET PAGESIZE 60COLUMN właściciel FORMAT A20SELECT właściciel,job_name,running_instance,elapsed_timeFROM dba_scheduler_running_jobsORDER BY właściciel, job_name/Wyświetlanie informacji o zleceniu DBMS_SCHEDULER
USTAW NAGŁÓWEK ROZMIAR LINIA 300 USTAW ROZMIAR STRONY 60KOLUMN właściciel FORMAT A20KOLUMN next_run_date FORMAT A35SELECT właściciel,nazwa_zadania,włączone,klasa_zadania,next_run_dateFROM dba_scheduler_jobsZAMÓW WG właściciela, nazwa_zadania/Jak uzyskać plan historyczny dla SQL_ID z AWR
USTAW ROZMIAR STRONY 60USTAW ROZMIAR LINII 300WYBIERZ * Z TABELI(dbms_xplan.display_awr('&SQL_ID'))/Jak przeprowadzić analizę oczekiwania w bazie danych
wybierz zdarzenie, stan, licznik(*) z v$session_wait grupuj według zdarzenia, kolejność stanów według 3 opisów;Jak znaleźć wysoki bufor pobiera sql
wybierz * z (SELECT adres, hash_value,buffer_gets, egzekucje, buffer_gets/executions "Gets/Exec",sql_textFROM v$sqlareaWHERE buffer_gets> 500000 i wykonania>0ORDER BY 3 desc) gdzie rownum <20;Ta lista skryptów Oracle dba dla bazy danych Oracle do celów monitorowania nie jest kompletna. Skryptów do monitoringu jest znacznie więcej. Zaprezentuję je w kolejnych wpisach
Też czyta
Hash Join in Oracle :Sprawdź ten post, aby uzyskać szczegółowy opis Hash join w Oracle, czym różni się od zagnieżdżonego łączenia pętli w Oracle
Blokady Oracle Table:Oracle Enqueue ,Row level &DDL,table locks, jak działają blokady oracle, Przydatne zapytania do znalezienia kelnerów i blokerów w oracle
v$active_session_history :Sprawdź o historii aktywnej sesji, jak jest skonfigurowana, jak znaleźć wąskie gardło wydajności za pomocą ASH, generowanie raportów ASH, Zapytania ASH
https://en.wikipedia.org/wiki/Oracle_Database