zoukankan      html  css  js  c++  java
  • 数据文件及表空间可分配空间与使用空间释义

                                            

    首先要明白一点,AUTOEXTENSIBLE和MAXSIZE属性是数据文件才有的,表空间并不具有该属性。AUTOEXTENSIBLE是指数据文件当前分配的空间用满之后会自动扩展,那扩展到底有边界吗?这个边界就由MAXSIZE参数值确定,虽然可以指定MAXSIZE UNLIMITED,那是不是扩展就是无边无际的呢?当然不是,这时候分两种情况:大文件表空间对应的数据文件,当MAXSIZE为UNLIMITED时,数据文件的大小一方面受文件系统的限制(例如,如果文件系统为FAT32格式,那么此时数据文件最大只可能是4GB),除此之外,它还受数据库BLOCK_SIZE大小的限制,即最大大小为BLOCK_SIZE*(2的32次方-1)——也就是4G个块,以8K大小的BLOCK_SIZE为例,数据文件最大能达32TB(假设当前文件系统文件大小的限制大于32TB);小文件表空间对应的数据文件,当MAXSIZE为UNLIMITED时,自然文件系统的限制是基本限制,除此之外,它还受数据库BLOCK_SIZE大小的限制,即最大大小为BLOCK_SIZE*(2的22次方-1)——也就是4M个块,以8K大小的BLOCK_SIZE为例,数据文件最大只能是32GB(假设当前文件系统文件大小的限制大于32GB)。

    现在我们介绍三个概念:数据文件已分配空间、数据文件已使用空间、数据文件还能分配的空间。

    已分配的空间是指文件系统已经分配给文件的空间大小,但是已分配的空间并非都已经被使用,这其中包括已经用于存储数据的部分和尚未用于存储数据的部分。如下图,已使用部分即黑色区域,尚未使用部分即灰色区域。数据文件的MAXSIZE减去已分配空间,即为数据文件还能分配的空间,即虚线部分。

    概念搞清楚了,那么我们是如何实现对这些不同存储空间的管理的呢?一般我们创建数据文件时,语法是这样的:

    ..datafile size init_allocate_size autoextend on|off step_allocate_size maxsize max_allocate_size;

    init_allocate_size是指初始分配的空间大小,此时因为所有空间均未被使用,所以已使用空间用0。随着数据文件的使用,已使用空间逐渐变大,若已使用空间达到已分配空间大小时,autoextend参数将控制数据文件是否会自动增长。如果autoextend为on,则每次会增加step_allocate_size大小。这样的情况累次发生,直到文件大小达到max_allocate_size。

        用以下的SQL可以查询各数据文件已分配大小、已使用大小、还能分配的空间大小等信息:

    create or replace view dba_datafile_free as

    select a.file_id,a.file_name,a.total_space_mb 已分配空间大小_MB,round(b.free_space_mb,2) 已分配但未使用空间大小_MB,round((a.max_space-a.total_space_mb),2) 还能再分配的空间大小_MB,round(a.max_space,2) 最大可分配空间大小_MB,

    round((a.total_space_mb-b.free_space_mb)/a.total_space_mb*100,2) pct_usage,round(a.total_space_mb/a.max_space*100,2) pct_allocated

    from (select file_id,file_name,bytes/1024/1024 total_space_Mb,decode(maxbytes/1024/1024,0,

    bytes/1024/1024,case when AUTOEXTENSIBLE='YES' then maxbytes/1024/1024

    else bytes/1024/1024 end) max_space

    from dba_data_files )a,(select file_id, sum((bytes)/1024/1024) free_space_Mb

    from dba_free_space group by file_id) b where a.file_id=b.file_id;

        表空间虽然没有AUTOEXTENSIBLE和MAXSIZE属性,但仍然存在已分配空间、已使用空间、还能分配的空间等概念。对于大文件表空间来说,因为一个表空间只对应一个数据文件,因此,表空间的相关"数据"即是数据文件的相关"数据";对于小文件表空间来说,因为一个表空间对应多个数据文件,因此,表空间的相关"数据"是它所对应所有数据文件相关"数据"之和。这里可能会有一个误解,因为小文件表空间的最大可分配空间是其所对应数据文件最大可分配空间之和,假设此时小文件表空间有10个数据文件,每个数据文件最大可分配空间为32G,是不是表空间的最大可使用空间就是320G呢?这里的表空间最大可使用空间,其实应该这样理解,当前(即只包含10个数据文件的情况下)最大可分配空间是320G,但如果为小文件表空间增加了数据文件,其最大可分配空间是会增加的。一个小文件表空间可以包含1024个数据文件,因为,如果可以通过设置一种策略,让小文件表空间在空间即将用满的时候自动增加数据文件,那么小文件表空间的最大可分配空间为32G*1024,即32T。

        同样,用以下的SQL可以查询各表空间已分配大小、已使用大小、还能分配的空间大小等信息:

    create or replace view dba_tablespace_free as

    select a.tablespace_name,a.total_space_mb 已分配空间大小_MB,round(b.free_space_mb,2) 已分配但未使用空间大小_MB,round((a.max_space-a.total_space_mb),2) 还能再分配的空间大小_MB,round(a.max_space,2) 最大可分配空间大小_MB,

    round((a.total_space_mb-b.free_space_mb)/a.total_space_mb*100,2) pct_usage,round(a.total_space_mb/a.max_space*100,2) pct_allocated

    from (select tablespace_name,sum(bytes)/1024/1024 total_space_Mb,decode(sum(maxbytes/1024/1024),0,

    sum(bytes)/1024/1024,sum(case when AUTOEXTENSIBLE='YES' then maxbytes

    else bytes end)/1024/1024) max_space

    from dba_data_files group by tablespace_name)a,(select tablespace_name, sum((bytes)/1024/1024) free_space_Mb

    from dba_free_space group by tablespace_name) b where a.tablespace_name=b.tablespace_name;

  • 相关阅读:
    AJAX请求 $.post方法的使用
    通过jQuery Ajax使用FormData对象上传文件
    iframe跨域访问
    js编码解码
    ajax头像上传
    无边框窗体和用户控件以及权限
    只开启一个窗体和进程以及多线程的操作
    通过一个窗体操作另一个窗体
    流和打印控件用法
    listview和简单的记事本操作
  • 原文地址:https://www.cnblogs.com/6yuhang/p/6598587.html
Copyright © 2011-2022 走看看