• 查看表空间使用情况(SQL)


       1: --查询表空间使用情况
       2: SELECT Upper(F.TABLESPACE_NAME)         "表空间名",
       3:        D.TOT_GROOTTE_MB                 "表空间大小(M)",
       4:        D.TOT_GROOTTE_MB - F.TOTAL_BYTES "已使用空间(M)",
       5:        To_char(Round(( D.TOT_GROOTTE_MB - F.TOTAL_BYTES ) / D.TOT_GROOTTE_MB * 100, 2), '990.99')
       6:        || '%'                           "使用比",
       7:        F.TOTAL_BYTES                    "空闲空间(M)",
       8:        F.MAX_BYTES                      "最大块(M)",
       9:        D.AUTOEXTENSIBLE                 "是否自增长",
      10:        D.INCREMENTSIZE                  "自增长大小(M)"
      11: FROM   (SELECT TABLESPACE_NAME,
      12:                Round(Sum(BYTES) / ( 1024 * 1024 ), 2) TOTAL_BYTES,
      13:                Round(Max(BYTES) / ( 1024 * 1024 ), 2) MAX_BYTES
      14:         FROM   SYS.DBA_FREE_SPACE
      15:         GROUP  BY TABLESPACE_NAME) F,
      16:        (SELECT DD.TABLESPACE_NAME,
      17:                Round(Sum(DD.BYTES) / ( 1024 * 1024 ), 2) TOT_GROOTTE_MB,
      18:                AUTOEXTENSIBLE,
      19:                --INCREMENT_BY的单位是数据块的大小。数据块大小一般为默认8k
      20:                Round(INCREMENT_BY * (select value/1024 from v$parameter where name='db_block_size')/1024, 2) INCREMENTSIZE
      21:         FROM   SYS.DBA_DATA_FILES DD
      22:         GROUP  BY DD.TABLESPACE_NAME,AUTOEXTENSIBLE,INCREMENT_BY) D
      23: WHERE  D.TABLESPACE_NAME = F.TABLESPACE_NAME
      24: ORDER  BY  "表空间名"

    显示结果如下:

    image

    参考:https://www.cnblogs.com/xwdreamer/p/3511047.html

    自己进行了一些优化,根据表空间的创建时间进行排序。在优化时之所以没有使用三表直接联合查询(from a,b,c where a.xx=b.xx and b.xx=c.xx的方式),是为了提高查询效率。

    SELECT Upper(A.TABLESPACE_NAME) "表空间名",
           D.TOT_GROOTTE_MB "表空间大小(M)",
           D.TOT_GROOTTE_MB - A.TOTAL_BYTES "已使用空间(M)",
           To_char(Round((D.TOT_GROOTTE_MB - A.TOTAL_BYTES) / D.TOT_GROOTTE_MB * 100,
                         2),
                   '990.99') || '%' "使用比",
           A.TOTAL_BYTES "空闲空间(M)",
           A.MAX_BYTES "最大块(M)",
           D.AUTOEXTENSIBLE "是否自增长",
           D.incrementSize "自增长大小(M)",
           D.CREATE_TIME "创建时间"
      FROM (select T.TABLESPACE_NAME,
                   Round(Sum(T.BYTES) / (1024 * 1024), 2) AS TOTAL_BYTES,
                   Round(Max(T.BYTES) / (1024 * 1024), 2) AS MAX_BYTES
              from SYS.DBA_FREE_SPACE t
             group by t.TABLESPACE_NAME) A,
           (SELECT B.autoextensible,
                   Round(Sum(B.BYTES) / (1024 * 1024), 2) TOT_GROOTTE_MB,
                   Round(B.increment_by *
                         (select value
                            from v$parameter
                           where name = 'db_block_size') / (1024 * 1024),
                         2) AS incrementSize,--自增长大小为数据库中数据块的个数,一个数据块一般为8k
                   B.TABLESPACE_NAME,
                   min(C.CREATION_TIME) CREATE_TIME--获取创建时间,如果有多个数据文件,获取到最初时间
              FROM SYS.DBA_DATA_FILES B, v$DATAFILE C
             WHERE B.file_id = C.FILE#
             group by B.TABLESPACE_NAME, B.autoextensible, B.increment_by) D
     WHERE A.TABLESPACE_NAME = D.TABLESPACE_NAME
     order by D.CREATE_TIME;

    显示结果如下:

    增加使用该表空间的用户信息:

    --1查询表空间以及其使用情况以及对应用户
    select zzz.TABLESPACE_NAME "表空间名",
           zzz.TOT_GROOTTE_MB  "表空间大小(M)",
           zzz.incrementSize   "自增长大小(M)",
           zzz.use_percentage  "使用比",
           zzz.CREATE_TIME     "创建时间",
           xxx.all_users       "用户名"
      from (SELECT A.TABLESPACE_NAME,
                   D.TOT_GROOTTE_MB,
                   D.TOT_GROOTTE_MB - A.TOTAL_BYTES,
                   To_char(Round((D.TOT_GROOTTE_MB - A.TOTAL_BYTES) /
                                 D.TOT_GROOTTE_MB * 100,
                                 2),
                           '990.99') || '%' use_percentage,
                   A.TOTAL_BYTES freesize,
                   A.MAX_BYTES maxblock,
                   D.AUTOEXTENSIBLE,
                   D.incrementSize,
                   D.CREATE_TIME
              FROM (select T.TABLESPACE_NAME,
                           Round(Sum(T.BYTES) / (1024 * 1024), 2) AS TOTAL_BYTES,
                           Round(Max(T.BYTES) / (1024 * 1024), 2) AS MAX_BYTES
                      from SYS.DBA_FREE_SPACE t
                     group by t.TABLESPACE_NAME) A,
                   (SELECT B.autoextensible,
                           Round(Sum(B.BYTES) / (1024 * 1024), 2) TOT_GROOTTE_MB,
                           Round(B.increment_by *
                                 (select value
                                    from v$parameter
                                   where name = 'db_block_size') / (1024 * 1024),
                                 2) AS incrementSize, --自增长大小为数据库中数据块的个数,一个数据块一般为8k
                           B.TABLESPACE_NAME,
                           min(C.CREATION_TIME) CREATE_TIME --获取创建时间,如果有多个数据文件,获取到最初时间
                      FROM SYS.DBA_DATA_FILES B, v$DATAFILE C
                     WHERE B.file_id = C.FILE#
                     group by B.TABLESPACE_NAME, B.autoextensible, B.increment_by) D
             WHERE A.TABLESPACE_NAME = D.TABLESPACE_NAME
             order by D.CREATE_TIME) zzz
      left join (select t.default_tablespace,
                        to_char(wmsys.wm_concat(username)) all_users
                   from dba_users t
                  group by t.default_tablespace) xxx
        on zzz.TABLESPACE_NAME = xxx.default_tablespace

    写的比较急,没有进行仔细优化,希望大家多多指教!

  • 相关阅读:
    vim配置
    mongodb的dockercompose.yml
    上三角 css
    简单的散列函数djb2,sdbm,lose lose
    Vscode中前端比较好用的插件
    git rebase
    lineargradient mixin
    Nginx配置BrowserRouter跟随reactrouter
    Qt:no matching function for call to (类名)::connect()的错误原因总结
    Qt pro文件里如何判断系统是32位或64位
  • 原文地址:https://www.cnblogs.com/Jingkunliu/p/10825522.html
Copyright © 2020-2023  润新知