Affichage des articles dont le libellé est sql. Afficher tous les articles
Affichage des articles dont le libellé est sql. Afficher tous les articles
mardi 22 janvier 2013
Savoir si les clés étrangères (FK) sont présente (Oracle)
Pour connaitre les tables qui dispose ou non de foreign key (clés étrangères –FK). j’ai conçus une petit fonction Oracle pour déterminer l’existence sur une table d’une FK par rapport a un champs.
mardi 8 janvier 2013
Optimisation Oracle Index et tables procédures (étape 2)
Il y a un petit moment j’ai mis un article concernant les requêtes permettant d’optimiser les tables et les index dans Oracle.
Ce script est très pratique, et je l’ai fait un peu évoluer afin de le rendre “automatique”. Je vous présente donc la monture v2 en en faisant une procédure. Cette dernière n’a rien de révolutionnaire, quelques curseurs pour parcourir les statements et les exécuter :
CREATE OR REPLACE PROCEDURE SU.REBUILD_INDEX (ma_table IN VARCHAR2) IS CURSOR CURS_REBUILD IS -- rebuild select 'ALTER INDEX ' || index_name || ' REBUILD ' as txt_sql from user_indexes where UPPER(table_name) = UPPER(ma_table) and INDEX_TYPE!='LOB'; R1 CURS_REBUILD%ROWTYPE; CURSOR CURS_STRUCT IS -- validate structure select 'ANALYZE INDEX ' || index_name || ' VALIDATE STRUCTURE ' as txt_sql from user_indexes where UPPER(table_name) = UPPER(ma_table) and INDEX_TYPE!='LOB'; R2 CURS_STRUCT%ROWTYPE; CURSOR CURS_STAT IS -- stat Analyse select 'Analyze Table ' || UPPER(ma_table) || ' Estimate Statistics ' as txt_sql from dual; R3 CURS_STAT%ROWTYPE; BEGIN ---------rebuild ---------------------------------------------------- OPEN CURS_REBUILD; LOOP FETCH CURS_REBUILD INTO R1; EXIT WHEN CURS_REBUILD%NOTFOUND; EXECUTE IMMEDIATE R1.txt_sql; END LOOP; CLOSE CURS_REBUILD; DBMS_OUTPUT.PUT_LINE('CURS_REBUILD 1 ok : TABLE : ' || ma_table); ----------validate structure--------------------------------------------------- OPEN CURS_STRUCT; LOOP FETCH CURS_STRUCT INTO R2; EXIT WHEN CURS_STRUCT%NOTFOUND; EXECUTE IMMEDIATE R2.txt_sql; END LOOP; CLOSE CURS_STRUCT; DBMS_OUTPUT.PUT_LINE('CURS_REBUILD 2 ok : TABLE : ' || ma_table); -----------stat Analyse-------------------------------------------------- OPEN CURS_STAT; LOOP FETCH CURS_STAT INTO R3; EXIT WHEN CURS_STAT%NOTFOUND; EXECUTE IMMEDIATE R3.txt_sql; END LOOP; CLOSE CURS_STAT; DBMS_OUTPUT.PUT_LINE('CURS_REBUILD 3 ok : TABLE : ' || ma_table); END; /
jeudi 24 mai 2012
Optimisation Oracle Index et tables
Bonjour,
Je viens de découvrir les ordres des requêtes SQL qui permettent d’optimiser les tables et index d'une table.
Cela permet via script (automatique) et par exemple suite a de grosse opération de mise a jour (update / delete), de restructurer la table en question.
A la fin du script permet de tout mettre tout propre ^^
Voila en espérant que ces instructions puisse vous aidez.
Par contre, ce que je n'ai pas fait (par manque de temps) est le Benchmark de ses actions pour savoir le gain. Il aurait fallut analyse les performances avant la mise a jour des index/tables et après l'opération pour avoir le rapport de performance.
Dans tous les cas, cela ne peux pas faire de mal :)
Je viens de découvrir les ordres des requêtes SQL qui permettent d’optimiser les tables et index d'une table.
Cela permet via script (automatique) et par exemple suite a de grosse opération de mise a jour (update / delete), de restructurer la table en question.
select 'ALTER INDEX ' || index_name || ' REBUILD;' from user_indexes where table_name = 'MA_TABLE';
select 'ANALYZE INDEX ' || index_name || ' VALIDATE STRUCTURE;' from user_indexes where table_name = 'MA_TABLE';
Analyze Table MA_TABLE Estimate Statistics;
A la fin du script permet de tout mettre tout propre ^^
Voila en espérant que ces instructions puisse vous aidez.
Par contre, ce que je n'ai pas fait (par manque de temps) est le Benchmark de ses actions pour savoir le gain. Il aurait fallut analyse les performances avant la mise a jour des index/tables et après l'opération pour avoir le rapport de performance.
Dans tous les cas, cela ne peux pas faire de mal :)
vendredi 4 mai 2012
Concaténation Oracle
Bonjour a tous,
Une petite astuce en Oracle pour concaténer des lignes sous forme de "Champs" (champ1, champ2...).
Il suffit d'utiliser une fonction présent dans les fonctions d'oracle : wmsys.wm_concat avec un group by
Comme cela :
select wmsys.wm_concat(libelle) as LIBELLE, max(date_creation) as MA_DATE, CHIFFRE from maTable where critere = 1 and critere2 in (1,2,3) group by CHIFFRELe résultat
LIBELLE | MA_DATE | CHIFFRE |
-------- | ------------------- | ---------- |
aa,bb,cc | 2007-11-19 | 44000 |
lundi 21 septembre 2009
SQL et DB2 - Sequence, trigger ...
Quelques exemple de SQL sur DB2
Création de table , sequence, trigger, unique, auto_increment ...
CREATE TABLE WIDGET_INVENT ( ROW_ID INT NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 1, INCREMENT BY 1, NO CACHE), WIDGET_NO CHAR(6), INV_COUNT INT WITH DEFAULT 0 );
mercredi 24 juin 2009
Commande et reconfiguration SQL Serveur (Express)
@ECHO OFF @ECHO ============================================= @ECHO ::: Enabling User Instances @ECHO ============================================= sqlcmd -S .\SQLExpress -Q "sp_configure 'user instances enabled' , 1;" @ECHO. @ECHO ============================================= @ECHO ::: RECONFIGURING @ECHO ============================================= sqlcmd -S .\SQLExpress -Q "reconfigure;" @ECHO DONE @ECHO. @ECHO ============================================= @ECHO ::: COMPLETED @ECHO ============================================= PAUSE>NUL
Inscription à :
Articles (Atom)