Devo essere in grado di rilasciare un utente specifico (che potrebbe avere sessioni attive) dal batch senza alcuna interazione dell'utente. Non mi importa delle sessioni attive e voglio che vengano lasciate cadere e rotolate indietro. Per Microsoft SQL farei operazione simile con una sola riga:drop user cascade in 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"
Come faccio lo faccio per Oracle (10g XE su Windows)?
mio batch corrente è:
sqlplus sys/*** as SYSDBA @delete1.sql >delete.log
sqlplus sys/***@XE as SYSDBA @delete2.sql >>delete.log
dove delete1.sql:
startup force;
exit;
e delete2.sql:
drop user MYUSER cascade;
exit;
Questo è brutto come l'inferno e prende troppo tempo a confronto alla frazione di secondo della soluzione MSSQL.
In Oracle un utente ha uno schema, quindi è molto più impegnato a far cadere l'utente, specialmente se ci sono molti oggetti di sua proprietà. Considera di eseguire ALTER USER ... ACCOUNT LOCK e poi rilasciarlo più tardi in un momento più conveniente. –
Quante volte hai bisogno di eliminare un utente - perché le sue prestazioni sono un problema? –
Questo fa parte del mio processo CI (build -> ricrea lo schema db -> esegue test di integrazione) quindi viene eseguito quasi su ogni commit. Posso vivere con le sue prestazioni ma sono scioccato che Oracle non ha mezzi per questo. Non sto chiedendo qualcosa di speciale, vero? – UserControl