oracle数据库904_oracle00933怎么解决

oracle数据库904_oracle00933怎么解决今天早上在日志中发现exp备份时出错:..exportingtableBJ_AFFILIATES37rowsexportedEXP-00008:ORACLEerror904encounteredORA-00904::invalididentifier..exportingtable…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

今天早上在日志中发现exp备份时出错:

. . exporting table                  BJ_AFFILIATES         37 rows exported

EXP-00008: ORACLE error 904 encountered

ORA-00904: : invalid identifier

. . exporting table                  BJ_CATEGORIES        175 rows exported

EXP-00008: ORACLE error 1003 encountered

ORA-01003: no statement parsed

. . exporting table                    BJ_LOCATION         12 rows exported

EXP-00008: ORACLE error 904 encountered

ORA-00904: : invalid identifier

. . exporting table                        BJ_TYPE         22 rows exported

EXP-00008: ORACLE error 1003 encountered

ORA-01003: no statement parsed

此错误对前台应用没有任何影响。导出的用户是系统新版本上线时创建的一个新用户,操作过程很简单,从老用户中exp数据,然后imp到新用户,导入导出过程都很正常,没有任何报错,查看错误类型含义:

[oracle@bj47 backup]$ oerr ora 904

00904, 00000, “%s: invalid identifier”

// *Cause:

// *Action:

[oracle@bj47 backup]$ oerr ora 1003

01003, 00000, “no statement parsed”

// *Cause:

// *Action:

看来无法得到原因和采取的活动。网上查询,很多解释都是不同版本的客户端和服务器之间进行exp而导致的,而我的操作是在同一台机器上,显然不是原因。从表DBA_SERVER_ERROR表中查看相应sql,发现如下sql:

SELECT

CNAME, SNAME, SSGFLAG, STSNAME, STSNO, SFILE, SBLOCK,

SDOBJID,             SCHUNKING, SVPOOL, SFLAGS, INAME, ISGFLAG,

ITSNAME, ITSNO, IFILE,             IBLOCK, IDOBJID, IINITRANS,

IMAXTRANS, SPROPERTY, COLTYPE,             COLTYPFLG, BLOCKSIZE,

INTCOLID, OPAQUETYPE      FROM   SYS.EXU9LOBU

WHERE  TOBJID = :1

用sql trace追踪也发现类似的错误,步骤如下:

1、alter system set events=’904 trace name errorstack’;

2、执行exp

3、在udump下的trace文件中发现:

*** SESSION ID:(44.28384) 2008-06-12 11:11:38.105

*** 2008-06-12 11:11:38.105

ksedmp: internal or fatal error

ORA-00904: : invalid identifier

Current SQL statement for this session:

SELECT

BUCKET, ENDPTHASH, ENDPTVAL,             UTL_RAW.CAST_TO_RAW(ENDPTVAL)

ENDPTVAL_RAW      FROM   SYS.EXU8HSTU      WHERE  POBJ

ID = :1 AND             INTCOL = :2      ORDER BY BUCKET

检查对象EXU8HSTU ,发现它的select权限已经赋予了public用户,也就是所有用户应该都可以访问的:

SQL> select * from dba_tab_privs where table_name=’EXU8HSTU’

2  ;

GRANTEE

OWNER                          TABLE_NAME

GRANTOR                        PRIVILEGE

GRANTABLE HIERARCHY

——————————

—————————— ——————————

—————————— —————————————-

——— ———

PUBLIC

SYS                            EXU8HSTU

SYS                            SELECT

NO        NO

那么难道是新用户对UTL_RAW包没有可执行权限?

SQL> select * from dba_tab_privs where table_name=’UTL_RAW’;

果然,记录为空,也就是新用户并没有包UTL_RAW的可执行权限,找到原因就好比了,给新用户赋予包UTL_RAW的可执行权限即可:

grant execute on UTL_RAW to newuser;

SQL> select * from dba_tab_privs where table_name=’UTL_RAW’;

GRANTEE

OWNER                          TABLE_NAME

GRANTOR                        PRIVILEGE

GRANTABLE HIERARCHY

——————————

—————————— ——————————

—————————— —————————————-

——— ———

NEWUSER

SYS                            UTL_RAW

SYS                            EXECUTE

NO        NO

赋予成功后,exp备份也恢复正常。

仔细回想,UTL_RAW的可执行权限为何会被取消?原来是很久以

前404检查的时候要求将所有UTL开头的包的可执行权限从public用户中取消掉,那么老用户备份的时候怎么就没有报错呢?查询以前的备份日志,发现

其实也含有这样的错误,但是只是在某一个表上,因此没有引起注意:

About to export specified tables via Direct Path …

. . exporting table                  BJ_AFFILIATES

37 rows exported

. . exporting table                  BJ_CATEGORIES

175 rows exported

. . exporting table                    BJ_LOCATION

12 rows exported

. . exporting table                        BJ_TYPE

22 rows exported

. . exporting table             NG_ADDISTRIBUTIONS

.

117949 rows exported

. . exporting table            NG_ADMANAGERDB_LOCK

1 rows exported

. . exporting table                         NG_ADS

.

118197 rows exported

. . exporting table                     NG_ADSIZES

144 rows exported

. . exporting table                   NG_ADTARGETS

1 rows exported

. . exporting table                 NG_ADVERTISERS

1775 rows exported

EXP-00008: ORACLE error 904 encountered

ORA-00904: : invalid identifier

. . exporting table             NG_ADVERTISERTYPES

。。。。。。

只有为什么老用户只有一个表报错,而新用户所有表都报错,就不得而知了。。。。。。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/191422.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 奋斗米莱经典台词[通俗易懂]

    奋斗米莱经典台词[通俗易懂]米莱,她专一,不做作,善良,敢爱敢恨。1.记住,在这个世界上,男人女人各有分工,男人主要用来对女人使坏,女人主要用来对男人好,以前我对这种混蛋分工特不满意。可是现在,我认命了。2.对夏琳:其

    2022年7月3日
    24
  • B样条曲线(B-spline Curves)

    B样条曲线(B-spline Curves)关键字:NURBS,基函数,控制点,节点,另一个讲的很好的https://www.cnblogs.com/icmzn/p/5100761.html看了网上很多相关资料才得以下笔,资料太多,这里就不一一列举了,感谢各位大佬的资料本博客顺序不太好,看前面的东西可能需要提前看后面的东西。正在努力修炼,敬请谅解写了个B样条曲线计算的完成程序,包括绘图,https://download.c…

    2022年6月18日
    33
  • PL/SQL入门教程

    PL/SQL入门教程  1.1PL/SQL简介  PL/SQL是ORACLE的过程化语言,包括一整套的数据类型、条件结构、循环结构和异常处理结构,PL/SQL可以执行SQL语句,SQL语句中也可以使用PL/SQL函数。  1.2创建PL/SQL程序块  DECLARE  …  BEGIN  …  EXCEPTION  END;  1.3PL/SQL数据类型    例子:  DECLARE  ORDER_NON

    2022年10月10日
    4
  • PreparedStatement详解

    PreparedStatement详解JDBC初步.主要讲了基本访问数据库的步骤.其中第四步提到了用Statement去执行SQL语句.这里介绍个Statement的子类PreparedStatement.PreparedStatement(预处理执行语句)相比其父类Statement主要有以下几个优点.1.可以防止SQL注入.               2.在特定的驱动数据库下相对效率要高(不绝对)   

    2022年6月2日
    41
  • 流水线设计方案_与流水线的形式相对的叫什么

    流水线设计方案_与流水线的形式相对的叫什么流水线设计是一种典型的面积换性能的设计。一方面通过对长功能路径的合理划分,在同一时间内同时并行多个该功能请求,大大提高了某个功能的吞吐率;另一方面由于长功能路径被切割成短路径,可以达到更高的工作频率,如果不需要提高工作频率,多出来的提频空间可以用于降压降功耗。流水线设计是完美的时间并行。因为流水线上每一级的处理都是一个时钟周期的延时,并且一动则全动,每一级的延时可以完美的掩盖起来,最高实现与流水级数相同数量的请求并行度。流水线实际上是将组合逻辑系统分割,然后在间隙插入寄存器,暂存中间数据。其思想就是要将

    2022年8月14日
    4
  • [开源]基于WPF实现的Gif图片分割器,提取GIf图片中的每一帧

    [开源]基于WPF实现的Gif图片分割器,提取GIf图片中的每一帧

    2021年6月13日
    110

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号