ユーザーの表領域で利用可能なスペースを取得する方法(Oracle)

StackOverflow https://stackoverflow.com/questions/5994324

  •  13-11-2019
  •  | 
  •  

質問

私は、特定のDBユーザーの表領域でそれらがスペース不足していることをユーザーに警告する必要があるWebアプリケーションに取り組んでいます。 アプリケーションはDBのシステムユーザーの認証情報を知りません。したがって、DBA_USERS、DBA_FREE_SPACE..ETCのようなビューを照会することはできません。

私の質問は、ユーザーが自分の表領域でそれらのためにどのくらいのスペースがあるかを調べるためのオラクルでは、Oracleにはありますか?

ありがとう!

役に立ちましたか?

解決

データストレージ上で利用可能なビューのみがDBA_FREE_SPACEなどであると考えているため、件名に無知を許してください。

ログに記録されたユーザーには、user_free_spaceがあります。 前述のクエリの修正版ここは私の質問に答えます。

queryは次のとおりです。(ログに記録されたユーザーの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 で空き容量を返す

他のヒント

必要な特権を持つユーザーとして保存されているパッケージを作成します。新しいユーザーを作成する必要があるかもしれません。必要なユーザーにパッケージをパッケージで実行してください。パッケージは、DBAビューにアクセスするために必要なすべての手順と機能を持つ必要がありますが、「多すぎる」情報へのアクセスを避けるために慎重にコーディングされる必要があります。ロジックをカプセル化するために、特権以外のユーザーのアカウントに2番目のパッケージを作成することをお勧めします。

これは、ユーザーが次のように非常に複雑です。

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

    それで、あなたがかなり単純なケースを持っていない限り、あなたは本当にユーザーがはるかに深いレベルでデータベースと対話し、より深いレベルのデータベース - ホリスティックな視点から空き容量を見る必要があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top