Précédent   Forum des professionnels en informatique > Bases de données > Oracle > Administration
Administration Forum d'entraide sur l'administration du serveur 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 21/11/2007, 15h10   #1
Invité de passage
 
Inscription : juin 2007
Messages : 29
Détails du profil
Informations forums :
Inscription : juin 2007
Messages : 29
Points : 3
Points : 3
Par défaut Nombre total de lignes par table

Bonjour!

Je travaille sur une base oracle 9.2.0.3 et oracle application 11i ERP(E_Business Suite)
Je voudrai bien faire le suivi de l'augmentation de nombres d'enregistrements (lignes) pour chaque table mais sans avoir à préciser leur nom individualement comme dans la rquête suivante :
select count(*) from NomDeMatble
En fait ,je voudrai bien généraliser cette requête pour toutes les tables (car ma base contient enormément de tables ) et ça sera trop si je dois saisir par nom pour avoir le nombre total des ligne ?
Si vous avez une idée oû un script qui pourra m'aider à réaliser cela ,pour ensuite pouvoir mettre cette reqûete ou script en tâche planifiée !

Merci pour votre aide !
atporfi est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/11/2007, 15h36   #2
Expert Confirmé
 
Avatar de LeoAnderson
 
Inscription : septembre 2004
Messages : 2 942
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 2 942
Points : 2 972
Points : 2 972
Si les stats sont à jours (ce qui est le cas normal sur une base), il vous suffit de faire :
Code :
SELECT table_name ,num_rows FROM dba_tables;
Attention : le résultat ne sera pas super précis (date du dernier calcul) mais fourni un bon ordre d'idée.
LeoAnderson est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/11/2007, 15h46   #3
Rédacteur
 
Inscription : décembre 2002
Messages : 2 397
Détails du profil
Informations personnelles :
Localisation : France, Var (Provence Alpes Côte d'Azur)

Informations forums :
Inscription : décembre 2002
Messages : 2 397
Points : 3 298
Points : 3 298
Citation:
Envoyé par atporfi Voir le message
En fait ,je voudrai bien généraliser cette requête pour toutes les tables (car ma base contient enormément de tables ) et ça sera trop si je dois saisir par nom pour avoir le nombre total des ligne ?
Bonjour

Le problème n'est pas du tout de devoir citer toutes les tables, mais le temps que ça prendrait d'effectuer physiquement le count(*) sur toutes vos tables.

Vous pourriez exécuter le résultat de cette requête :
Code :
SELECT 'SELECT COUNT(*) FROM ' || TABLE_NAME || ';' FROM DBA_TABLES WHERE OWNER='&NOM_SCHEMA';
mais pour des raisons de performances, ça n'est pas recommandé, et la proposition de Leo est bien plus adaptée.
__________________
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 21/11/2007, 15h58   #4
Expert Confirmé
 
Avatar de 7gyY9w1ZY6ySRgPeaefZ
 
Homme
dba
Inscription : juillet 2007
Messages : 2 523
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Canada

Informations professionnelles :
Activité : dba

Informations forums :
Inscription : juillet 2007
Messages : 2 523
Points : 3 972
Points : 3 972
Je confirme, j'avais fait une fonction avec une vue associée pour faire la même chose et ce n'est pas vraiment optimum.
Dans un cadre temporaire de développement, ça dépanne, surtout quand tu cherches à avoir des infos toutes les 10 minutes.

Pour info, ça donnait ça :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
CREATE OR REPLACE FUNCTION F_COUNT(TABLE_NAME IN VARCHAR2) RETURN NUMBER AS
request VARCHAR2(300);
nb_lines NUMBER;
BEGIN
  request := 'SELECT COUNT(*) FROM ' || TABLE_NAME;
  EXECUTE IMMEDIATE request
  INTO nb_lines;
  RETURN nb_lines;
 
EXCEPTION
WHEN others THEN
  RETURN NULL;
END F_COUNT;
 
CREATE OR REPLACE force VIEW F_COUNT_ALL(TABLE_NAME,   nb_lines_reel,   nb_lines_stat,   last_analyzed) AS
SELECT ut.TABLE_NAME,
  F_COUNT(ut.TABLE_NAME) nb_lines_reel,
  ut.num_rows nb_lines_stat,
  ut.last_analyzed
FROM user_tables ut
ORDER BY ut.TABLE_NAME;
Pour une approche intelligente, autant lancer le calcul des stats puis piocher les infos dans la vue USER_TABLES (ou assimilées).
7gyY9w1ZY6ySRgPeaefZ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/11/2007, 16h01   #5
Rédacteur/Modérateur
 
Avatar de orafrance
 
Inscription : janvier 2004
Messages : 15 861
Détails du profil
Informations personnelles :
Âge : 35

Informations forums :
Inscription : janvier 2004
Messages : 15 861
Points : 16 212
Points : 16 212
et surtout faut se poser la question de l'exploitation du résultat... parce que plus de 40000 tables, j'vois pas bien l'intérêt d'avoir une info si excaustive. Tu peux déjà te limiter au 10 ou 20 tables les plus grosses or APPLSYS (ou seulement les requests) et SYS ou SYSTEM.

NUM_ROWS c'est déjà pas mal comme info
orafrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/11/2007, 16h17   #6
Invité de passage
 
Inscription : juin 2007
Messages : 29
Détails du profil
Informations forums :
Inscription : juin 2007
Messages : 29
Points : 3
Points : 3
Bonjour !
Je suis tte à fait d'accord avec vous càd viser les plus grosses tables en premier lieu mais si je dois me baser sur le num_rows selon les stats (les plus recement calculées)
Quelle serait la fréquence (idéale) de calcul des stats la plus conseillée pour ma base ,car je ne sais pas si c nécessaire de le faire quotiennement ou chaque fin de semaine !
Sachant que nous sommes en ce moment sur une base prod et j'ai peur que la taille des tables augmente rapidement ,ce qui me pousse à avoir une idée globale sur l'évolution du nombre d'enregistrements

Merci pour votre collaboration !
atporfi est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/11/2007, 16h22   #7
Expert Confirmé
 
Avatar de LeoAnderson
 
Inscription : septembre 2004
Messages : 2 942
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 2 942
Points : 2 972
Points : 2 972
Il n'y a pas de fréquence idéale absolue, sinon, ça aurait déjà été automatisé !

Mais en 9i, il y a les LIST_STALE et GATHER_STALE sur des tables MONITORING....
LeoAnderson est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/11/2007, 16h39   #8
Invité de passage
 
Inscription : juin 2007
Messages : 29
Détails du profil
Informations forums :
Inscription : juin 2007
Messages : 29
Points : 3
Points : 3
Enfin, si je vous demande "la fréquence" parapport à votre experience pratique ,quelle serai votre réponse ?
atporfi est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/11/2007, 16h40   #9
Expert Confirmé
 
Avatar de LeoAnderson
 
Inscription : septembre 2004
Messages : 2 942
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 2 942
Points : 2 972
Points : 2 972
sur certaines tables, une fois par migration (8i, 9i, ...), sur d'autres, tous les jours.
LeoAnderson est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/11/2007, 16h50   #10
Invité de passage
 
Inscription : juin 2007
Messages : 29
Détails du profil
Informations forums :
Inscription : juin 2007
Messages : 29
Points : 3
Points : 3
C parfait ,je crois qu'il vaut mieux le faire qotidiennement et comme ça je seari ammener à automatiser ma requête de calcul de (num_rows) en crontab chaque fin de journée ,et ceci me permettra de faire un bon suivi ,car notre administrateur systeme veut avoir une idée globale sur lataille de labase de donnée

Merci pour votre aide précieuse!
atporfi est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/11/2007, 17h26   #11
Expert Confirmé
 
Inscription : février 2006
Messages : 3 433
Détails du profil
Informations forums :
Inscription : février 2006
Messages : 3 433
Points : 3 462
Points : 3 462
En 10g, le job créé par défaut GATHER_STATS_JOB s'exécute par défaut toutes les nuits entre 22H et 6H et durant le week-end. Il calcule les statistics sur les objets qui n'ont pas de statisques et sur les objets dont au moins 10% des lignes ont été modifiées.
__________________
P. Forstmann

AskTom Forums OTN doc 8, 9, 10 et 11
pifor est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/11/2007, 21h42   #12
Rédacteur/Modérateur
 
Avatar de orafrance
 
Inscription : janvier 2004
Messages : 15 861
Détails du profil
Informations personnelles :
Âge : 35

Informations forums :
Inscription : janvier 2004
Messages : 15 861
Points : 16 212
Points : 16 212
d'exérience, dans OeBS, tous les jours c'est très compliqué quand tu commences à avoir du volume... creuse l'idée de MONITORING de Leo qui fonctionne parfaitement
orafrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/11/2007, 09h03   #13
Expert Confirmé
 
Avatar de LeoAnderson
 
Inscription : septembre 2004
Messages : 2 942
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 2 942
Points : 2 972
Points : 2 972
Citation:
Envoyé par orafrance Voir le message
d'exérience, dans OeBS, tous les jours c'est très compliqué quand tu commences à avoir du volume... creuse l'idée de MONITORING de Leo qui fonctionne parfaitement
C'est d'ailleurs ce que fait le job de la 10g...
LeoAnderson est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/11/2007, 11h03   #14
Invité de passage
 
Inscription : juin 2007
Messages : 29
Détails du profil
Informations forums :
Inscription : juin 2007
Messages : 29
Points : 3
Points : 3
C noté je vais voir avec le monotoring !
atporfi 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 01h17.


 
 
 
 
Partenaires

Hébergement Web