ORCLE DATABASE KONTROL LİSTESİ (CHECK LIST)

Yapılan işlerin eksiksiz ve hatasız olduğunu teyit etmek için ve bazende ya bir şey olmaz durduk yere diyerek bazı kontrolleri atlamamak için gerekli bir listedir.

Veritabanının stabil ve performanslı çalışması için Oracle Performans kontrol listesi (checklist) olmalı aynı zamanda beklenmedik bir anda yaşanan sorunlarla ilgili olarak, rutin yapmış olduğumuz bir kontrol listemiz yoksa gereksiz yere birçok kontrolü yaparak zaman kaybı yaşamamız çok muhtemeldir.

  1. Alert.log kontrolü. (Günlük)
  2. Backup ların Kontrolü. (Günlük)
  3. Unusable Index var mı? (Günlük)
  4. Sql ler kontrol edilir, Top Sql lerin kontrolü. (Günlük)
  5. Yetkisiz Erişim ve hatalı Erişim Kontrolü. (Günlük)
  6. Active ve Inactive Session sayılarının kontrolü. (Günlük)
  7. Lock Tablo ve session kontrolü. (Günlük)
  8. Tablespace lerin kontrolü. (Günlük)
  9. Asm disk ve db size kontrolü. (Günlük)
  10. Export ve Import varsa kontrolü. (Günlük)
  11. DDS Sistemi varsa ETL lerin kontrolü. (Günlük)
  12. Enterprice Manager varsa Performans takibi yapılması ve metriklerin kontrolü. (Günlük)
  13. AWR ve ADDM raporlarının alınması. (Haftalık veya ihtiyaç halinde)
  14. Schema veya İstatisitklerin kontrolü (?).
  15. Partition Kontrolü (?).
  16. Veritabanı tablo ve Indexlerin boyutlarının kontrolü. (Haftalık ve Aylık)
  17. Fragmente Olmuş tabloların kontrolü. (Haftalık veya Aylık)
  18. Geçiçi tabloların kontrolü (Haftalık veya Aylık).
  19. Haftalık veya aylık veritabanı büyümesi kontrolü.
  20. DB Time Kontrolü ve DB time en yüksek olduğu zaman aralığında AWR ve ADDM lerin alınarak incelenmesi. (Haftalık veya ihtiyaç halinde)
  21. Backupların Test Veritabanında Restore edilerek test yapılması (Aylık)
  22. DB Server Kontrolü (CPU, IO, Swap, Memory, Disk, Network vs..).(Haftalık veya Aylık)
  23. ORAchk – Healt Check Raporları (RAC ise RACchk, Exadata ise Exachk) ile genel DB kontrolü.
  24. OS Watcher ile db server kaynak kullanımı kontrolü.
  25. TFA (Oracle Trace File Analyzer)
  26. Eger açılmış ise açılan SR ların kontrolü.
  27. Yapılan kontrol listesinin güncellenmesi ve kontrolü.

Yukarıda Gayet detaylı bir liste oluşturduk aslında. Bu liste ihitiyaca göre arttırıp azaltılabilir veya uygulamasıklığı arttırılıp azaltılabilir. Şimdi bu işlemlerin bazılarının nasıl yapılacağına dağir sql lere ve Enterprice Managager Cloud Controldeki uygulamalarına bakalım.

  1. Alert Log Kontrolü ;

Veritabnı içerisindeki ORA hatalarını, ALTER SYSTEM, ALTER DATABASE komutları ile yapılan değişiklikleri, Veritabanı açma kapama işlemleri gibi bilgileri tutan log dosyasını inceleyerek Veritabanındaki sorunları tespit edebiliriz.

adrci yardımı ile alert log kontrolü yapılabilceği gibi adrci den alert log ların yerine bakılarak oradan dosya incelenebilir. Ayrıca sqlplus tan show parameter background diyerek veya Enterprice Manager ile birde v$diag_info view dan alert.log dosyamızın yerini öğrenebiliriz.

adrci ile aşağıdaki gibi

 adrci

ADRCI: Release 12.2.0.1.0 - Production on Tue Mar 31 14:51:50 2020

Copyright (c) 1982, 2017, Oracle and/or its affiliates.  All rights reserved.

ADR base = "/u01/app/oracle"
adrci> help

 HELP [topic]
   Available Topics:
        CREATE REPORT
        ECHO
        ESTIMATE
        EXIT
        HELP
        HOST
        IPS
        PURGE
        RUN
        SELECT
        SET BASE
        SET BROWSER
        SET CONTROL
        SET ECHO
        SET EDITOR
        SET HOMES | HOME | HOMEPATH
        SET TERMOUT
        SHOW ALERT
        SHOW BASE
        SHOW CONTROL
        SHOW HM_RUN
        SHOW HOMES | HOME | HOMEPATH
        SHOW INCDIR
        SHOW INCIDENT
        SHOW LOG
        SHOW PROBLEM
        SHOW REPORT
        SHOW TRACEFILE
        SPOOL

 There are other commands intended to be used directly by Oracle, type
 "HELP EXTENDED" to see the list

adrci> show alert

Choose the home from which to view the alert log:

1: diag/clients/user_oracle/host_881557115_107
2: diag/clients/user_oracle/host_881557115_82
3: diag/crs/ol6/crs
4: diag/tnslsnr/ol6/listener
5: diag/rdbms/orcl/orcl
6: diag/diagtool/user_oracle/adrci_881557115_107
7: diag/asm/+asm/+ASM
Q: to quit

Please select option:

sqlplus ile

SQL> show parameter background;

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
background_core_dump                 string      partial
background_dump_dest                 string      /u01/app/oracle/product/12.2.0                                   .1/db/rdbms/log

2. Backup Kontrolü

Raman backupları kontrol edilerek backup başarı ile tatmlanmış mı? rman backup süreleri makül sürelermi (rman performansı), backup validate durumu vs kontrol edilmelidir. Eğer Enterprice Manager Cloud Control kullanıyorsak kolay bir şekilde bunu gözlmeleyebiliyoruz.

Veya

--ALINMIS OLAN RMAN BACKUP LISTESI
select to_char
(start_time, 'DD.MM.YYY HH24:MI:SS') as start_time,
to_char(end_time,'DD.MM.YYY HH24:MI:SS') as end_time,
status,
object_type,
output_device_type
from v$rman_status
where operation='BACKUP'
order by start_time desc;


--RMAN BACKUP DETAY DURUMLARI İÇİN

select * from 
(select to_char( start_time , 'DD.MM.YYY HH24:MI:SS') "START" ,
to_char (end_time,'DD.MM.YYY HH24:MI:SS') "END",
time_taken_display "TIME",
input_bytes_display "INPUT",
output_bytes_display "OUTPUT",
input_bytes_per_sec_display "IN/SEC",
output_bytes_per_sec_display "OUT/SEC",
output_device_type,
status,
input_type,
round(elapsed_seconds/60,2)"ELEPSAD_MIN",
optimized,
round(compression_ratio,2)"COMPERESS_RATIO"
from v$rman_backup_job_details
order by session_key desc)

3. UNUSABLE INDEX VAR MI?

select * from dba_indexex where status='UNUSABLE'

varsa indexin rebuld edilmesi gerekir.

Alter index [OWNER.INDEX_NAME] REBUILD

REBUILD işlemi aslında indexin drop edilmesi sonrasında tekrar create edilmesi işlemidir.

4. TOP SQL KONTROLÜ

Eğer Enterprise Manager kullanıyorsak bu işlem oldukça kolaylaşıyor. Performans Menüsü altındaki Top Activity kısmına geldiğimizde zamana göre kaynak tüketimini sesiionların ve sql lerin nasıl tükettiğini ve bu zamanlardaki top 10 sql leri bize doğrudan grafiksel oplarak gösteriyor. Hatta aynı menü üzerinden sql tune yapmamızı ve advisorler sayesinde problemli sql lerin çözümlerinide gösteriyor, ben oldukça faydalı buluyorum.

Burada bulunan sıradışı kaynak tüketen veya problemli olduğu görülen session, sql vs ayrıca ele alınır ve incelenir.

5. YETKİSİZ ERİŞİM KONTROLÜ

Yetkisiz Kullanıcı girişi için DBA_AUDIT_TRAIL view den logon logout bilgilerini alabiliriz. Oluşturcağımız whitelist ve blacklist tabloları ile bir job tanımlabilir, Bizim istemediğimiz girişleri buradan alert mekanızması oluşturulabilir ve bu otomatik mail ile bilgi alınabilir.

6. ACTIVE VE INACTIVE SESSION KONTROLÜ

--TUM SESSIONLARIN SAYISI
select count(s.status) TOTAL_SESSIONS
from gv$session s;

--INACTIVE SESSIONLARIN SAYISI
select count(s.status) INACTIVE_SESSIONS
from gv$session s, v$process p
where
p.addr=s.paddr and
s.status='INACTIVE';

--1 SAATTEN FAZLADIR INACTIVE OLAN SESSIONLARIN SAYISI
select count(s.status) "INACTIVE SESSIONS >ONE HOUR "
from gv$session s, v$process p
where
p.addr=s.paddr and
s.last_call_et > 3600 and
s.status='INACTIVE';

--ACTIVE SESSIONLARIN SAYISI
select count(s.status) ACTIVE_SESSIONS
from gv$session s, v$process p
where
p.addr=s.paddr and
s.status='ACTIVE';

-- ACTIVE SESSIONlAR ILE ILGILI BAZI BILGILER
select spid as thread,
osuser,
s.PROGRAM,
s.LOGON_TIME,
p.PROGRAM,
s.SID
from v$process p, v$session s
where p.addr=s.paddr and s.status NOT IN ('ACTIVE')
ORDER BY 2 DESC

7. LOCK OLMUS TABLO VE SESSION KONTROLÜ

Lock olmuş bir obje var mı ?

select
   (select username from v$session where sid=a.sid) blocker,
   a.sid,
   ' is blocking ',
   (select username from v$session where sid=b.sid) blockee,
   b.sid
from
   v$lock a,
   v$lock b
where
   a.block = 1
and
   b.request > 0
and
   a.id1 = b.id1
and
   a.id2 = b.id2;

--- LOCKLI OBJE VARSA BILGILERINI GORELIM

SELECT 
s.INST_ID,
s.SERIAL#,
l.TYPE,
d.OBJECT_NAME,
s.USERNAME,
s.BLOCKING_SESSION,
s.OSUSER,
l.LMODE
FROM gv$lock l, dba_objects d, gv$session s
where d.object_id=l.id1
AND s.sid=l.sid
AND s.inst_id=l.inst_id
AND d.object_name 
LIKE UPPER('%LOCKLI_OBJE_NAME%')
ORDER BY inst_id

8. TABLESPACE ALANLARININ KONTROLÜ

Bunun için Toad, EM kullanılabilir ayrıca aşağıdaki sqllede bakılablir.

SELECT df.tablespace_name "Tablespace",
  totalusedspace "Used MB",
  (df.totalspace - tu.totalusedspace) "Free MB",
  df.totalspace "Total MB",
  ROUND(100 * ( (df.totalspace - tu.totalusedspace)/ df.totalspace)) "% Free"
FROM
  (SELECT tablespace_name,
    ROUND(SUM(bytes) / 1048576) TotalSpace
  FROM dba_data_files
  GROUP BY tablespace_name
  ) df,
  (SELECT ROUND(SUM(bytes)/(1024*1024)) totalusedspace,
    tablespace_name
  FROM dba_segments
  GROUP BY tablespace_name
  ) tu
WHERE df.tablespace_name = tu.tablespace_name;

14.) SCHEMA VEYA TABLO ISTATISTIKLERI

Tablo ve Index’lerin istatistikleri güncel olmalıdır ki Cost-Based Optimizer (CBO) güncel bilgilerle doğru maliyet (cost) üretebilsin. Değilse oracle yanlış sql planlarını tercih edebilir buda perfomans düşüşüne neden olacaktır. Tablo özelliklerine dair istatistikler normalde hergece güncellenir. Fakat istatistik verileri lock’lı olan tabloların istatistikleri güncellenmez. Gün içerisinde tabloya yüksek oranda veri aktarımı olmuşsa tablonun istatistiklerinin elle güncellenmesi gerecektir.

--TABLONUN İSTATİSTİKLERİNİ TOPLAMAK İÇİN
exec dbms_stats.gather_table_stats('SCHEMA','TABLE_NAME');

--BİR SCHEMA İSTATİSTİKLERİNİ TOPLAMAK
exec dbms_stats.gather_schema_stats('SCHEMA_NAME');

--BİR SCHEMA İSTATİSTİKLERİNİ SİLMEK
exec dbms_stats.delete_schema_stats('SCHEMA_NAME');

--İSTATİSTİKLERİ LOCK OLAN TABLOLARI BULMAK VE LOCK'I KALDIRMAK
select table_name, stattype_locked from dba_tab_statistics where owner = 'schema_name' and stattype_locked is not null;

exec DBMS_STATS.UNLOCK_TABLE_STATS ('Schema','Tablo');
 

15. PARTITION KONTROLÜ

Partitionlu tablolarımız hangileri, eksik var mı…?

select distinct table_owner,
table_name,
PARTITION_NAME,
LAST_ANALYZED
from all_tab_partitions
where table_name not like 'BIN$%'
and table_owner not in ('SYS','SYSTEM','SYSMAN')

OLTB veritabanlarında büyük boyutlu tablolar için online parti,tion yapabilmenin bir yolu da Redefination Table‘dır. DBMS_REDEFINITION paketi ile yapılabilmektedir.