转://执行impdp时出现ORA-39154错误的解决案例
问题描述
如下导出过程正常:
expdp \"/ as sysdba\" tables=user_a.t directory=mydir dumpfile=t.dmp logfile=exp_t.log reuse_dumpfiles=yes
导入过程中出现ORA-39154错误,提示导入的内容里包含有不属于user_a用户的对象,这部分对象没有能够正常导入,但user_a.t表已经导入成功了
revoke imp_full_database from user_a;
impdp user_a/passwd directory=mydir dumpfile=t.dmp logfile=imp_t.log
ORA-39154: Objects from foreign schemas have been removed from import
出错原因分析:
因为导入内容里包括了统计信息,统计信息的相关操作在导入的过程中是在sys.impdp_stats表里进行的(可从impdp生成的sql脚本看出来),user_a用户需赋予imp_full_database权限才能导入这部分统计信息,这应该就是ORA-39154的成因
赋给user_a用户imp_full_database权限后再次进行impdp,ORA-39083取代了ORA-39154,问题出现在为user_b.IDX1_T1,user_b.IDX1_T2这两个索引生成统计信息时发现索引不存在,即索引和表不在同一个schema,表在user_a用户下,索引却建在user_b用户下。
grant imp_full_database to user_a;
impdp user_a/passwd directory=mydir dumpfile=t.dmp logfile=imp_t.log
ORA-39083: Object type INDEX_STATISTICS failed to create with error:
ORA-20000: INDEX "USER_B"."IDX1_T1" does not exist or insufficient privileges
ORA-20000: INDEX "USER_B"."IDX1_T2" does not exist or insufficient privileges
检查发现:目标库检查只有表被导入,索引并没有导入
验证:是否因为user_a是普通用户没有权限在user_b下创建索引,使用sysdba再次执行impdp,报错依旧:
impdp \"/ as sysdba\" directory=mydir dumpfile=t.dmp logfile=imp_t.log
使用sysdba用户导入也出现同样错误,应该不是权限问题,报错信息出现在导入索引统计信息阶段,因为user_b用户下的两个索引不存在导致ORA-39083,难道是导出的dmp文件压根就没包含这两个索引的信息,将impdp内容重定向到脚本,检查内容发现除了建表与导入索引的统计信息外,确实没有创建这两个索引的DDL语句。
impdp user_a/passwd directory=mydir dumpfile=t.dmp logfile=imp_t.log sqlfile=t.sql
解决方案:expdp阶段user_b用户下的索引也带上
######Schemas必须带上user_a,user_b这两个用户,如果Schema不指定那么默认在SYS下去找
expdp \"/ as sysdba\" schemas=user_a,user_b include=TABLE:\"=\'T\'\",INDEX:\"IN \(\'IDX1_T\',\'IDX2_T\'\)\" directory=mydir dumpfile=t.dmp logfile=exp_t.log reuse_dumpfiles=yes
注:上述导出操作如果为普通用户,则需授予该用户exp_full_database权限,否则将触发如下错误
ORA-39165: Schema user_b was not found.
ORA-39168: Object path INDEX was not found.
#####导入目标库之前先将impdp内容重定向到sql脚本,发现已包含create index的步骤
impdp user_a/passwd directory=mydir dumpfile=t.dmp logfile=imp_t.log sqlfile=t.sql
#####导入成功,表与索引都导入了
grant imp_full_database to user_a;
impdp user_a/passwd directory=mydir dumpfile=t.dmp logfile=imp_t.log
总结:本例中导致ORA-39154的根本问题在于user_a用的表上的索引没建在user_a用户下,这样的情况称为cross schema references,即不同schema的对象间存在关联,cross schema references导致的impdp错误还是比较隐蔽的,好在我们使用了sysdba权限从源库expdp导出表,然后通过impdp时有关统计信息无法导入的ORA-39154错误,一步一步追溯直至发现索引和表不在同一个schema下,问题才得以精确定位。此案例说明table mode export方式,如果依赖于a.tb表的对象,比如基于a.tb的索引ind_b,建在b用户下,则如下命令在导出结果里不会包含b用户下的索引
expdp user/passwd tables=a.tb directory=dirname dumpfile=a.tb.dmp logfile=exp_a.tb.dmp
必须使用schemas、include参数精确指定表名和索引名称,例如:
expdp user/passwd schemas=a,b include=TABLE:\"=\'TB\'\",INDEX:\"IN \(\'IND_B\'\)\" directory=dirname dumpfile=a.tb.dmp logfile=exp_a.tb.dmp
顺便提下,如果一开始从源库导出表时没有像下面这样使用sysdba权限
expdp \"/ as sysdba\" tables=user_a.t directory=mydir dumpfile=t.dmp logfile=exp_t.log reuse_dumpfiles=yes
而是像下面这样使用ad用户
expdp user_a/passwd tables=user_a.t directory=mydir dumpfile=t.dmp logfile=exp_t.log reuse_dumpfiles=yes
那么impdp目标库是不会有任何报错的,后果很严重的,将导致目标库上的表应该有索引的字段却没有建索引。
转://执行impdp时出现ORA-39154错误的解决案例的更多相关文章
- 执行impdp时出现的各种问题
1.不同的表空间,不同的用户,不同的表名 impdp ODS_YYJC_BUF_ZB/ODS_YYJC_BUF_ZB job_name=bs3 directory=EXPDMP exclude=OBJ ...
- 执行impdp时ORA-39213: Metadata processing is not available错误处理
通过impdp命令将Oracle11g数据库的dmp文件导入至Oracle10g中时,报出如下错误: [oracle@dbsrv3 ~]$ impdp dhccms/dhccms DIRECTORY= ...
- MVC.Net:对MVC5部署时出现403.14错误的解决方法
当我们部署MVC5到IIS 7的时候,有时会出现403.14的错误,如下图: 对于这个错误的解决方法就是在应用程序的web.config的system.webServer节点中加入这一句: <m ...
- 关于oracle 11g导出数据时 报 ORA 1455错误的处理
因为导出的该用户的表可能存在空数据表,那么可能就会出现此其异常. 首先: 查看: SQL>show parameter deferred_segment_creation; 假设为T ...
- ASP.NET输出PNG图片时出现GDI+一般性错误的解决方法
偶原来的用ASP.NET生成验证码图片时用的是JPG格式,今天想把它改成PNG格式的,结果就出现GDI+一般性错误,查了N久资料,才发现解决的办法,对分享此解决办法的网友深表感谢 Response.C ...
- 记录python接口自动化测试--pycharm执行测试用例时需要使用的姿势(解决if __name__ == "__main__":里面的程序不生效的问题)(第三目)
1.只运行某一条case 把光标移动到某一条case后面,然后右键,选择"Run..."来运行程序 此时,pycharm会只运行光标所在位置的这一条case 2.如果想执行全部ca ...
- [Win10]安装msi时2503,2502错误及其解决
简述 刚安装了win10系统,在安装TortoiseGit和TortoiseSvn时,这两个软件是.msi后缀的安装文件,在点击安装时老是提示2503,2502错误,因此无法安装上 搜索了下一般都提到 ...
- 初始化mysql数据库时提示字符编码错误的解决办法
有时候在安装完数据库并初始化的时候会出现如下错误: root@localhost mysql-5.5.19]# bash scripts/mysql_install_db --user=mysql - ...
- 使用VS2015编写驱动时出现的部分错误以及解决方法
前几日在github上下载了一个Windows驱动的demo,原本想着直接下载下来打开解决方案就可以用,没想到一编译,出现了奇奇怪怪的Error,部分Error网上也没什么好的解决办法,对我这个从未深 ...
随机推荐
- 【学习笔记】JS经典异步操作,从闭包到async/await
参考文献:王仕军——知乎专栏前端周刊 感谢作者的热心总结,本文在理解的基础上,根据自己能力水平作了一点小小的修改,在加深自己印象的同时也希望能和各位共同进步... 1. 异步与for循环 抛出一个问题 ...
- [HEOI2016] 字符串
Description 给定长度为n的字符串,m次询问,每次询问s[a...b]的所有子串与s[c...d]的LCP的最大值.n,m<=10^5. Solution 感觉这种n,m<=10 ...
- 无法初始化 PowerShell 主机解决方案
Question无法初始化 PowerShell 主机.如果您的 PowerShell 执行策略设置设为 AllSigned,请先打开程序包管理器控制台以初始化该主机. --------------- ...
- Matlab arenstorf problem
% right-hand side of arenstorf problem function yDot = arenstorf(t,y) global mu muHat % unpack y u1 ...
- inheritPrototypal.js
// 原型式继承 // 其基本思路是借助原型可以基于已有的对象创建新的对象 function object(o){ function F(){} F.prototype = o; return new ...
- 【读书笔记】iOS-WiFi长连接
如果你的应用需要一个持久的WiFi长连接,你可以通过设置应用的Info.plist文件中的UIRequiresPersistentWiFi配置项的Boolean值来达到目的.如果这个配置项的值为YES ...
- ARP协议总结
1.ARP用于实现ip和MAC地址之间的对应关系. 2.ARP的流程主要分为ARP请求.ARP应答.免费ARP. 3.首次ARP请求是广播报文,后续确认的ARP是单播报文. 4.免费ARP有两个用途, ...
- 排错-安装SQl 2008“为SQL Server代理服务提供的凭据无效的解决方法
安装SQl 2008“为SQL Server代理服务提供的凭据无效的解决方法 by:授客 QQ:1033553122 在Windows Server 2008安装SQL Server 2008出现的问 ...
- Android基础之6.0系统以上的权限分配
public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle saved ...
- 【Java入门提高篇】Day30 Java容器类详解(十二)TreeMap详解
今天来看看Map家族的另一名大将——TreeMap.前面已经介绍过Map家族的两名大将,分别是HashMap,LinkedHashMap.HashMap可以高效查找和存储元素,LinkedHashMa ...