it-swarm-vi.tech

Thả người dùng được kết nối từ lược đồ cơ sở dữ liệu Oracle 10g

Có cách nào tốt hơn để ngắt kết nối tất cả người dùng khỏi lược đồ cơ sở dữ liệu Oracle 10g hơn là khởi động lại dịch vụ cơ sở dữ liệu Oracle không?

Chúng tôi có một số nhà phát triển sử dụng SQL Developer kết nối với cùng một lược đồ trên một máy chủ Oracle 10g. Vấn đề là khi chúng ta muốn bỏ lược đồ để xây dựng lại nó, chắc chắn ai đó vẫn được kết nối và chúng ta không thể bỏ lược đồ cơ sở dữ liệu hoặc người dùng trong khi ai đó vẫn được kết nối.

Với cùng một mã thông báo, chúng tôi không muốn bỏ tất cả các kết nối sang các lược đồ khác vì những người khác vẫn có thể được kết nối và thử nghiệm với các lược đồ đó.

Bất cứ ai cũng biết một cách nhanh chóng để giải quyết điều này?

61
Joshua Starner

Để tìm các phiên, như một DBA sử dụng

select sid,serial# from v$session where username = '<your_schema>'

Nếu bạn muốn chắc chắn chỉ nhận được các phiên sử dụng SQL Developer, bạn có thể thêm and program = 'SQL Developer'. Nếu bạn chỉ muốn giết các phiên thuộc về một nhà phát triển cụ thể, bạn có thể thêm một hạn chế đối với os_user

Sau đó giết chúng bằng

alter system kill session '<sid>,<serial#>'

(ví dụ. alter system kill session '39,1232')

Một truy vấn tạo ra các tuyên bố tiêu diệt được xây dựng sẵn có thể là

select 'alter system kill session ''' || sid || ',' || serial# || ''';' from v$session where username = '<your_schema>'

Điều này sẽ trả về một tuyên bố tiêu diệt mỗi phiên cho người dùng đó - đại loại như:

alter system kill session '375,64855';

alter system kill session '346,53146';

105
Sten Vesterli

Tìm các phiên hiện có để DB sử dụng truy vấn này:

SELECT s.inst_id,
       s.sid,
       s.serial#,
       p.spid,
       s.username,
       s.program
FROM   gv$session s
       JOIN gv$process p ON p.addr = s.paddr AND p.inst_id = s.inst_id
WHERE  s.type != 'BACKGROUND';

bạn sẽ thấy một cái gì đó như dưới đây. Oracle Sessions

Sau đó, chạy bên dưới truy vấn với các giá trị được trích xuất từ ​​các kết quả trên.

ALTER SYSTEM KILL SESSION '<put above s.sid here>,<put above s.serial# here>';

Vd: ALTER HỆ THỐNG KẾT THÚC '93, 943 ';

17
Chand Priyankara

đề xuất của tôi là khối ẩn danh đơn giản này:

DECLARE
   lc_username   VARCHAR2 (32) := 'user-name-to-kill-here';
BEGIN
   FOR ln_cur IN (SELECT sid, serial# FROM v$session WHERE username = lc_username)
   LOOP
      EXECUTE IMMEDIATE ('ALTER SYSTEM KILL SESSION ''' || ln_cur.sid || ',' || ln_cur.serial# || ''' IMMEDIATE');
   END LOOP;
END;
/
9
RLapinski

Đảm bảo rằng bạn thay đổi hệ thống và kích hoạt phiên bị hạn chế trước khi bạn giết chúng hoặc chúng sẽ nhanh chóng đăng nhập lại vào cơ sở dữ liệu trước khi bạn hoàn thành công việc.

1
tc

chỉ cần sử dụng SQL:

disconnect; 

conn tiger/scott as sysdba;
1
LinuxQuestions.org

Bạn đã thử ALTER HỆ THỐNG KILL SESSION? Nhận SID và SERIAL # từ V $ SESSION cho mỗi phiên trong lược đồ đã cho, sau đó làm

ALTER SCHema KILL SESSION sid, serial #;

0
Dave Costa

Chỉ hai xu của tôi: cách tốt nhất (nhưng có lẽ không phải là nhanh nhất trong ngắn hạn) có lẽ sẽ là cho mỗi nhà phát triển làm việc trên cá thể cơ sở dữ liệu của riêng mình (xem quy tắc số 1 cho công việc cơ sở dữ liệ ).

Cài đặt Oracle trên trạm phát triển đã trở nên không có trí tuệ kể từ Phiên bản Express 10g cơ sở dữ liệu của Oracle .

0
Mac