Oracle supprime les utilisateurs et les tablespaces
Oracle est utilisé depuis longtemps et de nombreux nouveaux utilisateurs et tablespaces ont été ajoutés
Pour un. utilisateur unique et espace de table, vous pouvez utiliser la commande suivante pour terminer.
Étape 1 : Supprimer l'utilisateur
drop user ×× cascade
Remarque : La suppression d'un utilisateur supprime uniquement les objets de schéma sous l'utilisateur, mais ne supprime pas l'espace de table correspondant.
Étape 2 : Supprimer l'espace table
DROP TABLESPACE tablespace_name INCLUDING CONTENTS AND DATAFILES;
Cependant, comme il s'agit d'une base de données pour l'environnement de développement, de nombreux espaces utilisateur et table doivent être nettoyés.
Idée :
Exportez tous les utilisateurs et les tablespaces de la base de données, filtrez le système et les tablespaces utiles et chargez les informations utiles dans une table. Ensuite, écrivez une boucle de routine pour supprimer le tablespace qui n'est pas dans la table utile
1 select username,default_tablespace from dba_users;
2. >
3.create table MTUSEFULSPACE ( ID Number(4) NOT NULL PRIMARY KEY, USERNAME varchar2(30), TABLESPACENAME varchar2(60), OWNERNAME varchar2(30) );
declare icount number(2); tempspace varchar2(60); begin for curTable in (select username as allusr,default_tablespace as alltblspace from dba_users) loop tempspace :=curTable.alltblspace; dbms_output.put_line(tempspace); select count(TABLESPACENAME) into icount from MTUSEFULSPACE where TABLESPACENAME = tempspace; if icount=0 then DROP TABLESPACE tempspace INCLUDING CONTENTS AND DATAFILES; end if; commit; end loop; end;
Après l'exécution, l'erreur suivante sera signalée
ORA-06550: 第 10 行, 第 5 列: PLS-00103: 出现符号 "DROP"在需要下列之一时: begin case declare exit for goto if loop mod null pragma raise return select update while with <an identifier> <a double-quoted delimited-identifier> <a bind variable> << close current delete fetch lock insert open rollback savepoint set sql execute commit forall merge pipe 06550. 00000 - "line %s, column %s:\n%s" *Cause: Usually a PL/SQL compilation error. *Action:
Il semble verrouillé. .
Il n'y a aucun moyen, la routine ne peut pas être écrite, nous pouvons donc seulement formuler des instructions et les exécuter.
Exportez l'utilisateur et le tablespace qui doivent être supprimés vers Excel. Utilisez CONCATENATE pour regrouper le SQL.
Publiez-le sur SQLdevelop pour une exécution par lots.
La suppression complète prendra du temps. Cela a pris environ 12 heures pour plus de 100 utilisateurs.
Si vous souhaitez trouver l'emplacement spécifique du fichier de données, vous pouvez utiliser le
select t1.name,t2.name from v$tablespace t1, v$datafile t2 where t1.ts# = t2.ts#;
Code SQL
--Supprimer les espaces table vides, mais ne contenant pas de fichiers physiques
drop tablespace tablespace_name;
--Supprimer les espaces table non vides , mais ne contiennent pas de fichiers physiques Fichier
drop tablespace tablespace_name including contents;
--supprime l'espace de table vide, y compris le fichier physique
drop tablespace tablespace_name including datafiles;
--Supprimer les tablespaces non vides, y compris les fichiers physiques
drop tablespace tablespace_name including contents and datafiles;
--Si d'autres tablespaces Si la table a des clés étrangères et d'autres contraintes associées aux champs de la table dans cet espace table, vous devez ajouter des CONTRAINTES EN CASCADE
drop tablespace tablespace_name including contents and datafiles CASCADE CONSTRAINTS;
Pour plus d'articles sur Oracle sur la suppression d'utilisateurs et d'espaces de table en détail, veuillez faire attention au site Web PHP chinois !