ORACLE数据库对DATAFILE的管理是从逻辑上划分表空间,通过表空间来管理的。
建立数据库的时必须建立SYSTEM表空间,SYSAUX表空间。
SYSTEM表空间用来管理数据库的数据字典,SYSAUX表空间是SYSTEM的辅助表空间,它分担了SYSTEM表空间数据字典的一些信息,存放性能监控和调优的一些动态视图。还要建立用来回滚的UNDO表空间,还要建立临时表空间,建立完库以后还要给用户建立默认表空间。剩下的表空间就可以根据生产环境自己建立。
一个表空间可能对应一个或多个数据文件。
建立对象时给对象分配表空间,会建立一个段。ORACLE里最小的存储单位为块,但是给段分配空间时不是按块分的,块太小了,分配起来太繁琐,而是按区分的,区又是由块组成的。ORACLE的块又是由操作系统的块组成的。
DATAFILE是由很多的数据块组成。
当在表表空间上建立对象的时候,表空间首先要查找有哪些区没有使用,如果表空间上没有空闲的区则无法再创建对象
对表空间的空闲区的管理有两种方式:一种叫本地管理,一种叫数据字典管理。
数据字典管理是兼容9I之前的数据库,它用两个数据字典 uet$ 和 fet $来存放表空间区的空闲信息,记录哪些区没有使用和已经使用。如果在一个比较繁忙的数据库里,大家都要访问数据字典,会导致数据库的性能受到严重影响。这种管理方式,每个表空间都不知道自己是否还有空间,还要去访问数据字典查看自己表空间的空闲信息。这种方式在9I以后就被淘汰了。
本地管理会在表空间上建立位图,通过位图来管理表空间的空闲区,在位图里用0和1来表示区是否被占用。本地管理也就是自己的空间自己做主,不需要再去访问数据字典。
先简单说一下,表空间的管理方式。后续会继续,举例说明各种表空间使用遇到的问题。
受限ROWID已经在8I时被拓展ROWID取代,取代的原因是使用这个ROWID导致整个数据库只能有1022个数据文件,拓展ROWID 又引入了对象号,受限ROWID中的文件号,也变成了相对文件号。
添加的数据文件是有限制的, 11GR2版本默认是200个,这个通过参数db_files,maxdatafiles参数控制,而maxdatafiles是写在控制文件里的。
有文档指出,db_files<maxdatafiles,如果db_files值已经等于maxdatafiles的值,要想增大db_files,必须增大maxdatafiles,并不是这样,实际上只有修改db_files值就可以。此参数是静态参数,修改必须重启数据库。
后续我们将继续讨论表空间在使用是遇到的具体案例。
SELECT A.TABLESPACE_NAME,
ROUND(A.MAX_SUM_SPACE, 2) "最大空间总和(M)",
ROUND(A.ALLOCATED_SPACE, 2) "已分配总数(M)",
ROUND(A.ALLOCATED_SPACE - B.ALLOCATED_FREE_SPACE, 2) "已使用总数(M)",
ROUND(B.ALLOCATED_FREE_SPACE, 2) "已分配剩余总数(M)",
ROUND(A.MAX_SUM_SPACE - A.ALLOCATED_SPACE + B.ALLOCATED_FREE_SPACE,
2) "最大剩余表空间(M)",
ROUND(A.MAX_SUM_SPACE - A.ALLOCATED_SPACE + B.ALLOCATED_FREE_SPACE,
2) / ROUND(A.ALLOCATED_SPACE, 2) * 100 "asm full,最大剩余/已分配"
FROM (SELECT B.TABLESPACE_NAME,
SUM(DECODE(B.AUTOEXTENSIBLE, 'YES', B.MAXBYTES, B.BYTES) / 1024 / 1024) AS MAX_SUM_SPACE,
SUM(A.BYTES) / 1024 / 1024 AS ALLOCATED_SPACE
FROM V$DATAFILE A, DBA_DATA_FILES B
WHERE A.FILE# = B.FILE_ID
GROUP BY B.TABLESPACE_NAME) A,
(SELECT TABLESPACE_NAME,
ROUND(SUM(BYTES) / 1024 / 1024, 2) AS ALLOCATED_FREE_SPACE
FROM SYS.DBA_FREE_SPACE
GROUP BY TABLESPACE_NAME) B
WHERE A.TABLESPACE_NAME = B.TABLESPACE_NAME
ORDER BY 4 desc;
</maxdatafiles,如果db_files值已经等于maxdatafiles的值,要想增大db_files,必须增大maxdatafiles,并不是这样,实际上只有修改db_files值就可以。此参数是静态参数,修改必须重启数据库。
建立数据库的时必须建立SYSTEM表空间,SYSAUX表空间。
SYSTEM表空间用来管理数据库的数据字典,SYSAUX表空间是SYSTEM的辅助表空间,它分担了SYSTEM表空间数据字典的一些信息,存放性能监控和调优的一些动态视图。还要建立用来回滚的UNDO表空间,还要建立临时表空间,建立完库以后还要给用户建立默认表空间。剩下的表空间就可以根据生产环境自己建立。
一个表空间可能对应一个或多个数据文件。
建立对象时给对象分配表空间,会建立一个段。ORACLE里最小的存储单位为块,但是给段分配空间时不是按块分的,块太小了,分配起来太繁琐,而是按区分的,区又是由块组成的。ORACLE的块又是由操作系统的块组成的。
DATAFILE是由很多的数据块组成。
当在表表空间上建立对象的时候,表空间首先要查找有哪些区没有使用,如果表空间上没有空闲的区则无法再创建对象
对表空间的空闲区的管理有两种方式:一种叫本地管理,一种叫数据字典管理。
数据字典管理是兼容9I之前的数据库,它用两个数据字典 uet$ 和 fet $来存放表空间区的空闲信息,记录哪些区没有使用和已经使用。如果在一个比较繁忙的数据库里,大家都要访问数据字典,会导致数据库的性能受到严重影响。这种管理方式,每个表空间都不知道自己是否还有空间,还要去访问数据字典查看自己表空间的空闲信息。这种方式在9I以后就被淘汰了。
本地管理会在表空间上建立位图,通过位图来管理表空间的空闲区,在位图里用0和1来表示区是否被占用。本地管理也就是自己的空间自己做主,不需要再去访问数据字典。
先简单说一下,表空间的管理方式。后续会继续,举例说明各种表空间使用遇到的问题。
受限ROWID已经在8I时被拓展ROWID取代,取代的原因是使用这个ROWID导致整个数据库只能有1022个数据文件,拓展ROWID 又引入了对象号,受限ROWID中的文件号,也变成了相对文件号。
添加的数据文件是有限制的, 11GR2版本默认是200个,这个通过参数db_files,maxdatafiles参数控制,而maxdatafiles是写在控制文件里的。
有文档指出,db_files<maxdatafiles,如果db_files值已经等于maxdatafiles的值,要想增大db_files,必须增大maxdatafiles,并不是这样,实际上只有修改db_files值就可以。此参数是静态参数,修改必须重启数据库。
后续我们将继续讨论表空间在使用是遇到的具体案例。
SELECT A.TABLESPACE_NAME,
ROUND(A.MAX_SUM_SPACE, 2) "最大空间总和(M)",
ROUND(A.ALLOCATED_SPACE, 2) "已分配总数(M)",
ROUND(A.ALLOCATED_SPACE - B.ALLOCATED_FREE_SPACE, 2) "已使用总数(M)",
ROUND(B.ALLOCATED_FREE_SPACE, 2) "已分配剩余总数(M)",
ROUND(A.MAX_SUM_SPACE - A.ALLOCATED_SPACE + B.ALLOCATED_FREE_SPACE,
2) "最大剩余表空间(M)",
ROUND(A.MAX_SUM_SPACE - A.ALLOCATED_SPACE + B.ALLOCATED_FREE_SPACE,
2) / ROUND(A.ALLOCATED_SPACE, 2) * 100 "asm full,最大剩余/已分配"
FROM (SELECT B.TABLESPACE_NAME,
SUM(DECODE(B.AUTOEXTENSIBLE, 'YES', B.MAXBYTES, B.BYTES) / 1024 / 1024) AS MAX_SUM_SPACE,
SUM(A.BYTES) / 1024 / 1024 AS ALLOCATED_SPACE
FROM V$DATAFILE A, DBA_DATA_FILES B
WHERE A.FILE# = B.FILE_ID
GROUP BY B.TABLESPACE_NAME) A,
(SELECT TABLESPACE_NAME,
ROUND(SUM(BYTES) / 1024 / 1024, 2) AS ALLOCATED_FREE_SPACE
FROM SYS.DBA_FREE_SPACE
GROUP BY TABLESPACE_NAME) B
WHERE A.TABLESPACE_NAME = B.TABLESPACE_NAME
ORDER BY 4 desc;
</maxdatafiles,如果db_files值已经等于maxdatafiles的值,要想增大db_files,必须增大maxdatafiles,并不是这样,实际上只有修改db_files值就可以。此参数是静态参数,修改必须重启数据库。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/31324783/viewspace-2132139/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/31324783/viewspace-2132139/