web-dev-qa-db-ja.com

データベースへの接続で一時スペースが使用されるのはなぜですか?

今日の初めに、自動的に作成されたばかりのデータベースへのログインに問題がありました。

実際のボックス(Linux)の場合、sqlplus schema/pw、つまりローカル接続は問題ありませんでしたが、一度接続すると何もできない場合がありました。それ以外の場合、ボックスでセッションを使用するかどうかにかかわらず、sqlplus schema/pw@dbはまったく機能しませんでした。 tnspingとDNSテストでは何も明らかにならず、listener.oraにも問題はありませんでした。

リスナーは接続を受け入れていましたが、データベースに渡していませんでした。これは、リスナーログでtail -fを使用し、接続を受け入れるのを監視することで確認されました。データベースには、ユーザーの詳細や時間などをテーブルに挿入するログオントリガーがありますが、これにはインデックスがなく、ロックもありません。

最終的に問題を追跡しました。データベースの一時表領域を作成するファイルに競合がありました。その結果、通常の25GBではなく5MBの一時スペースしかありませんでした。ログオントリガーを無効にしてから一時テーブルスペースを追加し、すべてを整理しました。このテーブルスペースの一部を使用していたであろういくつかのセッションがすでに実行されていました。

どうやら、Oracleは着信接続を受け入れるためにいくつかの一時表領域を必要とします。このDBで使用された特定のバージョンは9iでしたが、これはすべてに当てはまると思います。

なぜ、そして何のために使われるのですか?

2
Ben

接続プロセス中に、Oracleはユーザーがどのようなアクセス権を持っているかに関する情報を作成します。これは、接続の長さの間静的なままです。 (新しく付与された特権にアクセスする必要がある場合は、再接続する必要があります。)このデータを一時テーブルとして作成することは適切な方法のように思われます。これには一時表領域が必要であり、発生した問題を引き起こす可能性があります。

ロックがないからといって、機内の情報が浮かんでいないわけではありません。データを挿入するトランザクションがコミットされない場合、データベースは、トランザクションがコミットされるまで、行を含むブロックを追跡する必要があります。これを確認するには、2つの接続を開き、コミットを実行する前に、両方がログイントリガーからの情報を表示できるかどうかを確認します。

存在するロックを示すビューや、データベースの管理に役立つその他のさまざまな情報があります。

3
BillThor