达梦数据库批量统计表所占用的磁盘空间

有时候,我们需要了解数据库的一些表所占用的磁盘空间有多大,虽然通过管理工具可以查看,但是只能一张表一张表的看,效率很慢。因此,可以通过以下方式,批量统计每张表所占用的表磁盘间是多大。

整理思路:首先创建一张临时表,用来存储统计的表所占用磁盘空间数据信息。然后通过脚本计算出表所使用的空间,最后将计算结果批量插入到临时表中即可。

具体脚本如下:

--DROP TABLE TABLESIZE_COUNT;
--创建一张临时表,其中OWNER为模式名,TABLE_NAME为表名,TABLE_USED_PAGES为表使用的空间大小,单位为K,TABLE_USED_SPACE为表占用的空间大小,单位为K
CREATE TABLE TABLESIZE_COUNT (OWNER VARCHAR(100),TABLE_NAME VARCHAR(100),TABLE_USED_PAGES INTEGER,TABLE_USED_SPACE INTEGER);
 
 
DECLARE
V_OWNER VARCHAR2(100);
V_TABNAME VARCHAR2(100);
STMT1  VARCHAR2(200);
STMT2  VARCHAR2(200);
NUM_ROWS1 NUMBER;
NUM_ROWS2 NUMBER;
BEGIN
        FOR REC IN
        (
                SELECT OWNER, TABLE_NAME FROM DBA_TABLES WHERE OWNER='HZQ' ORDER BY 1, 2
        )
        LOOP
                SELECT REC.OWNER, REC.TABLE_NAME INTO V_OWNER, V_TABNAME FROM DUAL;
                
                STMT1 := 'SELECT TABLE_USED_PAGES('''||V_OWNER||''','''||V_TABNAME||''')*(PAGE/1024)';
                EXECUTE IMMEDIATE STMT1 INTO NUM_ROWS1;
                EXECUTE IMMEDIATE 'INSERT INTO TABLESIZE_COUNT(OWNER,TABLE_NAME,TABLE_USED_PAGES) VALUES('''||V_OWNER||''','''||V_TABNAME||''','''||TO_NUMBER(NUM_ROWS1)||''');';
                STMT2 := 'SELECT TABLE_USED_SPACE('''||V_OWNER||''','''||V_TABNAME||''')*(PAGE/1024)';
                EXECUTE IMMEDIATE STMT2 INTO NUM_ROWS2;
                EXECUTE IMMEDIATE 'UPDATE TABLESIZE_COUNT SET TABLE_USED_SPACE= '''||TO_NUMBER(NUM_ROWS2)||''' WHERE OWNER= '''||V_OWNER||''' AND TABLE_NAME = '''||V_TABNAME||''';';
                COMMIT;
        END LOOP;
END;
--TRUNCATE TABLE TABLESIZE_COUNT;
--SELECT COUNT(*) FROM TABLESIZE_COUNT;
SELECT OWNER,TABLE_NAME,TABLE_USED_PAGES "TABLE_USED_PAGES(KB)",TABLE_USED_SPACE "TABLE_USED_SPACE(KB)" FROM TABLESIZE_COUNT;

在脚本执行完成后,直接查看该表信息即可。

示例如下:

达梦数据库批量统计表所占用的磁盘空间_第1张图片

附:

使用DM管理工具查看表所使用的空间大小:

1.选择要查看的模式下的表

达梦数据库批量统计表所占用的磁盘空间_第2张图片

2.右键选择【属性】

达梦数据库批量统计表所占用的磁盘空间_第3张图片

3.在表属性对话框中即可查看到表所使用的空间

达梦数据库批量统计表所占用的磁盘空间_第4张图片

你可能感兴趣的:(达梦数据库,数据库,达梦,达梦数据库,DM8,表大小)