一个oracle imp 导入出现如下的错误 超高分求解 ,请高手赐教!谢!!!

Microsoft Windows XP [版本 5.1.2600](C) 版权所有 1985-2001 Microsoft Corp.
C:\Documents and Settings\Administrator>imp AAA/aaa@TEST fromuser=AAA touser=AAA file=I:\111\AAA4.dmp commit=y feedback=10000 buffer=3800000 ignore=y rows=y in
dexes=n constraints=n tables=(a_emp:DA2012_1)

Import: Release 10.2.0.1.0 - Production on 星期 09月 11 07:03:03 2012
Copyright (c) 1982, 2005, Oracle. All rights reserved.
连接到: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options

经由常规路径由 EXPORT:V09.02.00 创建的导出文件
已经完成 ZHS16GBK 字符集和 AL16UTF16 NCHAR 字符集中的导入
. 正在将 AAA 的对象导入到 AAA
IMP-00017: 由于 ORACLE 错误 942, 以下语句失败:
"CREATE TRIGGER "AAA".tri_a_emp_outdate after update of out_date on "
"a_emp for each row"
"begin"
" delete from a_stat where emp_no=:new.emp_no;"
" insert into a_stat (emp_no,amount) "
" select t.emp_no, count(distinct d_code ) from if_list t "
" where t.emp_no=:new.emp_no"
" and t.d_code in "
" (select d_code from a_info where d_use in ('1','2'))"
" group by t.emp_no;"
"end tri_a_emp_outdate;"
IMP-00003: 遇到 ORACLE 错误 942
ORA-00942: 表或视图不存在
IMP-00055: 警告: 在导出文件中未找到分区或子分区 "a_emp": "DA2012_1"
成功终止导入, 但出现警告。

C:\Documents and Settings\Administrator>

先找出问题所在,然后再去解决。
你的IMP过程有两个问题:
1、触发器不能创建;2、导出数据是有分区的,导入的用户中无分区DA2012_1
解决方法:
1、登入AAA用户
2、手动创建触发,找出错误所在,进行修改。一旦触发器能创建了,再把触发器删除,交给IMP语句来创建。
3、在导入用户中建立与导出用户一样的分区DA2012_1
4、重新运行IMP。
仅供参考。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-10-11
你的这个DMP是不是只导入数据啊。
不然应该不会出现找不到表或视图的错误。追问

是的啊 之导入数据 a_emp表肯定是存在的 不知道为什么还要创建个trigger 然后失败了

追答

如果是这样的话,那你还是把整个数据里的对象都导出来,不要只导数据。
这样再导入的话,就会自动的创建表,触发器什么的。

你这样只导数据,是要保证你要导入的数据库中,已存在这些对象了。才能只导数据。

要不然肯定出错。

追问

这几个表已经前面导进去了 都有 现在还是不对 。
还是不行 ,前面几个表也是这样导入的 都没问题

我估计是这样一个问题 创建这个触发器 需要检查有没有 a_emp 这个表 而我就想导入这个表 那能不能 我就建立 这个表 只导入数据 或者 不要导入这个触发器呢?

追答

哦是这样,
那我觉得可以,在导出时可以先择导出对象,你先择只导表。

从你的描述上看,现在是创建 了触发器。在插入某表数据时,触发了触发器,要对A_EMP表做操作
而现在A_EMP表还不存在,所以出现你的问题

我想解决办法有以下两个。
1.首先是原来的数据库,整个导出,然后,删除你要导入的数据库中的所有对象,然后导入,这样各个对象的关系就不会乱。(当然,这个好象与你的实际应用不符。)
2.导出表数据时将TRIGGERS 选项设置成N,不导出触发器,最后在单独导出触发器,导入。

追问

IMP 没有 TRIGGERS =N这个参数 ,你基本都知道我的这个问题了,但是这两个方法似乎还是不行

追答


TRIGGERS 这个参数,我也是查导出命令,上在写的。
我没有实际的环境来试验。

追问

分区表 是存在的 确认存在 其他几个表也有分区 都是这样导入 到成功了 就是这个表 我估计是这个表有触发器, 一旦导入数据就触发触发器,但这个触发器建立需要有这个表 ,我现在手工建立了触发器 可是还是报这个错误 IMP-00055: 警告: 在导出文件中未找到分区或子分区 "a_emp": "DA2012_1"
成功终止导入, 但出现警告

追答

嗯,我去找个环境看一下。

追问

非常感谢

本回答被提问者和网友采纳
第2个回答  2012-10-11
你的这个导入语句,只导入了a_emp:DA2012_1
delete from a_stat where emp_no=:new.emp_no
没有a_stat

select t.emp_no, count(distinct d_code ) from if_list t
if_list 也没有

(select d_code from a_info where d_use in ('1','2'))
a_info 也没有追问

这三个都之前倒进去了

第3个回答  2012-10-12
1.导入前,两边主机的表空间须一致;
2.检查 TRIGGER "AAA".tri_a_emp_outdate 需要的 表或视图,是否已导入进目标DB,否则,需要手动处理。追问

分区表 是存在的 确认存在 其他几个表也有分区 都是这样导入 到成功了 就是这个表 我估计是这个表有触发器, 一旦导入数据就触发触发器,但这个触发器建立需要有这个表 ,我现在手工建立了触发器 可是还是报这个错误 IMP-00055: 警告: 在导出文件中未找到分区或子分区 "a_emp": "DA2012_1"
成功终止导入, 但出现警告

如何手动处理呢?

第4个回答  2012-10-12
导入的库的字符集合源库的字符集不同
相似回答