1、查看表空间使用情况,是否是满了;
执行下边的sql语句
select a.tablespace_name,
a.bytes / 1024 / 1024 "sum MB",
(a.bytes - b.bytes) / 1024 / 1024 "used MB",
b.bytes / 1024 / 1024 "free MB",
round(((a.bytes - b.bytes) / a.bytes) * 100, 2) "used%"
from (select tablespace_name, sum(bytes) bytes
from dba_data_files
group by tablespace_name) a,
(select tablespace_name, sum(bytes) bytes, max(bytes) largest
from dba_free_space
group by tablespace_name) b
where a.tablespace_name = b.tablespace_name
order by ((a.bytes - b.bytes) / a.bytes) desc;
表空间达到百分99多,可见表空间已经满了
2、給表空间扩容。扩容有两种思路:一是直接扩大原表空间大小,二是 给该表空间增加额外的空间
查看表空间的路径,执行下边的sql
select tablespace_name,
file_id,
file_name,
round(bytes / (1024 * 1024), 0) total_space
from sys.dba_data_files
order by tablespace_name
一、第一种方式:直接扩大原表空间大小
alter database datafile '/home/app/oracle/oradata/orcl/qhtj.dbf' resize 40000m
或者将原来表空间改为自增
--无限制,但是oracle最大一般是32g
alter database datafile '/home/app/oracle/oradata/orcl/qhtj.dbf' autoextend on next 10M maxsize unlimited;
二:第二种方法: 给该表空间增加额外的空间
增加32g有时候报下边的错误
查询ORACLE数据块大小
SQL>show parameter db_block_size
db_block_size Maximum data file size
2kb 8Gb-2kb
4kb 16Gb-4kb
8kb 32Gb-8kb
16kb 64Gb-16kb
32kb 128Gb-32kb
这个限制是由于Oracle的Rowid中使用22位来代表Block号,这22位最多只能代表2^22-1个数据块。
由现象可以看出数据库的db_block_size是8K的,因此创建的每个表空间的大小不能超过32G,否则就会出现以上错误。
将表空间大小改为32G以下即可.
ALTER TABLESPACE TSP_EMR ADD DATAFILE '/oracle_data/orcl/TSP_EMR3.dbf' SIZE 30G AUTOEXTEND ON NEXT 200M MAXSIZE unlimited
这样就会创建成功了,如果数据库的数据量增加很快,可以增加多个这样的表空间,不然表空间满了就得手动想着去扩建。