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 :

nom de table crypté


Sujet :

Administration Oracle

  1. #1
    Futur Membre du Club
    Inscrit en
    Juin 2008
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 7
    Points : 6
    Points
    6
    Par défaut nom de table crypté
    Bonjour à tous,
    je travaille actuellement sur une base de données , et je viens de faire
    select * from tab, en vue de consulter la liste des tables du schéma.
    je constate qu'il y'a une table que je n'ai pas créé mais qui existe dans le schéma et porte un nom crypté, je n'arrive pas à la supprimer.
    le nom de la table est: BIN$Ra3FSWOBRtOX5VzlheKS+Q==$0
    Merci de bien vouloir m'aider SVP.

  2. #2
    Membre habitué
    Inscrit en
    Septembre 2010
    Messages
    82
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 82
    Points : 140
    Points
    140
    Par défaut
    Bonsoir sandybel,

    La liste des tables d'un certain utilisateur ne se trouve pas dans la table tab comme tu dis mais dans une vue qui s'intitule user_tables.

    Les tables BIN$...$n sont des tables supprimées mise à la corbeille. Pour les supprimer, tu peux vider ta corbeille en faisant un PURGE RECYCLEBIN. Si tu ne veux pas que lorsque tu supprimes, tes tables soient mis à la corbeille, tu peux faire un DROP TABLE xxx PURGE. Ou alors, demander à ton administrateur de base de données de désactiver cette option.

    Pour comprendre ta situation, essaie de comprendre ce petit scénario (teste le si tu en a l'occasion).

    Tout d'abord, crée une table avec laquelle tu vas pouvoir "jouer". Voici un exemple simpliste:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    CREATE TABLE ma_premiere_table 
    (
      mon_id NUMBER(15), 
      mon_nom VARCHAR2(100)
    );
    INSERT INTO ma_premiere_table VALUES(1, 'sandybel');
    COMMIT;
    Ensuite, vérifie qu'elle se trouve bien dans user_objects (ou user_tables)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    COLUMN object_name FORMAT A30
    SELECT object_name
      FROM user_objects
     WHERE object_type = 'TABLE';
     
    OBJECT_NAME                  
    ------------------------------
    MA_PREMIERE_TABLE
    Et vérifie que tu n'as rien dans ta corbeille

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SELECT object_name, original_name
      FROM recyclebin
     WHERE type = 'TABLE';
     
    no rows selected
    Maintenant, supprime ta table et re-vérifie si elle apparait dans user_objects et dans la corbeille;


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
    DROP TABLE ma_premiere_table;
     
    table MA_PREMIERE_TABLE dropped.
     
     
    SELECT object_name
      FROM user_objects
     WHERE object_type = 'TABLE';
     
    no rows selected
     
     
    SELECT object_name, original_name
      FROM recyclebin
     WHERE type = 'TABLE';
     
    OBJECT_NAME                    ORIGINAL_NAME                  
    ------------------------------ --------------------------------
    BIN$zk74B70CiAzgQKjABQsaXA==$0 MA_PREMIERE_TABLE
    Comme tu peux le voir, la table est apparue dans la corbeille. Pour vider de la corbeille la table MA_PREMIERE_TABLE, il te suffit de faire un purge

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    PURGE TABLE MA_PREMIERE_TABLE; 
     
    table purged.

    Si tu veux supprimer tout le contenu de la corbeille (index, tables...), tu peux juste faire un purge recyclebin.

    N'hésite pas à poser tes questions si ceci n'est pas assez clair pour toi

  3. #3
    Futur Membre du Club
    Inscrit en
    Juin 2008
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 7
    Points : 6
    Points
    6
    Par défaut
    merci Amir.

  4. #4
    Membre expérimenté

    Homme Profil pro
    Inscrit en
    Mars 2010
    Messages
    536
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 536
    Points : 1 359
    Points
    1 359
    Par défaut
    Citation Envoyé par amir. Voir le message
    N'hésite pas à poser tes questions si ceci n'est pas assez clair pour toi
    Oui moi j'ai une petite question

    A votre avis à quoi correspond la situation suivante que je viens de provoquer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SQL> select object_name, original_name from recyclebin;
     
    no rows selected
     
    SQL> select object_name from user_objects where object_name like '%BIN%';
     
    OBJECT_NAME
    ------------------------------------------------------------------------------
    BIN$zl3F7Pl6dRrgRAALXeA6Ng==$0
    Bien Respectueusement
    www.hourim.wordpress.com

    "Ce qui se conçoit bien s'énonce clairement"

  5. #5
    Membre expérimenté Avatar de ojo77
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Décembre 2010
    Messages
    680
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Décembre 2010
    Messages : 680
    Points : 1 597
    Points
    1 597
    Par défaut
    Citation Envoyé par Mohamed.Houri Voir le message
    A votre avis à quoi correspond la situation suivante que je viens de provoquer
    A la création d'une table utilisant un nom classique des tables corbeille ? Bref un truc du genre create table "BIN$zl3F7Pl6dRrgRAALXeA6Ng==$0" ( ..... A mon avis, avec cet exemple vous faites plus souffrir les diptères qu'avancer la science ...

  6. #6
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 947
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 947
    Points : 5 846
    Points
    5 846
    Par défaut
    Ou à la restauration d'un objet associé (comme un index) à une table drop puis flashback.
    Using Oracle's recycle bin est plutôt pas mal.

  7. #7
    Membre expérimenté

    Homme Profil pro
    Inscrit en
    Mars 2010
    Messages
    536
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 536
    Points : 1 359
    Points
    1 359
    Par défaut
    Citation Envoyé par ojo77 Voir le message
    A la création d'une table utilisant un nom classique des tables corbeille ? Bref un truc du genre create table "BIN$zl3F7Pl6dRrgRAALXeA6Ng==$0" ( ..... A mon avis, avec cet exemple vous faites plus souffrir les diptères qu'avancer la science ...
    Salut Olivier,

    Non ca n'est pas cela.

    Lorsque j'ai lu la question initiale je me suis dit et si le "tab" mentioné par sandybel n'était pas le "recycle bin". Alors j'ai fait l'exemple suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
     
    SQL> create table t as select rownum n1, lpad(rownum,10,'0') small_vc
      2  from dual
      3  connect by level < 10000;
     
    Table created.
     
    SQL> create index ind1_t on t(n1);
     
    Index created.
     
    SQL> exec dbms_stats.gather_table_stats(user, 't', cascade => true);
     
    PL/SQL procedure successfully completed.
     
    SQL> select *
      2  from t
      3  where n1= 42;
     
            N1 SMALL_VC
    ---------- ----------
            42 0000000042
     
    SQL> select * from table(dbms_xplan.display_cursor);
     
    PLAN_TABLE_OUTPUT
    -------------------------------------------------------------------------------------------
    SQL_ID  dtsgjx12bahch, child number 0
    -------------------------------------
    select * from t where n1= 42
     
    Plan hash value: 3890747269
     
    --------------------------------------------------------------------------------------
    | Id  | Operation                   | Name   | Rows  | Bytes | Cost (%CPU)| Time     |
    --------------------------------------------------------------------------------------
    |   0 | SELECT STATEMENT            |        |       |       |     2 (100)|          |
    |   1 |  TABLE ACCESS BY INDEX ROWID| T      |     1 |    14 |     2   (0)| 00:00:01 |
    |*  2 |   INDEX RANGE SCAN          | IND1_T |     1 |       |     1   (0)| 00:00:01 |
    --------------------------------------------------------------------------------------
     
    Predicate Information (identified by operation id):
    ---------------------------------------------------
     
       2 - access("N1"=42)
     
     
    19 rows selected.
    Maintenant je supprime cette table tout en la laissant dans le "recyclebin"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    SQL> drop table t;
     
    Table dropped.
     
    SQL> select *
      2  from t
      3  where n1= 42;
    from t
         *
    ERROR at line 2:
    ORA-00942: table or view does not exist
    Qu'est ce qui se passe si je récupère cette table du "recyclebin" ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
     
    SQL> FLASHBACK TABLE T TO BEFORE DROP;
     
    Flashback complete.
     
    SQL> select *
      2  from t
      3  where n1= 42;
     
            N1 SMALL_VC
    ---------- ----------
            42 0000000042
     
    SQL> select *
      2  from t
      3  where n1= 42;
     
            N1 SMALL_VC
    ---------- ----------
            42 0000000042
     
    SQL> select * from table(dbms_xplan.display_cursor);
     
    PLAN_TABLE_OUTPUT
    ---------------------------------------------------------------------------------------------------------------
    SQL_ID  dtsgjx12bahch, child number 0
    -------------------------------------
    select * from t where n1= 42
     
    Plan hash value: 3441881085
     
    --------------------------------------------------------------------------------------------------------------
    | Id  | Operation                   | Name                           | Rows  | Bytes | Cost (%CPU)| Time     |
    --------------------------------------------------------------------------------------------------------------
    |   0 | SELECT STATEMENT            |                                |       |       |     2 (100)|          |
    |   1 |  TABLE ACCESS BY INDEX ROWID| T                              |     1 |    14 |     2   (0)| 00:00:01 |
    |*  2 |   INDEX RANGE SCAN          | BIN$zl3F7Pl8dRrgRAALXeA6Ng==$0 |     1 |       |     1   (0)| 00:00:01 |
    --------------------------------------------------------------------------------------------------------------
     
    Predicate Information (identified by operation id):
    ---------------------------------------------------
     
       2 - access("N1"=42)
     
     
    19 rows selected.
     
    SQL> spool off
    Enfin, je reviens à mon point de départ.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    SQL> SELECT object_name, original_name FROM recyclebin;
     
    no rows selected
     
    SQL> SELECT object_name FROM user_objects WHERE object_name LIKE '%BIN%';
     
    OBJECT_NAME
    ------------------------------------------------------------------------------
    BIN$zl3F7Pl6dRrgRAALXeA6Ng==$0
    C'est que Notre ami Oracle lorsqu'il récupère la table il la récupère bien avec son nom d'origine. Par contre son index ah c'est une autre histoire.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
     
    SQL> alter index  "BIN$zl3F7Pl8dRrgRAALXeA6Ng==$0" rename to ind1_t;
     
    Index altered.
     
    SQL> select * from t where n1 = 42;
     
            N1 SMALL_VC
    ---------- ----------
            42 0000000042
     
    SQL> select * from table(dbms_xplan.display_cursor);
     
    PLAN_TABLE_OUTPUT
    ---------------------------------------------------------------------------------------------------
    ---------------------------------------------------------------------------------------------------
    ---------
    SQL_ID  2x1z8vhtvkthy, child number 0
    -------------------------------------
    select * from t where n1 = 42
     
    Plan hash value: 3890747269
     
    --------------------------------------------------------------------------------------
    | Id  | Operation                   | Name   | Rows  | Bytes | Cost (%CPU)| Time     |
    --------------------------------------------------------------------------------------
    |   0 | SELECT STATEMENT            |        |       |       |     2 (100)|          |
    |   1 |  TABLE ACCESS BY INDEX ROWID| T      |     1 |    14 |     2   (0)| 00:00:01 |
    |*  2 |   INDEX RANGE SCAN          | IND1_T |     1 |       |     1   (0)| 00:00:01 |
    --------------------------------------------------------------------------------------
     
    Predicate Information (identified by operation id):
    ---------------------------------------------------
     
       2 - access("N1"=42)
    Edit : bien vu skuatamad
    Bien Respectueusement
    www.hourim.wordpress.com

    "Ce qui se conçoit bien s'énonce clairement"

  8. #8
    Membre expérimenté Avatar de ojo77
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Décembre 2010
    Messages
    680
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Décembre 2010
    Messages : 680
    Points : 1 597
    Points
    1 597
    Par défaut
    Au temps pour moi

  9. #9
    Membre habitué
    Inscrit en
    Septembre 2010
    Messages
    82
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 82
    Points : 140
    Points
    140
    Par défaut
    Citation Envoyé par Mohamed.Houri Voir le message
    Oui moi j'ai une petite question

    A votre avis à quoi correspond la situation suivante que je viens de provoquer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SQL> select object_name, original_name from recyclebin;
     
    no rows selected
     
    SQL> select object_name from user_objects where object_name like '%BIN%';
     
    OBJECT_NAME
    ------------------------------------------------------------------------------
    BIN$zl3F7Pl6dRrgRAALXeA6Ng==$0
    La réponse a déjà été donné. Mais ma première réaction aurait été de te demander le "object_type" de cet objet. Si c'est index, trigger... tu sais direct que c'est un objet dépendant d'une table qui a été restaurée. Mais ca aurait été dur à croire si c'était une table (sauf si un utilisateur est assez fou pour nommer ses tables BIN$...$0 et embrouiller tout le monde).

  10. #10
    Rédacteur

    Homme Profil pro
    Consultant / formateur Oracle et SQL Server
    Inscrit en
    Décembre 2002
    Messages
    3 460
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant / formateur Oracle et SQL Server

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 460
    Points : 8 074
    Points
    8 074
    Par défaut
    En bref, lorsqu'une table supprimée est récupérée de la corbeille, ses objets associés (déclencheurs, index, contraintes) sont également récupérés, sauf les contraintes de clé étrangère qui sont définitivement perdues.
    De plus, ces objets associés ne reprennent pas leur nom d'origine, mais conservent le nom de type BIN$ qu'ils avaient reçu dans la corbeille.

    Le comble dans l'affaire, c'est que le nom original des index est pourtant mémorisé (colonne ORIGINAL_NAME dans la vue RECYCLEBIN), mais est allègrement ignoré lors de la récupération...
    Consultant / formateur Oracle indépendant
    Certifié OCP 12c, 11g, 10g ; sécurité 11g

    Ma dernière formation Oracle 19c publiée sur Linkedin : https://fr.linkedin.com/learning/oracle-19c-l-administration

Discussions similaires

  1. passage d'un nom de table dans une procédure stockée
    Par thierry V dans le forum MS SQL Server
    Réponses: 7
    Dernier message: 26/07/2010, 16h48
  2. Réponses: 2
    Dernier message: 03/02/2005, 13h21
  3. Comment je peux changer nom de 'Table' avec la phrase sql
    Par YEK dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 01/10/2004, 08h38
  4. Afficher noms des tables d'une base
    Par jeff37 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 02/01/2004, 16h00
  5. noms des tables d'une base
    Par molto dans le forum SQL
    Réponses: 2
    Dernier message: 17/03/2003, 22h14

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