oracle导入dmp文件报错IMP-00019,IMP-00003,ORA-00001

oracle导入dmp文件报错IMP-00019,IMP-00003,ORA-00001,第1张

oracle导入dmp文件报错IMP-00019,IMP-00003,ORA-00001是设置错误造成的,解决方法为:

1、找一台配置比较好的电脑安装服务器版本的 *** 作系统,目前常见的有Windows 2008 / 2012 server。

2、安装Oracle数据库软件,并且用Oracle管理工具中的Database Configuration Assistant 根据对方提供的数据库名建立数据库。数据库版本则要和导出当前dmp文件的数据库版本一致。

3、透过脚本文件建立导入dmp文件所需的表空间、用户、规则以及相关的授权。

4、将dmp文件复制到新安装的Oracle数据库服务器中,准备导入这个数据库文件。

5、通过cmd调出运行窗口,用imp命令导入数据。

6、通过数据库管理工具连接数据库,就可以查询到dmp文件中的数据了。

导入格式(按用户方式导入,oracle在本机)

impdp 用户名/密码

schemas=要导入的用户(即是使用expdp导出的用户) directory=创建的文件夹名称(directory_name)

dumpfile=test.dmp(要放入到directory_path路径下) logfile=imp.log(可以不写)

[sql] view plain copy

--导入时必须先创建文件夹路径

create or replace directory bao as 'd:\oracle\test'

--给使用的用户授权(读写权限)

Grant read,write on directory bao to scott

--查看目录及权限

SELECT privilege, directory_name, DIRECTORY_PATH FROM user_tab_privs t, all_directories d

WHERE t.table_name(+) = d.directory_name ORDER BY 2, 1

创建完文件夹后,在win7下是没有创建的文件夹的,需要手动创建文件夹,并且把使用expdp导出的dmp文件放入该文件夹下(开始自己导入时,创建完文件夹后始终在磁盘上找不到)

期间报过好多错,像org-29283,org-06512,ora-29283,ora-39002,org-39070等等,反正很郁闷的~!

创建好文件夹后,进行导入:(我使用的是通过运行command命令进入命令行界面导入)

impdp scott/tiger schemas=certification directory=test dumpfile=test.dmp

这要导入后会报错,提示表空间XXX不存在,用户certification不存在

根据错误信息,创建好表空间,和用户,并设置用户的表空间

[sql] view plain copy

CREATE TABLESPACE TEACHER

LOGGING

DATAFILE 'D:\ORACLE\ORADATA\ORCL\TEACHER.DBF'

SIZE 1024M

AUTOEXTEND ON

NEXT 32M MAXSIZE 2048M

EXTENT MANAGEMENT LOCAL

drop user certification

create user certification identified by cert

DEFAULT TABLESPACE TEACHER

grant connect,resource to certification

grant create session,dba to certification

Oracle 提供两个工具imp.exe 和exp.exe分别用于导入和导出数据。这两个工具位于Oracle_home/bin目录下。

导出数据exp

1 将数据库ATSTestDB完全导出,用户名system 密码123456 导出到c:/export.dmp中

exp system/123456@ATSTestDB file=c:/export.dmp full=y

其中ATSTestDB为数据库名称,system为该数据库里的账户,123456为其密码。

2 将数据库中system用户与sys用户的所有相关资源导出(表,存储过程,方法,视图等等)

exp system/123456@ATSTestDB file= c:/export.dmp owner=(system,sys)

3 将数据库中的表sys.table1、owbsys.table2导出

exp system/123456@ATSTestDB file= c:/export.dmp tables=( sys.table1, owbsys.table2)

注意,需要加上表的schema名称,如果没有加的话默认是导当前connected用户的表,当然你连接上去的账户要对相应的表有权限。

4 将数据库中的表table1中的字段Title以"GangGe"打头的数据导出

exp system/123456@ATSTestDB file= c:/export.dmp tables=(table1) query=/" where Title like 'GangGe%'/"

斜杠 “/” 后面跟冒号是为了转义字符冒号” “ “用的,因为后面是一条条件查询语句。Query参数只能指定一个,如果Query要为多张表,所以同样,tables里面也只能有一张表,或者多张表,然后query里面的条件在这些表上面都可以运行。否则只好多写几条exp语句了。

导出后,或许发现数据比较大,我们可以用一些压缩工具对数据进行二次压缩,例如用winzip, winrar, 7zip等第三方工具。同样,exp支持一个参数用户直接对数据进行压缩:compress = y, 这个参数直接加到命令的后面即可实现导出的同时压缩数据。

1 将数据库TEST完全导出,用户名system 密码manager 导出到D:/daochu.dmp中

exp system/manager@TEST file=d:/daochu.dmp full=y

2 将数据库中system用户与sys用户的表导出

exp system/manager@TEST file=d:/daochu.dmp owner=(system,sys)

3 将数据库中的表inner_notify、notify_staff_relat导出

exp aichannel/aichannel@TESTDB2 file= d:/datanewsmgnt.dmp tables=(inner_notify,notify_staff_relat)

4 将数据库中的表table1中的字段filed1以"00"打头的数据导出

exp system/manager@TEST file=d:/daochu.dmp tables=(table1) query=" where filed1 like '00%'"

上面是常用的导出,对于压缩,既用winzip把dmp文件可以很好的压缩。

也可以在上面命令后面 加上 compress=y 来实现。

导入数据imp

我们知道怎么提取数据,那么还原的时候,就需要使用imp命令把导出的数据加载进去。

1 向ATSTestDB里面加载c:/export.dmp数据

imp system/123456@ATSTestDB file=c:/export.dmp

好了,导数据得时候,有可能报错了。为什么?有两种主要的原因:

A. 导入的对象(表,视图,方法等)原本不属于当前连接的用户的

B. 导入的对象在该数据库的指定用户下已经存在

C. 导入的对象的原本用户不再这个数据库里

所有对象全部导入到指定的账户下:

Imp system/123456@ATSTestDB file=c:/export.dmp fromuser=sys touser=system

其中fromuser=sys为.dmp文件里的对象的原先的owner, touser=system 为作为导入的对象的新的Owner.

忽略/插入数据

Imp system/123456@ATSTestDB file=c:/export.dmp ignore=y

其中ignore=y告诉imp.exe把数据直接插入到相应对象(并且如果导入的对象里面有其他的对象,如约束,索引等,会在数据插入后被创建)。

2 加载其中的指定表table1,table2

imp system/123456@ATSTestDB file=C:/export.dmp tables=(table1,table2)

3 忽略加载约束

有时候导数据进来的时候,我们不需要把它的约束,比如一些外键约束等都导进来,可以加上参数constraints=N

imp system/123456@ATSTestDB file=C:/export.dmp tables=(table1,table2) constraints=N

4 不加载索引(比如唯一性的索引)

imp system/123456@ATSTestDB file=C:/export.dmp tables=(table1,table2) indexs=N

5 只加载结构,不加载数据

如果只要表的结构等定义(约束,触发器),那么不要里面的数据,可以加上参数rows=N

imp system/123456@ATSTestDB file=C:/export.dmp tables=(table1,table2) rows=N

对于上述 *** 作登陆 *** 作的对象system是管理员,如果不是管理员,而是普通用户,那么这个用户必须有创建删除对象的权利,对象可能包括 表,视图,方法,存储过程等等常见的对象。为什么“可能”包括?这个要看导入导出的时候是否涉及相关类型的对象而定。

1 将D:/daochu.dmp 中的数据导入 TEST数据库中。

imp system/manager@TEST file=d:/daochu.dmp

imp aichannel/aichannel@TEST full=y file=d:/datanewsmgnt.dmp ignore=y

上面可能有点问题,因为有的表已经存在,然后它就报错,对该表就不进行导入。

在后面加上 ignore=y 就可以了。

2 将d:daochu.dmp中的表table1 导入

imp system/manager@TEST file=d:/daochu.dmp tables=(table1)

基本上上面的导入导出够用了。不少情况要先是将表彻底删除,然后导入。

注意:

*** 作者要有足够的权限,权限不够它会提示。

数据库时可以连上的。可以用tnsping TEST 来获得数据库TEST能否连上。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/sjk/9577189.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-29
下一篇2023-04-29

发表评论

登录后才能评论

评论列表(0条)

    保存