11

指定されたdbユーザーのテーブルスペースのスペースが不足していることをユーザーに警告する必要があるWebアプリケーションに取り組んでいます。アプリケーションはdbのシステムユーザーの資格情報を知らないため、dba_users、dba_free_space..etcなどのビューをクエリできません。

私の質問は、Oracleに、ユーザーがテーブルスペースに残っているスペースの量を確認する方法はありますか?

ありがとう!

4

3 に答える 3

21

データストレージで利用可能なビューはdba_free_spaceなどであると信じていたので、この件についての私の無知を許してください。

ログに記録されたユーザーには、user_free_space..ビューがあることに気付きました。ここで言及されているクエリの修正バージョンが私の質問の答えになります。

クエリは次のとおりです:(ログに記録されたユーザーのDEFAULT_TABLESPACEに残っているスペースを取得する)

SELECT
  ts.tablespace_name,
  TO_CHAR(SUM(NVL(fs.bytes,0))/1024/1024, '99,999,990.99') AS MB_FREE
FROM
  user_free_space fs,
  user_tablespaces ts,
  user_users us
WHERE
  fs.tablespace_name(+)   = ts.tablespace_name
AND ts.tablespace_name(+) = us.default_tablespace
GROUP BY
  ts.tablespace_name;

MB単位で空き領域を返します

于 2011-05-16T17:24:40.553 に答える
3

必要な権限を持つユーザーとして保存されたパッケージを作成します。新しいユーザーを作成する必要がある場合があります。パッケージを必要とするすべてのユーザーにパッケージのEXECUTEを付与します。パッケージには、DBAビューにアクセスするために必要なすべての手順と機能が含まれている必要がありますが、「多すぎる」情報にアクセスしないように注意深くコーディングする必要があります。ロジックをカプセル化するために、非特権ユーザーのアカウントに2番目のパッケージを作成することをお勧めします。

于 2011-05-13T16:21:42.897 に答える
2

これは、ユーザーが次のことを行う可能性が非常に高いため、非常に複雑になる可能性があります。

  1. デフォルトの表領域を含め、権限を持つ表領域に十分な領域がある場合でも、「領域不足」エラーを受け取ります。これは、ユーザーがクォータを持っていないテーブルスペースにある別のユーザーが所有するテーブルに挿入するときに発生する可能性があります。この場合、ユーザーはおそらく、空き領域があるかどうかを判断するために必要なビューにアクセスできません。
  2. クォータがあるテーブルスペースに空き領域がない場合でも、データの挿入を続行できます。デフォルトのテーブルスペースにもクォータがない場合があります。

したがって、かなり単純なケースでない限り、ユーザーがデータベースをはるかに深いレベルで操作する方法を十分に認識し、データベース全体の観点から空き領域を確認する必要があります。

于 2012-11-29T15:15:13.423 に答える