Oracle查询单表占用空间实际大小

1、查询”帐户/库”数据占用存储空间大小

select sum(bytes)/1024/1024 as “size(M)” from dba_segments where owner=’帐户名/库名’

2、查询单表数据占用存储空间大小

select sum(bytes)/(1024*1024) as “size(M)” from user_segments

where segment_name=upper(‘表名’);

3、在表空间中,查询占用存储空间最大的表

SELECT * FROM (SELECT SEGMENT_NAME, SUM(BYTES) / 1024 / 1024 MB FROM DBA_SEGMENTS WHERE TABLESPACE_NAME = upper(‘表空间名称’) GROUP BY SEGMENT_NAME ORDER BY 2 DESC) WHERE ROWNUM < 10;

4、在”帐户/库”中,查询占用存储空间最大的表

SELECT owner, segment_name, segment_type, sum(bytes) / 1024 / 1024 "Size (MB)" FROM dba_segments WHERE owner = '你的用户名' GROUP BY owner, segment_name, segment_type ORDER BY (sum(bytes) / 1024 / 1024) DESC;

5、查询某segment_name属于哪个table

select owner,table_name,column_name,segment_name,index_name from dba_lobs a where a.segment_name = '上一步查询到的segment_name名称';

6、如果遇到大表需要清理历史数据,直接批量删除容易锁表,采用大表单表按天清理数据的过程方法:

DECLARE
  begin_date date := to_date('2020-09-01','yyyy-mm-dd');
BEGIN 
  WHILE begin_date < to_date('2023-07-01','yyyy-mm-dd') loop 
    DELETE FROM tablespace_name.table_name WHERE CREATE_TIME >= begin_date and CREATE_TIME < begin_date+1; 
    commit; 
    begin_date := begin_date+1; 
  end loop; 
END; 
/
### Oracle 查询占用空间大小的脚本 在 Oracle 数据库中,查询占用空间大小可以通过多种方式实现。以下是一些常用的查询方法及其对应的 SQL 脚本。 #### 方法一:查询分配给的物理空间 通过 `USER_SEGMENTS` 视图可以查询分配给的物理空间(以字节为单位)。以下是查询脚本: ```sql SELECT segment_name, bytes / 1024 / 1024 AS MB FROM user_segments WHERE segment_type = 'TABLE'; ``` 此脚本返回每个的名称以及分配给该的物理空间大小(以 MB 为单位)[^2]。 #### 方法二:查询实际使用的空间 为了获取实际使用的空间,需要先计算统计信息,然后查询 `NUM_ROWS` 和 `AVG_ROW_LEN` 的乘积。以下是具体脚本: ```sql ANALYZE TABLE <table_name> COMPUTE STATISTICS; SELECT num_rows * avg_row_len / 1024 / 1024 AS USED_MB FROM user_tables WHERE table_name = '<table_name>'; ``` 将 `<table_name>` 替换为具体的名。此脚本返回实际使用的空间大小(以 MB 为单位)[^2]。 #### 方法三:查询空间中的所有占用空间 如果需要查询某个空间中所有占用空间,可以使用以下脚本: ```sql SELECT tablespace_name, SUM(bytes) / 1024 / 1024 AS TOTAL_MB FROM dba_segments WHERE segment_type = 'TABLE' GROUP BY tablespace_name; ``` 此脚本返回每个空间中所有的总占用空间(以 MB 为单位)[^3]。 #### 方法四:查询特定用户或空间下的占用空间 如果需要查询特定用户或空间下的占用空间,可以使用以下脚本: ```sql SELECT owner, tablespace_name, segment_name, SUM(bytes) / 1024 / 1024 AS USED_MB FROM dba_segments WHERE segment_type = 'TABLE' AND owner IN ('<owner>') AND tablespace_name IN ('<tablespace_name>') GROUP BY owner, tablespace_name, segment_name ORDER BY USED_MB DESC; ``` 将 `<owner>` 和 `<tablespace_name>` 替换为具体的用户名和空间名。此脚本返回按占用空间排序的[^3]。 ### 注意事项 - 如果需要查询整个数据库的所有占用空间,请确保当前用户具有足够的权限访问 `DBA_SEGMENTS` 视图。 - 在执行 `ANALYZE TABLE` 命令之前,确保目标存在并且具有适当的权限。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值