关于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中,遇到日期类型应该怎么处理!?

oracle 只导入某用户下所有的表,包括表的数据。但是不要存储过程等。只要导入表。

oralce11g导出dmp然后导入Oracle10g

怎么把本地的存储过程导入oracle到数据库

关于ORACLE数据库导入的问题

使用命令将存储过程查询从 sql 文件导入 Oracle DB