Necesito poder eliminar un usuario específico (que puede tener sesiones activas) del lote sin interacción del usuario. No me preocupan las sesiones activas y quiero que se descarten y se retrotraigan. Para Microsoft SQL que haría tarea similar con una sola línea:soltar cascada de usuario en Oracle
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"
¿Cómo lo hago para Oracle (10g XE en Windows)?
Mi lote actual es:
sqlplus sys/*** as SYSDBA @delete1.sql >delete.log
sqlplus sys/***@XE as SYSDBA @delete2.sql >>delete.log
donde delete1.sql:
startup force;
exit;
y delete2.sql:
drop user MYUSER cascade;
exit;
Esto es feo como el infierno y lleva demasiado tiempo comparando a la fracción de segundo de la solución MSSQL.
En Oracle, un usuario tiene un esquema, por lo que hay mucho más involucrado en eliminar al usuario, especialmente si hay muchos objetos que pertenecen a él. Considere hacer un ALTER USER ... ACCOUNT LOCK y luego soltarlo más tarde en un momento más conveniente. –
¿Con qué frecuencia necesita dejar caer a un usuario? ¿Por qué su rendimiento es un problema? –
Esto es parte de mi proceso de CI (compilar -> volver a crear el esquema db -> ejecutar pruebas de integración) por lo que se ejecuta casi en cada confirmación. Puedo vivir con su rendimiento pero estoy sorprendido de que Oracle no tenga medios para esto. No estoy preguntando algo especial, ¿verdad? – UserControl