大家是否有这样的烦恼,想将公司项目变成自己的项目资源库。但是项目完全复制下来到自己机器上运行,发现无法访问远程数据库的错误,为了解决这一困扰,作者尝试了将远程数据库导入到本地数据库的操作,遇到了不小的麻烦,做下记录。
导入前先需要导出linux系统远程库dmp,命令行直接敲:
exp 远程用户名/远程密码@远程地址:远程端口/远程数据库实例名 owner=远程导出的用户 file=导出文件存放路径
exp ecuser/[email protected]:1521/orc2 owner='ecuser' file=d:\ec.dmp
a.win7本地oracle环境搭建
由于linux下装的是oracle 10g,为了能顺利导入到win7本地oracle 中,win7 本地安装的oracle版本需等于或低于10g,作者win7本地用的是oracle 10g.
由于oracle 10g与win7不能很好兼容,win7 64位系统下 oracle 10g的安装需要注意:
选用32位的oracle 10g安装包,暂时没找到装64位的oracle 10g的方法。
安装前,需修改oraparam.ini和refhost.xml,不然无法安装,怎么改可以直接百度,这类文章很多。
改完这两个文件,需要用windows xp sp3兼容模式和管理员身份运行oracle 10g的安装程序,接下来的安装按正常安装流程来就ok了。
b.导入前的准备工作:
--表空间 CREATE TABLESPACE EC DATAFILE 'd:\tablespace\ec.dbf' size 10000M EXTENT MANAGEMENT LOCAL SEGMENT SPACE MANAGEMENT AUTO; --2.建用户 create user jelly identified by tiger default tablespace EC; --3.赋权 grant connect,resource to jelly; grant create any sequence to jelly; grant create any table to jelly; grant delete any table to jelly; grant insert any table to jelly; grant select any table to jelly; grant unlimited tablespace to jelly; grant execute any procedure to jelly; grant update any table to jelly; grant create any view to jelly;
cmd中(与sqlplus区别),直接敲命令如下,开始导入
--导入方式: imp scott/tiger@orcl file=d:\ec.dmp fromuser='ecuser' touser='jelly' ignore=y
如果导入出错,用下面命令可以删除刚才创建的用户和对应的表空间。
--删除用户及用户对象 drop user jelly cascade;
--删除表空间 DROP TABLESPACE EC INCLUDING CONTENTS AND DATAFILES;
c.常见错误及解决链接:
1.值太大而拒绝行:
是由于windows oracle与linux oracle所用的字符集不同导致的。
改win7 本地oracle的字符集:http://jingyan.baidu.com/article/c1465413af2fb20bfcfc4c3e.html
1 conn /as sysdba; 2 3 shutdown immediate; 4 5 startup mount ; 6 7 ALTER SYSTEM ENABLE RESTRICTED SESSION; 8 9 ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0; 10 11 ALTER SYSTEM SET AQ_TM_PROCESSES=0; 12 13 ALTER DATABASE CHARACTER SET ZHS16GBK; 14 --提示我们的字符集:新字符集必须为旧字符集的超集,这时我们可以跳过超集的检查做更改: 15 16 ALTER DATABASE character set INTERNAL_USE ZHS16GBK; 17 18 select * from nls_database_parameters t where t.parameter='NLS_CHARACTERSET'; 19 20 shutdown immediate; 21 22 startup ; 23 24 select * from nls_database_parameters t where t.parameter='NLS_CHARACTERSET';
查看win7 本地oracle字符集命令:select * from nls_database_parameters t where t.parameter='NLS_CHARACTERSET'
2.表空间EC 无法创建INIT区。
是由于创建的表空间太小导致的,建议表空间大小为dmp文件的3倍左右.
如果不确认自己创建的表空间是否满了,可以用下面命令查看表空间已使用大小。
--查看表空间已使用大小 select TABLESPACE_NAME,sum(bytes) from dba_segments where tablespace_name NOT IN ('EC') GROUP BY TABLESPACE_NAME
3.IMP-00003: 遇到 ORACLE 错误 2298
ORA-02298: 无法验证 (JELLY.DICT_ID) - 未找到父项关键字
IMP-00017: 由于 ORACLE 错误 2298, 以下语句失败:
这个暂时可以不用管,解决前面2个问题后,重新导入,项目直接本地数据库,不出意外项目运行起来了。
这个错误,作者暂时也没有太好的解决办法,如果有找到解决办法的童鞋,可以告诉我下。
除博文中链接外,作者还参考了:http://blog.csdn.net/starnight_cbj/article/details/6792364