{{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';