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

 Oracle Discussion :

[21c] XE - Utilisateur et Tablespace


Sujet :

Oracle

  1. #1
    Membre actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2015
    Messages
    142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2015
    Messages : 142
    Points : 236
    Points
    236
    Par défaut [21c] XE - Utilisateur et Tablespace
    Bonjour à tous,

    J'ai suivi le tutoriel Oracle pour installer 21c XE. J'ai créer une connexion dans SQL Developer avec les paramètres suivants qui est fonctionnelle :

    Nom : 2022-04-01_17h14_40.png
Affichages : 1250
Taille : 9,5 Ko

    J'ai créé également un Tablespace car j'ai un dump qui a besoin d'un tablespace. Après l'import via "imp", j'ai bien mon tablespace rempli :

    Nom : 2022-04-01_17h18_03.png
Affichages : 1205
Taille : 21,3 Ko

    Ce que je n'arrive pas à faire c'est de créer un utilisateur (et donc automatiquement un schema si j'ai bien compris) qui soit lié à ce tablespace pour pouvoir ensuite me connecter avec cet utilisateur.

    Si j'essaye de créer un utilisateur, je dois le prefixer par c## et même là, l'ajout d'un tablespace par défaut ne fonctionne pas.

    Si je crée un utilisateur via la méthode du lien : http://ahmedaangour.blogspot.com/201...ors-de-la.html, j'arrive bien à me connecter (mais sur le nom de service XEPDB1) et impossible d'attribuer mon tablespace à cet utilisateur

    J'avoue que là je suis perdu. Je pense qu'il ne manque pas grand chose pour que cela fonctionne.

  2. #2
    Membre émérite
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2013
    Messages
    1 993
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Avril 2013
    Messages : 1 993
    Points : 2 499
    Points
    2 499
    Par défaut
    Quelques réflexions :
    - quand tu fais ton CREATE USER..., tu es dans quel container? Que donne la commande suivante :
    si le résultat est CDB$ROOT, ce n'est pas bien, pour importer un dump, sauf exception, il faut être dans une pdb, pas dans le cdb$root.
    Pour avoir la liste des pdbs, regarde dans dba_pdbs et fais un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    alter session set container = nom_pdb;
    show con_name
    Puis tu peux créer ton user, sans c##
    - le dump dont tu parles est bien un export datapump? Si oui, j'espère qu'il a été créé avec la commande expdp et pas exp, qui est l'ancien utilitaire d'export d'Oracle
    - pour les mêmes raisons que ci-dessus, lors de l'import, c'est impdp qu'il faut utiliser, pas imp
    - oui, sous Oracle, quand tu fais un CREATE USER, Oracle va créer un schéma qui contiendra tous les objets dont tu es propriétaire
    - tu dis "Si j'essaye de créer un utilisateur, je dois le prefixer par c##" : de mémoire je ne suis pas d'accord, cela n'est vrai que si tu veut créer un Common User, un user pouvant se promener dans le cdb$root et plusieurs pdbs
    - tu dis "Si j'essaye de créer un utilisateur, je dois le prefixer par c## et même là, l'ajout d'un tablespace par défaut ne fonctionne pas." : quelle est ta commande CREATE USER et, surtout, quel est le message d'erreur?
    DBA Oracle
    Rédacteur du blog : dbaoraclesql.canalblog.com

  3. #3
    Membre actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2015
    Messages
    142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2015
    Messages : 142
    Points : 236
    Points
    236
    Par défaut
    Bonjour,

    Désolé pour la réponse tardive.

    Quand j'ai créé mon user qui fonctionne, je l'ai créé dans le container "XEPDB1".

    Par contre, pour l'import du dump, je n'ai pas pu utilisé la fonction impdp (erreur indiquant dump trop vieux ??) mais avec imp j'ai réussis.

    Par contre, je pense que j'ai raté l'import car j'ai utilisé la commande :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    imp system@XE file=LEGACY.DMP  log=LEGACY_IMP.log FULL=Y
    car si je faisait

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    imp mon_user@XE file=LEGACY.DMP  log=LEGACY_IMP.log FULL=Y
    Cela ne fonctionnait pas.

    Je me demande, si je n'aurai pas du faire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    imp monuser@XEPDB1 file=LEGACY.DMP  log=LEGACY_IMP.log FULL=Y
    Autre question en passant, comment "vider" (je ne sais pas si le terme est exact) un tablespace ? Est-ce qu'il vaut mieux le détruire et le recréer ?

  4. #4
    Membre émérite
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2013
    Messages
    1 993
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Avril 2013
    Messages : 1 993
    Points : 2 499
    Points
    2 499
    Par défaut
    Hum, bizarre cette erreur de dump trop vieux... tu as le code précis, ça m'intéresse ?
    Sais-tu si ce dump a été créé avec datapump (commande expdp) ou avec exp? S'il a été créé avec expdp, je ne pense pas que tu puisses utiliser imp avec lui.

    Il est habituel de faire un export/import datapump (ou avec l'ancien utilitaire) avec le user SYSTEM, ne t'inquiètes pas pour ça.
    Et quand tu utilisais ton user, tu avais quoi comme message d'erreur? C'est important de mettre les codes sur ce forum car cela aide les gens à y voir plus clair.

    Pour vider un tablespace il n'y a pas de commande miracle, il faut supprimer un par un les objets qui sont dedans.
    Une solution ici : https://www.developpez.net/forums/d1...-users-oracle/
    DBA Oracle
    Rédacteur du blog : dbaoraclesql.canalblog.com

  5. #5
    Membre actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2015
    Messages
    142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2015
    Messages : 142
    Points : 236
    Points
    236
    Par défaut
    Lorsque je tente un import avec la commande impdp j'ai les erreurs suivantes (c'est d'ailleurs pour cela que je suis passé par imp) :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    D:\app\oracle\Dump>impdp system@XE directory=DATA_PUMP_DIR dumpfile=XXXXX.DMP logfile=TEST.log
     
    Import: Release 21.0.0.0.0 - Production on Jeu. Avr. 7 11:48:22 2022
    Version 21.3.0.0.0
     
    Copyright (c) 1982, 2021, Oracle and/or its affiliates.  All rights reserved.
    Mot de passe :
     
    ConnectÚ Ó : Oracle Database 21c Express Edition Release 21.0.0.0.0 - Production
    ORA-39001: valeur d'argument non valide
    ORA-39000: spÚcification de fichier dump erronÚe
    ORA-39143: le fichier dump "D:\app\oracle\admin\xe\dpdump/XXXXX.DMP" peut Ûtre un fichier dump d'export original
    Avec la commande imp j'ai pu importer mon dump et mon tablespace est bien rempli.

    J'ai recréé mon utilisateur en utilisant les commandes suivantes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SQL> alter session set container=XEPDB1;
    SQL> create user MONUSER  identified by 123456;
    SQL> granct connect, ressource to MONUSER;
    Par contre, si j'essaye de mettre mon tablespace par défaut à la création de mon user via le code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SQL> create user MONUSER  identified by 123456 default tablespace MONTABLESPACE;
    J'ai une erreur ORA-00959 : le tablespace 'MONTABLESPACE' n'existe pas

    J'avoue que je tourne en rond.

    Ce que je voudrai c'est avoir un utilisateur avec un tablespace et pouvoir importer mon dump dans ce tablespace.

  6. #6
    Membre émérite
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2013
    Messages
    1 993
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Avril 2013
    Messages : 1 993
    Points : 2 499
    Points
    2 499
    Par défaut
    Contrairement à ce que tu dis, on progresse, c'est bien.

    L'erreur ORA-39143 explique que ton fichier export a été créé par l'ancien utilitaire exp et pas par datapump, donc impossible d'utiliser impdp mais seulement imp.

    L'erreur concernant ton tablespace est claire : tu es dans un container (la pdb XEPDB1) où le tablespace MONTABLESPACE n'existe pas.
    On va voir où il est; certainement dans un autre container (pdb ou cdb$root) ou bien le nom MONTABLESPACE est faux :-)

    Que donnent les commandes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    alter session set container = cdb$root;
    select T.con_id, P.PDB_NAME, T.TABLESPACE_NAME from cdb_tablespaces T, cdb_pdbs P WHERE P.con_id(+) = T.con_id order by 1, 2, 3;
    DBA Oracle
    Rédacteur du blog : dbaoraclesql.canalblog.com

  7. #7
    Membre actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2015
    Messages
    142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2015
    Messages : 142
    Points : 236
    Points
    236
    Par défaut
    La première commande me dit que la session est bien modifiée et la deuxième m'affiche cela (je n'arrive pas à avoir une meilleur sortie graphique) :


    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
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
     
        CON_ID
    ----------
    PDB_NAME
    --------------------------------------------------------------------------------
    TABLESPACE_NAME
    ------------------------------
             1
     
    MONTABLESPACE
     
             1
     
    SYSAUX
     
        CON_ID
    ----------
    PDB_NAME
    --------------------------------------------------------------------------------
    TABLESPACE_NAME
    ------------------------------
     
             1
     
    SYSTEM
     
             1
     
     
        CON_ID
    ----------
    PDB_NAME
    --------------------------------------------------------------------------------
    TABLESPACE_NAME
    ------------------------------
    TEMP
     
             1
     
    UNDOTBS1
     
             1
     
        CON_ID
    ----------
    PDB_NAME
    --------------------------------------------------------------------------------
    TABLESPACE_NAME
    ------------------------------
     
    USERS
     
             3
    XEPDB1
    SYSAUX
     
     
        CON_ID
    ----------
    PDB_NAME
    --------------------------------------------------------------------------------
    TABLESPACE_NAME
    ------------------------------
             3
    XEPDB1
    SYSTEM
     
             3
    XEPDB1
    TEMP
     
        CON_ID
    ----------
    PDB_NAME
    --------------------------------------------------------------------------------
    TABLESPACE_NAME
    ------------------------------
     
             3
    XEPDB1
    UNDOTBS1
     
             3
    XEPDB1
     
        CON_ID
    ----------
    PDB_NAME
    --------------------------------------------------------------------------------
    TABLESPACE_NAME
    ------------------------------
    USERS
     
     
    11 lignes sÚlectionnÚes.

  8. #8
    Membre émérite
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2013
    Messages
    1 993
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Avril 2013
    Messages : 1 993
    Points : 2 499
    Points
    2 499
    Par défaut
    Le tablespace MONTABLESPACE a été créé dans le CDB$ROOT (la colonne con_id vaut 1) et pas dans ta pdb XEPDB1.
    Il faut que tu droppes le tablespace du cdb$root car il n'a rien à faire ici et tu le recrées dans la pdb XEPDB1.

    Attention, lorsque tu fais ton import avec imp, de bien le faire dans la pdb XEPDB1.
    DBA Oracle
    Rédacteur du blog : dbaoraclesql.canalblog.com

  9. #9
    Membre actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2015
    Messages
    142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2015
    Messages : 142
    Points : 236
    Points
    236
    Par défaut
    D'accord, je comprends mieux et je trouve cela logique.

    Au final je dois donc me connecter avec "system" sur XEPDB1 afin de pouvoir créer mon tablespace perso.

    J'importe mon dump (toujours dans XEPDB1) qui va aller se coller dans mon tablespace

    Ensuite, toujours sur XEPDB1 je créer mon user en lui mettant mon tablespace par défaut

    A la fin, je me connecte avec mon user et là, j'ai accès aux données de mon dump

  10. #10
    Membre émérite
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2013
    Messages
    1 993
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Avril 2013
    Messages : 1 993
    Points : 2 499
    Points
    2 499
    Par défaut
    Oui, c'est ça : quand tu es dans une base Oracle en mode CDB, tu dois TOUJOURS vérifier dans quelle container (cdb$root ou pdb) dans lequel tu te trouves avant de lancer tes commandes SQL.
    DBA Oracle
    Rédacteur du blog : dbaoraclesql.canalblog.com

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [tablespace] Donnée utilisateur/donnée de dictionnaire
    Par sisi87 dans le forum Administration
    Réponses: 5
    Dernier message: 21/03/2013, 10h59
  2. tablespace et utilisateur
    Par cobra85 dans le forum Oracle
    Réponses: 2
    Dernier message: 28/01/2011, 17h49
  3. tablespace d'un utilisateur oracle
    Par younes32 dans le forum Administration
    Réponses: 4
    Dernier message: 12/02/2009, 18h03
  4. Changer le tablespace par defaut d'un utilisateur
    Par magboom dans le forum Oracle
    Réponses: 4
    Dernier message: 07/08/2007, 14h55
  5. Réponses: 6
    Dernier message: 21/12/2004, 16h03

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