ORACLE降级导入导出
ORACLE降级导入导出
我们常要在不同版本的数据库中导入导出,如果从低版本导入到高版本,一般来说问题都不大.可是从高版本导入到低版本,那就蛋疼了,因为低版本永远不知道在它之后出生的高版本是什么样的规则,所以这个比较蛋疼.
今天我就遇到这个问题了,项目现场的数据库是oracle11g的,我自己电脑是oracle10g,平时开发的时候用的都是自己的数据,跟现场数据不一致,而且我们使用了自定义表单,表单都是通过字段配置构出来的,所以很容易与现场的不一致,现场提出一个问题,我在本地折腾半天,就是不能重新,还得先拨VPN,然后修改配置连上现场的数据库.所以最好的解决方案就是把现场的数据库导到我本地来.这样问题就来了,现场11g,我本地10g.尼玛,操蛋问题来了...
折腾好半天,还没搞定,就上网找百老师和谷老师咨询了一下,然后找到一个解决方案,整理一下,跟大家分享下,如果大家有什么比这操蛋方案(虽然解决了,但是毕竟麻烦)更好更方便的,一起分享下呗,just for opensource!
使用oracle的expdp和impdp
1.在服务器上expdb一下,服务器是Linux,切换到oracle用户,进行下面的操作:
1 expdp userid=usr_oa_new/usr_oa_new@192.168.102.202:1521/urpdb schemas=usr_oa_new directory=test dumpfile=usr_oa_new_20130826.dmp logfile=log_20130826.log version=10.02.01 注意: userid=usr_oa_new/usr_oa_new@192.168.102.202:1521/urpdb 不用说了,源数据库的信息 schemas=usr_oa_new 该方案用于指定执行方案模式导出,默认为当前用户方案. directory=test 这里需要用有dba权限的oracle用户登录数据库新建一个目录地址,这里非真正的硬盘物理路径,仅仅相当于一个在oracle中的代号
1 create directory test as '/home/oracle'; 2 grant read,write on directory test to usr_oa_new; dumpfile=usr_oa_new_20130826.dmp以及logfile=log_20130826.log 你懂滴,不用我说了 version=10.02.01 这个很重要,这里指定你希望以哪个版本的oracle的dmp导出,即目标数据库的版本号
至此,导出部分已经OK了.
2.在目标数据库所在服务器上使用impdp,通常情况为windows系统
1 impdp userid=usr_oa_cumt_new/usr_oa_cumt_new@sunhao remap_schema=usr_oa_new:usr_oa_cumt_new directory=test_2 dumpfile=usr_oa_new_20130826.dmp logfile=impdp.log table_exists_action=replace version=10.02.01 注意: userid=usr_oa_cumt_new/usr_oa_cumt_new@sunhao the same as expdp remap_schema=usr_oa_new:usr_oa_cumt_new 如果目标用户与源用户一致,则可以不写,否则,格式为remap_schema=源:目标 directory,dumpfile,logfile the same as expdp table_exists_action=replace 表存在的时候怎么办 version=10.02.01 要导入的数据库版本