Toad for Oracle, Mysql, Sql server

Το καλύτερο εργαλείο για την διαχείριση των βάσεων. Πλέον κάτω από την ομπρέλα της Dell.

Ανοίξτε λογαριασμό στο site υποστήριξης της ORACLE(MOS-Metalink).

Η Oracle προσφέρει support και χρήσιμες πληροφορίες σε προβλήματα και bugs μέσω του συγκεκριμένου site.

Μπορείτε από το eDelivery της Oracle να κατεβάσετε Μysql και Oracle λογισμικό

Mysql μια open source βάση με support πλέον επι πληρωμή, από την Oracle.

Το support της microsoft για όλα τα προιόντα της

Χρήσιμες πληροφορίες-guides που αφορούν τόσο προβλήματα όσο και τρόπους εγκατάστασης του database λογισμικού.

Oracle Documentation

Εδώ υπάρχει το επίσημο documentation της Oracle.

Πέμπτη 4 Αυγούστου 2016

ASM διαχείριση χώρου – Εργαλεία, χρήσιμα queries


Στο άρθρο αυτό θα μιλήσουμε για την διαχείριση χώρου μέσω ASM.Η oracle δίνει την δυνατότητα στους χρήστες της να μην ασχολούνται με την διαχείριση του χώρου που καταλαμβάνει η βάση στο δίσκο, αλλά να κάνει την διαχείριση η oracle μόνη της με την χρήση του automatic storage management. Το εργαλείο αυτό απαιτεί προχωρημένες γνώσεις, για αυτό θα προσπαθήσω να κάνω μια απλή αναφορά στα πιο κρίσιμα ζητήματα που προκύπτουν από την χρήση του.

Η διαχείριση και παραμετροποίηση του ASM γίνεται μέσω του asmtoolg tool. Εκτενής αναφορά στο ASM δεν γίνεται στο συγκεκριμένο ebook, απλά στην συνέχεια παρατίθενται κάποια χρήσιμα queries.

Τα 3 queries που ακολουθούν δίνουν πληροφορίες σχετικά με τους δίσκους που έχουν δοθεί στο ASM να διαχειριστεί.

SQL> select * from v$asm_diskgroup;
SQL> select * from v$asm_file;
SQL>select name,group_number,disk_number,mount_status,state,path
from v$asm_disk
order by group_number;


Η επόμενη εντολή δίνει την δυνατότητα να δει κάποιος πως προστίθεται datafile σε ASM περιβάλλον.

SQL>alter tablespace trs_trans_data_2009 add datafile
'+oradata/orcl/oradata2/dbfiles/prtrs/trs_trans_data_2009.dbf' size 500m
autoextend on next 50m maxsize 20000m;



Δημιουργία Private Database link σε χρήστη από τον διαχειριστή της βάσης



Στο άρθρο αυτό θα μιλήσουμε για το πως η εκτέλεση της παρακάτω εντολής δημιουργεί ένα database link για την επικοινωνία της βάσης με μία άλλη βάση. Το link αυτό μπορεί να χρησιμοποιηθεί μόνο από συγκεκριμένο χρήστη.To query πρέπει να τρέξει με ισχυρά δικαιώματα (DBA privileges)

SQL> declare
uid number;
sqltext varchar2(10000) := 'CREATE DATABASE LINK
"DEVWWW1MYSQLCRM1.HELEX.GR" CONNECT TO "crm1" IDENTIFIED BY
"password" USING ''mysql2''';
myint integer;
begin
select user_id into uid from all_users where username like 'PORTAL_VIEWER';
myint:=sys.dbms_sys_sql.open_cursor();
sys.dbms_sys_sql.parse_as_user(myint,sqltext,dbms_sql.native,UID);
sys.dbms_sys_sql.close_cursor(myint);
end ;



Διαγραφή Oracle Service από Windows σύστημα


Στο άρθρο αυτό θα μιλήσουμε για το πως μπορούμε να διαγράψουμε ένα oracle service από ένα Windows συστημα. Η εκτέλεση της παρακάτω εντολής σβήνει το oracle service ολοκληρωτικά από ένα windows σύστημα (το σβήνει και από την registry).

CMD>sc delete Service_nameOracleOraDb11g_homER_NSROM;


Κρυφές παράμετροι βάσης


Στο άρθρο αυτό θα μιλήσουμε για το query που εμφανίζει τις τιμές των κρυφών παραμέτρων μιας oracle βάσης.

SQL> select a.ksppinm name,b.ksppstvl value,b.ksppstdf deflt,
decode
(a.ksppity, 1,'boolean', 2,'string', 3,'number', 4,'file', a.ksppity) type,
a.ksppdesc description
from sys.x$ksppi a,sys.x$ksppcv b
where a.indx = b.indx and a.ksppinm like '\_%' escape '\'
order by name;



Concatenation μέσω sql εντολών


Στο άρθρο αυτό θα μιλήσουμε για  ένα oracle query που δίνει τον  τρόπος να κάνουμε concatenation με την χρήση του συμβόλου ||.


SQL>select 'SSP.' || TABLE_NAME from sys.all_tables where OWNER='SSP' and TABLE_NAME LIKE 'BAL_%'


Default τιμές για τα προφίλ ασφαλείας των χρηστών


Στο άρθρο αυτό θα μιλήσουμε για τον τρόπο που μπορεί κάποιος να  δει τις default τιμές που έχουν οριστεί σε μια βάση δεδομένων oracle. Στο query που ακολουθεί εμφανίζονται όλες οι default τιμές των profile ασφαλείας των χρηστών της βάσης .Το query το τρέχουμε με dba privileges.

SQL>select * from sys.dba_profiles;


Grant σε views ισχυρών λογαριασμών sys, system


Στο άρθρο αυτό θα μιλήσουμε για το πως μπορούμε να  δώσουμε την δυνατότητα σε ένα χρήστη να δει τα περιεχόμενα συστεμικών πινάκων. Όταν επιθυμούμε να δώσουμε την δυνατότητα σε ένα χρήστη της βάσης να κάνει select από ένα συστεμικό view πχ v$session θα πρέπει να γίνει Grant το privilege στο πχ v_$session.

SQL>grant select on v_$session to hr;




MAIL - Ρύθμιση της βάσης ώστε να μπορεί να στείλει email (utl_mail)



Στο άρθρο αυτό θα μιλήσουμε για το πωσ μπορεί μια βάση δεδομένων oracle να ρυθμιστεί σωστά ώστε να μπορεί να στείλει email. Για να μπορέσει μια βάση να στείλει email θα πρέπει να εγκαταστήσουμε το πακέτο UTL_MAIL και να ορίσουμε κατάλληλα την παράμετρο SMTP_OUT_SERVER. Για να εγκαταστήσουμε το UTL_MAIL πρέπει να τρέξουμε με έναν ισχυρό λογαριασμό τα παρακάτω μέσω sqlplus.

SQL>sqlplus sys/<pwd>
SQL> @$ORACLE_HOME/rdbms/admin/utlmail.sql
SQL> @$ORACLE_HOME/rdbms/admin/prvtmail.plb


Στην συνέχεια θα πρέπει να ορίσουμε την παράμετρο SMTP_OUT_SERVER στο παραμετρικό αρχείο εκκίνησης της βάσης (pfile). Για να το κάνουμε αυτό εκτελούμε την παρακάτω εντολή.

SQL> alter system set smtp_out_server = 'mail.helex.gr:25' scope=both;
(Δυναμική παράμετρος – Αλλάζει χωρίς να χρειαστεί να κατέβει η βάση)

Δίνουμε το δικαίωμα να εκτελεί το συγκεκριμένο πακέτο είτε ο χρήστης PUBLIC οπότε όλοι οι χρήστες της βάσης, είτε συγκεκριμένοι χρήστες που θέλουμε. Οι παρακάτω εντολές εκτελούνται από χρήστη με ισχυρά δικαιώματα στην βάση (DBA δικαιώματα).

SQL> grant execute on utl_mail to public;
SQL> grant execute on utl_mail to <user>;


Τέλος, θα πρέπει να δημιουργηθεί ένα ACL για τον email server και να επιδοθούν τα απαραίτητα δικαιώματα στους χρήστες που θέλουμε να μπορούν να στείλουν email. Χωρίς την δημιουργία ACL θα εμφανίζεται το παρακάτω error: “ORA-24247: network access denied by access control list (ACL)“.

SQL> BEGIN
DBMS_NETWORK_ACL_ADMIN.CREATE_ACL (
acl => 'utl_mail.xml',
description => 'Permissions to access e-mail server.',
principal => 'SCHEMA_NAME',
is_grant => TRUE,
privilege => 'connect');
COMMIT;
END;


DBMS_NETWORK_ACL_ADMIN.ASSIGN_ACL (
acl => 'utl_mail.xml',
host => 'mailrelay.helex.gr',
lower_port => 25,
upper_port => 25);
COMMIT;
END;



Δημιουργία/Διαχείριση ACL (Access Control List)


Στο άρθρο αυτό θα μιλήσουμε για το πως μπορούμε να δημιουργήσουμε και να διαχειριστούμε Access Control Lists. Από την έκδοση 11g και μετά για να υπάρχει η δυνατότητα η βάση να επικοινωνεί απευθείας είτε με email server για να στέλνει email, είτε με εξωτερικά sites για να στέλνει και να παίρνει διάφορες πληροφορίες, δημιουργήθηκε μια λίστα πρόσβασης κάτι σαν εσωτερικό firewall. Αν λοιπόν θέλουμε η βάση μας να αποκτήσει επικοινωνία με εξωτερικά sites ή servers απευθείας θα πρέπει να γίνει η κατάλληλη καταχώρηση στην συγκεκριμένη λίστα. Περισσότερες πληροφορίες σχετικά με το πώς κάποιος δημιουργεί και διαχειρίζεται τέτοιου είδους λίστες μπορεί να δει στο ακόλουθο Link.

http://www.morganslibrary.org/reference/pkgs/dbms_network_acl_admin.html

Στην συνέχεια ακολουθούν οι κατάλληλες εντολές δημιουργία μιας τέτοιας λίστας μαζί με την εντολή εκχώρησης δυνατότητας σύνδεσης στον server link2.athexnet.gr.


SQL>begin
dbms_network_acl_admin.create_acl (
acl => 'utl_mail.xml',
description => 'Allow mail to be send',
principal => 'DB_USER',
is_grant => TRUE,
privilege => 'connect'
);
commit;
end;


SQL>begin
dbms_network_acl_admin.assign_acl(
acl => 'utl_mail.xml',
host => 'link2.athexnet.gr'
);
commit;
end;


Τέλος υπάρχουν τα παρακάτω 4 queries που μας δίνουν την δυνατότητα να δούμε χρήσιμες πληροφορίες σχετικά με τις access control lists της βάσεως και να κάνουμε χρήσιμες ενέργειες που αφορούν τα acls.

Με το παρακάτω query βλέπουμε όλα τα acls που έχουν δημιουργηθεί στην βάση.

SQL>select * from dba_network_acls
Με το ακόλουθο query βλέπουμε σε ποιους χρήστες της βάσης έχει δοθεί πρόσβαση και σε ποια acls.

SQL>select acl,principal,privilege,is_grant from dba_network_acl_privileges;

Έλεγχος αν συγκεκριμένο acl δουλεύει σωστά και επιτρέπει την πρόσβαση εκεί που θέλουμε.

SQL>select dbms_network_acl_admin.check_privilege_aclid (
'9f9b59d32d942527e04016ac15c74bbd', 'cypowner', 'connect')
from dual;


Με την παρακάτω εντολή δίνουμε το δικαίωμα σε κάποιον χρήστη να έχει πρόσβαση σε συγκεκριμένο ACL.

SQL>exec dbms_network_acl_admin.add_privilege(acl => 'utl_ftp_iplink2.xml',
principal => 'DERIVPROD', is_grant => TRUE, privilege => 'connect');




Δημιουργία προφίλ ασφαλείας χρηστών (security profile)


Στο άρθρο αυτό θα μιλήσουμε για το πως μπορούμε να δημιουργήσουμε ένα προφιλ ασφαλείας σε μία βάση δεδομένων Oracle. Πολλές φορές θέλουμε οι χρήστες της βάσης να έχουν συγκεκριμένα δικαιώματα ασφαλείας. Δικαιώματα που εκχωρούνται σε αυτούς μέσω κατάλληλων προφίλ ασφαλείας. Τα προφίλ αυτά δημιουργούνται και στην συνέχεια εκχωρούνται στους αντίστοιχους χρήστες. Η παρακάτω εντολή είναι ένα χαρακτηριστικό παράδειγμα δημιουργίας προφίλ ασφαλείας. 

SQL>create profile "default" limit
sessions_per_user unlimited
cpu_per_session unlimited
cpu_per_call unlimited
connect_time unlimited
idle_time unlimited
logical_reads_per_session unlimited
logical_reads_per_call unlimited
composite_limit unlimited
private_sga unlimited
failed_login_attempts unlimited
password_life_time unlimited
password_reuse_time unlimited
password_reuse_max unlimited
password_lock_time unlimited
password_grace_time unlimited
password_verify_function null;


Γενικότερα το προφίλ ορίζει παραμέτρους που αφορούν το password του χρήστη καθώς και τα resources της βάσης που θα μπορεί να χρησιμοποιήσει.

Μεταφορά πινάκων και Indexes από ένα tablespace σε ένα άλλο


Στο άρθρο αυτό θα μιλήσουμε για το πως μπορεί κάποιος να μεταφέρει πίνακες και indexes από ένα Tablespace σε ένα άλλο σε μια βάση δεδομένων Oracle.Τρέχουμε τις παρακάτω εντολές για να δημιουργήσουμε τα scripts που θα τρέξουμε στην συνέχεια ώστε να γίνει η μεταφορά όλων των αντικειμένων του χρήστη σε νέο tablespace. Αν θέλουμε να μεταφέρουμε συγκεκριμένα αντικείμενα του χρήστη επιλέγουμε τα αντικείμενα που θέλουμε να μεταφέρουμε. Τρέχουμε τα scripts που έχουν προκύψει. 

SQL>select 'alter table ' || user_tables.table_name || ' move tablespace ' || 'M_DATA;' 
 from user_table;

SQL>select 'alter index ' || user_tables.table_name || ' rebuild tablespace ' || 'M_DATA;' 
 from user_tables;



Τετάρτη 3 Αυγούστου 2016

Processes Βάσης


Στο άρθρο αυτό βλέπουμε δυο χρήσιμες Linux administration commands.
Με την παρακάτω εντολή βλέπουμε όλα τα oracle process που τρέχουν στον server.

Ps –ef | grep ora*

Με την παρακάτω εντολή σκοτώνουμε όλα τα process-connection που έχουν μείνει ανοιχτά στον server.

> Ps –ef | grep “(LOCAL=NO)” | awk ‘{print “kill -9 “ $2 }’ > y.sh
> ./y.sh

Sql Statements που τρέχει κάθε χρήστης την συγκεκριμένη στιγμή


Στο άρθρο αυτό θα παρουσιάσουμε ένα query το οποίο τρέχοντάς το εμφανίζονται όλα τα sql statements που τρέχουν στην βάση .Το query το τρέχουμε με dba privileges.


SQL>select module, sql_text, username, disk_reads_per_exec, buffer_gets, disk_reads,
parse_calls, sorts, executions, rows_processed, hit_ratio, first_load_time,
sharable_mem, persistent_mem, runtime_mem, cpu_time, elapsed_time, address,
hash_value
from (SELECT module, sql_text , u.username ,
round((s.disk_reads/decode(s.executions,0,1, s.executions)),2) disk_reads_per_exec,
s.disk_reads , s.buffer_gets , s.parse_calls , s.sorts , s.executions ,
rows_processed , 100 - round(100 * s.disk_reads/greatest(s.buffer_gets,1),2) hit_ratio,
s.first_load_time , sharable_mem , persistent_mem , runtime_mem, cpu_time,
elapsed_time, address, hash_value
FROM gv$sql s, sys.all_users u
WHERE s.parsing_user_id=u.user_id and UPPER(u.username) not in
('SYS','SYSTEM') and s.SQL_TEXT like '% MM_LF_LASTETS_NBR %'
ORDER BY 4 desc)
WHERE rownum <= 20;

Εύρεση Invalid objects βάσης



Στο άρθρο αυτό θα μιλήσουμε για δύο πολύ χρήσιμα queries.Στο πρωτο query εμφανίζονται όλα τα invalid objects της βάσης.Το query το τρέχουμε με dba privileges.

SQL>select count(*) from dba_objects where status ='INVALID';

Στο δεύτερο query εμφανίζονται όλα τα invalid objects του sys,system μόνο .Το query το τρέχουμε με dba privileges.

SQL>select owner, object_name, object_type from dba_objects
where owner in ('SYS','SYSTEM') and status='INVALID';

Όγκος archives που έχει βγάλει μια βάση


Στο άρθρο αυτό δίνουμε έα χρήσιμο query για να μπορεί κάποιος να δει τον όγκο των archives που βγάζει μια oracle βάση σε archive log mode.Στο query που ακολουθεί ορίζουμε το χρονικό διάστημα που θέλουμε να μελετήσουμε το μέγεθος των archives που έχει βγάλει μία βάση.

SQL>select sum(GB_USED_PER_DAY)/count(GB_USED_PER_DAY) from (SELECT
TO_CHAR(completion_time,'YYYY-MM-DD') completion_date,
round (SUM(block_size*(blocks+1)) / 1024 / 1024 / 1024 , 2)
GB_USED_PER_DAY
from v$archived_log
where TRUNC(completion_time) BETWEEN
TRUNC(SYSDATE-30) AND TRUNC(SYSDATE)
group by TO_CHAR(completion_time,'YYYY-MM-DD')
order by 1 desc);

Κλειδώματα αντικειμένων της βάσης (Library cache Lock)


Στο άρθρο αυτό θα μιλήσουμε για το πως μπορεί κάποιος να εντωπίσει κλειδώματα σε αντικείμενα (procedures, functions, tables) σε μια βάση Oracle. Τα κλειδώματα αυτά εμφανίζονται όταν κάποιο compile ενός αντικειμένου στην βάση έχει κολλήσει. Βλέπουμε με τα παρακάτω queries ποιος το κλειδώνει και προσπαθούμε να επιλύσουμε το κλείδωμα.

SQL>select decode(lob.kglobtyp, 0, 'NEXT OBJECT', 1, 'INDEX', 2, 'TABLE', 3,
'CLUSTER',4, 'VIEW', 5, 'SYNONYM', 6, 'SEQUENCE',7, 'PROCEDURE', 8,
'FUNCTION', 9, 'PACKAGE',11, 'PACKAGE BODY', 12, 'TRIGGER',13, 'TYPE',
14, 'TYPE BODY',19, 'TABLE PARTITION', 20, 'INDEX PARTITION', 21, 'LOB',
22, 'LIBRARY', 23, 'DIRECTORY', 24, 'QUEUE',28, 'JAVA SOURCE', 29, 'JAVA
CLASS', 30, 'JAVA RESOURCE',32, 'INDEXTYPE', 33, 'OPERATOR',34, 'TABLE
SUBPARTITION', 35, 'INDEX SUBPARTITION',40, 'LOB PARTITION', 41, 'LOB
SUBPARTITION', 42, 'MATERIALIZED VIEW', 43, 'DIMENSION', 44,
'CONTEXT', 46, 'RULE SET', 47, 'RESOURCE PLAN', 48, 'CONSUMER
GROUP',51, 'SUBSCRIPTION', 52, 'LOCATION', 55, 'XML SCHEMA', 56, 'JAVA
DATA',57, 'SECURITY PROFILE', 59, 'RULE', 62, 'EVALUATION
CONTEXT','UNDEFINED') object_type, lob.KGLNAOBJ object_name,
pn.KGLPNMOD lock_mode_held, pn.KGLPNREQ lock_mode_requested,
ses.sid, ses.serial#,ses.username
from x$kglpn pn, v$session ses, x$kglob lob, v$session_wait vsw
where pn.KGLPNUSE = ses.saddr and pn.KGLPNHDL = lob.KGLHDADR
and lob.kglhdadr = vsw.p1raw and vsw.event = 'library cache pin'
order by lock_mode_held desc/



SQL>select distinct ses.ksusenum sid, ses.ksuseser serial#, ses.ksuudlna
username,KSUSEMNM module,ob.kglnaown obj_owner, ob.kglnaobj obj_name
,lk.kgllkcnt lck_cnt, lk.kgllkmod lock_mode, lk.kgllkreq lock_req, w.state, w.event,
w.wait_Time, w.seconds_in_Wait
from x$kgllk lk, x$kglob ob,x$ksuse ses , v$session_wait w
where lk.kgllkhdl in (select kgllkhdl from x$kgllk where kgllkreq >0 )
and ob.kglhdadr = lk.kgllkhdl and lk.kgllkuse = ses.addr and w.sid = ses.indx
order by seconds_in_wait desc

Κλειδώματα Χρηστών


Στο άρθρο αυτό θα μιλήσουμε για κλειδώματα χρηστών που γίνοντε μεταξύ χρηστών σε μία βάση oracle. Για να εντοπίσουμε ποιος χρήστης κλειδώνει ποιον στην βάση τρέχουμε το παρακάτω query. Βλέποντας τα κλειδώματα μπορούμε να λύσουμε την διένεξη σκοτώνοντας το κατάλληλο session.

SQL> select sL.username sL_user, sL.osuser sL_osuser, sL.machine sL_mach,
sL.status LStat,L.SID LSid, sL.serial# LSerial, L.type,L.CTIME LCtime, L.lmode 
Lmode,L.REQUEST LReq,L.Inst_id ||'-'|| W.Inst_ID "N-N",W.SID WSid,W.CTIME 
WCtime, sW.username sW_user, sW.osuser sW_osuser, sW.status WStat,W.type, 
W.LMODE WLmode, W.Request WReq,sW.machine sW_mach,sWo.name 
sWo_name,sW.row_wait_obj# objid, sW.row_wait_file# Fl#,sW.row_wait_block# 
blk#,sW.row_wait_row# Row#
from sys.obj$ sWo, gv$session sW, gv$lock W, gv$session sL, gv$lock L
where
-- (L.lmode != 0 and L.request =0 and W.lmode = 0 and W.request != 0)
(L.lmode != 0 and W.request != 0) and sL.inst_id = L.inst_id and sL.sid = 
L.sid and W.id1 = L.id1 and W.id2 = L.id2 and sW.inst_id(+) = 
W.inst_id and sW.sid(+) = W.sid and sWo.obj#(+) = sW.row_wait_obj#
order by "N-N", wctime desc

Query που δίνει πια tablespaces είναι έτοιμα να γεμίσουν



Στο άρθρο αυτό θα μιλήσουμε για ένα χρήσιμο query που μπορούμε να τρέξουμε σε μία βάση Oracle ώστε να δούμε τα tablespaces που είναι έτοιμα να γεμίσουν.

SQL> select to_char (sp.begin_interval_time,'dd-mm-yyyy') days, ts.tsname
, max(round((tsu.tablespace_size* dt.block_size )/(1024*1024),2) ) cur_size_mb
, max(round((tsu.tablespace_usedsize* dt.block_size )/(1024*1024),2)) 
usedsize_mb
from dba_hist_tbspc_space_usage tsu, dba_hist_tablespace_stat ts, 
dba_hist_snapshot sp, dba_tablespaces dt
where tsu.tablespace_id= ts.ts# and tsu.snap_id = sp.snap_id
and ts.tsname = dt.tablespace_name and ts.tsname not in ('sysaux','system')
group by to_char (sp.begin_interval_time,'dd-mm-yyyy'), ts.tsname

Trace file - tkprof


Στο άρθρο αυτό θα μιλήσουμε επιγραμματικά για το πολύ χρήσιμο εργαλείο της oracle tkprof. Όταν εμφανίζεται ένα πρόβλημα στην βάση συχνά παράγεται και ένα trace file σχετιζόμενο με το error. Πολλές φορές το oracle support ζητάει να αποσταλεί το trace file αφού πρώτα γίνει ανάλυση του με το εργαλείο tkprof. Για να τρέξουμε την συγκεκριμένη εντολή πρέπει να την τρέξουμε από το φάκελο μέσα στον οποίο έχουν εγκατασταθεί τα εκτελέσιμα της oracle. Η εντολή συντάσσεται όπως φαίνεται στην συνέχεια


CMD>tkprof filename1 filename2

όπου filename1=το trace file προς ανάλυση και filename2=το outpout του tkprof εργαλείου.

Εμφάνιση μηνυμάτων alert log file (βάσης-listener)


Στο άρθρο αυτό θα μιλήσουμε για το πόσο σημαντικό είναι να μπορούμε να εντοπίζουμε γρήγορα τα μηνύματα λάθους που εμφανίζει η Oracle βάση ώστε να προχωρούμε άμεσα σε διερεύνηση και επίλυσή τους. Το βασικότερο εργαλείο για να γίνει αυτό είναι το alert log της βάσης. Το alert log εμφανίζει μηνύματα που αφορούν την ορθή και την μη ορθή λειτουργία της βάσης. Τα errors στην βάση ξεκινάνε με ORA- και δίνουνε χρήσιμες πληροφορίες για το που εμφανίζεται το πρόβλημα για να προχωρήσουμε στην επίλυσή του. Το alert log υπάρχει από την 11 έκδοση και μετά σε δύο μορφές (text file και xml file) σε μονοπάτι αντίστοιχο με το παρακάτω

/u01/app/oracle/diag/rdbms/db/db1/trace/

και έχει την μορφή alert_DB1.log. Όμοια το xml αρχείο έχει μορφή log.xml και βρίσκεται σε μονοπάτι στο δίσκο αντίστοιχο με το παρακάτω

/u01/app/oracle/diag/rdbms/db/db1/alert/

Ένα επίσης σημαντικό που πρέπει κάποιος να ελέγξει είναι και το log file του (ή των) Listener της βάσης. Έχει την μορφή listener_name.log και βρίσκεται στο παρακάτω μονοπάτι

/u01/app/oracle/diag/tnslsnr/hostname/listener/trace

Τα μονοπάτια που βρίσκονται αυτά τα τόσο χρήσιμα αρχεία εξαρτώνται από το που έχει στηθεί το oracle software. Χρήσιμες πληροφορίες για να εντοπίσει κανείς την ακριβή τοποθεσία βρίσκονται στο Note:438148.1 – Finding alert.log file in 11g του oracle support ή εκτελώντας το παρακάτω query στην βάση με λογαριασμό με ισχυρά δικαιώματα (DBA).

SQL> select * from v$diag_info;


Με το παρακάτω query και ορίζοντας το χρονικό διάστημα που θέλουμε να δούμε, μπορούμε να δούμε μέσα από την βάση τα μηνύματα λάθους που έχουν καταγραφεί στο alert log της βάσης. Η δυνατότητα αυτή ισχύει για βάση 11g και πάνω και το query μπορεί να το τρέξει χρήστης με ισχυρά δικαιώματα (dba privileges.)

SQL>select * from sys.x$dbgalertext
where ORIGINATING_TIMESTAMP > sysdate - 26/24