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.

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

Εύρεση 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