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字段,会明显减少表空间占用量。

目录
相关文章
|
6月前
|
存储 Oracle NoSQL
Oracle 表空间、数据文件、schema的关系
Oracle 表空间、数据文件、schema的关系
187 2
|
SQL 监控 Oracle
Oracle创建和管理表空间
Oracle创建和管理表空间
97 1
|
Oracle 关系型数据库 数据库
9-4 Oracle管理表空间和数据文件
9-4 Oracle管理表空间和数据文件
122 0
|
3月前
|
Oracle 关系型数据库 数据库
[oracle]拆分多用户的公共表空间
[oracle]拆分多用户的公共表空间
|
6月前
|
SQL Oracle 关系型数据库
Oracle 数据泵导出导入(映射表空间、Schema)
Oracle 数据泵导出导入(映射表空间、Schema)
|
6月前
|
Oracle 关系型数据库 数据库
Oracle 11gR2学习之三(创建用户及表空间、修改字符集和Oracle开机启动)
Oracle 11gR2学习之三(创建用户及表空间、修改字符集和Oracle开机启动)
|
6月前
|
存储 Oracle 关系型数据库
Oracle表空间:数据王国的疆域规划
【4月更文挑战第19天】Oracle中的表空间是逻辑存储结构,用于存放数据库对象的物理数据,是数据库性能优化和备份恢复的基础。表空间类型多样,如永久和临时表空间,需根据业务需求进行规划和管理。通过监控使用情况、利用自动扩展功能,可有效管理表空间,提高数据访问速度和可靠性。深入理解表空间有助于优化数据库存储和管理。
|
6月前
|
Oracle 关系型数据库
oracle 修改表空间文件路径方法
oracle 修改表空间文件路径方法
|
6月前
|
Oracle 关系型数据库 数据库
Oracle系列之五:Oracle表空间
Oracle系列之五:Oracle表空间
|
6月前
|
SQL Oracle 关系型数据库
Oracle查看表空间 及表空间是否需要扩展
Oracle查看表空间 及表空间是否需要扩展
62 0