物化视图快速刷新报 ORA-12008 & ORA-01031


物化视图快速刷新报 ORA-12008 & ORA-01031





用户A创建了物化视图,物化视图里边引用了用户B的表,现在用户C执行exec dbms_mview.refresh ('MV_pi_to_res_lhr' , 'F' );报错:
ORA-12008: error in materialized view refresh path
ORA-01031: insufficient privileges
ORA-06512: at "SYS.DBMS_SNAPSHOT", line 2255
ORA-06512: at "SYS.DBMS_SNAPSHOT", line 2461
ORA-06512: at "SYS.DBMS_SNAPSHOT", line 2430
ORA-06512: at line 1

解决:
GRANT CREATE MATERIALIZED VIEW TO USER_NAME;
grant GLOBAL QUERY REWRITE, ON COMMIT REFRESH, ALTER ANY MATERIALIZED VIEW to USER_NAME; 
grant flashback on 基表 to USER_NAME; --需要将基表的所有权限赋权给创建物化视图的用户
grant flashback on 物化视图日志表 to USER_NAME;






ORA-12008 & ORA-01031 When Trying to do a Fast Refresh on an MView (文档 ID 810117.1)

In this Document

Symptoms
Cause
Solution
References


APPLIES TO:

Oracle Server - Enterprise Edition - Version 10.2.0.1 to 10.2.0.3 [Release 10.2]
Information in this document applies to any platform.


SYMPTOMS

The following error is raised when trying to perform a fast refresh of a Materialized View (MV):

ERROR at line 1:
ORA-12008: error in materialized view refresh path
ORA-01031: insufficient privileges
ORA-06512: at "SYS.DBMS_SNAPSHOT", line 2255
ORA-06512: at "SYS.DBMS_SNAPSHOT", line 2461
ORA-06512: at "SYS.DBMS_SNAPSHOT", line 2430
ORA-06512: at line 1

The base table for the Materialized View contains XML or object types and is located in a different schema than the MV. If the same MV is created in the schema that owns the base table, then the refresh is working fine.

CAUSE

This issue is documented in Bug 6146742 and was confirmed for RDBMS versions 10.2.0.1 to 10.2.0.3. 
It is caused by the internal use of the  'Flashback' feature of the database. Please see the Oracle documentation for more details on this feature.

The bug is currently open with Development and is being worked upon there.

SOLUTION

There is a workaround available to make the refresh run:

Granting explicitly  flashback privilege on the base table and the MV log to the owner of the MV avoids the issue:   
Please replace 'PARENT_TABLE' with the name of the base table and '' with the owner of the Materialized View.

grant flashback on PARENT_TABLE to ;
    grant flashback on MLOG$_PARENT_TABLE to ;

REFERENCES

BUG:6146742  - ORA-12008,01031 WHEN REFRESH FAST SNAPSHOT WITH XMLTYPE OF PARENT IN DIF SCHEMA.





About Me

...............................................................................................................................

● 本文作者:小麦苗,只专注于数据库的技术,更注重技术的运用

● 本文在itpub(http://blog.itpub.net/26736162)、博客园(http://www.cnblogs.com/lhrbest)和个人微信公众号(xiaomaimiaolhr)上有同步更新

● 本文itpub地址:http://blog.itpub.net/26736162/abstract/1/

● 本文博客园地址:http://www.cnblogs.com/lhrbest

● 本文pdf版及小麦苗云盘地址:http://blog.itpub.net/26736162/viewspace-1624453/

● 数据库笔试面试题库及解答:http://blog.itpub.net/26736162/viewspace-2134706/

● QQ群:230161599     微信群:私聊

● 联系我请加QQ好友(646634621),注明添加缘由

● 于 2017-05-05 09:00 ~ 2017-05-05 22:00 在魔都完成

● 文章内容来源于小麦苗的学习笔记,部分整理自网络,若有侵权或不当之处还请谅解

● 版权所有,欢迎分享本文,转载请保留出处

...............................................................................................................................

拿起手机使用微信客户端扫描下边的左边图片来关注小麦苗的微信公众号:xiaomaimiaolhr,扫描右边的二维码加入小麦苗的QQ群,学习最实用的数据库技术。

ico_mailme_02.png
DBA笔试面试讲解
欢迎与我联系

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/26736162/viewspace-2138546/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/26736162/viewspace-2138546/

Oracle数据库中的错误 `ORA-01031: insufficient privileges` 通常表示当前用户尝试执行的操作需要更高的权限,但该用户没有被授予这些权限。以下是导致此问题的常见原因和对应的解决方法。 ### 常见原因 1. **用户权限不足** 用户尝试执行某些需要特定系统权限(如 `SYSDBA` 或 `SYSOPER`)的操作,但未正确配置这些权限。 2. **连接时未正确使用 `AS SYSDBA`** 在使用 `sqlplus` 连接数据库时,如果以普通用户身份登录,并试图通过 `AS SYSDBA` 提升权限,则可能会遇到此错误,因为普通用户可能未被授权使用 `SYSDBA` 权限 [^1]。 3. **存储过程或触发器中涉及高权限操作** 如果某个存储过程、触发器或物化视图新过程中需要访问受保护的对象(例如系统表或内部包),而调用者没有足够的权限,则会引发此错误 [^2]。 4. **XStream Inbound Server 访问问题** Oracle GoldenGate 等工具在与 XStream Inbound Server 交互时,如果没有为相关用户授予必要的特权,则可能导致此错误 [^3]。 5. **修改关键参数时权限不足** 尝试更改某些受保护的数据库参数(如 `max_dump_file_size`)时,如果没有适当的权限,则会引发此错误 [^4]。 --- ### 解决方案 #### 1. 检查并提升用户权限 确保当前用户拥有执行目标操作所需的权限。常见的权限包括: - `SYSDBA`:用于启动、关闭数据库实例,以及执行管理任务。 - `SYSOPER`:用于执行基本的数据库维护操作。 - `ALTER SYSTEM`:用于修改系统级参数。 - `EXECUTE` on `DBMS_SNAPSHOT`:用于物化视图。 可以通过以下命令授予用户额外权限: ```sql GRANT SYSDBA TO <username>; GRANT ALTER SYSTEM TO <username>; GRANT EXECUTE ON DBMS_SNAPSHOT TO <username>; ``` #### 2. 使用正确的登录方式 如果希望以 `SYSDBA` 身份登录,请确保使用正确的凭证进行连接。例如: ```bash sqlplus / as sysdba ``` 这种方式适用于本地连接,并且操作系统用户必须属于 `dba` 组。如果远程连接,则需要确保 `remote_login_passwordfile` 参数设置为 `EXCLUSIVE` 并且已创建密码文件。 #### 3. 配置物化视图权限 对于涉及物化视图新的错误,可以尝试授予用户对 `DBMS_SNAPSHOT` 包的执行权限,并检查底层对象是否可访问: ```sql GRANT EXECUTE ON DBMS_SNAPSHOT TO <username>; ``` #### 4. 授予 XStream 相关权限 如果使用 Oracle GoldenGate 或其他工具与 XStream Inbound Server 交互,请确保为相关用户授予适当的权限: ```sql GRANT CONNECT, RESOURCE TO <username>; GRANT SELECT ANY TRANSACTION TO <username>; GRANT FLASHBACK ANY TABLE TO <username>; GRANT EXECUTE ON DBMS_XSTREAM_AUTH_IVK TO <username>; ``` #### 5. 修改受保护参数 如果需要修改如 `max_dump_file_size` 等受保护参数,请确保当前用户具有 `ALTER SYSTEM` 权限: ```sql GRANT ALTER SYSTEM TO <username>; ``` 然后可以使用以下语句修改参数: ```sql ALTER SYSTEM SET max_dump_file_size = 10000 SCOPE=SPFILE; ``` --- ### 总结 `ORA-01031: insufficient privileges` 错误的核心在于权限配置不当。根据具体场景,检查用户的权限配置,适当授予缺失的权限,或者调整连接方式,即可解决问题。此外,在涉及高级功能(如物化视图、GoldenGate、XStream)时,还需确保相关组件的权限也被正确分配。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值