代码之家  ›  专栏  ›  技术社区  ›  The Archetypal Paul

如何确定现有表空间的最大大小

  •  11
  • The Archetypal Paul  · 技术社区  · 15 年前

    我需要确定 MAXSIZE 在创建表空间时为其设置的(Oracle 10g)

    我肯定我漏掉了一些显而易见的东西,但是在 DBA_TABLESPACES .

    5 回复  |  直到 9 年前
        1
  •  10
  •   APC    15 年前

    在11g中,这个查询会给你答案,但我注意到你在10g上,唉 the useful column is missing .

    select tablespace_name, max_size 
    from dba_tablespaces
    /
    

    在10克内你必须

    select tablespace_name
           , initial_extent + (next_extent * (max_extents-1)) as calc_max_size
    from dba_tablespaces 
    /
    

    记住这是 违约 最大尺寸。实际上,您将受到分配给表空间的数据文件大小的限制,这可能远远小于理论上的最大值。

    编辑

    @保罗的评论很中肯。我想正确的答案应该是,表空间的最大大小是一个毫无意义、甚至几乎是虚构的概念。表空间的大小实际上是由它的数据文件决定的,它潜在的最大大小是由可以分配的最大数据文件数决定的。这个 SQL Reference 在这个话题上说:

    • 一个bigfile表空间只包含一个数据文件或tempfile,它可以包含大约40亿(232)个块。对于包含32K块的表空间,单个数据文件或tempfile的最大大小为128 TB,对于包含8K块的表空间,最大大小为32TB。
    • smallfile表空间是一种传统的oracle表空间,它可以包含1022个数据文件或tempfiles,每个数据文件或tempfiles都可以包含大约400万个块(2的幂为22)。

    所以也许这是一个更有用的查询…

    select tablespace_name
           , count(*) as no_of_data_files
           , sum(maxblocks) as max_size
    from dba_data_files
    group by tablespace_name
    /
    

    …但要注意的是,它只适用于当前分配的数据文件。

    编辑2

    maxsize应用于数据文件,而不是表空间。这就是为什么maxsize关键字在 documentation for the filespec clause 而不是创建表空间。

        2
  •  4
  •   Younes    11 年前

    这完全取决于数据文件是否是自动扩展的。

    因此,您可以从dba_data_文件中获得正确的信息:

    • 如果autoextensible设置为yes,则需要maxbytes的总和。

    • 如果autoextensible设置为no,则需要字节总数。

    dba_表空间中的最大值与表空间本身的最大值无关。根据 Oracle documenation 它是

    “默认最大段大小”

    所以正确的问题是:

    select TABLESPACE_NAME, sum(decode(AUTOEXTENSIBLE, 'YES', MAXBYTES, BYTES)) MAX_SIZE
    from   DBA_DATA_FILES
    group  by TABLESPACE_NAME;
    

    它已经在11G上测试过了,但也应该在10G上运行,它给出了每个表空间的最大字节数。

    temp表空间也是这样:

    select TABLESPACE_NAME, sum(decode(AUTOEXTENSIBLE, 'YES', MAXBYTES, BYTES)) MAX_SIZE
    from   DBA_TEMP_FILES
    group  by TABLESPACE_NAME;
    
        3
  •  0
  •   Rob van Laarhoven    15 年前

    maxsize是dba_data_文件的一个属性

        4
  •  0
  •   Gerrit    13 年前

    从dba_data_文件中选择tablespace_name,maxbytes/1024/1024 max_size;

        5
  •  0
  •   k.honsali    11 年前
    select tablespace_name, round(sum(bytes)/1024/1024, 2) as free_space from dba_free_space group by tablespace_name;