【发布时间】:2014-10-01 08:20:26
【问题描述】:
我正在尝试使用 Oracle 删除已连接的用户。由于 Oracle 是一款出色的软件产品,这个问题已经被问了超过 7 亿次。但是,我找到的所有答案都需要用户输入,并且无法自动发布。典型的答案在这里很好地说明了:https://stackoverflow.com/a/15665694/177293
我想在脚本中执行此操作,而无需人工干预。所以,我正在尝试这样:
BEGIN
FOR i IN (
SELECT sid, serial# from v$session where username = 'MYUSER'
) LOOP
EXECUTE IMMEDIATE 'alter system kill session ''' || i.sid || ',' || i.serial# || ''';';
END LOOP;
END;
有趣的是,在 sqlplus 中会导致:
BEGIN
*
ERROR at line 1:
ORA-00911: invalid character
ORA-06512: at line 5
尝试稍微不同的策略:
BEGIN
FOR i IN (
SELECT
'alter system kill session ''' || sid || ',' || serial# || ''';'
from v$session where username = 'MYUSER'
) LOOP
EXECUTE IMMEDIATE ''|| i ||'';
END LOOP;
END;
结果:
EXECUTE IMMEDIATE ''|| i ||'';
*
ERROR at line 7:
ORA-06550: line 7, column 21:
PLS-00306: wrong number or types of arguments in call to '||'
ORA-06550: line 7, column 3:
PL/SQL: Statement ignored
我希望有一个看起来像这样的完成脚本:
#!/bin/sh
sqlplus system/manager <<EOT
BEGIN
FOR i IN (
SELECT sid, serial# FROM v$session WHERE username = 'MYUSER'
) LOOP
EXECUTE IMMEDIATE 'alter system kill session ''' || i.sid || ',' || i.serial# || ''';';
END LOOP;
END;
DROP USER MYUSER CASCADE;
DROP TABLESPACE MYUSER INCLUDING CONTENTS AND DATAFILES;
CREATE USER MYUSER IDENTIFIED BY password;
ALTER USER MYUSER IDENTIFIED BY password;
GRANT connect, resource TO MYUSER;
exit;
EOT
上面有什么问题?
【问题讨论】: