1.可用这个sql查看每个tablespace的使用率,超过一个值就寄mail或短讯告知
SELECT df.tablespace_name Tablespace,
100 * ROUND (tu.totalusedspace / df.totalspace, 2) UsingPct
FROM ( SELECT tablespace_name,
ROUND (SUM (bytes) / 1048576) TotalSpace
FROM dba_data_files
GROUP BY tablespace_name) df,
( SELECT ROUND (SUM (bytes) / (1024 * 1024)) totalusedspace,
tablespace_name
FROM dba_segments
GROUP BY tablespace_name) tu
WHERE df.tablespace_name = tu.tablespace_name
AND
tu.tablespace_name NOT IN (SELECT tablespace_name
FROM dba_tablespaces
WHERE contents = 'UNDO')
个人的做法是刚上线会设较多的datafile,但每个datafile的初始值较小,而maxsize会设较大,多半为16G~24G
观查1个月后,如datafile都不会很大的成长的话,那就列为稳定时期,会适时的调整datafile size,并且取消maxsize的设定
maxsize可满足你自动扩容的需求,但建议不要,应该由监控来解决tablespace满的问题
2.这个系统有关,datafile 不会只能4g,如只有4G的话,那以现在好几T的db来说,维护datafile就是个成本了
以linux来说,单一datafile 30多g就不能上去了。你要评估单一datafile size的话,要配合tablespace需求
如你规划特定的使用者用专用的tablespace,而你的datafile size为8G,但使用者的使用量只有1G,那你就浪费了7G
datafile很多时,适时调整 db_files / session_max_open_files,建议参考 http://docs.oracle.com/cd/B19306 ... iles.htm#sthref1340
并且datafile一多时,你的系统也要适时调整单oracle系统用户一次可以开起多少datafile,以前有遇过大型db,他的datafile达2千多个,但在系统中设定oracle单次最多只能开起1024个datafile,可想而之的结果就是主机重开后,db当然带不起来
结论就是适时的控制总datafile的数量,适时的放大单一datafile的size,如是小db那就随意了,呵呵~