设为首页 收藏本站
查看: 1485|回复: 0

[经验分享] oracle快速删除schema/username

[复制链接]

尚未签到

发表于 2018-9-5 12:22:28 | 显示全部楼层 |阅读模式
  1.问题:
  oracle该schema下的对象很多,3万个以上,直接执行删除用户命令要很长时间,半小时未删除完成
  2.删除前的准备工作
  一般删除用户都是为了重新导入该用户数据(不删除表空间),涉及到删除该schema的重建,故删除用户前收集下该schema信息
  1)查看用户的默认表空间及临时表空间
  set lines 300
  col username for a30
  select username ,default_tablespace,TEMPORARY_TABLESPACE from dba_users where username='TEST';
  2)查看该用户的权限和角色
  select privilege from dba_sys_privs where grantee='SYSADM'
  union
  select privilege from dba_sys_privs where grantee in (select granted_role from dba_role_privs where grantee='TEST' );
  3)获取获得授予用户权限的脚本
  select 'grant '||privilege||' to SYSADM;' from (select privilege from dba_sys_privs where grantee='SYSADM'
  union
  select privilege from dba_sys_privs where grantee in (select granted_role from dba_role_privs where grantee='SYSADM' ));
  3.快速删除用户办法
  1)停止连接该数据库的应用服务
  (大部分的应用都用重连机制,不关闭应用服务的话应用会反复的连接数据库,即使使用数据库kill session的命令也无法结束,会话会一直存在)
  2)执行脚本获得删除该schema下对象的脚本
  test为要删除的schema
  connect test/test
  spool /home/oracle/del_test.sql;
  prompt --Drop constraint
  select 'alter table '||table_name||' drop constraint '||constraint_name||' ;' from user_constraints where constraint_type='R';
  prompt --truncate table
  select 'truncate table '||table_name ||';' from user_tables;
  prompt --Drop tables
  select 'drop table '||table_name ||' purge;' from user_tables;
  prompt --Drop indexes
  select 'drop index '||index_name ||';' from user_indexes;
  prompt --Drop view
  select 'drop view ' ||view_name||';' from user_views;
  prompt --Drop sequence
  select 'drop sequence ' ||sequence_name||';' from user_sequences;
  prompt --Drop function
  select 'drop function ' ||object_name||';'  from user_objects  where object_type='FUNCTION';
  prompt --Drop procedure
  select 'drop procedure '||object_name||';' from user_objects  where object_type='PROCEDURE';
  prompt --Drop package
  prompt --Drop package body
  select 'drop package '|| object_name||';' from user_objects  where object_type='PACKAGE';
  prompt --Drop database link
  select 'drop database link '|| object_name||';' from user_objects  where object_type='DATABASE LINK';
  spool off;
  3)sqlplus连接到该schema下,执行如上获得的脚本
  执行前查看下该schema下的对象,执行后再次查看下该schema下的对象
  SQL> select object_type,count(*) from user_objects group by object_type;
  4)kill掉连接数据库的session
  select 'alter system kill session '''||sid||','||serial#||''' immediate;' from v$session where username='TEST';
  5)删除该schema
  drop user test cascade;


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-563579-1-1.html 上篇帖子: Oracle 冷备份详解【实战案例】 下篇帖子: oracle 11G AWR不自动清理
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表