也遭遇 PLS-00302: component 'SET_NO_OUTLINES' must be declared

数据平台A需要从其他业务系统B取一个接口数据,最开始是通过文件的形式交互的。

后来因为业务需要,业务系统B开放了一个查询账号供数据平台A使用。

因为两个平台的数据库位于不同的服务器上,而且生产平台上均不允许使用dblink进行数据操作。

所以最直接的想法就是写个Shell脚本把B的数据exp出来,然后imp到A上去。

 

结果就遇到了如下提示:

EXP-00056: ORACLE error 6550 encountered
ORA-06550: line 1, column 41:
PLS-00302: component 'SET_NO_OUTLINES' must be declared
ORA-06550: line 1, column 15:
PL/SQL: Statement ignored
EXP-00000: Export terminated unsuccessfully

 

网上一查,基本上都是因为进行导出的数据库客户端版本与被导出的数据库版本不一致。而且均无解。

 

以下为引用:

 

在metalink找到原因,需要用旧版本exp来导出数据(服务器Oracle为9i2,客户端我用的是Oracle10g。换到Oracle9i2就没问题了。)
Cause
Use of Higher Version Export utility (10.2.0.1) on Lower version database(9.2.0.6).

This problem occurs when using 10.2 Exp utility for 10.1,9.2,8.1.7 databases.

Solution
As per compatibility Matrix,You need to use the export utility of the lower version of source and target database.

总结一下:高版本的Client 连接 低版本的Server,无法使用exp及imp命令。


需要用旧版本exp来导出数据(服务器Oracle为9i2,客户端我用的是Oracle10g。换Oracle9i2就没问题了。) 

 

 

使用select * from v$version;指令查询目标服务器B的信息

Oracle9i Enterprise Edition Release 9.2.0.4.0 - 64bit Production
PL/SQL Release 9.2.0.4.0 - Production
CORE    9.2.0.3.0       Production
TNS for IBM/AIX RISC System/6000: Version 9.2.0.4.0 - Production
NLSRTL Version 9.2.0.4.0 - Production

 

而我进行操作的环境是10.2.0.1.0。

 

判断自己客户端版本的方法:

在cmd或Linux字符界面下直接输入sqlplus,可得到版本信息

SQL*Plus: Release 10.2.0.1.0 - Production on Sat Mar 12 20:11:22 2011

 

Copyright (c) 1982, 2005, Oracle.  All rights reserved.

 

Enter user-name:

 

 

最终的方案还是交给了ETL进行数据抽取。

你可能感兴趣的:(数据库建模与学习)