Мне нужно убрать определенного пользователя (который может иметь активные сеансы) из пакета без какого-либо взаимодействия с пользователем. Я не забочусь о активных сеансах и хочу, чтобы их отбрасывали и откатывали назад. Для Microsoft SQL я бы подобную задачу с одной строкой:drop user cascade в 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"
Как я могу сделать это для Oracle (10g XE на Windows)?
Моя текущая партия является:
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.
В Oracle у пользователя есть схема, поэтому в выпадении пользователя гораздо больше участвует, особенно если есть много объектов, принадлежащих ему. Подумайте об использовании ALTER USER ... ACCOUNT LOCK, а затем опустите его позже в более удобное время. –
Как часто вам нужно отказаться от пользователя - почему его производительность является проблемой? –
Это часть моего процесса CI (build -> recreate the db schema -> run integration tests), поэтому он выполняется почти на каждом коммите. Я могу жить с его производительностью, но я в шоке, у Oracle нет средств для этого. Я не спрашиваю что-то особенное, а? – UserControl