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

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


Στο άρθρο αυτό θα μιλήσουμε για κλειδώματα χρηστών που γίνοντε μεταξύ χρηστών σε μία βάση 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



Δευτέρα 13 Ιουνίου 2016

Διαχείριση Jobs βάσης Oracle



Στο άρθρο αυτό θα μιλήσουμε για την διαχείριση των jobs στην oracle.

1. Δημιουργία απλού Job και δοκιμή αν είναι ενεργοποιημένα τα jobs

Παρακάτω ακολουθεί ένα script δημιουργίας καινούργιου job. Γίνεται μία εκτέλεση του, ώστε να τσεκάρουμε αν είναι ενεργοποιημένα τα Jobs στην βάση.

SQL>begin
dbms_scheduler.create_job ( job_name => 'test_job',
job_type => 'plsql_block',
job_action => 'null;',
enabled => true);
end;
/
-- wait a while
SQL> select * from user_scheduler_job_run_details where job_name='TEST_JOB';


2. Σβήσιμο job-s χρήστη


Σβήσιμο όλων των Jobs του χρήστη. Συνδεόμαστε με ισχυρό λογαριασμό με dba privileges και τρέχουμε την παρακάτω εντολή

SQL> execute dbms_ijob.DROP_USER_JOBS('satowner');

Σβήσιμο συγκεκριμένου Job χρήστη

SQL> execute dbms_ijob.remove(94);


3. Εύρεση job-s που τρέχουν αυτή την στιγμή στην βάση

Εύρεση των jobs που τρέχουν αυτή την στιγμή στην βάση, είτε μέσω του παλιού dbms_jobs είτε μέσω του καινούργιου από την 11 έκδοση και μετά scheduler_jobs. Χρήσιμα queries:

SQL> select sid, r.job, log_user, r.this_date, r.this_sec from dba_jobs_running r, dba_jobs j
where r.job = j.job;

SQL>select job, schema_user, to_char(last_date, 'hh24:mi dd/mm/yy') last_run,
to_char(next_date, 'hh24:mi dd/mm/yy') next_run, failures fails, broken, substr(what, 1, 15) what
from dba_jobs
order by 4;

SQL>select * from dba_scheduler_jobs

Το καλύτερο view στο οποίο φαίνονται μέσα όλες οι πληροφορίες αναλυτικά για όλα τα jobs που έτρεξαν μέσω του scheduler_jobs (και ποια jobs έσκασαν).

SQL>select * from DBA_SCHEDULER_JOB_RUN_DETAILS


Παρασκευή 10 Ιουνίου 2016

Διαχείριση sessions - συνδέσεων βάσης Oracle



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

1.Τερματισμός session-s μέσα από την βάση

Τρέχουμε το παρακάτω query και με βάση τα αποτελέσματα σκοτώνουμε το session-s που δημιουργούν πρόβλημα στην βάση με την επόμενη εντολή.

SQL> select se.username username,se.SID sid, se.serial# serial#,
se.status status, se.sql_hash_value, se.prev_hash_value,se.machine machine,su.TABLESPACE tablespace,su.segtype,su.CONTENTS CONTENTS
from v$session se, v$sort_usage su
where se.saddr=su.session_addr;

SQL> alter system kill session '41,259';

2.Τερματισμός session-s σε Windows περιβάλλον

Τρέχουμε την παρακάτω εντολή από command prompt και όπου SID_VASIS βάζουμε το sid της βάσης στην οποία είναι συνδεδεμένο το process ακολουθούμενο από process id. Σημαντική εντολή όταν δεν παίζει τίποτα άλλο.

CMD>orakill SID_VASIS SPID_PROCESS

3.Τερματισμός session-s σε LINUX περιβάλλον

Τρέχουμε την παρακάτω εντολή από command prompt. Σημαντική εντολή όταν δεν παίζει τίποτα άλλο.

bash>kill -9 process SID


Δευτέρα 11 Απριλίου 2016

Oracle - Χρήστες/Users Βάσης Δεδομένων



Στο άρθρο αυτό θα μιλήσουμε για τους χρήστες μιας βάσης Oracle. Θα δοθούν χρήσιμα scripts που αφορούν την δημιουργία χρηστών και την διαχείρισή τους.


1. Δημιουργία Χρήστη

SQL>create user db_user
          identified by <password>
          default tablespace users
          temporary tablespace temp
          profile default
          account unlock;



Όταν θέλουμε να δημιουργήσουμε έναν καινούργιο χρήστη θα πρέπει πρώτα να ορίζουμε το όνομα του χρήστη μαζί με το password του καθώς και το default tablespace στο οποίο θα μπορεί να γράφει. Μαζί ορίζουμε και το προφίλ ασφαλείας του χρήστη είμαστε έτοιμοι να προχωρήσουμε στην δημιουργία του.

SQL>drop user db_user cascade;

Για να σβήσουμε έναν χρήστη μαζί με τα δεδομένα του τρέχουμε την παραπάνω εντολή.


2. Δικαιώματα Χρηστών
 

SQL>grant execute on SYS.DBMS_MONITOR to db_user;

Όταν θέλουμε να δώσουμε την δυνατότητα σε ένα χρήστη να μπορεί να εκτελεί ενέργειες σε αντικείμενα (πίνακες, functions,procedure) άλλου χρήστη, εκτελούμε την παραπάνω εντολή και εκχωρούμε στον χρήστη το δικαίωμα να εκτελεί συγκεκριμένη ενέργεια. Οι ενέργειες που μπορούμε να εκχωρήσουμε είναι: ALTER, CREATE, DROP, DELETE, INSERT, SELECT, UPDATE, EXECUTE. 

SQL>revoke drop any table from db_user;


Για να αφαιρέσουμε κάποιο δικαίωμα από έναν χρήστη τρέχουμε την πιο πάνω εντολή.

3.Ρόλοι Χρηστών 

SQL>create role connect not identified;
          grant create session to connect;


Όταν θέλουμε να ομαδοποιήσουμε δικαιώματα τα οποία στην συνέχεια θα δοθούν σε μια ομάδα χρηστών τότε χρήσιμη είναι η δημιουργία ενός ρόλου. Δημιουργούμε τον ρόλο με την πρώτη εντολή και στην συνέχεια εκχωρούμε στον ρόλο δικαιώματα όπως στο 2.8.2 εκχωρούμε δικαιώματα σε χρήστη. Όπως περιγράφεται στο 2.8.2 μπορούμε να αφαιρέσουμε και δικαιώματα από έναν ρόλο. 

SQL>drop role connect;
Για να σβήσουμε έναν ρόλο τρέχουμε την παραπάνω εντολή.


4. Αλλαγή password χρήστη


SQL>alter user db_user identified by test


Όταν θέλουμε να αλλάξουμε το password ενός χρήστη εκτελούμε την παραπάνω εντολή όπου db_user είναι ο χρήστης που θέλουμε να αλλάξουμε το password και test είναι το νέο password που θέλουμε να του δώσουμε.


5. Script δημιουργίας χρηστών μαζί με τους κωδικούς πρόσβασης (Oracle 11g)


Για να μπορέσουμε στην 11g να πάρουμε από την βάση το script δημιουργίας των χρηστών της βάσης μαζί με τα κωδικοποιημένα passwords τρέχουμε με έναν λογαριασμό με ισχυρά δικαιώματα το παρακάτω:

SQL> set head off
           set pages 0
           set long 9999999
           select dbms_metadata.get_ddl('USER', username) || ';' usercreate from dba_users;



6. Στοιχεία Χρηστών Βάσης

Με το παρακάτω query βλέπουμε όλα τα στοιχεία των χρηστών-σχημάτων της βάσης (το τρέχουμε με ισχυρά δικαιώματα).

SQL> select * from sys.user$