web-dev-qa-db-fra.com

ORA-00959: le tablespace n'existe pas mais je peux le voir dans select

Donc, je suis connecté en tant que SYSDBA à Oracle et j'essaie d'exécuter cette commande:

 create user C##demo identified by demopassword;

Cela se termine avec l'utilisateur créé.

Puis je lance:

alter user C##demo default tablespace PAVEL_DATA temporary tablespace PAVEL_TEMP;

Ce qui se termine par erreur:

ORA-00959: l'espace de table 'PAVEL_DATA' n'existe pas

Mais si j'exécute cette commande:

SELECT TABLESPACE_NAME, STATUS, CONTENTS
FROM USER_TABLESPACES;

Je peux voir les tablespaces:

  TABLESPACE_NAME          STATUS    CONTENTS
------------------------------ --------- ---------
SYSTEM                 ONLINE    PERMANENT
SYSAUX                 ONLINE    PERMANENT
TEMP                   ONLINE    TEMPORARY
USERS                  ONLINE    PERMANENT
UNDOTBS2               ONLINE    UNDO
PAVEL_DATA             ONLINE    PERMANENT
PAVEL_TEMP             ONLINE    TEMPORARY

Alors, pourquoi est-ce que j'obtiens que l'espace disque logique d'erreur n'existe pas lors de sa création?

MODIFIER

Suite selon les commentaires, c'est ce que je vois quand je lance select tablespace_name, con_id from cdb_tablespaces:

TABLESPACE_NAME            CON_ID
------------------------------ ----------
PAVEL_DATA              1
PAVEL_TEMP              1
SYSTEM                  4
SYSAUX                  4
TEMP                    4
USERS                   4

TABLESPACE_NAME            CON_ID
------------------------------ ----------
SYSTEM                  3
SYSAUX                  3
TEMP                    3
USERS                   3
EXAMPLE                 3    
PAVEL_TEMP              3
PAVEL_DATA              3

Ainsi, les deux espaces de table sont créés dans DB $ ROOT (id = 1) et dans une base de données enfichable (id> 2). Mais quand je suis connecté à la base de données enfichable, je reçois la même erreur. Ça doit être quelque chose de stupide, mais je suis aveugle maintenant ...

2
Pavel Janicek

Lors de la création d'un utilisateur commun, tout espace de table par défaut, espace de table temporaire ou profil spécifié à l'aide des clauses suivantes doit exister dans tous les conteneurs appartenant à la CDB:

  • ESPACE TABLES PAR DÉFAUT
  • ESPACE TABLES TEMPORAIRE
  • QUOTA
  • PROFIL

Plus

Selon le résultat que vous avez mis à jour, il semble que l'espace de table PAVEL_DATA N'existe pas dans le numéro de conteneur 4.

De plus, la commande CREATE USER Ou ALTER USER Avec la clause DEFAULT TABLESPACE Ou DEFAULT TEMPORARY TABLESPACE Peut réussir si l'espace de table par défaut/temporaire spécifié n'existe pas sur le PDBS qui sont actuellement fermé. Mais vous pouvez obtenir des erreurs lorsque vous essayez d'ouvrir ou de connecter ces PDB nouvellement ouverts à l'aide de l'utilisateur commun que vous venez de créer ou de modifier.

Démonstration:

SQL> create user c##_sales_hr identified by password default tablespace tbs_sales;
create user c##_sales_hr identified by password default tablespace tbs_sales
*
ERROR at line 1:
ORA-65048: error encountered when processing the current DDL statement in
pluggable database ORAPDB1
ORA-00959: tablespace 'TBS_SALES' does not exist


SQL> select tablespace_name, con_id from cdb_tablespaces;

TABLESPACE_NAME                CON_ID
------------------------------ ----------
SYSTEM                         1
SYSAUX                         1
UNDOTBS1                       1
TEMP                           1
USERS                          1
TBS_SALES                      1
SYSTEM                         4
SYSAUX                         4
TEMP                           4
ORAPDB1_TBS1                   4
MGMT_ECM_DEPOT_TS              4

11 rows selected.

SQL> alter session set container=orapdb1;

Session altered.

SQL> create tablespace tbs_sales datafile '+DATA' size 50M;

Tablespace created.

SQL> conn / as sysdba
Connected.
SQL> create user c##_sales_hr identified by password default tablespace tbs_sales;

User created.
2
JSapkota