Différences
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente | ||
sysadmin:tips:oracle [2011/04/22 16:04] james typo |
sysadmin:tips:oracle [2015/01/09 11:39] (Version actuelle) james ajout tags |
||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
- | ====== Export CSV sous oracle avec sqlplus ====== | + | {{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. | ||
+ | |||
+ | <note>adaptez les requetes si vous etes en RAC pour utiliser les gv$session, ....</note> | ||
+ | ==== Lister les sessions générant actuellement le plus de redo log ==== | ||
+ | connecté en sysdba : | ||
+ | <code>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 ;</code> | ||
+ | |||
+ | ==== Connaître l'utilisation des différents tablespaces ==== | ||
+ | |||
+ | connecté en sysdba :<code> | ||
+ | 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 ; | ||
+ | </code> | ||
+ | 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 ;-) | De base on ne peut pas exporter en CSV ;-) | ||
Ligne 14: | Ligne 45: | ||
* Enregistrons donc cette requête dans le fichier /tmp/requete.sql | * 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 :<code> | * Admettons qu'on veuille exporter le resultat dans /tmp/resultat.csv , Il faut se connecter avec sqlplus et taper les commandes suivantes :<code> | ||
- | set pagesize 0 | + | set pagesize 5000 |
- | set linesize 0 | + | set linesize 200 |
spool /tmp/resultat.csv | spool /tmp/resultat.csv | ||
@/tmp/requete.sql | @/tmp/requete.sql | ||
Ligne 21: | Ligne 52: | ||
</code> | </code> | ||
<note>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</note> | <note>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</note> | ||
+ | <note>adaptez le linesize pour avoir des lignes plus longues si vous en avez besoin</note> | ||
+ | |||
+ | ==== 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 :<code> | ||
+ | set pages 0 | ||
+ | set long 999999 | ||
+ | select dbms_metadata.get_ddl('TABLE', '$TABLE_NAME', '$SCHEMA_NAME') from dual;</code> | ||
+ | <note> cette requete peut etre abrégée en <code>select dbms_metadata.get_ddl('TABLE', '$TABLE_NAME') from dual ; </code> sur une table du schéma courant</note> | ||
+ | |||
+ | |||
+ | ==== Afficher le temps de traitement de chaque requete avec sqlplus ==== | ||
+ | Il faut utiliser :<code>set timing on</code> | ||
+ | comme par exemple dans l'exemple suivant : | ||
+ | <code>SQL> set timing on | ||
+ | SQL> select * from dual ; | ||
+ | |||
+ | D | ||
+ | - | ||
+ | X | ||
+ | |||
+ | Elapsed: 00:00:00.05 | ||
+ | </code> | ||
+ | |||
+ | ==== Limiter le nombre de resultats renvoyés par une requete ==== | ||
+ | L'equivalent MySQL de <code>select col from tbl limit 20;</code> est <code>select col from tbl where rownum<=20;</code> | ||
+ | <note> 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 : <code>select * from (select col from tbl order by moncul asc) where rownum<=20;</code> | ||
+ | </note> | ||
+ | |||
+ | ==== Lister les tables ==== | ||
+ | |||
+ | * Lister les tables du schéma de l'utilisateur courant :<code>SELECT table_name FROM user_tables;</code> | ||
+ | * Lister les tables accessibles par l'utilisateur :<code>SELECT table_name FROM all_tables;</code> | ||
+ | * Lister toutes les tables (il faut être admin/sysdba) : <code>SELECT table_name FROM dba_tables; </code> | ||
+ | |||
+ | ==== Changer le format de date utilisé pour la session courante ==== | ||
+ | pour changer temporairement le format de date pour la session actuelle : <code>alter session set nls_date_format = 'dd/mm/yyyy HH24:MI:SS';</code> |