Précédent   Forum des professionnels en informatique > Bases de données > Oracle > SQL
SQL Forum d'entraide sur le SQL pour Oracle
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 11/02/2011, 12h22   #1
Invité régulier
 
Inscription : février 2011
Messages : 38
Détails du profil
Informations forums :
Inscription : février 2011
Messages : 38
Points : 9
Points : 9
Par défaut Récupérer le nombre d'enregistrements pour chaque table d'une base

Bonjour,

Je souhaiterais savoir s'il est possible de récupérer par table le nombre d'enregistrement dans une base Oracle 9.2 par SQL. L'idée serait d'avoir une vue synthétique des tables utilisés et mise à jour. Le bonus serait la dernière date/heure de modifs.
La vue souhaitée est :
Table1|23
Table2|0
Table3|1000000
Est ce couteux en perf ?
Y a t'il un risque sachant que la requête tournerait sur une base TEST mais sur la même machine que prod.
J'ai TOAD à dispo,

Merci d'avance,
Jenesépa est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/02/2011, 13h41   #2
Modérateur
 
Homme Fabien
Ingénieur d'études en décisionnel
Inscription : septembre 2008
Messages : 5 684
Détails du profil
Informations personnelles :
Nom : Homme Fabien
Âge : 34
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Ingénieur d'études en décisionnel
Secteur : Arts - Culture

Informations forums :
Inscription : septembre 2008
Messages : 5 684
Points : 10 459
Points : 10 459
Envoyer un message via ICQ à Waldar Envoyer un message via Skype™ à Waldar
Je vous sors de mon chapeau l'excellente requête de mnitu :
Code :
1
2
3
4
5
6
SELECT table_name,
       to_number(ExtractValue(dbms_XMLGen.GetXMLType 
       (
         'select count(*) cnt from ' || user || '.' || table_name
       ),'/ROWSET/ROW/CNT')) AS rows_in_table
  FROM user_tables;
__________________
Email : http://scr.im/waldar
Waldar est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 11/02/2011, 13h59   #3
Expert Confirmé Sénior
 
Avatar de mnitu
 
Homme Marius Nitu
Ingénieur développement logiciels
Inscription : octobre 2007
Messages : 3 311
Détails du profil
Informations personnelles :
Nom : Homme Marius Nitu
Localisation : France, Marne (Champagne Ardenne)

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : octobre 2007
Messages : 3 311
Points : 5 808
Points : 5 808
@waldar
Merci, c’est très gentil mais, la requête ne m’appartient pas. Je l’ai trouvé sur OraFaq.
mnitu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/02/2011, 14h24   #4
Membre Expert
 
Inscription : août 2008
Messages : 1 271
Détails du profil
Informations forums :
Inscription : août 2008
Messages : 1 271
Points : 1 929
Points : 1 929
Mnitu, je ne sais pas vers quoi pointe ton lien en particulier mais je crois que c'est Laurent Schneider qui est à l'origine de la requête
http://laurentschneider.com/wordpres...ll-tables.html
skuatamad est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 11/02/2011, 14h31   #5
Membre éclairé
 
Inscription : novembre 2002
Messages : 532
Détails du profil
Informations forums :
Inscription : novembre 2002
Messages : 532
Points : 355
Points : 355
Super intéressant !!

Une requête identique existe t-elle pour comptabiliser les t-uples d'une partition ou d'une subpartition en 11g ?

à partir des vues ALL_TAB_PARTITIONS, ALL_TAB_SUBPARTITIONS

Merci
__________________
PpPool
PpPool est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/02/2011, 15h07   #6
Membre chevronné
 
Avatar de Z3phur
 
Homme loic
Administrateur de base de données
Inscription : décembre 2007
Messages : 673
Détails du profil
Informations personnelles :
Nom : Homme loic
Âge : 37
Localisation : France, Val de Marne (Île de France)

Informations professionnelles :
Activité : Administrateur de base de données
Secteur : Industrie

Informations forums :
Inscription : décembre 2007
Messages : 673
Points : 773
Points : 773
Bonjour,

c'est couteux de faire un count(*) sur toutes les tables d'un schéma.

pourquoi ne pas prendre la colonne num_rows et last_analyzed de la table user_tables pour voir le nombre de lignes et voir si c'est fiable comme indicateur?

EDIT :

Code :
1
2
SELECT table_name, num_rows, last_analyzed
  FROM user_tables;
__________________
==========================================
La justice sans la force est impuissante, la force sans la justice est tyrannique...
Z3phur est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/02/2011, 15h09   #7
Membre éclairé
 
Inscription : novembre 2002
Messages : 532
Détails du profil
Informations forums :
Inscription : novembre 2002
Messages : 532
Points : 355
Points : 355
au niveau perf c'est pas top : tests réalisées sur plusieurs tables de plusieurs millions de lignes (plusieurs minutes)
__________________
PpPool
PpPool est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/02/2011, 15h11   #8
Invité régulier
 
Inscription : février 2011
Messages : 38
Détails du profil
Informations forums :
Inscription : février 2011
Messages : 38
Points : 9
Points : 9
merci beaucoup
Jenesépa est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/02/2011, 15h38   #9
Rédacteur
 
Inscription : décembre 2002
Messages : 2 385
Détails du profil
Informations personnelles :
Localisation : France, Var (Provence Alpes Côte d'Azur)

Informations forums :
Inscription : décembre 2002
Messages : 2 385
Points : 3 261
Points : 3 261
Citation:
Envoyé par PpPool Voir le message
au niveau perf c'est pas top : tests réalisées sur plusieurs tables de plusieurs millions de lignes (plusieurs minutes)
Normal, ce n'est pas magique ! Quand on accède à tous les blocs de données (y compris d'ailleurs, pour une question de HWM, ceux qui sont vides) on ne peut pas s'attendre à des performances mirobolantes.
__________________
Consultant / formateur Oracle indépendant
Certifié OCP 10g et 11g, sécurité 11g
Pomalaix est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 11/02/2011, 16h05   #10
Membre éclairé
 
Inscription : novembre 2002
Messages : 532
Détails du profil
Informations forums :
Inscription : novembre 2002
Messages : 532
Points : 355
Points : 355
Citation:
Envoyé par Pomalaix Voir le message
Normal, ce n'est pas magique ! Quand on accède à tous les blocs de données (y compris d'ailleurs, pour une question de HWM, ceux qui sont vides) on ne peut pas s'attendre à des performances mirobolantes.
Bonjour Pomalaix

tout à fait d'accord avec toi, je n'ai pas été assez précis. dsl.

je voulais simplement signaler que cette requête est plus couteuse en terme de performances qu'une solution maison que nous avons réalisé en PL/SQL. Ps qui fait un simple count(*) de la table
__________________
PpPool
PpPool est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/02/2011, 16h13   #11
Invité régulier
 
Inscription : février 2011
Messages : 38
Détails du profil
Informations forums :
Inscription : février 2011
Messages : 38
Points : 9
Points : 9
les éléments apportés amène d'autres questions :
- Pouvez vous m'indiquer le lien vers cette requête PL/SQL ou l'insérer ?
- Pour l'analyse, j'y avais pensé mais j'ai des pbs de backup et d'indisponibilité de la base pdt la nuit (par ailleurs je n'ai pas vu ou on peut planifier la tâche). Par ailleurs la bdd semble un peu laisser à l'abandon depuis qq années (pas de maintenance). Il semble que lancer l'analyse coute pas mal en performance et peut générer des temps de réponse dégradée du coup je me rabats sur la requête SQL.
Jenesépa est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/02/2011, 16h58   #12
Rédacteur
 
Inscription : décembre 2002
Messages : 2 385
Détails du profil
Informations personnelles :
Localisation : France, Var (Provence Alpes Côte d'Azur)

Informations forums :
Inscription : décembre 2002
Messages : 2 385
Points : 3 261
Points : 3 261
Citation:
Envoyé par PpPool Voir le message
...
je voulais simplement signaler que cette requête est plus couteuse en terme de performances qu'une solution maison que nous avons réalisé en PL/SQL. Ps qui fait un simple count(*) de la table
Ah, intéressant, c'est justement un point sur lequel je m'interrogeais en découvrant cette requête de derrière les fagots.
Vous avez des résultat chiffrés ?
__________________
Consultant / formateur Oracle indépendant
Certifié OCP 10g et 11g, sécurité 11g
Pomalaix est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/02/2011, 17h04   #13
Expert Confirmé Sénior
 
Avatar de mnitu
 
Homme Marius Nitu
Ingénieur développement logiciels
Inscription : octobre 2007
Messages : 3 311
Détails du profil
Informations personnelles :
Nom : Homme Marius Nitu
Localisation : France, Marne (Champagne Ardenne)

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : octobre 2007
Messages : 3 311
Points : 5 808
Points : 5 808
Citation:
Envoyé par skuatamad Voir le message
Mnitu, je ne sais pas vers quoi pointe ton lien en particulier mais je crois que c'est Laurent Schneider qui est à l'origine de la requête
http://laurentschneider.com/wordpres...ll-tables.html
C’est tout à fait possible. J’ai indiqué simplement quelle a été ma source d’inspiration.

PS. Le lien ne point pas vers une discussion particulière, juste sur le forum.
mnitu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/02/2011, 17h38   #14
Membre Expert
 
Inscription : août 2008
Messages : 1 271
Détails du profil
Informations forums :
Inscription : août 2008
Messages : 1 271
Points : 1 929
Points : 1 929
Citation:
Envoyé par Jenesépa Voir le message
- Pouvez vous m'indiquer le lien vers cette requête PL/SQL ou l'insérer ?
Regardez le lien que j'ai posté vers le blog de Laurent Schneider, dans les commentaires il propose aussi un bloc PL/SQL où il précise d'ailleurs que c'est plus performant.
skuatamad est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 09h43.


 
 
 
 
Partenaires

Hébergement Web