To quickly recreate a user schema without touching his privs and roles, this is faster than drop user cascade and create user (followed by grant...): --Logon to the schema you want to cleanup (dropping tables first makes dropping other objects much easier): --Remove "purge" if pre-10g select 'drop table ' || table_name || ' cascade constraints purge;' from user_tables; select 'drop ' || object_type || ' "' || object_name || '";' from user_objects; --For 10g (to avoid dropping objects already in recycle bin, i.e. ORA-38301: can not perform DDL/DML over objects in Recycle Bin): select 'drop ' || object_type || ' "' || object_name || '";' from user_objects where object_name not in (select object_name from user_recyclebin); --From a privileged account (remove "purge" if pre-10g; add double quotes for Java objects, but Java objects may not be compiled --unless resolver is correctly specified; better to compile as owner, or after "alter session set current_schema=theowner"): --Provide the correct schema when prompted set pages 1000 select 'drop table &&owner' || '.' || table_name || ' cascade constraints purge;' from dba_tables where owner = '&&owner' order by 1; select 'drop ' || object_type || ' &&owner' || '."' || object_name || '";' from dba_objects where owner = '&&owner' order by 1; Verify and then run the generated SQLs. -- Get user names and encrypted passwords for users select 'create user ' || username || ' identified by values ' || '''' || password || '''' || ' default tablespace ' || default_tablespace || ' temporary tablespace ' || temporary_tablespace || ' profile ' || profile || ';' from dba_users; -- Get associated role grants for users extracted above select 'grant ' || t1.granted_role || ' to ' || t2.username || (decode(admin_option,'YES',' with admin option','NO','')) || ';' from dba_role_privs t1, dba_users t2 where t1.grantee = t2.username;