Archives de Tag: ORACLE

Mais c’est une mine!!

A la recherche d’un indice sur l’ancienneté des lignes de données sur Oracle, je n’ai pas trouvé ma réponse, mais suis tombé sur un mine d’informations.

Je ne peux donc pas m’empécher de partager ma trouvaille:

http://www.deep-data-mining.com/

Publicités

1 commentaire

Classé dans DATA

Oracle, mais ou sont mes données?

Voici le fruit d’une réflexion personnelle fort instructive. Pour certains, un SGBD permet de stocker des données et la manière n’est pas intéressante. Pour moi, tant que je ne comprends pas, j’ai l’impression de ne pas maîtriser.

Ainsi, je me propose de répondre à une question de base : ‘C’est quoi cette ligne?‘. Chaque ligne est identifiée par un ROWID, donnée unique pour l’ensemble de la base de données. On peut le lire ainsi:

select ROWIDTOCHAR(rowid), t.*
from table_perso t
where rownum < 100;

Le résultat est aussi moche qu’indigeste. Essayons plutôt de le faire décoder par le moteur:

select DBMS_ROWID.ROWID_OBJECT(rowid) « DB OBJECT »,
DBMS_ROWID.ROWID_RELATIVE_FNO(rowid) « DB FILE »,
DBMS_ROWID.ROWID_BLOCK_NUMBER(rowid) « DB BLOCK »,
DBMS_ROWID.ROWID_ROW_NUMBER(rowid) « DB ROW »,
t.*
from table_perso t
where rownum < 100;

La c’est bien plus instructif, le résultat désigne la table et le fichier de stockage. On sait donc tout sur cette ligne: comment y accéder et ou elle se trouve. On peut rendre le résultat plus sympa encore; pour obtenir la table, on essaiera :

select *
from user_objects
where DATA_OBJECT_ID=
(
select DBMS_ROWID.ROWID_OBJECT(rowid) « DB OBJECT »
from table_perso t
where rownum = 1
);

On peut faire de même sur le fichier de données; on saura exactement où la ligne est stockée sur le serveur; incroyable, non? Pour ceci, voici la requête:

SELECT *
FROM DBA_DATA_FILES
where FILE_ID in
(
select DBMS_ROWID.ROWID_RELATIVE_FNO(rowid) « DB FILE »
from table_perso t
where rownum = 1
);

Maintenant, on peut imaginer le travail du SGBD. Il transforme l’information contenue dans un gros fichier indigeste en table tout en conservant le lien direct vers chaque ligne d’information. Quand j’exécute une requête, je ne peux qu’admirer le travail du moteur…

1 commentaire

Classé dans DATA

Optimisez, bon dieu, optimisez!!!

En surfant sur la toile, j’ai trouvé un petit document concernant l’optimisation de requêtes SQL.

Ce n’est pas une bible, mais il décrit, pour de nombreuses commandes les processus mis en oeuvre, et j’ai bien apprécié.

http://www.cocktail.org/gedfs/courrier/34703/SQL_optimizer.pdf

Poster un commentaire

Classé dans DATA

Analyser mes données depuis une simple requete!

En discutant avec les équipes de testeurs, nous avons remarqué que la connaissance des tables systeme d’Oracle pouvait amener des informations fort utiles. La requete qui suit se propose de répondre efficacement à cette problématique. Néanmoins, le prérequis est le calcul des statistiques Oracle à l’issue de l’alimentation. L’étude des statistiques permet ainsi d’obtenir le nombre de lignes dans la table, et pour chaque colonne le type de données, le fait que les null sont autorisés, le nombre de nulls, le nombre de valeurs distinctes, ains que les valeurs mini et maxi contenues. La seule modification à faire à la requete est sur le nom du propriétaire des tables.

Voici la requete:

select tb.owner,tb.table_name,tb.last_analyzed,tb.num_rows,
TC.COLUMN_NAME,TC.DATA_TYPE, nullable,num_nulls,num_distinct,
decode(data_type
,’NUMBER’ ,to_char(utl_raw.cast_to_number(low_value))
,’VARCHAR2′ ,to_char(utl_raw.cast_to_varchar2(low_value))
,’NVARCHAR2′ ,to_char(utl_raw.cast_to_nvarchar2(low_value))
,’BINARY_DOUBLE’,to_char(utl_raw.cast_to_binary_double(low_value))
,’BINARY_FLOAT’ ,to_char(utl_raw.cast_to_binary_float(low_value))
,’DATE’,to_char(1780+to_number(substr(low_value,1,2),’XX’)
+to_number(substr(low_value,3,2),’XX’))||’-‘
||to_number(substr(low_value,5,2),’XX’)||’-‘
||to_number(substr(low_value,7,2),’XX’)||’ ‘
||(to_number(substr(low_value,9,2),’XX’)-1)||’:’
||(to_number(substr(low_value,11,2),’XX’)-1)||’:’
||(to_number(substr(low_value,13,2),’XX’)-1)
, low_value
) low_value,
decode(data_type
,’NUMBER’ ,to_char(utl_raw.cast_to_number(high_value))
,’VARCHAR2′ ,to_char(utl_raw.cast_to_varchar2(high_value))
,’NVARCHAR2′ ,to_char(utl_raw.cast_to_nvarchar2(high_value))
,’BINARY_DOUBLE’,to_char(utl_raw.cast_to_binary_double(high_value))
,’BINARY_FLOAT’ ,to_char(utl_raw.cast_to_binary_float(high_value))
,’DATE’,to_char(1780+to_number(substr(high_value,1,2),’XX’)
+to_number(substr(high_value,3,2),’XX’))||’-‘
||to_number(substr(high_value,5,2),’XX’)||’-‘
||to_number(substr(high_value,7,2),’XX’)||’ ‘
||(to_number(substr(high_value,9,2),’XX’)-1)||’:’
||(to_number(substr(high_value,11,2),’XX’)-1)||’:’
||(to_number(substr(high_value,13,2),’XX’)-1)
, high_value
) high_value

from all_tab_columns tc,
(select owner,table_name,last_analyzed,num_rows
from all_tables
where last_analyzed is not null
and owner like ‘%_IRI_%’
order by last_analyzed) tb
where TC.TABLE_NAME = TB.TABLE_NAME

1 commentaire

Classé dans DATA, RESTITUTION

Cloud is MAAAAAGIQUE!!!

A la recherche d’informations sur Oracle 12C, j’ai découvert un site réellement bluffant. Ce site vous propose divers services en lignes en se basant sur une architecture de type ‘cloud’.

Ces services sont à notre disposition et permettent d’éxecuter du code SQL sur leurs environnements. Ils permettent aussi d’utiliser différents types de bases de données pour faire des tests des calculs ou autres. Je n’en reviens pas comment ils sont gentils avec nous.

TESTEZ : http://ondemanddb.com/clouddb/Overview.html

Poster un commentaire

Classé dans DATA

Oracle 12c

J’avais déjà parlé de la nouvelle version d’Oracle. Eh bien ca y est, tout le monde en parle aussi. Il est donc grand temps pour découvrir ce qu’il y a derrière cette nouvelle mouture du grand gourou de la base de données relationelle.

http://www.silicon.fr/apercu-des-entrailles-de-la-base-de-donnees-oracle-12c-89001.html

http://ondemanddb.com/clouddb/Oracle12cTop12.html

Poster un commentaire

Classé dans DATA

Mais à quoi peuvent bien servir les normes SQL?

De temps en temps, on entend parler des normes SQL, mais dans la réalité, ces normes paraissent bien théorique voire inutiles.
Néanmoins, voici un exemple ou l’emploi des normes SQL peut permettre d’éviter des situations délicates.

Lors de l’utilisation des ETL, une pléthore de fonctions SQL peut être proposée. Ces fonctions lors de créations de mappings et de transfromations sont très utiles. Néanmoins, un grand nombre de celles-ci sont propriétaires.

En premier lieu, les fonctions propres à l’ETL, seront souvent implémentées par le serveur ETL et ne pourront en aucun cas être confiées au serveur de BDD. D’autres, seront traduites en fonctions BDD, les choix de traduction peuvent être corrects, mais aussi surprenants, voire pénalisants. Ils resteront propres à l’ETL et vous ne serez pas maitre de ceux-ci.

Ensuite, les fonctions propres à la BDD, peuvent être mises en oeuvre directement sur le serveur BDD; l’ETL soumettra une requête optimisée et efficace pour votre base. Ainsi, une commande peut récupérer des données agrégées depuis la base de données, alors que l’utilisation de fonctions d’agrégation preopres à l’ETL forcerait le rapatriment de toutes les données avant de faire l’agrégation.

Par contre, dans le cas de l’utilisation de fonctions SQL standards, un avantage supplémentaire peut être tiré. En cas de migration de base de données, l’ETL propose surement des drivers ODBC adaptés. Les fonctions utilisables sans opérations de maintenance sot les foctions propriétaire ETL et les fonctions standard SQL. Les fonctions propriétaires BDD sont à migrer.

Ainsi, le choix du type de fonction utilisées lors de l’implémentation sera déterminant pour les futures optimisations et migrations. Le plus maléable est de se conformer aux normes SQL.
Donc l’utilisation des normes peut être un atout lors de l’implémentation d’un process d’alimentation.

Poster un commentaire

Classé dans DATA, ETL