前言
相信大家在平时的开发或者是运维工作中都遇到过将一个库里的表结构以及数据完整的导入到另外一个库中,我前两天也是遇到了。情形是这样,由于我所负责的这个产品已经上线运营一年了,并且也一直有新的需求不断地迭代,最新一版的开发由于改动比较大,涉及到很多表的数据割接,所以我想到的是应该把生产环境的表同步到开发以及测试环境上,这样有针对性的进行开发和测试,最终上线发生的问题概率就会很多。我使用的是plsql工具来导表
导出dmp
-
首先打开plsq连接我们需要导出的库,然后选择工具——>导出表
-
选择想要导出的表,可以将缓冲区大小设置大点,指定可执行的exp.exe(oracle的安装目录下),指定一下输出的文件,然后直接导出即可
导入dmp
-
同样打开plsql连接需要导入的库,然后打开工具,选择导入表(导入之前把该库所有的表都清掉)
-
然后填下从用户和到用户,从用户就是刚才导出dmp的库的用户名,到用户即当前需要导入dmp的用户,选择导入可执行的文件imp.exe(oracle安装目录下),最后选择刚才导出的dmp文件,点击导入
采坑
-
点击导入之后弹出来一个命令框,显示导入的日志,发现有的表导入成功了,但是有的表缺有报错ORA-00959:tablesapce 'credit100_space' does not exist,百思不得其解,但是发现这些报错的表都有一个共同点,都包含BLOB或者CLOB字段,后来查了一下果然导入包含这两字段的表确实会有这样的问题。
-
接下来就是各种查资料,终于找到了一个完美的解决方法。我们首先用notepad++或者ultraedit编辑器打开aa.dmp,打开之后,将表空间CREDIT100_SPACE替换成我们需要导入库的表空间,然后保存(当然如果dmp文件特别大导致无法使用这些编辑器打开,那就需要换个支持打开大容量的编辑器了),再执行刚才的导入操作就会发现不会再报错了,去库里检查一下表都已经成功的导入进去了。如果我们两个库的表空间是一样的话,那就不会有这样的问题出现。
结语
其实这次导数据不仅仅是遇到了导入时报错的问题,还遇到了其他一些问题,从一开始的不知道怎么解决到最终完美导成功,这中间也是一波三折,总的来说,遇到问题的时候不能总想着别人能够都帮你解决,而是应该自己掌握一套解决问题的方法,通过自己的努力解决的问题我相信映像会更深刻。