删除Oracle中的用户级联

前端之家收集整理的这篇文章主要介绍了删除Oracle中的用户级联前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我需要能够从批处理中删除特定用户(可能有活动会话)而无需任何用户交互.我不关心活动会话,并希望将它们删除并回滚.对于Microsoft sql,我将使用一行执行类似的任务:
osql -E -S localhost -b -Q "use master if ((select name from sysdatabases where name='%DB%') is not null) begin alter database [%DB%] set single_user with rollback immediate drop database [%DB%] end"

我如何为Oracle(Windows上的10g XE)做到这一点?

我目前的批次是:

sqlplus sys/*** as SYSDBA  @delete1.sql >delete.log
sqlplus sys/***@XE as SYSDBA  @delete2.sql >>delete.log

其中delete1.sql

startup force;
exit;

和delete2.sql

drop user MYUSER cascade;
exit;

与MSsql解决方案的瞬间相比,这很难看,并且耗时太长.

如果您使用以下脚本(此处名为drop_user_with_active_sessions.sql),它应该可以工作:
set verify off

begin

  for s in (
    select 
      sid,serial#
    from
      v$session
    where 
      username = '&1'
  ) loop

    execute immediate 
       'alter system kill session ''' || 
        s.sid     || ',' ||
        s.serial# || ''' immediate';

  end loop;

  execute immediate 'drop user &1';

end;
/

exit

并使用它

sqlplus username/password@instance @c:\path\to\drop_user_with_active_session.sql MYUSER

猜你在找的Oracle相关文章