oracle常用通用sql脚本——查询前用户的表空间信息
- 一、查询前用户的表空间信息
- 1、 查询当前用户的所有表空间
- 2、 已G为单位
- 3、 已MB为单位
 
- 二、以上俩段sql查出结果集存在差异的原因
一、查询前用户的表空间信息
1、 查询当前用户的所有表空间
SELECT * FROM dba_tablespace;
2、 已G为单位
SELECT b.tablespace_name tbs_name, -- 表空间名round(b.total / 1024, 2) tbs_realsize, -- 表空间实际大小(G)round(c.tbs_size / 1024, 2) tbs_canresize, -- 表空间可恢复大小(G)round((b.total - nvl(a.free, 0)) / 1024, 2) tbs_used, -- 表空间已使用大小(G)round((b.total - nvl(a.free, 0)) / b.total, 4) * 100 per, -- 表空间使用率%round((c.tbs_size - b.total + nvl(a.free, 0)) / 1024, 2) tbs_canuse  -- 表空间剩余大小(G)FROM (SELECT tablespace_name, round(SUM(bytes) / 1024 / 1024, 0) freeFROM dba_free_spaceGROUP BY tablespace_name) a,(SELECT tablespace_name, round(SUM(bytes) / 1024 / 1024, 0) totalFROM dba_data_filesGROUP BY tablespace_name) b,(SELECT tablespace_name,round(SUM(CASEWHEN autoextensible = 'yes' THENmaxbytesELSEuser_bytesEND) / 1024 / 1024,0) tbs_sizeFROM dba_data_filesGROUP BY tablespace_name) cWHERE a.tablespace_name(+) = b.tablespace_nameAND b.tablespace_name = c.tablespace_name;
SQL> SELECT b.tablespace_name tbs_name,2         round(b.total / 1024, 2) tbs_realsize,3         round(c.tbs_size / 1024, 2) tbs_canresize,4         round((b.total - nvl(a.free, 0)) / 1024, 2) tbs_used,5         round((b.total - nvl(a.free, 0)) / b.total, 4) * 100 per,6         round((c.tbs_size - b.total + nvl(a.free, 0)) / 1024, 2) tbs_canuse7    FROM (SELECT tablespace_name, round(SUM(bytes) / 1024 / 1024, 0) free8            FROM dba_free_space9           GROUP BY tablespace_name) a,10         (SELECT tablespace_name, round(SUM(bytes) / 1024 / 1024, 0) total11            FROM dba_data_files12           GROUP BY tablespace_name) b,13         (SELECT tablespace_name,14                 round(SUM(CASE15                             WHEN autoextensible = 'yes' THEN16                              maxbytes17                             ELSE18                              user_bytes19                           END) / 1024 / 1024,20                       0) tbs_size21            FROM dba_data_files22           GROUP BY tablespace_name) c23   WHERE a.tablespace_name(+) = b.tablespace_name24     AND b.tablespace_name = c.tablespace_name;TBS_NAME                                                     TBS_REALSIZE TBS_CANRESIZE   TBS_USED        PER TBS_CANUSE
------------------------------------------------------------ ------------ ------------- ---------- ---------- ----------
SYSAUX                                                                .54           .54         .5      93.09        .04
UNDOTBS1                                                              .07           .07        .04      50.67        .04
USERS                                                                   0             0          0         40          0
SYSTEM                                                                .66           .66        .66      99.12          0结果集如下:
| TBS_NAME | TBS_REALSIZE | TBS_CANRESIZE | TBS_USED | PER | TBS_CANUSE | 
|---|---|---|---|---|---|
| SYSAUX | .54 | .54 | .5 | 93.09 | .04 | 
| UNDOTBS1 | .07 | .07 | .04 | 50.67 | .04 | 
| USERS | 0 | 0 | 0 | 40 | 0 | 
| SYSTEM | .66 | .66 | .66 | 99.12 | 0 | 
这个SQL查询用于检索数据库中表空间的信息。让我们逐步解释这个查询:
-  主要的SELECT语句检索以下列: - b.tablespace_name as tbs_name:检索表空间的名称。
- ROUND(b.total/1024,2) as tbs_realsize:计算表空间的实际大小(以G为单位),并将结果四舍五入到两位小数。
- ROUND(c.tbs_size/1024,2) as tbs_canresize:计算表空间可以调整大小的空间大小(以G为单位),并将结果四舍五入到两位小数。
- ROUND((b.total-nvl(a.free,0))/1024,2) as tbs_used:计算表空间的已使用空间(以G为单位),并将结果四舍五入到两位小数。
- ROUND((b.total-nvl(a.free,0))/b.total,4)*100 as per:计算表空间使用的百分比,并将结果四舍五入到四位小数。
- ROUND((c.tbs_size - b.total + nvl(a.free,0))/1024,2) as tbs_canuse:计算表空间中可用的空间大小(以G为单位),并将结果四舍五入到两位小数。
 
-  该查询使用三个子查询来收集必要的数据: - 子查询’a’从dba_free_space表中检索每个表空间的可用空间,并按tablespace_name进行分组。
- 子查询’b’从dba_data_files表中检索每个表空间的总空间,并按tablespace_name进行分组。
- 子查询’c’从dba_data_files表中检索每个表空间的总大小,包括可以调整大小的空间,并按tablespace_name进行分组。
 
-  主查询然后使用WHERE子句将这些子查询连接起来,以tablespace_name进行关联。 
总的来说,该查询提供了关于数据库中表空间大小、使用情况和可用空间的详细信息。
3、 已MB为单位
SELECT a.tablespace_name "TBS_NAME", -- 表空间名total / (1024 * 1024) "TBS_REALSIZE(M)", -- 表空间实际大小(M)free / (1024 * 1024) "TBS_CANUSE(M)", -- 表空间剩余大小(M)(total - free) / (1024 * 1024) "TBS_USED(M)", -- 表空间已使用大小(M)round((total - free) / total, 4) * 100 "PRE(%)" -- 表空间使用率 %FROM (SELECT tablespace_name, SUM(bytes) freeFROM dba_free_spaceGROUP BY tablespace_name) a,(SELECT tablespace_name, SUM(bytes) totalFROM dba_data_filesGROUP BY tablespace_name) bWHERE a.tablespace_name = b.tablespace_name;
SQL> SELECT a.tablespace_name "TBS_NAME", -- 表空间名2         total / (1024 * 1024) "TBS_REALSIZE(M)", -- 表空间大小(M)3         free / (1024 * 1024) "TBS_CANUSE(M)", -- 表空间剩余大小(M)4         (total - free) / (1024 * 1024) "TBS_USED(M)", -- 表空间使用大小(M)5         round((total - free) / total, 4) * 100 "PRE(%)" -- 使用率 %6    FROM (SELECT tablespace_name, SUM(bytes) free7            FROM dba_free_space8           GROUP BY tablespace_name) a,9         (SELECT tablespace_name, SUM(bytes) total10            FROM dba_data_files11           GROUP BY tablespace_name) b12   WHERE a.tablespace_name = b.tablespace_name;TBS_NAME                                                     TBS_REALSIZE(M) TBS_CANUSE(M) TBS_USED(M)     PRE(%)
------------------------------------------------------------ --------------- ------------- ----------- ----------
SYSAUX                                                                   550       38.1875    511.8125      93.06
UNDOTBS1                                                                  75       37.0625     37.9375      50.58
USERS                                                                      5         3.125       1.875       37.5
SYSTEM                                                                   680           5.5       674.5      99.19
结果集如下:
| TBS_NAME | TBS_REALSIZE(M) | TBS_CANUSE(M) | TBS_USED(M) | PRE(%) | 
|---|---|---|---|---|
| SYSAUX | 550 | 38.1875 | 511.8125 | 93.06 | 
| UNDOTBS1 | 75 | 37.0625 | 37.9375 | 50.58 | 
| USERS | 5 | 3.125 | 1.875 | 37.5 | 
| SYSTEM | 680 | 5.5 | 674.5 | 99.19 | 
这个SQL查询用于检索数据库中表空间的信息。让我们逐步解释这个查询:
-  主要的SELECT语句检索以下列: - a.tablespace_name “TBS_NAME”:检索表空间的名称。
- total / (1024 * 1024) “TBS_REALSIZE(M)”:计算表空间的实际大小(以MB为单位),并将结果命名为"TBS_REALSIZE(M)"。
- free / (1024 * 1024) “TBS_CANUSE(M)”:计算表空间的剩余大小(以MB为单位),并将结果命名为"TBS_CANUSE(M)"。
- (total - free) / (1024 * 1024) “TBS_USED(M)”:计算表空间的已使用大小(以MB为单位),并将结果命名为"TBS_USED(M)"。
- round((total - free) / total, 4) * 100 “PRE(%)”:计算表空间的使用率,并将结果命名为"PRE(%)"。
 
-  该查询使用两个子查询来收集必要的数据: - 子查询’a’从dba_free_space表中检索每个表空间的可用空间,并按tablespace_name进行分组。
- 子查询’b’从dba_data_files表中检索每个表空间的总空间,并按tablespace_name进行分组。
 
-  主查询然后使用WHERE子句将这些子查询连接起来,以tablespace_name进行关联。 
总的来说,该查询提供了关于数据库中表空间大小、使用情况和可用空间的详细信息,并以MB为单位。
二、以上俩段sql查出结果集存在差异的原因
在这两个SQL查询中,结果存在微小差异的原因可能是由于以下几个因素导致的:
-  数据精度:在SQL中进行浮点数运算时,可能会存在精度损失。这可能导致在计算中产生微小的差异。 
-  舍入方式:在不同的计算中可能使用了不同的舍入方式,例如四舍五入、向上取整等,这可能会导致微小差异。 
-  数据来源:两个SQL查询中的数据来源可能不完全相同,可能存在一些微小的差异,例如数据表中的存储方式不同等。 
-  单位转换:在结果显示时进行了单位转换,可能存在单位转换时的微小差异。 
以上是一些可能导致微小差异的原因。要深入了解这些差异,可能需要对数据和SQL查询进行更详细的分析。