SQL

Ricerca dicotomica

Uno dei più interessanti algoritmi è senza dubbio l’algoritmo di ricerca dicotomica. Questo algoritmo è quello aventi la miglior performance per la ricerca di un dato all’interno di un gruppo di elementi ( escludendo gli algoritmi ad alberi binari). Infatti, nella peggior condizione esso esegue log2(x) confronti prima di trovare (oppure non trovare, qualora non fosse presente) il dato. Per l’esecuzione di questo algoritmo è richiesto un solo prerequisito: I dati devono essere ordinati. Qui sotto vi è un esempio: int binary_search( int arr[], int tot_el, int data ) { /* Declaration and initialization of variables */ int el = Continua a leggere

Da pid a sqltext nella sessione attiva su una singola istanza del database Oracle

Se abbiamo un process ID (PID) possiamo risalite al sqltext della sessione attiva associata al db tramite questi step: Lanciare questa istruzione inserendo il PID alter session set nls_date_format = ‘dd-mm-yyyy hh24:mi:ss’; col machine for a20 col username for a15 col OSUSER for a15 col spid for a8 col program for a35 col username for a20 col status for a9 col sid for 9999 col serial# for 99999 col sql_id FORMAT A15 col LOGON_TIME for a19 col SQL_TEXT for a60 col event for a33 col SQL_HASH_VALUE for 99999999999 set lines 220 set pages 1000 select a.sid, a.serial#, b.spid, a.PROGRAM, a.status, Continua a leggere

Un sistema facile per capire gli Oracle Roles

Alcuni novizi si chiedono “mi servono davveri i ruoli?” e spesso si può ignorare l’argomento, che però è molto utile. Navigare sul web può essere frustrante tra spiegazioni dei ruoli di sistema e costrutti di codice. Adesso cerchiamo di scoprirli in un modo semplice. Qualche parola per descrivere gli Oracle Roles. Gli Oracle Roles sono molto utili per gestire gli accessi al db da più utenti. Possono essere visti come collettori di privilegi. Un utente Oracle può avere più ruoli. L’uso dei ruoli evita di dover fornire privilegi al singolo utente. Bisogna avere il privilegio CREATE_ROLE per creare un ruolo Continua a leggere

Usare gli indici invisibili

Table created. SQL> create index ind_TEST.index_tables on TEST.tables_empty (a) Index created. OWNER                          OBJECT_NAME                    OBJECT_TYPE —————————— —————————— ———– TEST                           TABLES_EMPTY                   TABLE IND_TEST                       INDEX_TABLES                  INDEX   SQL> exec dbms_stats.gather_table_stats (ownname=>’TEST’,tabname=>’TABLES_EMPTY’,cascade=>TRUE); PL/SQL procedure successfully completed. SQL>  exec dbms_stats.gather_index_stats (ownname=>’IND_TEST’,indname=>’INDEX_TABLES’); PL/SQL procedure successfully completed. SQL> conn ind_TEST Enter password: SQL>  explain plan for 2  select * from TEST.TABLES_EMPTY; SQL> @?/rdbms/admin/utlxpls   PLAN_TABLE_OUTPUT ———————————————————————– Plan hash value: 932631555   ———————————————————————————- | Id  | Operation    | Name         | Rows  | Bytes | Cost (%CPU)| Time     | ———————————————————————————- |   0 | SELECT STATEMENT  |       |     1 |    13 |     2   (0)| 00:00:01 | |   1 |  TABLE Continua a leggere

Oracle External Table

Whit this feature you can access data in external sources as if it were a table in the database. Prior to release 10g external tables were read-only (9i); from release 10g external tables can also be written too. To use the external tables feature you must have knowledge of the file format and record format of the datafiles on your platform if the ORACLE_LOADER access driver is used and the “source” is in text format. When you create an external table you must specify : o TYPE: ORACLE_LOADER (default). You can run only for loading data and the data must Continua a leggere

Search records and null

Trovare, per un campo all’interno di una tabella, quanti record sono NULL, e contare inoltre quanti sono i NULL raggruppati secondo il valore di un altro campo. Risultato di esempio: TAB_NAME COL_NAME NUM_ROWS NUM_NULLS_TOT NUM_NULLS_X_COLVAL COLVAL_LE_ID ————————————————————————————- S_REPORT S_TAX_BRACKET_CD 7111600 7111599 2470 631 S_REPORT S_TAX_BRACKET_CD 7111600 7111599 57859 FC222200 S_REPORT S_TAX_BRACKET_CD 7111600 7111599 3038882 Z2030 S_REPORT S_TAX_BRACKET_CD 7111600 7111599 4012388 C8101 La tabella S_REPORT ha 7111600 righe e la sua colonna S_TAX_BRACKET_CD contiene 7111599 righe NULL. La tabella S_REPORT ha anche una colonna LE_ID i cui valori sono 631, FC222200, Z2030 e C8101. Vogliamo mostrare, per ogni valore della colonna Continua a leggere

Ricavare dati sql tramite script di shell

A volte può nascere l’esigenza di dover reperire dei dati da un DB da utilizzare all’interno di uno script linux o Unix. Utilizzando la shell Bash e possibile creare una query nel seguente modo : dir_in=`sqlplus -s $PMS_CONN_STRING

Creare Database Link

Utilizzare l’istruzione CREATE DATABASE LINK per creare un DB Link. Un DB Link è un oggetto dello schema in un database che consente di accedere agli oggetti di un altro database. L’altro database non deve essere necessariamente un database Oracle. Tuttavia, per accedere ai sistemi non-Oracle è necessario utilizzare Oracle Heterogeneous Services. Dopo aver creato un DB Link, è possibile utilizzarlo per fare riferimento a tabelle e viste sull’altro database. In SQL è possibile fare riferimento tabelle o viste sul altri database aggiungendo il DB Link al nome della tabella o vista. Si può interrogare una tabella o vista sull’altro Continua a leggere

SQL DEVELOPER 4: Nuove finzionalità per DBA

Il nuovo Oracle SQL Developer 4.0 (rilasciato a dicembre 2013) possiede nuove funzionalità per DBA, diventando così, per Oracle 12c, la principale piattaforma di amministrazione al posto di Oracle Enterprise Manager Database Control. OEM Database Control non esiste più in Oracle Database 12c, in quanto è sostituito da: Oracle Enterprise Manager Express, tool di amministrazione web-based completamente integrato nel DB Oracle SQL Developer 4.0, tool java di amministrazione completo e installato automaticamente in ogni installazione Oracle (client e server) Oracle SQL Developer 4.0 ha un nuovo tab DBA (Menu View -> DBA) da cui è possibile amministrare completamente qualunque DB Continua a leggere

Useful query to find out Oracle Licensing Option usage

  Qui sotto uno statement SQL molto utile per ricavare informazioni sulla licenza Oracle. E’ anche un utile strumento per controllare quali specifiche opzioni sono state usate in passato in modo da poterle rimuovere o disinstallare in sicurezza. SQL> desc DBA_FEATURE_USAGE_STATISTICS Name Null? Type —————————————– ——– —————– DBID NOT NULL NUMBER NAME NOT NULL VARCHAR2(64) VERSION NOT NULL VARCHAR2(17) DETECTED_USAGES NOT NULL NUMBER TOTAL_SAMPLES NOT NULL NUMBER CURRENTLY_USED VARCHAR2(5) FIRST_USAGE_DATE DATE LAST_USAGE_DATE DATE AUX_COUNT NUMBER FEATURE_INFO CLOB LAST_SAMPLE_DATE DATE LAST_SAMPLE_PERIOD NUMBER SAMPLE_INTERVAL NUMBER DESCRIPTION VARCHAR2(128) SQL> select name,last_usage_date from dba_feature_usage_statistics where detected_usages>0 order by 1; NAME LAST_USAG ——————————————————- ——— Audit Continua a leggere