在众多数据库软件当中,小编常用的是 Access、SQL Server 和 MySQL。对于 Oracle,可谓是一窍不通。不过,最近手上有几个数据文件需要导入数据库,一看全是 Oracle 数据库的格式,而且通过了解发现,这些格式的数据文件也只有 Oracle 数据库才能便捷的导入。
无奈之下,只好又被“掌握”了一款新的软件。其实说实话,Oracle 的使用并不困难,主要是被 Windows 惯坏了,用习惯了图形化的界面之后,就比较排斥 dos 操作。要说不同的话,Oracle 与SQL Sever、MySQL 的最大差别在于存储文件的结构:
- 在 SQL Sever 数据库中,一个数据库对应一个.MDF 文件和一个.ldf 文件;
- 在 MySQL 数据库中,一个数据库对应一个文件夹,其中每个表对应一个.frm 文件和一个.MYD 文件;
- 而在 Oracle 数据库中,一个实例只有一个数据库,但是可以包含很多不同的用户和表。在 Oracle 中有一个表空间的概念,一个表空间对应着一个或多个物理的数据库文件(.DBF)。一个表空间里面可以有很多表,而一个表又可以对应多个表空间。
言归正传,下面介绍一下 Oracle 中.pde/.dmp/.ctl 数据文件的导入。
.pde 文件
.pde 文件,是 PL/SQL Developer 专用的数据导出文件格式。因此要导入.pde 文件,需要首先安装 PL/SQL Developer。注意,目前只有32位的PL/SQL Developer,需要通过一些修改才能支持 64 位的 Oracle。
软件安装完毕之后,具体数据导入还是比较简单的。通过 Tools > Import Tables 可以打开下图所示的数据导入界面,然后就是根据实际情况,设置相应的参数即可。
.dmp文件
.dmp 文件,是 Oracle 数据库的备份文件格式,一般会用 exp 命令来导出,用 imp 命令来导入。
导出数据库备份文件:
1 |
exp system/manager@orcl file=d:\test.dmp log=d:\log.txt full=y |
导入数据库备份文件:
1 |
imp system/manager@orcl file=d:\test.dmp log=d:\log.txt ignore=y full=y |
其中,full=y 就是把表、存储过程、函数等一起导出,导入时也一样,导入中的 ignore=y 是忽略重复表。
除了使用命令之外,也可以使用 PL/SQL Developer 实现.dmp 文件的导入和导出。
.ctl文件
一种情况是自建.ctl 文件,导入已有的.txt 文件,具体步骤如下:
第一步,准备文本格式的数据文件(注意:使用无签名的UTF-8),比如 C:\test.txt;
第二步,建立控制文件,如 C:\input_test.ctl,其内容如下:
1 2 3 4 5 6 7 8 9 10 |
--1、控制文件标识 load data --2、要输入的数据文件名 infile 'C:\test.txt' --3、向CTXSYS表空间中的表test中追加记录 append into table CTXSYS.test --4、字段终止于X'09',是一个制表符 fields terminated by X'09' --5、定义列对应顺序 (id,username,password,sj) |
其中append为数据装载方式,还有其他选项:
- insert,为缺省方式,在数据装载开始时要求表为空;
- append,在表中追加新记录;
- replace,删除旧记录,替换成新装载的记录;
- truncate,如果要载入的数据与现在的数据相同,载入的数据替换现存的数据。
第三步,在命令提示符下输入命令:
1 |
sqlldr system/manager@orcl, control=C:\input_test.ctl |
如果有.log、.bad 等其他文件,可以附加进去:
1 |
sqlldr system/manager@orcl, control=C:\input_test.ctl log=C:\input_test.log bad=C:\input_test.bad |
另一种情况是.ctl 文件中已经包含了控制命令和需要导入的数据。
这种情况下不要单独新建控制文件,可以直接执行 sqlldr 命令导入数据。
注意事项
总体来说,Oracle 中的数据导入和导出其实并不困难,但却是一件十分麻烦的事情,尤其是对于小编这种似懂非懂的新手。软件这种东西,还是要“知彼知已”,只有深入了解它,才能真正用好它。
小编根据自己血的教训列几条注意事项,给大家参考。建议只针对新手,老鸟请自动忽略。
- 第一,拿到数据之后,第一件事情应该是详细了解数据结构,最重要的是掌握表结构的相关信息;
- 第二,在导入数据之前,需要建好数据依赖的表空间和目标表;
- 第三,认真核对文件清单,比如除了数据文件之外,有没有.log 日志文件。对于非自建的.ctl 文件,务必确保控制命令中没有引用不存在的文件,比如 BADFILE、DISCARDFILE 等;
- 第四,使用命令导入数据时,应确当前用户的权限不低于建表空间和表的用户。
除特别注明外,本站所有文章均为交通人原创,转载请注明出处来自http://www.hijtr.com/oracle-data-import/
如果需要导入的数据涉及大量数据表,可以参考以下方法批量构建:Oracle:利用sql脚本批量建表空间(出处: 交通规划技术论坛)