IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Administration Oracle Discussion :

Nettoyage du tablespace SYSTEM


Sujet :

Administration Oracle

  1. #1
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut Nettoyage du tablespace SYSTEM
    Bonjour et bonne année à tous les oracliens.

    Cadeau de début d'année, je me retrouve ce matin avec une jolie erreur ORA-01653 sur le tablespace SYSTEM !

    J'ai pu augmenter la taille du data_file à 900 000 000 mais y aurait-il des choses à nettoyer dans les tables de SYSTEM, SYS ou autres qui utilisent ce tablespace.

    Est-ce que cette taille vous semble normale ou trop grande ?
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  2. #2
    Membre éclairé Avatar de jkofr
    Homme Profil pro
    Senior Consultant DBA (Trivadis SA)
    Inscrit en
    Octobre 2006
    Messages
    484
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : Suisse

    Informations professionnelles :
    Activité : Senior Consultant DBA (Trivadis SA)
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 484
    Points : 724
    Points
    724
    Par défaut
    Hello,

    Peu-etre aud$?

    jko
    OCM 11g, RAC and Performance & Tuning Expert 11g
    RMAN Backup & Recovery, Data Guard and Grid Control

  3. #3
    Membre à l'essai
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Juillet 2012
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juillet 2012
    Messages : 14
    Points : 20
    Points
    20
    Par défaut
    Une petite requête rapidement écrite pour voir éventuellement les objets qui n'auraient pas du être créés dans ce tablespace :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select OWNER||'.'||SEGMENT_NAME from dba_segments where TABLESPACE_NAME='SYSTEM' and OWNER not in ('SYSTEM', 'SYS');
    Cela ne doit pas être ton cas mais ça peut toujours aider un débutant désespéré qui tombe sur ce post.

    Sinon, en tout rigueur ... il est difficile de dire si la taille de system est correcte sans connaitre la volumétrie de ta base.
    Si tu n'as que deux schémas et trois tables ... c'est inquiétant ... si tu répertories (à leur insu bien sur) les informations confidentielles de tous les braves utilisateurs du réseaux social le plus en vogue ... ça se discute.

    Je t'inviterais d'abord à regarder quels sont tes objects les plus volumineux :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select owner, segment_name, segment_type, bytes/1024/1024 from dba_segments where tablespace_name = 'SYSTEM' order by 4;

  4. #4
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Pas bête en effet !

    Grâce au premier résultat affiché ici, et après avoir jeté un œil à la structure et au contenu de la table, je comprends qu'il s'agit de la table qui stocke l'audit de la BDD.
    Y figurent plus de 1 400 000 lignes, les premières datant de 2010 ! Autrement dit, elle n'a jamais été purgée depuis l'installation d'Oracle.

    Je lis aussi sur le lien donné plus haut :
    la table SYS.AUD$ doit être surveillée et purgée par un DELETE (ou mieux un TRUNCATE) explicite de Mr SYS si nécessaire
    Que préconisez-vous comme méthode de purge ? Quelle fréquence ? Conserver quelle ancienneté de lignes d'audit ?
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  5. #5
    Membre éclairé Avatar de jkofr
    Homme Profil pro
    Senior Consultant DBA (Trivadis SA)
    Inscrit en
    Octobre 2006
    Messages
    484
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : Suisse

    Informations professionnelles :
    Activité : Senior Consultant DBA (Trivadis SA)
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 484
    Points : 724
    Points
    724
    Par défaut
    Hello,

    pour la période de rétention, cela dépend des besoins du business...

    Avant cela n'était pas supporté de déplacer cette table vers un autre tablespace.
    C'était possible, mais NON supporté.

    Depuis la 11g il existe une procédure pour déplacer cette table AUD$ vers un tablespace dédié.

    Package:
    DBMS_AUDIT_MGMT
    Procédure
    SET_AUDIT_TRAIL_LOCATION

    Bonne soirée.
    jko
    OCM 11g, RAC and Performance & Tuning Expert 11g
    RMAN Backup & Recovery, Data Guard and Grid Control

  6. #6
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Un problème en entraîne un autre...

    La base de prod sur laquelle j'ai rencontré le problème objet de cette de discussion est dupliquée 3 fois sur un serveur de test. Du coup, la partition qui héberge les fichiers des bases de test est pleine.
    Comme j'étais connecté via SQL Developer sur l'une des bases de test quand on m'a signalé que la connexion au serveur de test était impossible, j'ai voulu purger un peu la fameuse table sys;aud$ de tout ce qui est plus ancien que 2012, grâce à cette requête :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    DELETE FROM sys.aud$
    WHERE ntimestamp# < '31/12/11 23:59:59'

    Un COUNT(*) préalable avec le même WHERE donnait quand même plus de 600 000 lignes à supprimer.

    Dans SQL Developer, la requête tourne depuis au moins un quart d'heure. À votre avis, elle est plantée ?

    EDIT : La requête a terminé son exécution.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  7. #7
    Membre éclairé Avatar de jkofr
    Homme Profil pro
    Senior Consultant DBA (Trivadis SA)
    Inscrit en
    Octobre 2006
    Messages
    484
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : Suisse

    Informations professionnelles :
    Activité : Senior Consultant DBA (Trivadis SA)
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 484
    Points : 724
    Points
    724
    Par défaut
    Citation Envoyé par CinePhil Voir le message
    Un problème en entraîne un autre...

    La base de prod sur laquelle j'ai rencontré le problème objet de cette de discussion est dupliquée 3 fois sur un serveur de test. Du coup, la partition qui héberge les fichiers des bases de test est pleine.
    Comme j'étais connecté via SQL Developer sur l'une des bases de test quand on m'a signalé que la connexion au serveur de test était impossible, j'ai voulu purger un peu la fameuse table sys;aud$ de tout ce qui est plus ancien que 2012, grâce à cette requête :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    DELETE FROM sys.aud$
    WHERE ntimestamp# < '31/12/11 23:59:59'

    Un COUNT(*) préalable avec le même WHERE donnait quand même plus de 600 000 lignes à supprimer.

    Dans SQL Developer, la requête tourne depuis au moins un quart d'heure. À votre avis, elle est plantée ?
    En général c'est assez long :-)

    Tu peux spider un peux avec du paralèlisme si tu es en enterprise edition:

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    DELETE /*+ PARALLEL (t, 4) */ FROM sys.aud$ T
    WHERE T.ntimestamp# < '31/12/11 23:59:59'

    Tu peux allez faire un tour dans v$session et suivre les waits associés à ta session...

    jko
    OCM 11g, RAC and Performance & Tuning Expert 11g
    RMAN Backup & Recovery, Data Guard and Grid Control

  8. #8
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    Faudrait regarder le plan d'exécution de la requête pour voir s'il y a utilisation d'un index ou non.
    Il faut aussi regarder sur la table combien elle possède d'index et combien elle possède de lignes.

    En plus les données sont mal typées, j'imagine que ntimestamp# est de type date ou timestamp.
    Mais comme elle est comparée à du varchar, Oracle va convertir toute la colonne avant de faire son filtre.
    Il faut vérifier pour le format de conversion implicite soit correct.
    Et dans ce cas l'index - s'il existe - n'est pas utilisé.

    Donc si l'index n'est pas utilisé, Oracle va lire toute la table, effacer une ligne, et recommencer cette opération 600.000 fois. Ça va prendre du temps !

    Il vaut mieux tuer la transaction, vérifier la présence de l'index afin de le créer s'il n'existe pas, vérifier le type de la colonne ntimestamp# et passer avec un des deux where :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    create index ix_aud_ntimestamp
    on sys.aud$ (ntimestamp#)
    tablespace <tbs_idx>
    parallel 4;
     
    DELETE FROM sys.aud$
     WHERE ntimestamp# < to_date('01/01/2012', 'dd/mm/yyyy');
     WHERE ntimestamp# < to_timestamp('01/01/2012', 'dd/mm/yyyy');
     
    DROP index ix_aud_ntimestamp;
    Edit : tant pis !

  9. #9
    Membre éclairé Avatar de jkofr
    Homme Profil pro
    Senior Consultant DBA (Trivadis SA)
    Inscrit en
    Octobre 2006
    Messages
    484
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : Suisse

    Informations professionnelles :
    Activité : Senior Consultant DBA (Trivadis SA)
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 484
    Points : 724
    Points
    724
    Par défaut
    Citation Envoyé par Waldar Voir le message
    Donc si l'index n'est pas utilisé, Oracle va lire toute la table, effacer une ligne, et recommencer cette opération 600.000 fois. Ça va prendre du temps !
    Pas daccord Waldar.
    Il ne vas pas scanner la table 600 000 fois mais une seule fois.

    Concernant l'index, la modification d'objects appartenant à sys n'est pas supportée par Oracle...

    Jko
    OCM 11g, RAC and Performance & Tuning Expert 11g
    RMAN Backup & Recovery, Data Guard and Grid Control

  10. #10
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    Citation Envoyé par jkofr Voir le message
    Il ne vas pas scanner la table 600 000 fois mais une seule fois.
    Je me suis emballé !

    Citation Envoyé par jkofr Voir le message
    Concernant l'index, la modification d'objects appartenant à sys n'est pas supportée par Oracle...
    L'index peut être mis ailleurs que dans sys, comme ça pas de modification sur ce schéma.

  11. #11
    Expert éminent sénior Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    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 : 5 611
    Points : 11 252
    Points
    11 252
    Par défaut
    Citation Envoyé par Waldar Voir le message
    ...
    L'index peut être mis ailleurs que dans sys, comme ça pas de modification sur ce schéma.
    Il ne faut pas toucher aux objets appartenant au sys sous menace de châtiment du purgatoire éternel.

  12. #12
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Citation Envoyé par mnitu Voir le message
    Il ne faut pas toucher aux objets appartenant au sys sous menace de châtiment du purgatoire éternel.
    Mais purger sa table AUD$ ne nous précipite pas en enfer j'espère ?
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  13. #13
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    C'est dangereux Oracle en fait !

  14. #14
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Ben je suppose qu'un oracle peut donner une bonne nouvelle comme prédire une catastrophe !
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  15. #15
    Expert éminent sénior Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    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 : 5 611
    Points : 11 252
    Points
    11 252
    Par défaut
    Citation Envoyé par CinePhil Voir le message
    Mais purger sa table AUD$ ne nous précipite pas en enfer j'espère ?
    Aucun souci pour ça! J'ai parlai juste de la création des indexes sur des objets appartenant à sys dans des autres schémas que sys.

    [Edit]
    Quoi que ça sera mieux pour la sauvergarde de nos amês d'utiliser si possible les outils d'Oracle :
    Auditing Enhancements (DBMS_AUDIT_MGMT) in Oracle Database 11g Release 2

Discussions similaires

  1. Réduire la taille du tablespace SYSTEM
    Par annemar dans le forum Import/Export
    Réponses: 29
    Dernier message: 15/05/2008, 17h44
  2. ORA-01950: pas de privilèges sur le tablespace 'SYSTEM'
    Par sajedose dans le forum Administration
    Réponses: 3
    Dernier message: 31/03/2008, 20h01
  3. ORA-01652 sur tablespace SYSTEM
    Par genio dans le forum Administration
    Réponses: 2
    Dernier message: 24/04/2007, 14h30
  4. ORA-01536: space quota exceeded for tablespace 'SYSTEM'
    Par stegaud dans le forum Administration
    Réponses: 1
    Dernier message: 19/04/2007, 17h33
  5. Réponses: 3
    Dernier message: 23/09/2006, 13h05

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo