ORA-00096: invalid value for parameter plsql_compiler_flags, must be from among NON_DEBUG, DEBUG, INTERPRETED, NATIVE

本文记录了一次从Oracle 11g向9.2版本迁移的过程,解决了因plsql_compiler_flags参数设置不当导致的数据导入问题,并分享了最终通过SQL脚本及Dblink实现数据库对象迁移的方法。


author:skate
time:2009/10/16


 

现象:
协助技术搭建一个测试库


源库:oracle11g
目标库:oracle9.2.0.4

考虑imp/exp版本兼容的问题,我用9i的client客户端exp 11g数据,然后再用9i的client客户端把数据imp进9i数据库,
结果就出现如下错误

 

[oracle@20081006-1724 ~]$ imp userid=sys/aibo fromuser=skate touser=skate file=/tmp/hpo520315.dmp log=/tmp/hpo5203152.log buffer=409600000 ignore=y

Import: Release 9.2.0.4.0 - Production on Fri Oct 16 12:09:01 2009

Copyright (c) 1982, 2002, Oracle Corporation.  All rights reserved.


IMP-00058: ORACLE error 28009 encountered
ORA-28009: connection to sys should be as sysdba or sysoperUsername: sys as sysdba
Password:

Connected to: Oracle9i Enterprise Edition Release 9.2.0.4.0 - 64bit Production
With the Partitioning, OLAP and Oracle Data Mining options
JServer Release 9.2.0.4.0 - Production

Export file created by EXPORT:V09.02.00 via conventional path
import done in AL32UTF8 character set and AL16UTF16 NCHAR character set
IMP-00003: ORACLE error 96 encountered
ORA-00096: invalid value  for parameter plsql_compiler_flags, must be from among NON_DEBUG, DEBUG, INTERPRETED, NATIVE
IMP-00000: Import terminated unsuccessfully


解决过程:

在网上google,发现如下方法


Solution Description --------------------

You need to set the plsql_compiler_flags parameter to another value then NATIVE before exporting your data.
So, either dynamically update this parameter with an 'alter system set' before exporting any data, for example:

SQL> alter system set plsql_compiler_flags=INTERPRETED,NON_DEBUG;

or update your init.ora to comment out this parameter (the default 'INTERPRETED','NON_DEBUG' will then be used)
or set it to any other possible values, such 'INTERPRETED'. If you change your init.ora, you need to restart your
database.

Explanation ----------- You are encountering a bug that will be fixed in the upcoming patchsets. plsql_compiler_flags
determines whether PL/SQL code is compiled native or interpreted and if debug information is included. Possible values
are:
'INTERPRETED' - compile in interpreted mode
'NATIVE' - compile in native mode
'DEBUG' - include debug information
'NON_DEBUG' - no debug information

Defaults are: 'INTERPRETED','NON_DEBUG'


但是无法解决,最后我把源库的数据库对象导出来为sql文件,然后再把sql文件在目标库上执行,最后通过Dblink完成字典表的初始化。
到此测试库搭建起来了,但编译数据库对象是发现N多对象没有编译通过,提示plsql_compiler_flags参数值不正确,想到刚才调整了这
个参数,于是查看下这个参数的当前值

 

SQL> show parameter plsql_compiler_flags

 

发现plsql_compiler_flags的值为”NATIVE“

 

于是更改参数plsql_compiler_flags为默认值,如下:

SQL> alter system set plsql_compiler_flags=INTERPRETED,NON_DEBUG;

 

结果在编译,都通过了

 

最后配置了分布式数据库的链接关系,至此一套测试环境搭建ok

 

考虑中:

 

我们目前总共需要三套测试,开发环境,要保证其中的版本一致问题,一直是我琢磨的问题,怎样做才可以把我解脱出来,只需要某人
运行一个命令,就可以保证版本一致


-------end-----

 

 

 

<think>好的,我现在需要解决用户遇到的Oracle数据库错误,主要是ORA-01031权限不足和ORA-06512在DBMS_SNAPSHOT包中的问题。首先,我需要回顾用户提供的引用内容,看看有没有相关的线索。 根据引用[1]和[2],用户在执行DBMS_MVIEW.REFRESH时遇到了ORA-01031错误,这说明当前用户没有足够的权限来刷新物化视图。ORA-06512指出了错误发生的位置,具体是在DBMS_SNAPSHOT包的某个行数。这可能意味着用户需要被授予特定的系统权限,比如CREATE MATERIALIZED VIEW或者ALTER ANY MATERIALIZED VIEW。另外,可能还需要检查物化视图所属用户的权限,确保有权限访问基表。 接下来,引用[3]提到了JOB异常和ORA-06512,可能与权限或存储过程有关。引用[4]涉及到数据泵的问题,但当前用户的问题主要集中在物化视图刷新上,所以暂时可以忽略数据泵相关的错误。 首先,我会建议用户检查当前执行刷新操作的用户是否具有必要的权限。可能需要授予CREATE MATERIALIZED VIEW或者更具体的权限,比如在物化视图上的SELECT权限。此外,如果物化视图属于另一个用户(如user_a),则需要确保当前用户有权限访问该物化视图,并且基表的SELECT权限也被正确授予。 另外,用户可能需要直接授予EXECUTE权限在DBMS_SNAPSHOT或DBMS_MVIEW包上,因为有时候即使有系统权限,如果没有包的执行权限,也会导致问题。例如,执行DBMS_MVIEW.REFRESH可能需要EXECUTE ON DBMS_MVIEW。 然后,检查物化视图的定义,确认基表的权限是否正确。如果基表属于其他用户,可能需要通过角色授予权限,但Oracle在存储过程中有时不继承角色权限,所以最好直接授予给用户。 还有可能需要检查是否在创建物化视图时使用了QUERY REWRITE权限,特别是如果物化视图用于查询重写的话。此外,检查用户是否有足够的表空间配额,避免因为空间不足导致错误,但这里的主要错误是权限问题,所以配额可能不是主要原因。 如果用户被授予了必要的权限,但仍然遇到问题,可能需要检查是否存在同义词问题,或者物化视图的依赖对象是否有权限问题。例如,物化视图可能引用了其他用户的表、视图或函数,这些都需要显式授权。 总结步骤应该是:授予系统权限、授予对象权限、检查包的执行权限、验证基表权限、检查角色权限的继承问题,最后考虑其他可能的原因,比如存储过程权限或环境配置。 最后,生成相关问题,帮助用户进一步排查其他可能的错误,比如角色权限的问题、如何查看现有权限、处理存储过程中的权限问题等。</think>### 解决方案:ORA-01031权限不足与ORA-06512错误处理 #### 1. 检查系统权限 **问题根源**:执行`DBMS_MVIEW.REFRESH`或操作物化视图时,用户需具备以下权限: - `CREATE MATERIALIZED VIEW`:创建/刷新物化视图的权限 - `ALTER ANY MATERIALIZED VIEW`:修改其他用户的物化视图权限 - `SELECT`权限:访问基表的权限[^1][^2] **操作步骤**: ```sql -- 以SYSDBA身份登录后执行 GRANT CREATE MATERIALIZED VIEW TO user_a; GRANT ALTER ANY MATERIALIZED VIEW TO user_a; GRANT SELECT ON base_table TO user_a; -- 替换为实际基表名 ``` #### 2. 验证包执行权限 **问题根源**:若用户缺少`DBMS_SNAPSHOT`或`DBMS_MVIEW`包的`EXECUTE`权限,会触发ORA-01031错误。 **操作步骤**: ```sql GRANT EXECUTE ON SYS.DBMS_SNAPSHOT TO user_a; GRANT EXECUTE ON SYS.DBMS_MVIEW TO user_a; ``` #### 3. 检查对象所有权 **问题根源**:若物化视图属于其他用户,需显式授予权限: ```sql -- 以物化视图所有者身份执行 GRANT SELECT ON mv_demo TO user_a; -- 替换为实际物化视图名 ``` #### 4. 处理角色权限问题 **问题根源**:Oracle存储过程不继承角色权限,需直接授予用户。 **验证方法**: ```sql -- 查看用户权限 SELECT * FROM USER_SYS_PRIVS; SELECT * FROM USER_TAB_PRIVS; ``` #### 5. 其他可能原因 - **QUERY REWRITE权限**:若物化视图用于查询重写,需授予`QUERY REWRITE`权限: ```sql GRANT QUERY REWRITE TO user_a; ``` - **表空间配额**:确保用户有足够空间配额: ```sql ALTER USER user_a QUOTA UNLIMITED ON tablespace_name; ``` --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值