Oracle veritabanının genel bilgilerine tek tıkla erişim ve AWR, ASH, ADDM raporları oluşturma

Genel Bakış

Bugün, esas olarak tek bir tıklama ile AWR, ASH, ADDM ile ilgili raporlar oluşturmak ve genel sistem bilgilerini almak için bir komut dosyası paylaşıyorum.

Kendiniz test edebilirsiniz.

spooldb.sql

Komut dosyası içeriği aşağıdaki gibidir:

/ * İşlem yöntemi sqlplus "/ as sysdba" @ / home / oracle / sql / spooldb.sql * / İşaretlemeyi ayarla html biriktirme AÇIK ön kapalı entmap kapalı vade koymak yön vermek doğrulamayı kapat geri bildirimi kapat çizgi boyutunu ayarla 2000 sayfa boyutunu ayarla 30000999999999 uzunluğunu ayarla longchunksize 999999 ayarla sütun dizin_adı biçimi a30 sütun tablo_adı biçimi a30 sütun sayı_rows biçimi 999999999 sütun dizin_türü biçimi a24 sütun sayı_rows biçimi 999999999 sütun durum biçimi a8 sütun kümeleme faktörü biçimi 999999999 sütun derece biçimi a10 sütun blevel biçimi 9 sütun farklı anahtarlar biçimi 9999999999 sütun leaf_blocks biçimi 9999999 son_analize edilen sütun biçimi a10 sütun sütun_adı biçimi a25 sütun sütun_konumu biçimi 9 sütun geçici biçimi a2 sütun bölümlenmiş format a5 sütun bölümleme_türü biçimi a7 sütun bölüm_sayısı biçimi 999 sütun program biçimi a30 sütun spid biçimi a6 sütun pid biçimi 99999 sütun sid biçimi 99999 sütun seri # format 99999 sütun kullanıcı adı biçimi a12 sütun osuser biçimi a12 sütun oturum açma_saati biçim tarihi sütun olay biçimi a32 sütun JOB_NAME biçimi a30 PROGRAM_NAME sütunu biçimi a32 sütun STATE format a10 sütun pencere_adı biçimi a30 sütun tekrar_aralığı biçimi a60 sütun makinesi biçimi a30 sütun program biçimi a30 sütun osuser biçimi a15 sütun kullanıcı adı biçimi a15 sütun olay biçimi a50 sütun saniye biçimi a10 sütun sqltext biçimi a100 İşaretleme html kapalı sütun dbid new_value spool_dbid sütun inst_num new_value spool_inst_num rownum = 1 olan v $ veritabanından dbid seçin; rownum = 1 olan v $ örneğinden inst_num olarak örnek_sayı seçin; sütun spoolfile_name new_value spoolfile select'spool_ '|| (rownum = 1 olan v $ veritabanından adı seçin) ||' _ '|| (rownum = 1 olan v $ örneğinden örnek_numarası seçin) ||' _ '|| to_char (sysdate,' yy -mm-dd_hh24.mi ') dual'den spoolfile_name olarak; biriktirme spoolfile..html İşaretleme html kapalı serveroutput'u açın; exec dbms_output.enable (9999999999); exec dbms_output.put_line (' < html > '); exec dbms_output.put_line (' < stil > '); exec dbms_output.put_line ('th {font: bold 8pt Arial, Helvetica, Cenevre, sans-serif; renk: Beyaz; arka plan: # 0066CC; padding-left: 4px; padding-right: 4px; padding-bottom: 2px)' ); exec dbms_output.put_line (' < / stil > '); exec dbms_output.put_line (' < baş > '); exec dbms_output.put_line (' < / kafa > '); exec dbms_output.put_line (' < vücut > '); İşaretleme html'sini ayarla Komut istemi < p > versiyon v $ sürümünden * seçin; dba_registry_history'den * seçin; Komut istemi < p > Son başlatma zamanı, sürümü ve RAC olup olmadığı dan * seçin (v $ veritabanından db_name adını seçin), (v $ örneğinden örnek_adı seçin), (v $ örneğinden arşivleyiciyi seçin), (snap_interval awr_interval, tutma awr_retention DBA_HIST_WR_CONTROL FROM seçin), (v $ veritabanından flashback_on'u seçin), (v $ örneğinden paralel seçin), (v $ örneğinden başlangıç_ süresini seçin), (kod çözmeyi seçin (ad, null, 'ASM DEĞİL', 'ASM') IS_ASM'den (tüm ikili birleşimden boş ad seçin (v $ veri dosyasından IS_ASM adını seçin, burada '+%' ve rownum = 1)), (v $ rman_status'dan max (end_time) rman_lastcompleted'i seçin, burada status = 'COMPLETED' ve object_type 'DB FULL' gibi) ; Komut istemi < p > 30 dakika veya en uzun süre içinde CPU t. *, s.sid, seri no, s.machine, s.program, s.osuser seçin (c.USERNAME öğesini seçin, a.event, to_char (a.cnt) saniye olarak, a.sql_id -, dbms_lob.substr (b.sql_fulltext, 50,1) sqltext dan (rownum rn seçin, t. * from (kod çözmeyi seçin (s.session_state, 'BEKLİYOR', s.event, 'Cpu + Wait For Cpu') Etkinliği, s.sql_id, s.user_id, sayım (*) CNT v $ active_session_history'den itibaren sample_time nerede > sysdate-30/1440 s.user_id'ye göre grupla, decode (s.session_state, 'BEKLİYOR', s.event, 'Cpu + Cpu Bekle'), s.sql_id CNT desc tarafından sipariş) t rownum nerede < 20) a, v $ sqlarea b, dba_users c burada a.sql_id = b.sql_id ve a.user_id = c.user_id CNT desc tarafından sipariş) t, v $ oturum s nerede t.sql_id = s.sql_id (+) ; Komut istemi < p > Son yük durumu (AWR anlık görüntüsüne göre) s.snap_date seçin, decode (s.redosize, null, '- kapatma veya sonlandırma--', s.currtime) "TIME", to_char (round (sn.saniye / 60,2)) "geçen (dakika)", round (t.db_time / 1000000/60, 2) "DB zamanı (dakika)", s.redosize yinele, round (s.redosize / s.seconds, 2) "yinele / s", s.logicalreads mantıksal, round (s.logicalreads / s.seconds, 2) "mantıksal / s", fiziksel ürünler fiziksel, round (s.physicalreads / s.seconds, 2) "phy / s", s. yürütür, round (s.executes / s.seconds, 2) "execs / s", seyrek, round (s.parse / s.seconds, 2) "ayrıştırma / s", s.hardparse, round (s.hardparse / s.seconds, 2) "hardparse / s", s.transactions trans, round (s.transactions / s.seconds, 2) "trans / s" from (curr_redo-last_redo yeniden boyutlandırmayı seçin, curr_logicalreads-last_logicalreads mantıksalreads, curr_physicalreads-last_physicalreads Physicalreads, curr_executes-last_executes yürütür, curr_parse-last_parse ayrıştırması, curr_hardparse-last_hardparse hardparse, curr_transactions-last_transactions işlemleri, round (((currtime + 0) - (lasttime + 0)) * 3600 * 24, 0) saniye, to_char (currtime, 'yy / aa / gg') snap_date, to_char (currtime, 'hh24: mi') currtime, currsnap_id uçlarınap_id, to_char (başlangıç_süresi, 'yyyy-aa-gg hh24: mi: ss') başlangıç_süresi from (a.redo last_redo seçin, a.logicalreads last_logicalreads, a.physicalreads last_physicalreads, a. last_executes'ı yürütür, a.parse last_parse, a.hardparse last_hardparse, a.transactions last_transactions, lead (a.redo, 1, null) over (b.startup_time sırasına göre b.end_interval_time ile bölümleme) curr_redo, lead (a.logicalreads, 1, null) over (b.startup_time sırasına göre b.end_interval_time ile bölümleme) curr_logicalreads, lead (a.physicalreads, 1, null) over (b.startup_time sırasına göre b.end_interval_time ile bölümleme) curr_physicalreads, lead (a.executes, 1, null) over (b.startup_time sırasına göre b.end_interval_time ile bölümleme) curr_executes, lead (a.parse, 1, null) over (b.startup_time sırasına göre b.end_interval_time ile bölümleme) curr_parse, lead (a.hardparse, 1, null) over (b.startup_time sırasına göre b.end_interval_time tarafından bölümleme) curr_hardparse, lead (a.transactions, 1, null) over (b.startup_time sırasına göre b.end_interval_time ile bölümleme) curr_transactions, b.end_interval_time lasttime, lead (b.end_interval_time, 1, null) over (b.startup_time sırasına göre b.end_interval_time ile bölümleme) currtime, lead (b.snap_id, 1, null) over (b.startup_time sırasına göre b.end_interval_time ile bölümleme) currsnap_id, b.startup_time from (snap_id seçin, dbid, örnek_sayı, toplam (decode (stat_name, 'yeniden boyutlandır', değer, 0)) yinele, sum (decode (stat_name, 'oturum mantıksal okumaları', değer 0)) mantıksal işaretler, sum (decode (stat_name, 'fiziksel okumalar', değer 0)) fiziksel ürünler, sum (decode (stat_name, 'sayımı yürüt', değer, 0)) yürütür, sum (decode (stat_name, 'ayrıştırma sayısı (toplam)', değer 0)) ayrıştırma, sum (decode (stat_name, 'ayrıştırma sayısı (zor)', değer 0)) sert, sum (decode (stat_name, "kullanıcı geri dönüşleri", değer 'kullanıcı taahhütleri', değer 0)) işlemler dba_hist_sysstat'tan stat_name nerede ('boyutu yeniden yap', 'oturum mantıksal okumaları', 'fiziksel okumalar', 'sayımı yürüt', "kullanıcı geri dönüşleri", 'kullanıcı taahhütleri', 'ayrıştırma sayısı (zor)', 'ayrıştırma sayısı (toplam)') snap_id, dbid, instance_number) a göre gruplandırın, dba_hist_snapshot b nerede a.snap_id = b.snap_id ve a.dbid = b.dbid ve a.instance_number = b.instance_number ve a.dbid = spool_dbid ve a.instance_number = spool_inst_num end_interval_time)) s ile sipariş, (lead (a.value, 1, null) over (b.startup_time sırasına göre b.end_interval_time ile bölümleme) -a.value db_time, lead (b.snap_id, 1, null) over (b.startup_time sırasına göre b.end_interval_time ile bölümleme) endnap_id dba_hist_sys_time_model a'dan, dba_hist_snapshot b nerede a.snap_id = b.snap_id ve a.dbid = b.dbid ve a.instance_number = b.instance_number ve a.stat_name = 'DB zamanı' ve a.dbid = spool_dbid ve a.instance_number = spool_inst_num) t nerede s.endsnap_id = t.endsnap_id s.snap_date azalan sipariş, zaman artan ; Komut istemi < p > Mantıksal çoğu oku seçin * from (sql_id seçin, s. UYGULAMALAR, s.LAST_LOAD_TIME, s.FIRST_LOAD_TIME, s.DISK_READS, s.BUFFER_GETS v $ sql s'den itibaren nerede s.buffer_gets > 300 buffer_gets desc'e göre sırala) rownum nerede < = 10 ; Komut istemi < p > Fizikte en çok okunan seçin * from (sql_id seçin, s. UYGULAMALAR, s.LAST_LOAD_TIME, s.FIRST_LOAD_TIME, s.DISK_READS, s.BUFFER_GETS, s.PARSE_CALLS v $ sql s'den itibaren nerede s.disk_reads > 300 disk_reads göre sırala) rownum nerede < = 10 ; Komut istemi < p > En çok idam edilen seçin * from (sql_id seçin, s. UYGULAMALAR, s.LAST_LOAD_TIME, s.FIRST_LOAD_TIME, s.DISK_READS, s.BUFFER_GETS, s.PARSE_CALLS v $ sql s'den itibaren SIRALAMA İŞLEMLERİ desc) rownum nerede < = 10 ; Komut istemi < p > En çok ayrıştırılan seçin * from (sql_id seçin, s. UYGULAMALAR, s.LAST_LOAD_TIME, s.FIRST_LOAD_TIME, s.DISK_READS, s.BUFFER_GETS, s.PARSE_CALLS v $ sql s'den itibaren s.PARSE_CALLS azalan sipariş) rownum nerede < = 10 ; Komut istemi < p > En çok disk sıralandı sess.username, sql.address, sort1.blocks seçin v $ oturum oturumundan, v $ sqlarea sql, v $ sort_usage sort1 sess.serial # = sort1.session_num nerede ve sort1.sqladdr = sql.address ve sort1.sqlhash = sql.hash_value ve sort1.blocks > 200 sort1.blocks desc göre sırala ; Komut istemi < p > 10.000'den fazla gönderime sahip oturumlar t1.sid, t1.value, t2.name seçin v $ sesstat t1, v $ statname t2'den t2.name '% kullanıcı%' yı taahhüt eder 'gibi ve t1.STATISTIC # = t2.STATISTIC # ve değer > = 10000 azalan değere göre sırala ; Komut istemi < p > 100'den uzun SQL SQL_ID SEÇİN, COUNT (*) line_count V $ SQLTEXT'DEN GRUPLA SQL_ID SAYISI OLAN (*) > = 100 COUNT (*) DESC İLE SİPARİŞ ; Komut istemi < p > Paylaşılan hafızanın paylaşımını sorgulayın sayımı seçin (*), yuvarlak (toplam (paylaşılabilir_mem) / 1024 / 1024,2) v $ db_object_cache a'dan ; Komut istemi < p > Paralellik t.owner, t.table_name, derece seçin dba_tables t'den nerede trim (t.degree) < > '1' ve trim (t.degree) < > '0' ve sahibi ('SYSTEM', 'SYSMAN', 'SYS', 'CTXSYS', 'MDSYS', 'OLAPSYS', 'WMSYS', 'EXFSYS', 'LBACSYS', 'WKSYS', 'XDB', ' ORDSYS ',' DBSNMP ',' OUTLN ',' TSMSYS ') ve sahibi 'FLOWS%' gibi değil ve sahibi 'WK%' gibi değil ; Komut istemi < p > Paralellik içeren dizin t.owner, t.table_name, index_name, degree, status seçin dba_indexes t'den nerede trim (t.degree) < > '1' ve trim (t.degree) < > '0' ve sahibi ('SYSTEM', 'SYSMAN', 'SYS', 'CTXSYS', 'MDSYS', 'OLAPSYS', 'WMSYS', 'EXFSYS', 'LBACSYS', 'WKSYS', 'XDB', ' ORDSYS ',' DBSNMP ',' OUTLN ',' TSMSYS ') ve sahibi 'FLOWS%' gibi değil ve sahibi 'WK%' gibi değil ; Komut istemi < p > Geçersiz dizin t.index_name seçin, t.table_name, blevel t.num_rows, t.leaf_blocks, t.distinct_keys dba_indexes t'den durum = 'KULLANILAMAZ' ve table_owner içinde değil ('SYSTEM', 'SYSMAN', 'SYS', 'CTXSYS', 'MDSYS', 'OLAPSYS', 'WMSYS', 'EXFSYS', 'LBACSYS', 'WKSYS', 'XDB') ve table_owner '% FLOWS' gibi değil ; t2.owner'ı seçin, t1.blevel, t1.leaf_blocks, t1.INDEX_NAME, t2.table_name, t1.PARTITION_NAME, t1.STATUS dba_ind_partitions t1'den, dba_indexes t2 nerede t1.index_name = t2.index_name ve t1.STATUS = 'KULLANILAMAZ' ; Komut istemi < p > Geçersiz kılma nesnesi sahip seçin, t.object_type, t.object_name dba_objects t'den STATUS = 'INVALID' nerede 1, 2'ye göre sırala ; Komut istemi < p > Bitmap dizini ve işlev dizini, ters anahtar dizini sahip seçin, t.table_name, t.index_name, t.index_type, t.status, t.blevel, t.leaf_blocks dba_indexes t'den burada index_type in ('BITMAP', 'FUNCTION-TABED NORMAL', 'NORMAL / REV') ve sahibi ('SYSTEM', 'SYSMAN', 'SYS', 'CTXSYS', 'MDSYS', 'OLAPSYS', 'WMSYS', 'EXFSYS', 'LBACSYS', 'WKSYS', 'XDB', ' ORDSYS ',' DBSNMP ',' OUTLN ',' TSMSYS ') ve sahibi 'FLOWS%' gibi değil ve sahibi 'WK%' gibi değil ; Komut istemi < p > Birleşik dizinde 4'ten fazla birleşik sütun var table_owner, table_name, index_name, count (*) seçin dba_ind_columns'dan nerede table_owner değil ('SYSTEM', 'SYSMAN', 'SYS', 'CTXSYS', 'MDSYS', 'OLAPSYS', 'WMSYS', 'EXFSYS', 'LBACSYS', 'WKSYS', 'XDB', ' ORDSYS ',' DBSNMP ',' OUTLN ',' TSMSYS ') ve table_owner '% FLOWS' gibi değil ve table_owner 'WK%' gibi değil table_owner, table_name, index_name tarafından gruplandır sahip olmak (*) > = 4 sayıya göre sırala (*) azalan ; Komut istemi < p > 5'ten fazla numarayı dizine ekleyin sahip seç, tablo_adı, sayı (*) cnt dba_indexes'ten sahibi olmadığı yerde ('SYSTEM', 'SYSMAN', 'SYS', 'CTXSYS', 'MDSYS', 'OLAPSYS', 'WMSYS', 'EXFSYS', 'LBACSYS', 'WKSYS', 'XDB', ' ORDSYS ',' DBSNMP ',' OUTLN ',' TSMSYS ') ve sahibi 'FLOWS%' gibi değil ve sahibi 'WK%' gibi değil Sahibe göre gruplama, tablo_adı sahip olmak (*) > = 5 cnt desc ile sipariş ; Komut istemi < p > Hangi büyük tablolar hiçbir zaman dizine eklenmedi. segment_name seçin, bayt / 1024/1024/1024 "GB", bloklar tablo alanı_adı dba_segments'tan segment_type = 'TABLO' nerede ve segment_name içinde değil (dba_indexes'ten tablo_adı seçin) ve bayt / 1024/1024/1024 > = 0.5 GB azalan sipariş ; segment_name seçin, toplam (bayt) / 1024/1024/1024 "GB", toplam (bloklar) dba_segments'tan burada segment_type = 'TABLO BÖLÜMÜ' ve segment_name içinde değil (dba_indexes'ten tablo_adı seçin) segment_name göre grupla toplam (bayt) / 1024/1024/1024 > = 0.5 GB azalan sipariş ; Komut istemi < p > Hangi tabloların çakışan bileşik dizinleri ve tek sütunlu dizinleri vardır. table_name, trunc (count (farklı (sütun_adı)) / count (*), 2) cross_idx_rate seçin dba_ind_columns'dan nerede table_owner değil ('SYSTEM', 'SYSMAN', 'SYS', 'CTXSYS', 'MDSYS', 'OLAPSYS', 'WMSYS', 'EXFSYS', 'LBACSYS', 'WKSYS', 'XDB', ' ORDSYS ',' DBSNMP ',' OUTLN ',' TSMSYS ') ve table_owner '% FLOWS' gibi değil ve table_owner 'WK%' gibi değil tablo_adına göre grupla sahip sayma (farklı (sütun_adı)) / sayı (*) < 1 cross_idx_rate ile sıralama azalan ; Komut istemi < p > Sistem tablo alanında hangi nesnelerin oluşturulduğu. * içinden ( sahip, segment_adı, tablo alanı_adı, sayı (*) sayı seçin dba_segments'tan burada ('SİSTEM', 'SYSAUX') tablo alanı_adı Sahibe göre gruplama, segment_adı, tablo alanı_adı) sahibi olmadığı yerde ('SYSTEM', 'SYSMAN', 'SYS', 'CTXSYS', 'MDSYS', 'OLAPSYS', 'WMSYS', 'EXFSYS', 'LBACSYS', 'WKSYS', 'XDB', ' ORDSYS ',' DBSNMP ',' OUTLN ',' TSMSYS ') ve sahibi 'FLOWS%' gibi değil ve sahibi 'WK%' gibi değil ; Komut istemi < p > İstatistiklerin toplanıp toplanmadığını kontrol edin t.job_name, t.program_name, t.state, t.enabled'ı seçin dba_scheduler_jobs'tan t job_name = 'GATHER_STATS_JOB' nerede ; client_name, status seçin dba_autotask_client'ten ; window_next_time, autotask_status seçin DBA_AUTOTASK_WINDOW_CLIENTS'ten ; Komut istemi < p > Nelerin toplanmadığını veya uzun süredir toplanmadığını kontrol edin sahip seç, say (*) dba_tab_statistics'ten t nerede (t.last_analyzed null veya t.last_analyzed < sysdate-100) ve tablo_adı 'BIN $%' gibi değil sahibine göre grupla sahibinden sipariş ; Komut istemi < p > İstatistiklerin toplandığı geçici tablo sahip, tablo_adı, t.last_analyzed, t.num_rows, t.blocks seçin dba_tables t'den t.temporary = 'Y' nerede ve last_analyzed null değil ; Komut istemi < p > Günlük anahtarlama frekansı analizi seçin * from (iş parçacığı #, sıra #, to_char (ilk_saat, 'AA / GG / RR HH24: MI: SS') seçin v $ log_history'den ilk sefer azalan sipariş) rownum nerede < = 50 ; Komut istemi < p > Son 10 gün içindeki günlük günlük değiştirme miktarı SUBSTR SEÇİN (TO_CHAR (ilk_saat, 'AA / GG / RR SS: MI: SS'), 1,5) Gün, TOPLA (ÇÖZÜM (SUBSTR (TO_CHAR (ilk_saat, 'AA / GG / RR HH24: MI: SS'), 10,2), '00', 1,0)) H00, TOPLA (ÇÖZÜNME (SUBSTR (TO_CHAR (ilk_saat, 'AA / GG / RR HH24: MI: SS'), 10,2), '01', 1,0)) H01, TOPLA (DECODE (SUBSTR (TO_CHAR (ilk_saat, 'AA / GG / RR HH24: MI: SS'), 10,2), '02', 1,0)) H02, TOPLA (ÇÖZÜM (SUBSTR (TO_CHAR (ilk_saat, 'AA / GG / RR HH24: MI: SS'), 10,2), '03', 1,0)) H03, TOPLA (ÇÖZÜM (SUBSTR (TO_CHAR (ilk_saat, 'AA / GG / RR HH24: MI: SS'), 10,2), '04', 1,0)) H04, TOPLA (DECODE (SUBSTR (TO_CHAR (ilk_saat, 'AA / GG / RR HH24: MI: SS'), 10,2), '05', 1,0)) H05, TOPLA (ÇÖZÜM (SUBSTR (TO_CHAR (ilk_saat, 'AA / GG / RR HH24: MI: SS'), 10,2), '06', 1,0)) H06, TOPLA (ÇÖZÜM (SUBSTR (TO_CHAR (ilk_saat, 'AA / GG / RR HH24: MI: SS'), 10,2), '07', 1,0)) H07, TOPLA (ÇÖZÜM (SUBSTR (TO_CHAR (ilk_saat, 'AA / GG / RR HH24: MI: SS'), 10,2), '08', 1,0)) H08, TOPLA (ÇÖZÜM (SUBSTR (TO_CHAR (ilk_saat, 'AA / GG / RR HH24: MI: SS'), 10,2), '09', 1,0)) H09, TOPLA (DECODE (SUBSTR (TO_CHAR (ilk_saat, 'AA / GG / RR HH24: MI: SS'), 10,2), '10', 1,0)) H10, TOPLA (ÇÖZÜM (SUBSTR (TO_CHAR (ilk_saat, 'AA / GG / RR HH24: MI: SS'), 10,2), '11', 1,0)) H11, TOPLA (ÇÖZÜMLEME (SUBSTR (TO_CHAR (ilk_saat, 'AA / GG / RR HH24: MI: SS'), 10,2), '12', 1,0)) H12, TOPLA (ÇÖZÜM (SUBSTR (TO_CHAR (ilk_saat, 'AA / GG / RR HH24: MI: SS'), 10,2), '13', 1,0)) H13, TOPLA (ÇÖZÜM (SUBSTR (TO_CHAR (ilk_saat, 'AA / GG / RR HH24: MI: SS'), 10,2), '14', 1,0)) H14, TOPLA (DECODE (SUBSTR (TO_CHAR (ilk_saat, 'AA / GG / RR HH24: MI: SS'), 10,2), '15', 1,0)) H15, TOPLA (ÇÖZÜM (SUBSTR (TO_CHAR (ilk_saat, 'AA / GG / RR HH24: MI: SS'), 10,2), '16', 1,0)) H16, TOPLA (ÇÖZÜMLEME (SUBSTR (TO_CHAR (ilk_saat, 'AA / GG / RR HH24: MI: SS'), 10,2), '17', 1,0)) H17, TOPLA (ÇÖZÜM (SUBSTR (TO_CHAR (ilk_saat, 'AA / GG / RR HH24: MI: SS'), 10,2), '18', 1,0)) H18, TOPLA (DECODE (SUBSTR (TO_CHAR (ilk_saat, 'AA / GG / RR HH24: MI: SS'), 10,2), '19', 1,0)) H19, TOPLA (DECODE (SUBSTR (TO_CHAR (ilk_saat, 'AA / GG / RR HH24: MI: SS'), 10,2), '20', 1,0)) H20, TOPLA (ÇÖZÜM (SUBSTR (TO_CHAR (ilk_saat, 'AA / GG / RR HH24: MI: SS'), 10,2), '21', 1,0)) H21, TOPLA (DÜZELTME (SUBSTR (TO_CHAR (ilk_saat, 'AA / GG / RR HH24: MI: SS'), 10,2), '22', 1,0)) H22, TOPLA (DECODE (SUBSTR (TO_CHAR (ilk_saat, 'AA / GG / RR HH24: MI: SS'), 10,2), '23', 1,0)) H23, COUNT (*) TOPLAM FROM v $ log_history a ilk sefer nerede > = to_char (sysdate-11) SUBSTR'A GÖRE GRUP (TO_CHAR (ilk_saat, 'AA / GG / RR SS: MI: SS'), 1,5) SUBSTR İLE SİPARİŞ VER (TO_CHAR (ilk_saat, 'AA / GG / RR SS: MI: SS'), 1,5) DESC ; Komut istemi < p > Günlük grubu boyutu grup #, bayt, durum seçin v $ log'dan ; Komut istemi < p > Recovery_file_dest kullanım oranını görüntüleyin substr (ad, 1, 30) adını seçin, kota olarak space_limit, kullanılmış olarak space_used, geri alınabilir olarak space_reclaimable, dosya olarak number_of_files $ recovery_file_dest sürümünden ; V $ FLASH_RECOVERY_AREA_USAGE arasından * seçin ; Komut istemi < p > Sıranın 20'den az olup olmadığını kontrol edin Sequence_owner seçin, sayım (*) CNT, sum (t.cache_size olduğunda durum < = 20 sonra 1 başka 0 uç) CNT_LESS_20, sum (t.cache_size olduğunda durum > 20 sonra 1 başka 0 uç) CNT_MORE_20 dba_sequences t'den Sequence_owner'a göre gruplandır ; Komut istemi < p > Masa alanı kullanımı biçimlendirme html'sini kapat Komut istemi < p > bildirmek tip NUMBER_ARRAY, varchar2 (30) tarafından sayı (15) indeksinin tablosudur; ts_free_mb NUMBER_ARRAY; imleç c1 tablo alanı_adı seçin, toplam (free_mb) + sum (süresi dolmuş_mb) free_mb (SELECT tablo alanı_adı, round (sum (nvl (bayt, 0)) / 1024/1024, 2) free_mb, 0 süresi dolmuş_mb FROM dba_free_space GROUP BY tablo alanı_adı hepsini birleştir tablo alanı_adı seçin, 0 ücretsiz_mb, round (sum (nvl (bayt, 0)) / 1024/1024, 2) süresi dolmuş_mb dba_undo_extents'tan d tablo alanı_adı = (Değeri seç v $ parametresinden burada name = 'undo_tablespace') ve durum = 'GEÇERLİ' tablo alanına göre gruplandırın) tablo alanı_adı ile gruplama; imleç c2 SELECT / * + kural * / tablo alanı_adı, yuvarlak (toplam (bayt) / 1024/1024, 2) toplam_mb FROM dba_data_files tablo alanı_adı burada değil (tablo alanı_adı seçin dba_data_files'dan burada üst (AUTOEXTENSIBLE) = 'EVET') GROUP BY tablo alanı_adı; ts_name varchar2 (30); ts_total sayı (15); ts_used sayı (15); ts_free numarası (15); ts_rate varchar2 (5); başla c1 döngüsünde rec1 için ts_free_mb (rec1.tablespace_name): = rec1.free_mb; son döngü; dbms_output.put_line (' < tablo border = "1" width = "90%" align = "center" özet = "Komut dosyası çıkışı" > '); dbms_output.put_line (' < tr > < inci > ts_name < / inci > < inci > ts_total < / inci > < inci > ts_used < / inci > < inci > ts_free < / inci > < inci > ts_rate < / inci > < / tr > '); c2 döngüsünde rec2 için ts_name: = boş; ts_total: = boş; ts_used: = boş; ts_free: = null; ts_rate: = boş; ts_name: = rec2.tablespace_name; ts_total: = rec2.total_mb; ts_free: = nvl (ts_free_mb (ts_name), 0); ts_used: = nvl (ts_total-ts_free, 0); ts_rate: = to_char (round ((ts_total-ts_free) / ts_total * 100, 2), 'fm990.99'); dbms_output.put_line (' < tr > < td > '|| ts_name ||' < / td > < td > '|| ts_total || ' < / td > < td > '|| ts_used ||' < / td > < td > '|| ts_free || ' < / td > < td > '|| ts_rate ||' < / td > < / tr > '); son döngü; dbms_output.put_line (' < / tablo > '); son; / Komut istemi < p > biçimlendirme html'sini ayarla Komut istemi < p > Veritabanının tamamı ne kadar büyük sahip seçin, yuvarlak (toplam (bayt) / 1024/1024 / 1024, 2) "GB" dba_segments'tan sahibine göre grupla 2 azalan sipariş ; Komut istemi < p > Nesne boyutu TOP10 seçin * dan (sahibi seçin, segment_name, segment_type, round (sum (bayt) / 1024/1024) object_size DBA_segments'tan Sahibe göre gruplama, segment_name, segment_type object_size desc'ye göre sırala) rownum nerede < = 10 ; Komut istemi < p > Geri dönüşüm kutusu durumu (boyut ve miktar) seçin * from (SUM (BYTES) / 1024/1024/1024'ü recyb_size olarak seçin DBA_SEGMENTS'ten SEGMENT_NAME "BIN $%" GİBİ NEREDE a, (dba_recyclebin'den recyb_cnt olarak count (*) seçin) ; Komut istemi < p > Geri alma tablosu alanını kimin işgal ettiğini kontrol edin R.name "roll_segment_name", rssize / 1024/1024/1024 "RSSize (G)" seçin, s.sid, seri numarası, s.username, s.status, s.sql_hash_value, s.SQL_ADDRESS, s MAKİNE, s MODÜL, substr (s.program, 1, 78) programı, r.usn, hwmsize / 1024/1024/1024, küçültür, xacts Sys.v_ $ oturum s, sys.v_ $ işlem t, sys.v_ $ rollname r, v $ rollstat rs'den NEREDE t.addr = s.taddr ve t.xidusn = r.usn ve r.usn = rs.USN Rssize desc ile sırala ; Komut istemi < p > Geçici masa alanını kimin işgal ettiğini kontrol edin sql.sql_id seçin, t.Bloklar * 16/1024 / 1024, s.KULLANICI ADI, ŞEMAN ADI, t.tablespace, t.segtype, t.extents, s.PROGRAM, s.OSUSER, s. TERMİNAL, s.sid, s.SERIAL # v $ sort_usage t, v $ oturum s, v $ sql sql'den nerede t.SESSION_ADDR = s.SADDR ve t.SQLADDR = sql.ADDRESS ve t.SQLHASH = sql.HASH_VALUE ; Komut istemi < p > Geri alma segmentinin, geçici segmentin ve normal segmentin otomatik olarak genişletilip genişletilmediğini gözlemleyin t2.contents seçin, t1. * from (dosya_adı, tablo alanı_adı, bayt, maksimum bayt, otomatik genişletilebilir seçin dba_temp_files'dan hepsini birleştir dosya_adı, tablo alanı_adı, bayt, maksimum bayt, otomatik uzayabilir seçin dba_data_files) t1'den, dba_tablespaces t2 t1.tablespace_name = t2.tablespace_name ; Komut istemi < p > Tablo boyutu, bölümleme olmadan 10 GB'ı aşıyor sahibi seçin segment_name, segment_type, round (sum (bayt) / 1024/1024 / 1024,2) object_size dba_segments'tan segment_type = 'TABLO' nerede ve bayt > 10 * 1024 * 1024 * 1024 Sahibe göre gruplama, segment_name, segment_type object_size desc'ye göre sırala ; Komut istemi < p > En çok bölüme sahip ilk 10 nesne seçin * from (table_owner, table_name, count (*) cnt seçin dba_tab_partitions'tan table_owner, table_name göre gruplandır cnt desc ile sipariş) rownum nerede < = 10 ; Komut istemi < p > Eşit olmayan şekilde bölümlenmiş tablo seçin * from (table_owner'ı seçin, Tablo ismi, max (satır_sayısı) max_num_rows, trunc (ort (satır_sayısı), 0) ortalama_sıra, sum (satır_sayısı) sum_num_rows, durum sum (num_rows) = 0 olduğunda 0 Başka kesme (maks (satır_sayısı) / kesme (ort (satır_sayısı), 0), 2) bitiş oranı, count (*) part_count dba_tab_partitions'tan table_owner, table_name tarafından gruplandır oran nerede > 5; Komut istemi < p > 100'den fazla veya 2'den az sütuna sahip tablolar seçin * from (sahip seç, tablo_adı, sayı (*) col_count dba_tab_cols'tan sahibine göre gruplandırma, tablo_adı) col_count nerede > 100 veya col_count < = 2 ve sahibi ('SYSTEM', 'SYSMAN', 'SYS', 'CTXSYS', 'MDSYS', 'OLAPSYS', 'WMSYS', 'EXFSYS', 'LBACSYS', 'WKSYS', 'XDB') değil ve sahibi 'FLOWS%' gibi değil ; Komut istemi < p > Tablo özellikleri nologging yapıyor sahip, tablo_adı, tablo alanı_adı, günlük kaydı seçin dba_tables'dan günlüğe kaydetme = 'HAYIR' ve sahibi ('SYSTEM', 'SYSMAN', 'SYS', 'CTXSYS', 'MDSYS', 'OLAPSYS', 'WMSYS', 'EXFSYS', 'LBACSYS', 'WKSYS', 'XDB') değil ve sahibi 'FLOWS%' gibi değil ; Komut istemi < p > COMPRESSION içeren tablo özelliği sahip, tablo_adı, tablo alanı_adı, COMPRESSION seçin dba_tables'dan COMPRESSION = 'ENABLED' nerede ve sahibi ('SYSTEM', 'SYSMAN', 'SYS', 'CTXSYS', 'MDSYS', 'OLAPSYS', 'WMSYS', 'EXFSYS', 'LBACSYS', 'WKSYS', 'XDB') değil ve sahibi 'FLOWS%' gibi değil ; Komut istemi < p > COMPRESSION ile dizin özelliği sahip, dizin_adı, tablo_adı, COMPRESSION seçin dba_indexes'ten COMPRESSION = 'ENABLED' nerede ve sahibi ('SYSTEM', 'SYSMAN', 'SYS', 'CTXSYS', 'MDSYS', 'OLAPSYS', 'WMSYS', 'EXFSYS', 'LBACSYS', 'WKSYS', 'XDB') değil ve sahibi 'FLOWS%' gibi değil ; Komut istemi < p > tetiklemek OWNER, TRIGGER_NAME, TABLE_NAME, STATUS seçin dba_triggers'dan sahibi olmadığı yerde ('SYSTEM', 'SYSMAN', 'SYS', 'CTXSYS', 'MDSYS', 'OLAPSYS', 'WMSYS', 'EXFSYS', 'LBACSYS', 'WKSYS', 'XDB') ve sahibi 'FLOWS%' gibi değil; Komut istemi < p > Yabancı anahtarın endekslenmediği durumları listeleyin seçin * (pk.owner PK_OWNER'ı seçin, pk.constraint_name PK_NAME, pk.table_name PK_TABLE_NAME, fk.owner FK_OWNER, fk.constraint_name FK_NAME, fk.table_name FK_TABLE_NAME, fk.delete_rule FK_DELETE_RULE, ind_col.INDEX_NAME FK_INDEX_NAME, ind.index_type FK_INDEX_TYPE, con_col.COLUMN_NAME FK_INDEX_COLUMN_NAME, con_col.POSITION FK_INDEX_COLUMN_POSITION, decode (ind_col.INDEX_NAME, BOŞ, BOŞ, NVL (x_ind.status, 'VALID')) IS_IND_VALID, decode (ind_col.INDEX_NAME, BOŞ, BOŞ, NVL (x_ind_part.status, 'VALID')) IS_IND_PART_VALID from (constraint_type = 'R' olan dba_constraints'ten * seçin) fk, (constraint_type = 'P' olan dba_constraints'ten * seçin) pk, dba_cons_columns con_col, dba_ind_columns ind_col, dba_indexes ind, (index_owner, index_name, status seçin dba_ind_partitions'tan nerede durum < > 'VALID') x_ind_part, (sahibi dizin_sahibi, dizin_adı, durum olarak seçin dba_indexes'ten nerede durum < > 'VALID') x_ind burada fk.r_constraint_name = pk.constraint_name ve pk.owner = fk.owner ve fk.owner = con_col.owner ve fk.table_name = con_col.table_name ve fk.constraint_name = con_col.CONSTRAINT_NAME ve con_col.owner = ind_col.TABLE_OWNER (+) ve con_col.TABLE_NAME = ind_col.TABLE_NAME (+) ve con_col.COLUMN_NAME = ind_col.COLUMN_NAME (+) ve ind_col.INDEX_OWNER = ind.owner (+) ve ind_col.INDEX_NAME = ind.index_name (+) ve ind_col.INDEX_OWNER = x_ind.index_owner (+) ve ind_col.INDEX_NAME = x_ind.index_name (+) ve ind_col.INDEX_OWNER = x_ind_part.index_owner (+) ve ind_col.INDEX_NAME = x_ind_part.index_name (+)) FK_INDEX_NAME burada boş FK_OWNER ASC tarafından sipariş ; /* Zayıf performans Komut istemi < p > Sıcak blok (özet) SELECT * + kural * e.owner, e.segment_name, e.segment_type, sum (b.tch) tch DBA_extents e'DEN, (SEÇ * FROM (SEÇ adres, ts #, dosya #, dbarfil, dbablk, tch BAŞLANGIÇ x $ bh DESC TARAFINDAN SİPARİŞ) NEREDE ROWNUM < = 10) b NEREDE e.relative_fno = b.dbarfil VE e.block_id < = b.dbablk VE e.block_id + e.blocks > b.dbablk e.owner, e.segment_name, e.segment_type'a göre gruplama tch desc ile sipariş ; Komut istemi < p > Sıcak blok (genişletilmiş, özetlenmemiş) SELECT * + kural * farklı e.owner, e.segment_name, e.segment_type, dbablk, b.tch DBA_extents e'DEN, (SEÇ * FROM (SEÇ adres, ts #, dosya #, dbarfil, dbablk, tch BAŞLANGIÇ x $ bh DESC TARAFINDAN SİPARİŞ) NEREDE ROWNUM < = 10) b NEREDE e.relative_fno = b.dbarfil VE e.block_id < = b.dbablk VE e.block_id + e.blocks > b.dbablk tch desc ile sipariş ; * / Komut istemi < p > Ek: session_cached_cursors parametre ayarlarını kontrol edin, kullanım oranı% 100 ise parametre değerini artırın SELECT'session_cached_cursors 'PARAMETRE, LPAD (VALUE; 5) VALUE, DECODE (VALUE, 0, 'n / a', TO_CHAR (100 * USED / VALUE, '990') || '%') KULLANIM KULLANILAN (MAX (S. DEĞER) SEÇİN V $ STATNAME N, V $ SESSTAT S'DEN WHERE N.NAME = 'oturum imleci önbellek sayısı' AND S.STATISTIC # = N.STATISTIC #), (V $ PARAMETER WHERE NAME = 'session_cached_cursors' 'dan DEĞER SEÇİN) BİRLİĞİ TÜMÜ SELECT'open_cursors ', LPAD (VALUE; 5), TO_CHAR (100 * KULLANILAN / DEĞER, '990') || '%' KULLANILAN (MAX (TOPLA (S. DEĞER))) V $ STATNAME N, V $ SESSTAT S'DEN İSİM NEREDE ('açık imleçler geçerli', 'oturum imleci önbellek sayısı') AND S.STATISTIC # = N.STATISTIC # GROUP BY S.SID), (V $ PARAMETERDEN DEĞER SEÇİN ADI = 'open_cursors'); Komut istemi < p > Ek: Referans için tüm Oracle parametreleri parametreyi göster biçimlendirme html'sini kapat exec dbms_output.put_line (' < /vücut > '); exec dbms_output.put_line (' < / html > '); biriktirmek / * Awr, addm, ash alın * / - Aşağıdakiler html etiketlerini kullanmaz İşaretlemeyi ayarla html kapalı biriktirme AÇIK ön kapalı entmap kapalı düzeltmeyi ayarlamak trim makarasını açmak yola çıkmak --Query dbid, örnek_numarası sütun dbid new_value awr_dbid sütun örnek_numarası new_value awr_inst_num v $ veritabanından dbid seçin; v $ örneğinden örnek_sayı seçin; - Yarım saat içinde kül raporu sütun ashbegintime new_value ashbegin_str sütun ashendtime new_value ashend_str to_char (sysdate-3/144, 'yyyymmddhh24miss') ashbegintime olarak, to_char (sysdate, 'yyyymmddhh24miss') ikiliden ashendtime olarak seçin; sütun ashfile_name new_value ashfile seç'ashrpt_ '|| to_char (awr_inst_num) ||' _ '|| to_char (ashbegin_str) ||' _ '|| to_char (ashend_str) ashfile_name dual'den; biriktirme ashfile..html tablodan * seçin (dbms_workload_repository.ash_report_html (to_char (awr_dbid), to_char (awr_inst_num), to_date (to_char (ashbegin_str), 'yyyymmddhh24miss'), to_date (to_chardh (ashend_miss ')) biriktirmek; -İsteğe bağlı olarak awr kesme noktaları oluşturun sütun begin_snap new_value awr_begin_snap sütun end_snap new_value awr_end_snap max (snap_id) begin_snap seçin dba_hist_snapshot'tan snap_id nerede < (dba_hist_snapshot'tan max (snap_id) seçin); dba_hist_snapshot'tan max (snap_id) end_snap seçin; bildirmek snap_maxtime tarihi; snap_mintime tarihi; başla maksimum seçin (end_interval_time) + 0 snap_maxtime içine dba_hist_snapshot'tan snap_id = to_number (awr_end_snap); maksimum seçin (end_interval_time) + 0 snap_mintime içine dba_hist_snapshot'tan snap_id = to_number (awr_begin_snap); eğer sysdate-snap_maxtime > 10/1445 sonra dbms_workload_repository.create_snapshot (); biterse; son; / --En son iki snap_id arasında bir hata raporu sütun begin_snap new_value awr_begin_snap sütun end_snap new_value awr_end_snap max (snap_id) begin_snap seçin dba_hist_snapshot'tan snap_id nerede < (dba_hist_snapshot'tan max (snap_id) seçin); dba_hist_snapshot'tan max (snap_id) end_snap seçin; sütun awrfile_name new_value awrfile seç'awrrpt_ '|| to_char (awr_inst_num) ||' _ '|| to_char (awr_begin_snap) ||' _ '|| to_char (awr_end_snap) awrfile_name dual'den; biriktirme awrfile..html tablodan çıktı seçin (dbms_workload_repository.awr_report_html (awr_dbid, awr_inst_num, awr_begin_snap, awr_end_snap)); biriktirmek; - Mevcut en uzun awr raporu (bir haftadan beri tüm analizler) sütun begin_snap new_value awr_begin_snap sütun end_snap new_value awr_end_snap a.begin_snap, a.end_snap seçin from (başlangıç_süresi, min (snap_id) begin_snap, max (snap_id) end_snap seçin dba_hist_snapshot'tan başlangıç_süresine göre gruplama) a, (dba_hist_snapshot'tan maksimum (başlangıç_süresi) başlatma_ süresini seçin) b burada a.startup_time = b.startup_time ve rownum = 1; sütun awrfile_name new_value awrfile seç'awrrpt_ '|| to_char (awr_inst_num) ||' _ '|| to_char (awr_begin_snap) ||' _ '|| to_char (awr_end_snap) ||' _all 'awrfile_name dual'den; biriktirme awrfile..html tablodan çıktı seçin (dbms_workload_repository.awr_report_html (awr_dbid, awr_inst_num, awr_begin_snap, awr_end_snap)); biriktirmek; --Son addm raporu sütun addmfile_name new_value addmfile seç'addmrpt_ '|| to_char (awr_inst_num) ||' _ '|| to_char (awr_begin_snap) ||' _ '|| to_char (awr_end_snap) dual'den addmfile_name; serveroutput'u aç addmfile..txt biriktirme bildirmek kimlik Numarası; isim varchar2 (200): = ''; descr varchar2 (500): = ''; addmrpt clob; v_ErrorCode numarası; BAŞLA isim: = 'addmfile'; başla dbms_advisor.create_task ('ADDM', id, isim, descr, null); dbms_advisor.set_task_parameter (ad, 'START_SNAPSHOT', awr_begin_snap); dbms_advisor.set_task_parameter (ad, 'END_SNAPSHOT', awr_end_snap); dbms_advisor.set_task_parameter (ad, 'INSTANCE', awr_inst_num); dbms_advisor.set_task_parameter (ad, 'DB_ID', awr_dbid); dbms_advisor.execute_task (ad); istisna diğerleri ne zaman boş; son; dbms_advisor.get_task_report (ad, 'METİN', 'TİPİK') seçin addmrpt içine sys.dual'dan; dbms_output.enable (20000000000); i in 1 .. (DBMS_LOB.GETLENGTH (addmrpt) / 2000 + 1) döngü için dbms_output.put_line (substr (addmrpt, 1900 * (i-1) + 1, 1900)); son döngü; dbms_output.put_line (''); başla dbms_advisor.delete_task (ad); istisna diğerleri ne zaman boş; son; son; / biriktirmek; çıkış;

Komut dosyasını yürütün:

Oracle kullanıcısı ile sql yürütün:

sqlplus "/ as sysdba" @ / home / oracle / sql / spooldb.sql

Rapor içeriğini görüntüleyin

1. AWR raporu

2. ASH raporu

3. ADDM raporu

4. Genel durum

Yukarıdaki raporu aldığınızda da komut dosyasını değiştirebilirsiniz.Zamanınız varsa test edebilirsiniz.Betik nispeten uzundur ve gereksizse kaldırabilirsiniz.

DBA hakkında daha fazlasını daha sonra paylaşacağım, ilgilenen arkadaşlar buna dikkat edebilir!

Lüks SUV kralı Rolls-Royce Cullinan resmen piyasaya sürüldü
önceki
Li Chen Xiamen'deki etkinliğe katıldı ve kadın hayranlar havaalanında bir grup fotoğrafı istedi. İkisi en şirin yükseklik farkını oluşturabilir!
Sonraki
JD 3C 2017 Bilgisayar Sıralaması, Sheraton Yetkili "Halkın Günlüğü"
PLC öğrenmeye nasıl başlanır? Mitsubishi veya Siemens'ten öğrenin? Mitsubishi Siemens'in avantaj ve dezavantajlarının karşılaştırılması
Akıllı ekip, Beijing Otomobil Fuarı'nda görücüye çıktı, Chery yeni bir mobil seyahat ekolojisi oluşturdu
Makul SQL optimizasyon fikirleri-SQL ayarlama süresi nasıl kısaltılır?
Xu Zheng ailesiyle dışarı çıktı, Xu Xiaobao yüzünü gösterdi ve Huang Duoduo onların güzelliği için savaşabilir.
Değerli bir lider! Huawei'nin 2017 rekoru açıklandı, 600 milyar rulo ve 153 milyon cep telefonu sevk edildi!
Kadın bir ortak bulmak için para harcıyor ve çöpçatanlık şirketi aslında ona bir çalışan gönderiyor ki bu garip
Siemens'in en güçlü programlama dili olan kuru mallar bir bilgisayar gibi olabilir, anlıyor musunuz?
Optimizasyon sistemi - sql genel optimizasyonu (ayarlama araçlarının analizi)
Deng Chao ve Sun Li çocukları alışverişe götürür, önünde büyük bir çantayla yürürler, Sun Li ve Xiaohua adım adım bükülür.
"Yeşil, şişman, kırmızı, ince olması gerektiğini biliyor musunuz", Çinli öğretmenin kırmızı kalemi tutamaz!
Fabrika elektrikçilerinin 79 bilgi noktası, ne kadar ustalaştığınız maaşınız demektir!
To Top