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

Δημιουργία προφίλ ασφαλείας χρηστών (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