Oracle表空间扩展-阿里云开发者社区

开发者社区> ~信~仰~> 正文

Oracle表空间扩展

简介: 使用oracle时可能遇到无法通过8192在表空间中扩展错误,原因是数据库的表空间不足。 oralce默认数据块大小为8k,这种情况下,单文件最大为32G,但是默认块大小不能更改,如需更改需要重建数据库。
+关注继续查看

使用oracle时可能遇到无法通过8192在表空间中扩展错误,原因是数据库的表空间不足。

oracle表空间数据文件容量与db_block_size有关,在初始建库时指定DB_BLOCK_SIZE值,后期修改需要重建库,默认值8k。oracle物理文件最大允许4194304个数据块(由操作系统决定),表空间数据文件的最大值为4194304 × db_block_size。因此db_block_size决定了数据文件最大容量:

4k最大表空间:  16384M
8K最大表空间:  32768M
16k最大表空间: 65536M
32K最大表空间: 131072M
64k最大表空间: 262144M

oralce默认数据块大小为8k,这种情况下,单文件最大为32G,但是默认块大小不能更改,如需更改需要重建数据库。

因此当文件达到32g时,可以通过增加数据文件的方式进行表空间扩容。

查看所有表空间:

select tablespace_name, file_id, file_name,round(bytes/(1024*1024),0) total_space
from dba_data_files where tablespace_name='***' 
order by tablespace_name

查看表空间统计量:

SELECT a.tablespace_name "表空间名", 
total "表空间大小", 
free "表空间剩余大小", 
(total - free) "表空间使用大小", 
total / (1024 * 1024 * 1024) "表空间大小(G)", 
free / (1024 * 1024 * 1024) "表空间剩余大小(G)", 
(total - free) / (1024 * 1024 * 1024) "表空间使用大小(G)", 
round((total - free) / total, 4) * 100 "使用率 %" 
FROM (SELECT tablespace_name, SUM(bytes) free 
FROM dba_free_space 
GROUP BY tablespace_name) a, 
(SELECT tablespace_name, SUM(bytes) total 
FROM dba_data_files 
GROUP BY tablespace_name) b 
WHERE a.tablespace_name = b.tablespace_name and a.tablespace_name='***';

增加数据文件个数:

alter tablespace 表空间名称 add datafile '新的数据文件地址' size 数据文件大小

例如:

alter tablespace *** add datafile '/u01/app/oracle/oradata/***.dbf' size 34358689792;

如果数据库表空间扩展较快,需要分析一下是哪些表占用空间过大,是否存在优化空间,查看占用量:

select t.owner,t.segment_name,t.tablespace_name,bytes / (1024 * 1024 * 1024) as "sizes(G)",q.num_rows,t.segment_type
  from dba_segments t
  left join dba_tables q
    on t.segment_name=q.table_name
   and t.owner=q.owner
 --where t.segment_type='TABLE'
   --and t.tablespace_name='***' 
 order by bytes desc

如果表中使用了LOB类型字段,会发现以$$结尾的是LOBSEGMENT,其中保存的数据类型是CLOB或BLOB大数据对象。

当我们建表的时候,oracle对在对应的表空间分配一个segment存放数据,并且会因为数据量的增大而做扩展。但当所建立的表含有lob型的数据时,oracle会为每个lob字段生成一个独立的segment用来存放数据,同时也建立了独立的index segment,oracle对它们是单独管理的。

普通表只会新增一个或两个段对象,类型为TABLE和INDEX,数据存放在TABLE段,索引放在INDEX段。但是LOB列则额外新增了两个段对象,类型为LOBSEGMENT和LOBINDEX,LOBINDEX用于指向LOB段,找出其中的某一部分,所以表中LOB字段存储的是一个地址(或者说是一个指针),通过lobindex能找到在lobSegment存储的实际数据。

因此lobSegment保存了LOB列的真正的数据,所以会非常大,可能会造成无法忍受的表空间占用量,这时候,如果从业务上能避免使用LOB字段,会明显减少表空间占用量。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
备份表空间
      备份表空间指在数据库处于OPEN状态时备份起数据文件的方法。可以备份表空间的所有数据文件,也可以备份表空间的某个数据文件。注意:备份表空间只适用ARCHIVELOG模式。
541 0
innodb表空间加密
表空间加密的注意事项
104 0
探索表空间01_之概念
探索ORACLE_之表空间01_概念      表空间是数据库系统中逻辑的一部分,通常一个数据库包含了一个或多个表空间,一个表空间同时又包含了一个或多个数据文件。
920 0
使用OpenApi弹性释放和设置云服务器ECS释放
云服务器ECS的一个重要特性就是按需创建资源。您可以在业务高峰期按需弹性的自定义规则进行资源创建,在完成业务计算的时候释放资源。本篇将提供几个Tips帮助您更加容易和自动化的完成云服务器的释放和弹性设置。
7751 0
oracle表空间,角色,权限,表,索引,序列号,视图,同义词,约束条件,存储函数和过程,常用数据字典,基本数据字典信息,查看VGA信息,维护表空间,创建表空间等信息
查看当前用户的缺省表空间   SQL>select username,default_tablespace from user_users;   查看当前用户的角色   SQL>select * from user_role_privs;   查看当前用户的系统权限和表级权限   SQL>select * from user_sys_privs;       
1225 0
oracle 查看 用户,用户权限,用户表空间,用户默认表空间。
查看用户和默认表空间的关系。     select   username,default_tablespace   from   dba_users;   1.
763 0
+关注
109
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
文娱运维技术
立即下载
《SaaS模式云原生数据仓库应用场景实践》
立即下载
《看见新力量:二》电子书
立即下载