首先新建一个新用户
create user xxx identified by xxx
;
例如如我创建DMSYS用户,但是得注意,Oracle 10g 创建新用户密码要用“”括起来,这个用户是作为导入的用户,创建完毕给它赋予权限:grant create session, connect, resource to DMSYS
但是后来导入的时候发现权限不足,很多东西都导入不进去,比如需要视图权限,还有一些不确定的文件,由于不知道dmp文件中到底有什么,所以通过sys/as sysdba
拥有dba权限的用户直接给创建的用户赋予了超级用户权限。
用户还有用户权限已经搞定,在开始创建一个导入目录:create directory expdp_dmp as 'C:/expdp_dmp'
,
这样,我在C盘建立了一个导入目录作为dmp文件的导出文件夹,然后可以通过查询来查看文件夹是否创建成功。
这些完成后开始导入,导入语句
:imp DMSYS/DMSYS@orcl full=y directory=EXPDP_DMP dumpfile=EXPDAT01.dmp
毫无疑问导入错误,原因是数据泵导出文件,这句话只是一句导出语句,不能导入从数据泵中导出的东西,然后开始上网查资料,发现从10g开始数据泵开始兴起,它可以实现逻辑备份和逻辑恢复,并且能够在数据库用户之间移动对象和在数据库之间移动对象,同时可以实现表空间搬移,使数据保存的更加完整,同时避免了导入时出现的表空间错误。
重新修改导入语言:
impdp DMSYS/DMSYS@orcl full=y directory=EXPDP_DMP
dumpfile=EXPDAT01.dmp
成功连接oracle,开始导入,然后一系列的错误提醒,长长的成千行日志消息,最后停止在了3061个错误,当时我就懵了,打开Navicate连接oracle查看视图,点进去报错表或视图丢失,我又重新导入了一遍,边导入边通过navicate进行查看,发现在导入过程中可以查看的,但是在导入完以后查看仍然出现表或视图丢失。
又重复了好多遍,用原始语句cmd导入,用plsql导入,但是要么报错要么闪退,同时导入一次数据就会保存在oracle中,导致数据库不能添加或者添加错误
然后我打开了日志表,开始了漫长的找错,慢慢的从日志中找到了文件无法建立,跳过table_exists_action
,于是我开始从table_exists_action
入手。查了很多资料发现,可能时表空间的重复或者已经建立,出现这种情况要么删除原表进行操作,要么进行替代,第一条对于完全不知道表格内容的我,(由于当时刚把Oracle11卸载,但是好像没卸载干净,所以和Oracle10发生冲突),在视图工具不可用的情况下只能查表,在显示查清了Oracle10g的默认表格,然后将非默认系统表格挨个删除,但是最够发现失败,导致oracle10g被我搞的千疮百孔,只能重新进行安装,但是我吸取了教训,十分仔细的进行了完全卸载,然后进行了安装,将oracle重新弄好,然后进行了重新导入,然后经过查询oracle导入语言日志,找到了table_exists_action导入参数,在导入语言中加入了table_exists_action=replace,如果存在表就将表替换,同时修改源码为导入的表空间源码。
然后再次导入,出现这样的
错误ORA-31655: 尚未为作业选择数据或元数据对象
ORA-39154: 外部方案中的对象已从导入中删除
这种错误是因为缺少了参数,我于是新加了remap参数中的remap_schema
参数,这是为了实现将一个用户的数据迁入导另一个用户中,但是作为后来者我完全不知道之前导入的用户名是什么,但是通过查找工程的配置文件(hibernate.cfg.xml)我找到了之前所用到的用户的用户名,表空间的名字,通过添加remap_schema=DMSYS
;DMSYS(这里的DMSYS用户名和原来的oracle数据库中的DMSYS发生了冲突,不过,通过sys的dba权限对用户进行了删除重建,所以冲突得到解决)
到此,问题似乎应该完全解决了,同时在导入时发现了之前导入所没出现的表,但是这次直接致命错误,ORA-24019: QUEUE_TABLE 的标识符过长, 不可大于 24 个字符
,这个错误当时搜的时候完全没有解决方法,到这我感觉很遥遥无期,可能自己完不成了,但是,在我查了不少帖子之后,我找到了它的英文版错误queue_table too long
(再次附上解决网址:https://blog.51cto.com/929044991/1148614),但是对于它所提供的解决方式毫无头绪,第一是全英文不好理解,第二是涉及到了表空间的改变,对与其内部不是很了解,但是我从中想到了是不是我安装的Oracle本身的问题,以为这种错误已经牵扯到内部表上了,对于它的修改完全不知道从什么地方下手,只能进行之前的操作。。。。。卸载!没错,再次进行了卸载,并且为了卸干净,我直接把所有关于Oracle的东西进行了删除,一切好了以后,我重新进行了导入,但是为了解决解决它的一些无效字符,跳过对它的解析,直接进行载入,我加入了transform语句,所以最终导入语句:impdp DMSYS/123456@orcl full=y directory=EXPDP_DMP dumpfile=EXPDAT01(1).DMP table_exists_action=replace transform=OID:N
到此,在次以Navicat连接Oracle,DMSYS用户出现了SYS_IMPORT_FULL_01表格,点入可以打开,然后点开主用户system,发现所需要的tdi表格,到此,导入成功。
以上是我在通过Oracle导入dmp文件进行时的总结。