发布网友 发布时间:2022-04-10 06:31
共4个回答
懂视网 时间:2022-04-10 10:52
网上关于这个错误的介绍十分详细了,大概的意思就是所导入数据的表空间不足,给了几种解决的方法,我在下面罗列一下:
1,尝试删除表空间重新建立更大的。
2,修改表空间大小, ALTER DATABASE DATAFILE ‘表空间数据文件位置‘ size XXXm
3,将表空间设置为自动扩展即可,alter database datafile ‘D:oracleproduct10.2.0oradataoracleperfstat.dbf‘ autoextend on NEXT 200M MAXSIZE UNLIMITED
基本上网上的意见都是侧重在表空间大小上了,可是我在创建表空间的时候已经是自适应大小了啊。可以看到这些表空间最终大小均为32G,这也是块大小为8k是的最大表空间。
既然如此,那不应该会出现这个问题呀?
我又想到,既然这个问题是因为空间不足的原因,那会不会是oracle服务器上的空间不够了,毕竟是个50G的大文件。然后找老师要来了oracle的管理账号上服务器看了一眼。
可以发现,oracle安装在u01这个文件夹下面,通过查询我发现,这个目录属于/dev/mapper/vg_hadoopdn05-lv_root这个分区,而且这个分区明显装不下50g的文件表了。
到这里我才明白,老师装oracle的时候给我挖了坑,把oracle的数据存放位置直接默认在了安装目录下。
于是我考虑将其他分区空闲的空间分过来,并且看到了一个详细的教程:http://blog.csdn.net/wangmuming/article/details/46777285
写的十分详细,然而并没有什么卵用。因为上面那位小哥是在一个物理卷(PV)上进行的,而我们服务器上有好多硬盘,可能我技术不够,用上面的方法并没有成功的吧空闲空间切到oracle安装目录下。
再,,,,,后来,我又想到,既然是表空间数据文件在默认目录下放不下,那我能不能修改系统表空间的存放位置,即:将表空间文件剪贴到空闲空间大的分区,并告诉系统,表空间位置的变化。然后就这么做了,直接把文件复制到了1T的硬盘上,然后用这个SQL命令告诉系统表空间文件的位置变了:alter database rename file ‘原位置‘ to ‘新位置‘;
步骤:offline表空间文件->拷贝表空间数据文件到目的地->删除原文件->修改oracle表空间指向位置->online表空间文件。
然后我又开始导数据了
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
就这样过了一夜,最后数据导完了
哈哈,问题解决,周末可以休息会了。
---------------------------------------------------------------------------------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------------------------------------------------------------------------------
尾巴:
一下记录一下过程中学到的一些sql命令,备忘。
创建表空间create tablespace 表空间名
datafile ‘表空间数据文件名‘ size 1000M autoextend on next 50M maxsize unlimited;
统计表空间详情
SELECT UPPER(F.TABLESPACE_NAME) AS "表空间名称",
ROUND(D.AVAILB_BYTES ,2) AS "表空间大小(G)",
ROUND(D.MAX_BYTES,2) AS "最终表空间大小(G)",
ROUND((D.AVAILB_BYTES - F.USED_BYTES),2) AS "已使用空间(G)",
TO_CHAR(ROUND((D.AVAILB_BYTES - F.USED_BYTES) / D.AVAILB_BYTES * 100,
2), ‘999.99‘) AS "使用比",
ROUND(F.USED_BYTES, 6) AS "空闲空间(G)",
F.MAX_BYTES AS "最大块(M)"
FROM (
SELECT TABLESPACE_NAME,
ROUND(SUM(BYTES) / (1024 * 1024 * 1024), 6) USED_BYTES,
ROUND(MAX(BYTES) / (1024 * 1024 * 1024), 6) MAX_BYTES
FROM SYS.DBA_FREE_SPACE
GROUP BY TABLESPACE_NAME) F,
(SELECT DD.TABLESPACE_NAME,
ROUND(SUM(DD.BYTES) / (1024 * 1024 * 1024), 6) AVAILB_BYTES,
ROUND(SUM(DECODE(DD.MAXBYTES, 0, DD.BYTES, DD.MAXBYTES))/(1024*1024*1024),6) MAX_BYTES
FROM SYS.DBA_DATA_FILES DD
GROUP BY DD.TABLESPACE_NAME) D
WHERE D.TABLESPACE_NAME = F.TABLESPACE_NAME
ORDER BY 4 DESC
删除表空间
DROP TABLESPACE 表空间名 INCLUDING CONTENTS AND DATAFILES CASCADE CONSTRAINTS;
表空间上下线
alter tablespace 表空间名 offline/online;
查询表空间数据文件位置
select file_name , tablespace_name from dba_data_files;
等等,还有一些linux服务器命令。就不一一罗列了。以后需要再查。
最后附上LVM结构图,很有用的一个东西。
关于oracle数据导入过程中遇到的
标签:开始 block mit 系统表 taf 默认 无法 关于 有用
热心网友 时间:2022-04-10 08:00
晕,这个明明是initial的问题,楼上回答有误。你可以看一下建表的相关章节和initial的说明。在我们建表的时候有个参数叫initial_extends,这规定了该表的初始大小,这个值加上min_extends值就是我们建表时该表所占空间了,在倒入过程中如果剩余表空间不够分配,那么当然会报这个错误,可以按如下方法解决:热心网友 时间:2022-04-10 09:18
触发器的问题。exp导出数据时触发器也一起被导出来了(触发器最好不要导出)。热心网友 时间:2022-04-10 10:53
imp userid =xxx triggers=n full=y file=... 试一下 加上triggers=n