sql >> Databasteknik >  >> RDS >> Oracle

27 oracle dba-skript för Oracle Database för administration och övervakning

Vi behöver ofta övervaka Oracle-databassessionen av prestandaskäl, leta efter lås, hämta plats för datafiler, göra om filer, få information om db_links . Här är de bästa oracle dba-skripten  för Oracle  Databas för administrations- och övervakningsändamål

Skript för att hitta sidan av sessionen du är inloggad som

välj distinct(sid) från v$mystat;

Skript för att se alla aktiva sessioner

välj användarnamn,osuser,sid,serienummer, program,sql_hash_value,modul från v$session där användarnamn inte är nulland status ='ACTIVE' och modulen inte är null;

Skript för att se servitörer

set linesize 1000column waiting_session heading ‘WAITING|SESSION’column holding_session heading ‘HOLDING|SESSION’column lock_type format a15column mode_held format a15column mode_requested format a15selectwaiting_session,holding_session,/requehelds,holding_session,/requehelds,/ 

Skript till hur aktiv transaktion i databasen

col RBS format a15 trunccol SID format 9999col USER format a15 trunccol COMMAND format a60 trunccol status format a8 truncselect r.name "RBS", s.sid, s.serial#, s.username "USER", t.status, t.cr_get, t.phy_io, t.used_ublk, t.noundo,substr(s.program, 1, 78) "COMMAND"från v$session s, v$transaction t, v$rollname rwhere t.addr =s. taddrand t.xidusn =r.usnorder av t.cr_get, t.phy_io/

Skript för att övervaka de långa sökfrågor

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

Skript för att se alla låsobjekt

set term on;set lines 130;column sid_ser format a12 heading 'session,|serial#';column username format a12 heading 'os user/|db user';column process format a9 heading 'os|process';column spid format a7 rubrik 'spår|nummer';kolonn ägare_objekt format a35 rubrik 'ägare.objekt';kolumn låst_läge format a13 rubrik 'låst|läge';kolumn status format a8 rubrik '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,'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'/

Skript för att se waits-händelser

set linesize 1000column sid format 999column användarnamn format a15 wrappedcolumn spid format a8column händelseformat a30 wrappedcolumn osuser format a12 wrappedcolumn maskinformat a25 wrappedcolumn programformat a30 wrappedselect sw.sid,sid.sid, username, ps.sid, username osuser, sw.event-händelse, s.machine machine, s.program programfrom v$session_wait sw, v$session s, v$process pwhere s.paddr =p.addrand-händelsen inte in ('pipe get','client message' )och sw.sid =s.sid/

Skript för att se särskilda sessionsväntningar

välj sid,seq#,wait_time,event,seconds_in_wait,tillstånd från v$session_wait där sid in (&sid);

Skript för att se alla användare som kommer åt objektet

kolumnobjektformat a30kolumnägarformat a10välj * från v$access där object='&object_name'/

Skript ger information om användarsessioner som låser ett visst objekt

set linesize 1000column programformat a15column objektformat a15select substr(användarnamn||'('|| se0.sid||')',1,5) "Användarsession",substr(ägare,1,5) "Objekt Ägare",substr(object,1,15) "Object",se0.sid,substr(serial#,1,6) "Serial#",substr(program,1,15) "Program",logon_time "Inloggningstid" ,bearbeta "Unix Process"från v$access ac, v$session se0where ac.sid =se0.sidand Object ='&PACKAGE'beställ av logon_time,"Object Owner","Object"/

Skript för att se förklaraplanen i Oracle för uttalandet i bibliotekscachen

set linesize 9999column QUERY format a999set pages 250set head offset verify offselect id,lpad(' ',2*(depth-1)) || djup ||'.' || nvl(position,0) || ' '|| operation || ' '|| alternativ || ' '|| objektnamn ||' '||'cost='|| to_char(kostnad)||' '|| Optimizer "QUERY"från v$sql_planwhere hash_value =&sql_hash_valueorder by child_number,id/

Skript för att hitta serverplats

välj nvl(användarnamn,'ORACLE SHADOW PROCESS'),maskin frånv$session där användarnamn är nulland rownum <2/

Skript för att se användningen av toppsorteringssegmentet

col sid format 999999col spid format a6col tablespace format a10col användarnamn format a25col noexts format 9999 head EXTScol proginfo format a25 trunccol mbused format 999,999.90col status format a1 truncset verifiera offselect * from (select sids. ,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 bdär u.session_addr =s.saddrand p.name ='db_block_size'och b.addr =s .paddrgroup av s.sid,s.status,b.spid,s.sql_hash_value,u.sqlhash,s.username,u.tablespace,u.segtype,s.module || ' - ' || s.programorder by 8 desc,4)där radnummer <11;

Skript för att kontrollera det senast analyserade för tabellerna i SQL-satsen

set lin 1000set verify offcol owner format a15col object_name format a25col object_type format a12col "LAST ANALYZED" format a13 välj do.OWNER,do.OBJECT_NAME,OBJECT_TYPE,decode (OBJECT_TYPE,'TABLE'  , (Välj LAST ägare från dbaANALYZED) do.owner och TABLE_NAME=do.object_name)  ,'INDEX'  , (Välj LAST_ANALYZED från dba_indexes där ägare=do.owner och INDEX_NAME=do.object_name) ,'UNKNOWN') "SENAST ANALYSERAD",STATUSfrån '  DBATYPE OBJ (JECTS_where_OBJ) TABLE','INDEX') och    (OWNER,OBJECT_NAME) i (välj OBJECT_OWNER,OBJECT_NAME från V$SQL_PLAN där HASH_VALUE=&1)/

För att kontrollera bibliotekets cachelås och nål

select /*+ all_rows */ w1.sid waiting_session,h1.sid holding_session,w.kgllktype lock_or_pin,w.kgllkhdl address,decode(h.kgllkmod, 0, 'None', 1, 'Null', 2, 'Dela', 3, 'Exklusiv', 'Okänd') mode_held,decode(w.kgllkreq, 0, 'Ingen', 1, 'Null', 2, 'Dela', 3, 'Exklusiv', 'Okänd') mode_requestedfrom dba_kgllock w, dba_kgllock h, v$session w1, v$session h1where(((h.kgllkmod !=0) och (h.kgllkmod !=1)and ((h.kgllkreq =0) eller (h.kgllkreq =1)))och(((w.kgllkmod =0) eller (w.kgllkmod=1))och ((w.kgllkreq !=0) och (w.kgllkreq !=1))))och w.kgllktype =h.kgllktypeand w.kgllkhdl =h.kgllkhdland w.kgllkuse =w1.saddrand h.kgllkuse =h1.saddr/

För att kontrollera kontrollfilens plats

kolnamnsformat a60 rubrik "Kontrollfiler"välj namn från sys.v_$controlfile/

För att kontrollera platsen för gör om logg

col Grp format 9999col member format a50 heading "Online REDO Logs"col File# format 9999col name format a50 heading "Online REDO Logs"break on Grpselect group#,memberfrom sys.v_$logfile/

För att kontrollera datafilens plats

col Tspace format a25col status format a3 heading Stacol Id format 9999col Mbyte format 999999999col name format a50 heading "Databas Data Files"col Läser format 99,999,999col Skriver format 99,999,999break on reportcompute(byte) reportse 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 Forder by tablespace_name;

Markerar autoextend på/av för tabellutrymmen:

välj substr(filnamn,1,50), AUTOEXTENSIBLE från dba_data_files(OR)SQL> välj tabellutrymmesnamn,AUTOEXTENSIBLE från dba_data_files;

Så här kontrollerar du understrecksparametrar

VÄLJ X.KSPPINM NAMN, DECODE(BITAND(KSPPIFLG/256, 1), 1, 'TRUE', 'FALSE') SESMOD,DECODE( BITAND(KSPPIFLG/65536, 3), 1, 'IMMEDIATE', 2 , 'OPPDRAD', 3, 'OMMEDDELANDE', 'FALSK' ) SYSMOD,KSPPDESC BESKRIVNINGFRÅN SYS.X_$KSPPI X WHERE X.INST_ID =USERENV('INSTANS') ANDÖVERSÄTTA(KSPPINM,'_','#') LIKE ' #%' BESTÄLL MED 1;

Så här visar du DBA-länkar

set radstorlek 128 sidor 1000col ägare format a15col db_link format a15col användarnamn format a20col värd format a15col namn format a30Prompt Databas Länkar:välj ägare, db_link, användarnamn, värd från dba_db_links sortera efter ägare,db_link,dislekttinct ägare, db_link från dba_synonyms där db_link inte är null/Prompt Snapshot Links:välj ägare, namn, ersätt(master_link,'@','') db_link från dba_snapshotsdär master_link inte är null/

Identifiera segmentet med DBA_extents med fil-id och block

SELECT segment_name, segment_typeFROM dba_extentsWHERE file_id = OCH MELLAN block_id och block_id + blocks - 1;

Lista jobb som körs från DBMS_SCHEDULER

SET RUBRIK ONSET LINESIZE 300SET PAGESIZE 60COLUMN ägare FORMAT A20SELECT ägare,job_name,running_instance,elapsed_timeFROM dba_scheduler_running_jobsORDER BY owner, job_name/

Anteckningar DBMS_SCHEDULER JOB-information

SET HEADING ONSET LINESIZE 300SET PAGESIZE 60COLUMN ägare FORMAT A20COLUMN next_run_date FORMAT A35SELECT ägare,job_name,enabled,job_class,next_run_dateFROM dba_scheduler_jobsORDER BY owner, job_name/

Hur får du en historisk plan för SQL_ID från AWR

SET SIDSTORLEK 60SET LINESIZE 300SELECT * FROM TABLE(dbms_xplan.display_awr('&SQL_ID'))/

Hur man gör vänteanalys av databasen

välj händelse, tillstånd, count(*) från v$session_wait grupp för händelse, tillståndsordning med 3 desc;

Hur man hittar High Buffer gets sql 

välj * från (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) där rownum <20;

Den här listan över Oracle dba-skript för Oracle-databas för övervakningsändamål är inte komplett. Det finns många fler skript för övervakning. Jag kommer att presentera dem i efterföljande inlägg

Läser också
Hash Join in Oracle :Kolla in det här inlägget för en detaljerad beskrivning av Hash Join i Oracle, How it is different from Nested Loop Join in Oracle
Oracle Table locks:Oracle Enqueue ,Row level &DDL, table lås, hur oracle-lås fungerar, Användbara frågor för att ta reda på servitörer och blockerare i oracle
v$active_session_history :Kolla in Active Session History ,hur den är konfigurerad,hur man hittar prestandaflaskhals med ASH, ASH-rapportgenerering, ASH-frågor
https://en.wikipedia.org/wiki/Oracle_Database


  1. Ruby on Rails:Finns det något sätt att hämta föremål från databasen och få dem returnerade i en angiven ordning?

  2. Hur man grupperar efter år i SQL

  3. Hur man hanterar användare och autentisering i MySQL

  4. PostgreSQL JOIN med array-typ med array-elements ordning, hur implementerar man?