7

試験問題がありますが、答えが見つかりません。コマンドsidを実行するために必須が必要なのはなぜですか? 構文: sidは「一意の」セッション識別子です現時点で一意であるため、引用符で囲まれています。たとえば、Oracleサーバーはセッションにいくつかのsidを持つことができますが、このセッションが終了した後、このsidを他のセッションに使用できます。OSの類推です。Session#シリアルセッション番号です。セッションカウンターです。サーバーは DB 起動時にカウンターをクリアします。したがって、session# はセッションの一意の識別子です。KILL SESSION
KILL SESSIONALTER SYSTEM KILL SESSION 'sid,session#[@inst_id]' [IMMEDIATE];
Sidpid

コマンドsidに必須である理由がわかりません。KILL SESSIONしか使えないと思いますsession#

ありがとう。

4

3 に答える 3

6

SID と SERIAL# が必要です。オラクルのリファレンスには、次のように書かれています。

SID セッション識別子

SERIAL# セッションのシリアル番号。セッションのオブジェクトを一意に識別するために使用されます。セッションが終了し、別のセッションが同じセッション ID で開始された場合に、セッション レベルのコマンドが正しいセッション オブジェクトに適用されることを保証します。

そのため、SID は一意ですが、再利用できます。したがって、SERIAL# を追加することで、強制終了しようとしていたものと同じ SID を使用する新しく接続されたセッションを強制終了しないことが保証されると思います (コマンドを実行する前に既に切断されている場合)。

審査員のコメントに応じて更新:

なぜこのように実装されているのかはわかりません。ドキュメントに従って実装を理解しているだけです。SID は再利用可能ですが、SID 内の SERIAL# は再利用できません。したがって、例として:

  • [1,1] JOE が接続し、SID 1、SERIAL# 1 が割り当てられる
  • ジョーが切断する
  • [1,2] TOM は接続し、SID 1 (再使用) が割り当てられますが、SERIAL# は 2 に増分されます
  • [2,1] SUSAN が接続し、SID 2、SERIAL# 1 が割り当てられます

なぜこの実装ですか?おそらく、数値サイズを管理しやすくしますか? 競合を最小限に抑えますか? 既に割り当てられているリソース (SID で表される) を再利用しますか? 知らない。

于 2012-05-19T19:25:03.000 に答える
6

見つけた!のシーケンスserial#は循環的です。番号は、使用されている場合は 20 億回のログイン後、使用されているint場合は 32k回後に再利用shortされます。したがって、serial#何も指定せずに使用しても、本当に一意の列挙は提供されません。
でもsid一瞬にして独特。だから、ペアsid,serial#本当にユニークです。セッションを 使用または管理
することはできません。ペアで使用する必要があります。serial#sid

お時間をいただきありがとうございます!

于 2012-05-20T14:21:53.087 に答える
4

これが古いトピックであることは承知していますが、serial# 自体は、特定の時点であっても、一意の識別子に近いものではないことを指摘したいと思います。

SQL> select serial#, count(*) from v$session group by serial#;

   SERIAL#   COUNT(*)
---------- ----------
         1         15
       983          1
         2          1
       505          1
         5          2
      7076          1
         7          2
        58          1
         3          3
         9          1
     22160          1

11 rows selected.

現在、データベースにある 29 のセッションのうち、シリアル番号は 11 しかありません。

編集:これは単一インスタンスのデータベースです。RAC 環境では、インスタンス ID を含めて真に一意のセッションを取得する必要があると私は理解しています (個人的に RAC データベースを扱ったことはありません)。

于 2013-06-27T15:14:51.183 に答える