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

目录
相关文章
|
2月前
|
存储 Oracle NoSQL
Oracle 表空间、数据文件、schema的关系
Oracle 表空间、数据文件、schema的关系
32 2
|
6月前
|
Oracle 关系型数据库 数据库
9-4 Oracle管理表空间和数据文件
9-4 Oracle管理表空间和数据文件
|
7月前
|
SQL 监控 Oracle
Oracle创建和管理表空间
Oracle创建和管理表空间
59 1
|
1月前
|
Oracle 关系型数据库 数据库
Oracle系列之五:Oracle表空间
Oracle系列之五:Oracle表空间
|
4月前
|
SQL Oracle 关系型数据库
Oracle查看表空间 及表空间是否需要扩展
Oracle查看表空间 及表空间是否需要扩展
26 0
|
4月前
|
Oracle 关系型数据库 MySQL
php7.2安装OCI8扩展支持oracle数据库
做项目的时候,远程的oracle数据库为我们提供一张中间表,我这边业务中的一些数据是需要到oracle数据库中的这张中间表去查询的。 PHP连接oracle数据库。需要用到OCI8的扩展。说来惭愧,工作这么多年,还没有正经的使用过oracle数据库。 mysql数据库的语法跟oracle数据库的语法是不一样的,别跟我似的上来就用mysql的语法来操作oracle数据库……有点丢人了…… 今天我们大概记录一下OCI8扩展的安装过程。
54 0
|
10月前
|
Oracle 关系型数据库
Oracle提示表空间不足ORA-01653:
Oracle提示表空间不足ORA-01653:
89 0
|
11月前
|
SQL
Oracle-USERS表空间解读
Oracle-USERS表空间解读
340 0
|
11月前
|
SQL 存储 监控
Oracle-UNDO表空间解读
Oracle-UNDO表空间解读
424 0
|
11月前
|
存储 SQL Oracle
Oracle-SYSAUX表空间解读
Oracle-SYSAUX表空间解读
117 0
Oracle-SYSAUX表空间解读