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 ...
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
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.