sql >> Database >  >> RDS >> Oracle

27 oracle dba-scripts voor Oracle Database for Administration and Monitoring

We moeten vaak de Oracle-databasesessie controleren om prestatieredenen, controleren op vergrendelingen, de locatie van gegevensbestanden ophalen, bestanden opnieuw doen, de informatie over db_links ophalen. Hier zijn de beste Oracle-dba-scripts voor Oracle Database voor administratief en toezichtdoeleinden

Script om de zijde van de sessie te vinden waarmee je bent ingelogd

selecteer distinct(sid) van v$mystat;

Script om alle actieve sessies te zien

selecteer gebruikersnaam,osuser,sid,serial#, programma,sql_hash_value,module van v$session waarbij gebruikersnaam niet nulland status ='ACTIVE' is en module niet null;

Script om obers te zien

regelgrootte instellen 1000kolom wait_session kop 'WAITING|SESSION'kolom holding_session kop 'HOLDING|SESSION'column lock_type format a15column mode_held format a15column mode_requested format a15selectwaiting_session,holding_session,lock_type,mode_held,mode_id1,locked,pre> 

Script voor hoe actieve transactie in de database

col RBS-indeling a15 trunccol SID-indeling 9999col USER-indeling a15 trunccol COMMAND-indeling a60 trunccol statusindeling a8 truncselect r.naam "RBS", s.sid, s.serial#, s.gebruikersnaam "USER", t.status, t.cr_get, t.phy_io, t.used_ublk, t.noundo,substr(s.program, 1, 78) "COMMAND" van v$session s, v$transaction t, v$rollname rwaar t.addr =s. taddrand t.xidusn =r.usnorder door t.cr_get, t.phy_io/

Script om de langlopende zoekopdrachten te volgen

regelgrootte instellen 1000selectOPNAME,sid,SOFAR/TOTALWORK*100,to_char(start_time,'dd-mon-yy hh:mi') starts,elapsed_seconds/60,time_remaining/60fromv$session_longopswheresid =&sid

Script om alle vergrendelobjecten te zien

term instellen op;stel regels 130;kolom sid_ser formaat a12 kop 'session,|serial#';kolom gebruikersnaam formaat a12 kop 'os gebruiker/|db gebruiker';kolom proces formaat a9 kop 'os|process';kolom spid-formaat a7 kop 'trace|getal';kolom owner_object formaat a35 kop 'owner.object';kolom vergrendeld_mode formaat a13 kop 'locked|mode';kolom status formaat a8 kop '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) gebruikersnaam,l.process,p.spid, substr(o.owner||'.'||o.object_name,1,35) owner_object,decode(l.locked_mode,1,'No Lock',2,'Row Share',3,'Row Exclusive',4 ,'Share',5,'Share Row Excl',6,'Exclusive',null) locked_mode,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 !='KILLED'/

Script om wachtgebeurtenissen te zien

regelgrootte instellen 1000kolom sid formaat 999kolom gebruikersnaam formaat a15 verpaktkolom spid formaat a8kolom gebeurtenis formaat a30 verpaktkolom osuser formaat a12 verpaktkolom machine formaat a25 verpaktkolom programma formaat a30 verpaktselect sw.sid sid, p.spid spid, s.gebruikersnaam gebruikersnaam, s.osuser osuser, sw.event event, s.machine machine, s.program programfrom v$session_wait sw, v$session s, v$process pwhere s.paddr =p.addrand event niet in ('pipe get','client message' ) en sw.sid =s.sid/

Script om bepaalde sessiewachten te zien

selecteer sid,seq#,wait_time,event,seconds_in_wait,state van v$session_wait waar sid in (&sid);

Script om te zien dat alle gebruikers toegang hebben tot die objecten

formaat kolom object a30 formaat eigenaar kolom a10select * from v$access where object='&object_name'/

Script geeft informatie over de gebruikerssessies die een bepaald object vergrendelen

regelgrootte instellen 1000kolom programmaformaat a15kolom objectformaat a15select substr(gebruikersnaam||'('|| se0.sid||')',1,5) "Gebruikerssessie",substr(eigenaar,1,5) "Object Owner",substr(object,1,15) "Object",se0.sid,substr(serial#,1,6) "Serial#",substr(program,1,15) "Program",logon_time "Aanmeldtijd" ,verwerk "Unix-proces"van v$access ac, v$session se0where ac.sid =se0.sidand Object ='&PAKKET'bestel per aanmeldingstijd,"Objecteigenaar","Object"/

Script om het uitlegplan in Oracle voor het statement in de bibliotheekcache te zien

regelgrootte instellen 9999kolom QUERY-formaat a999set pagina's 250kop offset instellen verifiëren offselect id,lpad(' ',2*(diepte-1)) || diepte ||'.' || nvl(positie,0) || ' '|| operatie || ' '|| opties || ' '|| objectnaam ||' '||'kosten='|| to_char(kosten)||' '|| optimalisatieprogramma "QUERY" van v$sql_planwhere hash_value =&sql_hash_valueorder op child_number,id/

Script om serverlocatie te vinden

select nvl(gebruikersnaam,'ORACLE SHADOW PROCESS'),machine fromv$session waar gebruikersnaam nulland rownum is <2/

Script om het gebruik van het bovenste sorteersegment te zien

col sid formaat 999999col spid formaat a6col tabelruimte formaat a10col gebruikersnaam formaat a25col noexts formaat 9999 head EXTScol proginfo formaat a25 trunccol mbused formaat 999.999.90col status formaat a1 truncset verifiëren offselect * from (select 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 door s.sid,s.status,b.spid,s.sql_hash_value,u.sqlhash,s.username,u.tablespace,u.segtype,s.module || ' - ' || s.programmavolgorde op 8 desc,4)waar rownum <11;

Script om de laatst geanalyseerde tabellen in sql-statement te controleren

set lin 1000set verifieer offcol eigenaar formaat a15col objectnaam formaat a25col objecttype formaat a12col "LAST ANALYZED" formaat a13 selecteer do.OWNER,do.OBJECT_NAME,OBJECT_TYPE,decode (OBJECT_TYPE,'TABLE'  , (Selecteer LAST_ANALYZED van owner =dba_tables waar do.owner and TABLE_NAME=do.object_name)  ,'INDEX'  , (Selecteer LAST_ANALYZED uit dba_indexes waar owner=do.owner en INDEX_NAME=do.object_name) ,'UNKNOWN') "LAST ANALYZED",STATUSfrom   DBA_OBJECTS dowhere TABLE','INDEX') en    (OWNER,OBJECT_NAME) in (selecteer OBJECT_OWNER,OBJECT_NAME van V$SQL_PLAN waar HASH_VALUE=&1)/

Bibliotheekcachevergrendelingen controleren en vastzetten

select /*+ 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, 'Delen', 3, 'Exclusief', 'Onbekend') mode_held,decode(w.kgllkreq, 0, 'Geen', 1, 'Null', 2, 'Delen', 3, 'Exclusief', 'Onbekend') 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) of (h.kgllkreq =1)))and(((w.kgllkmod =0) of (w.kgllkmod=1))and ((w.kgllkreq !=0) en (w.kgllkreq !=1))))en w.kgllktype =h.kgllktypeand w.kgllkhdl =h.kgllkhdland w.kgllkuse =w1.saddrand h.kgllkuse =h1.saddr/

Om de locatie van het controlebestand te controleren

col naam formaat a60 kop "Control Files"select namefrom sys.v_$controlfile/

Om de loglocatie voor opnieuw uitvoeren te controleren

col Grp-formaat 9999col lidformaat a50 kop "Online REDO Logs"col Bestand# formaat 9999col naam formaat a50 kop "Online REDO Logs"onderbreking op Grpselect group#,memberfrom sys.v_$logfile/

Om de locatie van het gegevensbestand te controleren

col Tspace formaat a25col status formaat a3 kop Stacol Id formaat 9999col Mbyte formaat 999999999col naam formaat a50 kop "Database Data Files"col Leest formaat 99.999.999col Schrijft formaat 99.999.999break op rapportcompute sum label 'Total(MB)' of Mbyte on reportselect F.file_id Id,F.file_name name,F.bytes/(1024*1024) Mbyte,decode(F.status,'AVAILABLE','OK',F.status) status,F.tablespace_name Tspacefrom sys.dba_data_files Doorsturen op tablespace_name;

Automatisch verlengen in-/uitschakelen voor tabelruimten:

select substr(file_name,1,50), AUTOEXTENSIBLE van dba_data_files(OR)SQL> selecteer tablespace_name,AUTOEXTENSIBLE van dba_data_files;

Onderstrepingsparameters controleren

SELECT X.KSPPINM NAME, DECODE(BITAND(KSPPIFLG/256, 1), 1, 'TRUE', 'FALSE') SESMOD,DECODE( BITAND(KSPPIFLG/65536, 3), 1, 'IMMEDIATE', 2 , 'UITGESTELD', 3, 'IMMEDIATE', 'FALSE' ) SYSMOD,KSPPDESC DESCRIPTIONFROM SYS.X_$KSPPI X WHERE X.INST_ID =USERENV('INSTANCE') ANDTRANSLATE(KSPPINM,'_','#') LIKE ' #%' BESTEL DOOR 1;

DBA-links weergeven

regelgrootte instellen 128 pagina's 1000col eigenaar formaat a15col db_link formaat a15col gebruikersnaam formaat a20col host formaat a15col naam formaat a30Prompt Database Links:selecteer eigenaar, db_link, gebruikersnaam, host van dba_db_links sorteer op eigenaar,db_link,gebruikersnaam/Prompt Synoniem Links:selecteer onderscheiden owner, db_link van dba_synoniemen waarbij db_link niet null is/Prompt Snapshot Links:select owner, name, Replace(master_link,'@','') db_link van dba_snapshots waarbij master_link niet null is/

Het segment identificeren op DBA_extents met behulp van file-id en block

SELECT segment_name, segment_typeFROM dba_extentsWHERE file_id = AND TUSSEN block_id en block_id + blokken - 1;

Taken weergeven die worden uitgevoerd vanaf DBMS_SCHEDULER

SET HEADING ONSET LINESIZE 300SET PAGINAFORMAAT 60KOLOM eigenaar FORMAT A20SELECT owner,job_name,running_instance,elapsed_timeFROM dba_scheduler_running_jobsORDER BY owner, job_name/

DBMS_SCHEDULER JOB-informatie weergeven

SET HEADING ONSET LINESIZE 300SET PAGINAFORMAAT 60KOLOM eigenaar FORMAT A20COLUMN next_run_date FORMAT A35SELECT owner,job_name,enabled,job_class,next_run_dateFROM dba_scheduler_jobsORDER DOOR eigenaar, job_name/

Hoe krijg ik een historisch plan voor de SQL_ID van AWR

STEL PAGINAGROOTTE IN 60SET LIJNGROOTTE 300SELECTEER * FROM TABLE(dbms_xplan.display_awr('&SQL_ID'))/

Hoe een wachtanalyse van de database uit te voeren

selecteer evenement, staat, aantal(*) van v$session_wait groepeer per evenement, volgorde van 3 desc;

Hoge buffer vinden krijgt sql 

selecteer * uit (SELECT address, hash_value,buffer_gets, executions, buffer_gets/executions "Gets/Exec",sql_textFROM v$sqlareaWHERE buffer_gets> 500000 and executions>0ORDER BY 3 desc) waarbij rijnummer <20;

Deze lijst met oracle dba-scripts voor oracle-database voor bewakingsdoeleinden is niet compleet. Er zijn veel meer scripts voor monitoring. Ik zal ze in volgende berichten presenteren

Leest ook
Hash Join in Oracle:bekijk dit bericht voor de gedetailleerde beschrijving van Hash join in Oracle, hoe het verschilt van Nested Loop join in Oracle
Oracle Table-vergrendelingen:Oracle Enqueue, Row level &DDL, table locks, hoe Oracle Locks werken, Handige zoekopdrachten om de obers en blockers in Oracle te achterhalen
v$active_session_history :Bekijk meer over Active Session History, hoe het is geconfigureerd, hoe u prestatieknelpunten kunt vinden met behulp van ASH, ASH-rapportgeneratie, ASH-query's
https://en.wikipedia.org/wiki/Oracle_Database


  1. De beste manier om XML-gegevens te versnipperen in SQL Server-databasekolommen

  2. Leer hoe u de prestaties van Microsoft SQL Server kunt afstemmen

  3. Verbinding maken met een Oracle-database met behulp van SQLAlchemy

  4. SQL-query:verwijder alle records uit de tabel behalve de laatste N?