it-swarm-id.com

Menjatuhkan pengguna yang terhubung dari skema database Oracle 10g

Apakah ada cara yang lebih baik untuk memutuskan secara paksa semua pengguna dari skema database Oracle 10g daripada memulai kembali layanan database Oracle?

Kami memiliki beberapa pengembang yang menggunakan Pengembang SQL yang terhubung ke skema yang sama pada satu server Oracle 10g. Masalahnya adalah ketika kita ingin menghentikan skema untuk membangunnya kembali, pasti seseorang masih terhubung dan kita tidak bisa menghentikan skema database atau pengguna ketika seseorang masih terhubung.

Dengan cara yang sama, kami tidak ingin melepaskan semua koneksi ke skema lain karena orang lain mungkin masih terhubung dan menguji dengan skema tersebut.

Adakah yang tahu cara cepat untuk menyelesaikan ini?

61
Joshua Starner

Untuk menemukan sesi, sebagai penggunaan DBA

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

Jika Anda ingin memastikan hanya untuk mendapatkan sesi yang menggunakan SQL Developer, Anda dapat menambahkan and program = 'SQL Developer'. Jika Anda hanya ingin mematikan sesi milik pengembang tertentu, Anda dapat menambahkan batasan pada os_user

Lalu bunuh mereka dengan

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

(mis. alter system kill session '39,1232')

Kueri yang menghasilkan pernyataan kill yang sudah jadi bisa jadi

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

Ini akan mengembalikan satu pernyataan kill per sesi untuk pengguna itu - sesuatu seperti:

alter system kill session '375,64855';

alter system kill session '346,53146';

105
Sten Vesterli

Temukan sesi yang ada untuk DB menggunakan kueri ini:

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';

anda akan melihat sesuatu seperti di bawah ini. Oracle Sessions

Kemudian, jalankan kueri di bawah ini dengan nilai yang diekstraksi dari hasil di atas.

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

Contoh: ALTER SYSTEM KILL SESSION '93, 943 ';

17
Chand Priyankara

proposal saya adalah blok anonim sederhana ini:

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

Pastikan Anda mengubah sistem dan mengaktifkan sesi terbatas sebelum Anda membunuh mereka atau mereka akan dengan cepat masuk kembali ke database sebelum Anda menyelesaikan pekerjaan Anda.

1
tc

cukup gunakan SQL:

disconnect; 

conn tiger/scott as sysdba;
1

Sudahkah Anda mencoba ALTER SYSTEM KILL SESSION? Dapatkan SID dan SERIAL # dari V $ SESSION untuk setiap sesi dalam skema yang diberikan, lalu lakukan

ALTER SCHEMA MEMBUNUH SESI sid, serial #;

0
Dave Costa

Hanya dua sen saya: cara terbaik (tapi mungkin bukan yang tercepat dalam jangka pendek) mungkin bagi setiap pengembang untuk bekerja pada contoh basis datanya sendiri (lihat aturan # 1 untuk pekerjaan basis data ).

Menginstal Oracle di stasiun pengembang telah menjadi hal yang sulit sejak Oracle Database 10g Express Edition .

0
Mac