Je travaille sur un projet de migration de données, et chaque développeur a son propre ensemble de schémas. (Certains développeurs sont partis et certains ensembles de schémas ne sont plus utilisés).
vicsz le
Réponses:
130
Utilisation de sqlplus
sqlplus / comme sysdba
courir:
CHOISIR *
DE dba_users
Si vous souhaitez uniquement les noms d'utilisateur, procédez comme suit:
Assurez-vous cependant que vous disposez des autorisations sur votre utilisateur.
diagonalbatman
2
@Andy: c'est pourquoi j'ai écrit "en tant qu'utilisateur privilégié";)
a_horse_with_no_name
@horse Excuses J'ai raté ça.
diagonalbatman le
@a_horse_with_no_name est-ce que cela signifie qu'un schéma dans oracle signifie que c'est un utilisateur? Je veux dire un schéma = utilisateur? et sous cet utilisateur toutes les tables créées de la même manière que MySQL?
Osama Al-Banna
66
Très probablement, vous voulez
SELECT username
FROM dba_users
Cela vous montrera tous les utilisateurs du système (et donc tous les schémas potentiels). Si votre définition de «schéma» permet à un schéma d'être vide, c'est ce que vous voulez. Cependant, il peut y avoir une distinction sémantique où les gens ne veulent appeler quelque chose un schéma que s'il possède réellement au moins un objet afin que les centaines de comptes d'utilisateurs qui ne posséderont jamais aucun objet soient exclus. Dans ce cas
SELECT username
FROM dba_users u
WHEREEXISTS(SELECT1FROM dba_objects o
WHERE o.owner = u.username )
En supposant que la personne qui a créé les schémas a eu raison d'attribuer des tablespaces par défaut et de supposer que vous n'êtes pas intéressé par les schémas fournis par Oracle, vous pouvez filtrer ces schémas en ajoutant des prédicats sur le default_tablespace, c.-à-d.
SELECT username
FROM dba_users
WHERE default_tablespace notin('SYSTEM','SYSAUX')
ou
SELECT username
FROM dba_users u
WHEREEXISTS(SELECT1FROM dba_objects o
WHERE o.owner = u.username )AND default_tablespace notin('SYSTEM','SYSAUX')
Il n'est pas terriblement rare de rencontrer un système dans lequel quelqu'un a incorrectement donné à un utilisateur non-système un default_tablespacede SYSTEM, alors assurez-vous que les hypothèses sont valables avant d'essayer de filtrer les schémas fournis par Oracle de cette manière.
Si je comprends bien, cette requête affichera tous les schémas contenant des tables. Est-ce correct?
Andrew Spencer
1
Cela ne fonctionnera de manière fiable que dans les anciennes versions d'Oracle. Avec la création de segment différée, il est possible d'avoir un objet sans segment.
Jon Heller
4
Que diriez-vous :
SQL>select*from all_users;
il renverra la liste de tous les utilisateurs / schémas, leur ID et la date de création dans DB:
Ci-dessous sql répertorie tous les schémas dans oracle qui sont créés après l'installation ORACLE_MAINTAINED = 'N' est le filtre. Cette colonne est nouvelle en 12c.
sélectionnez un nom d'utilisateur distinct, ORACLE_MAINTAINED à partir de dba_users où ORACLE_MAINTAINED = 'N';
Réponses:
Utilisation de sqlplus
sqlplus / comme sysdba
courir:
Si vous souhaitez uniquement les noms d'utilisateur, procédez comme suit:
la source
Très probablement, vous voulez
Cela vous montrera tous les utilisateurs du système (et donc tous les schémas potentiels). Si votre définition de «schéma» permet à un schéma d'être vide, c'est ce que vous voulez. Cependant, il peut y avoir une distinction sémantique où les gens ne veulent appeler quelque chose un schéma que s'il possède réellement au moins un objet afin que les centaines de comptes d'utilisateurs qui ne posséderont jamais aucun objet soient exclus. Dans ce cas
En supposant que la personne qui a créé les schémas a eu raison d'attribuer des tablespaces par défaut et de supposer que vous n'êtes pas intéressé par les schémas fournis par Oracle, vous pouvez filtrer ces schémas en ajoutant des prédicats sur le
default_tablespace
, c.-à-d.ou
Il n'est pas terriblement rare de rencontrer un système dans lequel quelqu'un a incorrectement donné à un utilisateur non-système un
default_tablespace
deSYSTEM
, alors assurez-vous que les hypothèses sont valables avant d'essayer de filtrer les schémas fournis par Oracle de cette manière.la source
select distinct owner from dba_objects
?la source
dba_users
(par exemple: erreurORA-00942 : table or view does not exist
)la source
Que diriez-vous :
il renverra la liste de tous les utilisateurs / schémas, leur ID et la date de création dans DB:
la source
Ci-dessous sql répertorie tous les schémas dans oracle qui sont créés après l'installation ORACLE_MAINTAINED = 'N' est le filtre. Cette colonne est nouvelle en 12c.
la source
L'un ou l'autre des SQL suivants renverra tout le schéma dans Oracle DB.
select owner FROM all_tables group by owner;
select distinct owner FROM all_tables;
la source