私の oracle データベースでは、1 つのテーブルスペースで、スペースを追加しても頻繁に「スペース不足」のアラートが表示されます。原因を知るにはどうすればよいですか?
最初はサイズが 1GB のテーブルスペースを作成しましたが、現在はサイズが 4GB です。
その特定のテーブルスペース フォーム dba_segments の使用済みオブジェクトをクエリしているときに、理由を知る方法..セグメント名のみを指定しています。
ここで説明する問題は、表領域スペースのしきい値だと思います。次の方法で現在のしきい値設定を取得できます (ドキュメントも参照してください)。
SELECT * FROM dba_thresholds
WHERE object_type = 'TABLESPACE' AND object_name = <Your tablespace>;
私の場合、それは私に与えます:
METRICS_NAME: Tablespace Space usage
WARNING_OPERATOR: GE
WARNING_VALUE: 85
CRITICAL_OPERATOR: GE
CRITICAL_VALUE: 97
OBSERVATION_PERIOD: 1
CONSECUTIVE_OCCURRENCES: 1
INSTANCE_NAME: database_wide
OBJECT_TYPE: TABLESPACE
OBJECT_NAME: null
STATUS: VALID
メソッドを使用して、しきい値を変更したり、完全に無効にしたりできますDBMS_SERVER_ALERT.SET_THRESHOLD
。たとえば、システムのしきい値を無効にするには、次を使用します。
BEGIN
DBMS_SERVER_ALERT.SET_THRESHOLD(
metrics_id => DBMS_SERVER_ALERT.TABLESPACE_PCT_FULL,
warning_operator => DBMS_SERVER_ALERT.OPERATOR_DO_NOT_CHECK,
warning_value => '0',
critical_operator => DBMS_SERVER_ALERT.OPERATOR_DO_NOT_CHECK,
critical_value => '0',
observation_period => 1,
consecutive_occurrences => 1,
instance_name => NULL,
object_type => DBMS_SERVER_ALERT.OBJECT_TYPE_TABLESPACE,
object_name => NULL);
END;
/
DBA_THRESHOLDS を再度クエリすると、次のようになります。
METRICS_NAME: Tablespace Space usage
WARNING_OPERATOR: DO NOT CHECK
WARNING_VALUE: 0
CRITICAL_OPERATOR: DO_NOT_CHECK
CRITICAL_VALUE: 0
OBSERVATION_PERIOD: 1
CONSECUTIVE_OCCURRENCES: 1
INSTANCE_NAME: database_wide
OBJECT_TYPE: TABLESPACE
OBJECT_NAME: null
STATUS: VALID
dba_segments を使用して、スペースを占有しているものを見つけることができます。
select tablespace_name, sum(bytes)/1024/1024 MB from dba_segments group by tablespace_name order by tablespace_name
これにより、テーブルスペースとその使用状況がリストされます。
select owner, sum(bytes)/1024/1024 mb
from dba_segments
where tablespace_name = 'SYSAUX'
group by owner
order by sum(bytes)/1024/1024 desc, owner
これは、テーブルスペースでユーザー ID が占めるスペースの量をリストします。通常、アラートは何らかの理由で発生するため、アラートを無視するのは賢明なことではありません。
もちろん、特定のユーザーのオブジェクトにズームインし、これを繰り返して、成長しているオブジェクトを見つけることができます。それは読者の練習問題として残しておきます。