执行写入语句的时候,报了下面的异常信息:
ORA-01654: 索引 GDYLSY.PK_ACD1 无法通过 1024 (在表空间 GDYLSY_DATA 中) 扩展
第一反应是表空间不足了,数据没法写入到存储文件中。
更具体的是,ACD1表的索引 PK_ACD1 是自动扩展的,数据的写入使得它需执行自动扩展动作,但扩展所需要的空间占用了 名称为GDYLSY_DATA的表空间,而此表空间不够分配给索引自动扩展。
select sum(bytes/1024/1024) sizeMB from dba_free_space z where z.tablespace_name='GDYLSY_DATA'
还剩 18.56 mb 表空间
SELECT a.tablespace_name,a.table_name,a.index_name,a.initial_extent,a.next_extent FROM user_indexes a WHERE a.index_name='PK_ACD1';
初始 196608, 下一次扩展 1048576 , 1mb
增加表空间:
ALTER TABLESPACE GDYLSY_DATA ADD DATAFILE
'+DATADG/PBE8CD3/440FF24BC46801B0E053BF6480510F0B/DATAFILE/gdylsy_data2.dbf' SIZE 50M
AUTOEXTEND ON NEXT 5M MAXSIZE 100M;
剩余表空间==>>67.5625mb
再次尝试写入,还是报了同样的错误。
再给表空间增加数据文件,这次加一个1000mbDe
alter database GDYLSY_DATA ADD DATAFILE '+DATADG/PBE8CD3/440FF24BC46801B0E053BF6480510F0B/DATAFILE/gdylsy_data3.dbf' size 1000M
AUTOEXTEND ON NEXT 10M MAXSIZE 2000M。
成功写入。
再看剩余表空间:
1236.56mb ? 自动扩展了?==问题解决了,但不太理解
扩展==增加表空间的方式
增加表空间大小的四种方法
Meathod1:给表空间增加数据文件
ALTER TABLESPACE app_data ADD DATAFILE
'D:\ORACLE\PRODUCT\10.2.0\ORADATA\EDWTEST\APP03.DBF' SIZE 50M;
Meathod2:新增数据文件,并且允许数据文件自动增长
ALTER TABLESPACE app_data ADD DATAFILE
'D:\ORACLE\PRODUCT\10.2.0\ORADATA\EDWTEST\APP04.DBF' SIZE 50M
AUTOEXTEND ON NEXT 5M MAXSIZE 100M;
Meathod3:允许已存在的数据文件自动增长
ALTER DATABASE DATAFILE 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\EDWTEST\APP03.DBF'
AUTOEXTEND ON NEXT 5M MAXSIZE 100M;
Meathod4:手工改变已存在数据文件的大小
ALTER DATABASE DATAFILE 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\EDWTEST\APP02.DBF'
RESIZE 100M;
补充:
查询datafile路径的方法
SELECT * FROM dba_data_files a WHERE a.tablespace_name in ('GDYLSY_INDEX','GDYLSY_DATA');