{{tag>astuces comandes oracle bdd admin redo log taille lister session utilisation tablespace sqlplus export_csv creation_table schema}} ====== Oracle ====== ===== Admin ===== Les requêtes coté admin oracle. adaptez les requetes si vous etes en RAC pour utiliser les gv$session, .... ==== Lister les sessions générant actuellement le plus de redo log ==== connecté en sysdba : select s.sid, sn.serial#, sn.machine, n.name, s.value, sn.username, sn.program, sn.type, sn.module from v$sesstat s join v$statname n on n.statistic# = s.statistic# join v$session sn on sn.sid = s.sid where name like '%redo entries%' order by value desc ; ==== Connaître l'utilisation des différents tablespaces ==== connecté en sysdba : select a.tablespace_name, b.free,a.total,round((a.used-b.free)/a.total * 100,2) prc from ( select tablespace_name,sum(bytes) used, sum(maxbytes) total from dba_data_files group by tablespace_name) A, ( select tablespace_name,sum(bytes) free from dba_free_space group by tablespace_name) B where a.tablespace_name=b.tablespace_name ; utilisable dans un plugin munin pour grapher le pourcentage d'utilisation par exemple ===== Utilisateur ===== ==== Export CSV sous oracle avec sqlplus ==== De base on ne peut pas exporter en CSV ;-) Pour exporter le resultat d'une requête oracle en fichier csv (séparé par des ;) : * il faut modifier la requete source : select column1, column2, column3 from MYVIEW WHERE MYCONDITIONS; qui devient (replacement des , entre champs par "||';'||"): select column1||';'||column2||';'||column3 from MYVIEW WHERE MYCONDITIONS; * Enregistrons donc cette requête dans le fichier /tmp/requete.sql * Admettons qu'on veuille exporter le resultat dans /tmp/resultat.csv , Il faut se connecter avec sqlplus et taper les commandes suivantes : set pagesize 5000 set linesize 200 spool /tmp/resultat.csv @/tmp/requete.sql spool off; Remarquez les mots clef "SPOOL $filename" et "SPOOL off" pour débuter puis mettre fin a la redirection de la sortie dans le fichier csv adaptez le linesize pour avoir des lignes plus longues si vous en avez besoin ==== Afficher la requête de creation de table ==== Voici l'equivalent SQLplus du "SHOW CREATE TABLE" MySQL, en remplaçant $TABLE_NAME et $SCHEMA_NAME par les valeurs souhaitées : set pages 0 set long 999999 select dbms_metadata.get_ddl('TABLE', '$TABLE_NAME', '$SCHEMA_NAME') from dual; cette requete peut etre abrégée en select dbms_metadata.get_ddl('TABLE', '$TABLE_NAME') from dual ; sur une table du schéma courant ==== Afficher le temps de traitement de chaque requete avec sqlplus ==== Il faut utiliser :set timing on comme par exemple dans l'exemple suivant : SQL> set timing on SQL> select * from dual ; D - X Elapsed: 00:00:00.05 ==== Limiter le nombre de resultats renvoyés par une requete ==== L'equivalent MySQL de select col from tbl limit 20; est select col from tbl where rownum<=20; Bien entendu, Oracle sait faire les choses simplement, donc pour faire un _order by_ sur la table, mais pas que sur les 20 résultats réclamés, et bien, on est bien obligé de faire CA : select * from (select col from tbl order by moncul asc) where rownum<=20; ==== Lister les tables ==== * Lister les tables du schéma de l'utilisateur courant :SELECT table_name FROM user_tables; * Lister les tables accessibles par l'utilisateur :SELECT table_name FROM all_tables; * Lister toutes les tables (il faut être admin/sysdba) : SELECT table_name FROM dba_tables; ==== Changer le format de date utilisé pour la session courante ==== pour changer temporairement le format de date pour la session actuelle : alter session set nls_date_format = 'dd/mm/yyyy HH24:MI:SS';