web-dev-qa-db-ja.com

Oracle 10gデータベーススキーマからの接続ユーザーの削除

Oracleデータベースサービスを再起動するよりも、すべてのユーザーをOracle 10gデータベーススキーマから強制的に切断するより良い方法はありますか?

SQL Developerを使用して、単一のOracle 10gサーバー上の同じスキーマに接続する開発者が数人います。問題は、スキーマを削除して再構築する場合、必然的に誰かがまだ接続しているため、誰かがまだ接続している間はデータベーススキーマまたはユーザーを削除できないことです。

同様に、他のスキーマへのすべての接続をドロップしたくありません。なぜなら、他の人がまだ接続されていて、それらのスキーマでテストしているからです。

誰でもこれを解決する簡単な方法を知っていますか?

61
Joshua Starner

セッションを見つけるには、DBAとして使用します

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

SQL Developerを使用するセッションのみを取得したい場合は、and program = 'SQL Developer'を追加できます。特定の開発者に属するセッションのみを終了する場合は、os_userに制限を追加できます

そして、それらを殺します

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

(例:alter system kill session '39,1232'

既製のキルステートメントを生成するクエリは、

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

これにより、そのユーザーのセッションごとに1つのkillステートメントが返されます。

alter system kill session '375,64855';

alter system kill session '346,53146';

105
Sten Vesterli

このクエリを使用して、DBへの既存のセッションを検索します。

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

以下のようなものが表示されます。 Oracle Sessions

次に、上記の結果から抽出された値で以下のクエリを実行します。

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

例:ALTER SYSTEM KILL SESSION '93、943 ';

17

私の提案は、この単純な匿名ブロックです。

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

強制終了する前にシステムを変更し、制限されたセッションを有効にしてください。そうしないと、作業を完了する前にデータベースにすばやくログインしてしまいます。

1
tc

sQLを使用するだけです。

disconnect; 

conn tiger/scott as sysdba;
1

ALTER SYSTEM KILL SESSIONを試しましたか?指定されたスキーマの各セッションのV $ SESSIONからSIDとSERIAL#を取得し、実行します

ALTER SCHEMA KILL SESSION sidserial#;

0
Dave Costa

ちょうど私の2セント:最良の方法(ただし、短期的にはおそらく最速ではありません)は、おそらく各開発者が自分のデータベースインスタンスで作業することです( rule#1 for database work )。

Oracle Database 10g Express Edition 以来、開発者ステーションへのOracleのインストールは非常に簡単になりました。

0
Mac