关于oracle数据导入过程中遇到的
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于oracle数据导入过程中遇到的相关的知识,希望对你有一定的参考价值。
前几天老师给安排了一个任务,将一个50G的dmp文件导入我们的oracle服务器。因为之前练习过这个了,因此本来认为这是个比较简单的的事情。
就试着直接用PLSQL往服务器上导啊。先用DBA账号登录服务器,添加新用户,为用户分配权限,增加表空间(可自适应增长),然后我就登录新用户开始导入dmp文件了,谁知道直接遇到问题。ORA-01659: 无法分配超出 7 的 MINEXTENTS (在表空间 PERFSTAT 中),就是这个错误,由于没有写随笔的时候没有截图,就只好粘过来文本了。
网上关于这个错误的介绍十分详细了,大概的意思就是所导入数据的表空间不足,给了几种解决的方法,我在下面罗列一下:
1,尝试删除表空间重新建立更大的。
2,修改表空间大小, ALTER DATABASE DATAFILE ‘表空间数据文件位置‘ size XXXm
3,将表空间设置为自动扩展即可,alter database datafile ‘D:\\oracle\\product\\10.2.0\\oradata\\oracle\\perfstat.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数据导入过程中遇到的的主要内容,如果未能解决你的问题,请参考以下文章
将excel中数据用JAVA代码导入到oracle中,遇到日期类型应该怎么处理!?