li
  当前位置:主页 > 性能优化 > 文章内容
li
减少全库导入时发生的错误(五)
来源: http://yangtingkun.itpub.net/  作者: yangtingkun    时间:2008-01-26   阅读:13  
本文章共5936字,分4页,当前第1页,快速翻页:
 

全库导入操作一直是我比较头疼的东西,一般情况下,我会尽量避免这种操作。但是对于有些情况,全库导入又几乎是唯一的选择,比如跨平台的数据库迁移、大版本升级等操作。

其实全库导入操作说起来很简单,令人比较头疼的是,导入过程中几乎不可避免的会出现大量的错误信息,这些错误有的可以忽略,有的可能造成系统的异常,本文试图通过各种方法尽量减少全库导入时错误的数量。

减少全库导入时发生的错误(一):http://yangtingkun.itpub.net/post/468/216265

减少全库导入时发生的错误(二):http://yangtingkun.itpub.net/post/468/218119

减少全库导入时发生的错误(三):http://yangtingkun.itpub.net/post/468/219532

减少全库导入时发生的错误(四):http://yangtingkun.itpub.net/post/468/221430


经过上面的诸多处理后,还剩下ORA错误21个,IMP错误15个。错误越剩越少,解决起来也越来越困难。

观察错误日志,发现OE用户下有一个视图创建出现了告警,本以为会和OLAPSYSWKSYS用户的错误相同,结果检查发现,既不是权限的问题,也不是视图中用到的函数还没有导入的问题。

排除了其他问题后,基本上确定了问题和UNDER VIEW有关。可能是IMP工具在处理UNDER VIEW时有些问题。看来要想解决这个问题,最好的办法时删除用户时保留OE用户,这样避免IMP工具导入OC_CORPORATE_CUSTOMERS视图。

但是,保留了OE用户,会导致主键冲突的问题。于是,修改删除用户脚本的同时在删除用户数据的脚本中加入了OE用户,但是导入的时候仍然存在问题,由于OE用户的表存在着主外键关系,而且在导入的时候,这个约束已经在起作用了,所以导入很多的数据无法插入。

于是,只好通过删除OE用户下表的方法来避免这个问题。解决完表的问题又出现了新的问题,由于OE用户下的对象没有删除,在导入的时候,Oracle检查到了对象具有不同的OID。于是采用前面处理ORDSYS等用户对象错误的方法,为OECATEGORY_TYP已源数据库的OID重建,并编译失效的对象。

进行完这些处理后,重新导入,这时候OE用户的导入告警也消失了,整个IMP操作还剩下ORA错误21个,IMP错误14个。

检查这35个错误可以发现,这35个错误是7个队列表在进行导入的后期处理时产生的。

通过查询METALINK发现,这些错误属于OraclebugOracle9208以下版本都会受到影响。如果想要解决这个问题,需要把Oracle版本升级到9208,单独的补丁居然只有AIX平台下有,且要求Oracle rdbms版本必须是9207

www.ixdba.net


既然是Oraclebug,这里就不费劲去解决了。

下面简单总结一下:全库导入操作带来的问题很多,其中有些错误必须要给予足够的重视,比较SYS对象的权限问题,以及XMLTYPE无法显示的问题,这些问题不解决,可能导致导入的失败,或者导入后数据库权限与导出数据库不一致。

对于其他部分错误,其实大部分可以简单忽略掉,或者仅对需要用到的用户额外关注一下,不过为了完整起见,这里还是将这几篇文章中,全库导入前的所有操作根据执行顺序完整的列出来,并对其中部分内容进行了简化:

SQL> DECLARE
2 TYPE T_VARCHAR_TAB IS TABLE OF VARCHAR2(32767) INDEX BY BINARY_INTEGER;
3 V_PRIVS_STR T_VARCHAR_TAB;
4 V_ROLE_STR T_VARCHAR_TAB;
5 V_DROP_STR VARCHAR2(32767);
6 V_CREATE_STR VARCHAR2(32767);
7 BEGIN
8 FOR I IN (SELECT USERNAME FROM DBA_USERS
9 WHERE USERNAME NOT IN ('SYS', 'SYSTEM', 'DBSNMP', 'WMSYS', 'ORDSYS', 'OE')) LOOP
10
11 SELECT DBMS_METADATA.GET_DDL('USER', I.USERNAME) INTO V_CREATE_STR FROM DUAL;
12
13 SELECT 'GRANT ' || PRIVILEGE || ' ON ' || OWNER || '.' || TABLE_NAME || ' TO ' || GRANTEE
14 BULK COLLECT INTO V_PRIVS_STR
15 FROM DBA_TAB_PRIVS WHERE GRANTEE = I.USERNAME;
16
17 SELECT 'GRANT ' || GRANTED_ROLE || ' TO ' || GRANTEE
18 BULK COLLECT INTO V_ROLE_STR



阅读更多内容1 · 2 · 3 · 4 · 下一页>>


  上一篇: 导入报错OCI-21500 [kopuigpfx1]   下一篇: 物化视图的快速刷新(二)
li
 §相关评论  
 热点文章

·Resize datafile导致ASM Crash
·在Oracle10g RAC下新增ASM磁盘
·ORACLE SQL性能优化系列 (一)
·oracle性能调优:管理oracle日志
·oracle RAC环境中系统时钟的调
·why:Rac的心跳线不支持交叉线?
·RAC的VIP及实例依赖关系:版本O
·如何启动DataGuard的备用数据库
·系统表空间IO错误 数据损坏处理
·不幸中的万幸:遭遇ORA-00600 [
·用ORACLE的高级复制实现内外网
li
 编辑推荐
·Resize datafile导致ASM Crash
·在Oracle10g RAC下新增ASM磁盘
·ORACLE SQL性能优化系列 (一)
·oracle性能调优:管理oracle日志
·oracle RAC环境中系统时钟的调
·why:Rac的心跳线不支持交叉线?
·RAC的VIP及实例依赖关系:版本O
·如何启动DataGuard的备用数据库
·系统表空间IO错误 数据损坏处理
·不幸中的万幸:遭遇ORA-00600 [
·用ORACLE的高级复制实现内外网
li
 相关篇章
·导入报错OCI-21500 [kopuigpfx1]
·减少全库导入时发生的错误(二)
·减少全库导入时发生的错误(四)
·减少全库导入时发生的错误(三)
·ORA-7445(prscoldrp)
·ORA-600(925)错误
·一个物化视图快速刷新的问题
·RAC环境的物理STANDBY的 SWITCHO...
·Oracle VM发布
·rman连接AUXILIARY报错ORA-12528
·物化视图的快速刷新(二)
·Redhat AS4 for x86_64上安装Ora...
·JOB自动执行出错,但手工执行正常...
·一个同义词可能指向多个对象
·通过数据库链执行DDL语句
·使用数据库链的几个小技巧
·如何从远端返回LOB对象
·访问本地物化视图一定比访问远端...
·通过数据库链访问当前库
·数据库链的USING语句
 
li
设为首页 | 关于我们 | 技术服务 | 收藏本站 | 网站地图 | 联系方式 | 本站友情连接