Tôi cần có khả năng thả người dùng cụ thể (có thể có phiên hoạt động) từ lô mà không có bất kỳ tương tác nào của người dùng. Tôi không quan tâm đến các phiên hoạt động và muốn họ bị loại bỏ và quay trở lại. Đối với Microsoft SQL, tôi sẽ thực hiện nhiệm vụ tương tự với một dòng:thả thác người dùng trong 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"
Làm cách nào để làm điều đó cho Oracle (10g XE trên Windows)?
hàng loạt hiện tại của tôi là:
sqlplus sys/*** as SYSDBA @delete1.sql >delete.log
sqlplus sys/***@XE as SYSDBA @delete2.sql >>delete.log
nơi delete1.sql:
startup force;
exit;
và delete2.sql:
drop user MYUSER cascade;
exit;
Đây là xấu xí như địa ngục và mất nhiều thời gian so sánh đến phần thứ hai của giải pháp MSSQL.
Trong Oracle, người dùng có một lược đồ để có rất nhiều thứ liên quan đến việc bỏ người dùng, đặc biệt nếu có nhiều đối tượng thuộc sở hữu của nó. Cân nhắc thực hiện một NGƯỜI DÙNG ALTER ... TÀI KHOẢN KHÓA và sau đó thả nó sau vào một thời điểm thuận tiện hơn. –
Tần suất bạn cần phải bỏ người dùng - tại sao hiệu suất của nó lại là vấn đề? –
Đây là một phần của quá trình CI của tôi (xây dựng -> tạo lại lược đồ db -> chạy thử nghiệm tích hợp) để nó được thực thi gần như trên mọi cam kết. Tôi có thể sống với hiệu suất của nó nhưng tôi bị sốc Oracle không có phương tiện cho việc này. Tôi không hỏi điều gì đặc biệt, phải không? – UserControl