Oracle > 表領域の使用率確認・拡張

  • 2014-02-10 16:21:29 (Mon);

表領域の使用率確認

SET LINESIZE 1000
SET PAGESIZE 20
spool c:\表領域.txt

SELECT
	T.TABLESPACE_NAME                                       "領域名",
	TRUNC(T.BYTES/(1024*1024*1024),2)                       "総容量(GB)",
	ROUND((T.BYTES - SUM(F.BYTES)) / (1024*1024*1024),2)    "使用容量(GB)",
	ROUND(SUM(F.BYTES) / (1024*1024*1024),2)                "空き容量(GB)",
	ROUND((1-SUM(F.BYTES) / T.BYTES)*100,2)                 "使用率(%)"
FROM
	SYS.DBA_FREE_SPACE F
	LEFT OUTER JOIN
		(SELECT TABLESPACE_NAME,SUM(BYTES) BYTES 
		 FROM SYS.DBA_DATA_FILES GROUP BY TABLESPACE_NAME) T
	ON T.TABLESPACE_NAME = F.TABLESPACE_NAME
--WHERE
--	T.TABLESPACE_NAME IN ('表領域名')
GROUP BY
	T.TABLESPACE_NAME, T.BYTES;
	
spool off


バッチで呼ぶなら・・
sqlplus -S system/manager@tns < 表領域の使用率確認.sql




表領域を拡張するには


まず確認
conn / as sysdba
select
	f.tablespace_name
	,round(f.bytes/(1024*1024*1024),2)                  "サイズ(GB)"
	,f.autoextensible
	,round(f.increment_by*d.block_size/(1024*1024),2)   "自動拡張サイズ(MB)"
,round(f.maxbytes/(1024*1024*1024),2)               "最大サイズ(GB)"	
from
	dba_data_files f
	inner join dba_tablespaces d
		on f.tablespace_name=d.tablespace_name;


autoextensible が「YES」なら自動拡張なので必要なし。
null の場合は手動で拡張するか、自動拡張に設定変更する。


表領域の拡張方法
①ファイルサイズを変更する
alter database datafile '/opt/oracle/oradata/orcl/users01.dbf'
resize 10G;

②自動拡張する
alter database datafile '/opt/oracle/oradata/orcl/users01.dbf'
autoextend on next 1M maxsize unlimited;

③ファイルを追加する
alter tablespace USERS add datafile '/opt/oracle/oradata/orcl/users02.dbf'
size 5G autoextend on next 10MB maxsize unlimited;

alter tablespace の場合は、ファイルを追加するときしか使えない。
現行の領域を操作する場合は alter database を利用します。



余談(表領域のサイズ unlimited)

余談ですが、サイズを unlimited に設定しても、
dba_data_files の maxbytes には 「unlimited」とは表示されず、数値が表示されます。

理由としては、表領域のブロックサイズによってMAXBYTESの値が変わってしまうからです。
ちなみにブロックサイズ8Kの場合は、32GBが最大となります。

スモール・ファイル表領域の1つのデータ・ファイルの最大サイズ
[表領域のブロックサイズ] × 4194303 (= 2^22 -1) ' ブロックサイズが8KBの場合は、約32GB







最終更新:2014年02月10日 16:21