Use*_*rol 7 oracle maintenance
我需要能够从批处理中删除特定用户(可能有活动会话)而无需任何用户交互.我不关心活动会话,并希望将它们删除并回滚.对于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"
Run Code Online (Sandbox Code Playgroud)
我如何为Oracle(Windows上的10g XE)做到这一点?
我目前的批次是:
sqlplus sys/*** as SYSDBA @delete1.sql >delete.log
sqlplus sys/***@XE as SYSDBA @delete2.sql >>delete.log
Run Code Online (Sandbox Code Playgroud)
其中delete1.sql:
startup force;
exit;
Run Code Online (Sandbox Code Playgroud)
和delete2.sql:
drop user MYUSER cascade;
exit;
Run Code Online (Sandbox Code Playgroud)
与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
Run Code Online (Sandbox Code Playgroud)
并与它一起使用
sqlplus username/password@instance @c:\path\to\drop_user_with_active_session.sql MYUSER
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12857 次 |
| 最近记录: |