上午经理发给我一个Excel,里面有五万多条数据,需要我自建一张表,只需要其中的一些列。把数据导入到表中以后,把备份文件发给他。
这应该是一件很简单的事情吧,可以分成三件事情来看。
首先,针对Excel中的数据设计表,完成创建;
然后,把Excel中的数据导入到Oracle的表中;
最后,导出此表;
我知道,PLSQL可以将csv文件导入到表中;
在点击 工具—》文本导入器 后,需要选择csv等类型的文件作为数据源,同时配置与表的各自段对应关系。在两者完成映射后,点击“导入”即可。
个人心得:
1.有时候把Excel等文件强行改为csv类型的文件,数据未必会被PLSQL识别,这个时候可以把找个以前导入成功的csv,将本次要导入的数据粘贴到老csv文件中,保存时可能会有弹窗提醒,都选“是”。
2.在配置列与字段的映射关系时,通过结果预览来决定是否要对配置进行调整。第一行一般都是列名,所以需要勾选“标题名”。字段开始有三个单选框“相对位置”“绝对位置”“字符”,感觉选字符能够形成",+...+,"的局面,使得第一列被弃用。
在导出表的时候,我是在SQL下进行的导出,出了错,后来才知道,exp命令是在命令行下运行的。
另外,我在运行exp命令时有报错,说是字符集不对照的问题。
所以最后,我直接到A机器进行了操作,因为A的数据库服务器跟客户端环境字符集是一致的。
本次备份工作使我对这块知识重视了起来,于是对以下几个问题进行了自问自答。
一、Oracle数据库的备份与还原有几种方式?答:两种:一种是使用传统的imp/exp命令,另一种是使用数据泵的导入导出命令impdp/expdp。
二、Oracle数据库的备份与还原有几种模式?
就传统的imp/exp命令而言,有四种模式:整个数据库、用户、表、表中符合要求的记录;
1 将数据库jmamcnr完全导出,用户名mam42 密码password 导出到D:\jmamcnr.dmp中
exp mam42/password@jmamcnr file=d:\jmamcnr.dmp full=y
注意mam42的权限
2 将数据库中mam42用户的表导出
exp mam42/password@jmamcnr file=d:\jmamcnr.dmp owner=(mam42)
3 将数据库中的指定表导出
exp mam42/password@jmamcnr file=d:\jmamcnr.dmp tables=(ACM_AWARDS,ACM_COLUMN)
4 将数据库中的指定表导出时,限制某些查询条件
exp mam42/password@jmamcnr file=d:\jmamcnr.dmp tables=(ACM_AWARDS,ACM_COLUMN) query=’where id=2475‘
就数据泵的方式而言, 存在不通过expdp的步骤生成dmp文件而直接导入的方法。
三、数据库服务器和客户端环境字符集不一致的问题:两个数据库服务器的字符集,两个客户端环境字符集,它们在衔接时,可能会有三次字符集的转换。
To minimize data loss due to character set conversions, ensure that the export database, the export user session, the import user session, and the import database all use the same character set.
四、信源和信宿两者版本不一致,即两个Oracle数据库的版本不同的问题;
相同版本的两个库在exp和imp时不存在这个问题;
用expdp进行导出(必须是10G或以上的版本,不然不支持expdp),在导出命令中补充version参数。
高版本--》低版本,从高版本导出时要使用低版本号,向低版本导入时也要使用低版本号;
低版本--》高版本,从低版本导出时要使用低版本号,向高版本导入时则要使用高版本号;
比如说:想将数据库由oracle版本11.2.0.1.0移植到10.2.0.1.0,只需要在导出时设置version='10.2.0.1.0'即可,导入时不用设置version参数