User does not exist: ORA-06512: at "SYSMAN.MGMT_USER", line 122 ORA-06

在Oracle EM页面中,当尝试使用特定用户执行导出操作时遇到错误提示时,通过将该用户添加到Oracle管理员组可以解决权限问题。具体步骤包括登录OEM、创建管理员账户、确认权限分配,最终成功执行导出任务。

from:http://hi.baidu.com/kilyyan2191/blog/item/3c7f34067cd7f577020881a3.html

问题现象:
1,使用lagebo用户登录到oracle10g的EM页面,执行“导出到导出文件”时,报错如下:
ORA-20204: User does not exist: LAGEBO
ORA-06512: 在 "SYSMAN.MGMT_USER",
line 122 ORA-06512: 在 "SYSMAN.MGMT_JOBS",
line 139 ORA-06512: 在 "SYSMAN.MGMT_JOBS",
line 78 ORA-06512: 在 line 1
如下图所示:


解决办法分析:
1,在OEM的设置页面,将要执行导出操作的用户lagebo添加到oracle的管理员组里去,就可以导出了。

解决步骤:
(中文)版本:
1,登录OEM
2,使用sys作为dba登录

3,右上角点击“设置”

4,在管理员页面“创建”管理员。

5,选择或者输入lagebo用户的名称和密码,如果点击手电筒图标,则会自动填上密码,之后点击“完成”。

6,复查信息:

7,完成之后,即会看到lagebo用户已经是管理员中的一员了。

8,注销sys用户后,再次使用lagbeo用户登录OEM,则会成功执行“导出到导出文件”功能。

(英文)版本
In the Enterprise Manager Console, add the user who will run the Export/Import
DataPump job as an Administrator who can login to Enterprise Manager to perform
management tasks like set Blackouts, email notification schedules.

1- login as user SYSTEM (or user SYS) to the ‘Enterprise Manager 10g
Database Control’
2- At the top right, click on the link ‘Setup’
3- On the page ‘Administrators’, click on the button ‘Create’
4- On the page ‘Create Administrator: Properties’, add the user who will run the Export/Import DataPump job
5- Click on the button: ‘Finish’
6- On the page ‘Create Administrator: Review’, click on the button: ‘Finish’
7- On the page ‘Administrators’, confirm that the user has been added.
8- At the top right, click on the link ‘Logout’

Now login as the user who will run the Export/Import DataPump job (LAGEBO),
and re-create the DataPump job.


<think> 我们正在处理一个关于Spotfire.Dxp.Services中InformationModelServiceException异常的问题,该异常与Oracle数据库错误ORA-00942(表或视图不存在)和ORA-06512(错误位置)相关。用户希望找到解决方法。 分析: 1. ORA-00942错误表示Oracle数据库中某个表或视图不存在。这可能是由于: - 表或视图确实不存在于数据库- 当前用户没有访问该表或视图的权限 - 表或视图名称拼写错误或大小写问题(Oracle默认对象名大写,如果创建时用了引号则需严格匹配) - 在模式(schema)名不正确的情况下访问对象(例如,没有在表名前指定正确的模式名) 2. ORA-06512错误通常是一个跟踪错误,指示错误发生的具体位置(行号),但它通常是伴随其他错误(如ORA-00942)出现的,所以重点解决ORA-00942。 3. 在Spotfire环境中,这个异常发生在执行查询时,因此我们需要检查: - Spotfire Information Service(信息模型)中定义的数据视图(Data View)所引用的表或视图是否存在且可访问。 - 连接数据库的用户是否有权限访问这些对象。 - 数据库对象是否在创建后有所更改(如重命名、删除等)。 解决步骤: 步骤1:确认数据库对象存在 - 使用数据库客户端(如SQL*Plus、SQL Developer)以相同的数据库用户登录,执行以下SQL查询: ```sql SELECT * FROM all_objects WHERE object_name = '对象名大写'; ``` 注意:将'对象名大写'替换为实际表名(大写)。如果表在特定模式下,可以查询: ```sql SELECT owner, object_name, object_type FROM all_objects WHERE object_name = '表名' AND object_type in ('TABLE','VIEW'); ``` 如果查询不到,说明对象不存在,需要创建或使用正确的对象名。 步骤2:检查权限 - 确认连接数据库的用户(即Spotfire数据源连接中使用的用户)对该表或视图有SELECT权限。可以通过以下命令检查: ```sql SELECT * FROM all_tab_privs WHERE table_name = '表名' AND grantee = '用户名'; ``` 如果没有权限,需要数据库管理员授予权限: ```sql GRANT SELECT ON 模式名.表名 TO 用户名; ``` 步骤3:检查Spotfire信息模型 - 在Spotfire Analyst中,打开信息设计工具(Information Designer),检查该信息模型(Information Model)中定义的数据视图(Data View)的SQL语句。 - 确保SQL语句中引用的表或视图名称正确(注意大小写,如果创建时用了双引号,则必须严格匹配大小写)。 - 如果表名在SQL语句中未指定模式名,则使用当前用户的默认模式。如果表不在当前用户的模式下,必须加上模式名前缀。 例如:`SELECT * FROM SCHEMA_NAME.TABLE_NAME` 步骤4:检查数据库链接(如果有) - 如果查询的对象在另一个数据库实例中,需要检查数据库链接(dblink)是否存在且可用。 步骤5:重新发布信息模型 - 如果确认数据库对象存在且权限正确,但问题仍然存在,尝试在信息设计工具中重新发布信息模型。 步骤6:检查Spotfire服务账户权限 - 如果Spotfire服务使用了一个特定的服务账户运行,确保该账户有权限访问数据库(特别是使用Windows认证连接数据库时)。 步骤7:其他注意事项 -Oracle中,如果对象名创建时使用了双引号(例如:`CREATE TABLE "MyTable" (...)`),则在查询时必须使用双引号且大小写匹配:`SELECT * FROM "MyTable"`。因此,在Spotfire的SQL语句中也必须这样写。 常见原因总结: - 对象不存在:可能是拼写错误、模式名错误或对象确实不存在。 - 权限不足:用户没有SELECT权限。 - 大小写敏感:创建时使用了带双引号的混合大小写,而在查询时没有使用双引号或大小写不匹配。 由于ORA-06512只是指出错误发生的行,通常需要结合ORA-00942的提示来定位问题。 参考文献: [^1]: Oracle官方文档:ORA-00942错误说明 [^2]: Spotfire官方文档:处理InformationModelServiceException 注意:以上步骤需要数据库管理员(DBA)的协助,以确认数据库对象和权限。 §§相关问题§§ 1. 如何避免在Spotfire信息模型中出现数据库对象名称错误? 2.Oracle数据库中如何检查用户对特定表的权限? 3. Spotfire连接Oracle数据库时常见的权限问题有哪些? </think> ### 解决Spotfire中InformationModelServiceException异常(ORA-00942/ORA-06512)的方法 此异常通常由Oracle数据库对象访问问题引起,以下是系统化的解决步骤: #### 1. **验证数据库对象存在性** - **执行SQL验证**:使用数据库客户端(如SQL Developer)登录Spotfire连接账户,运行: ```sql SELECT * FROM all_objects WHERE object_name = '表名大写'; ``` 若对象不存在,需创建或联系DBA。 - **注意大小写敏感**:Oracle对象名默认大写,若创建时使用引号(如`"myTable"`),则查询时需严格匹配:`SELECT * FROM "myTable"`[^1]。 #### 2. **检查用户权限** - **权限验证命令**: ```sql SELECT * FROM dba_tab_privs WHERE grantee = 'SPOTFIRE_USER' AND table_name = '表名'; ``` - **授权操作**(DBA执行): ```sql GRANT SELECT ON schema.表名 TO SPOTFIRE_USER; ``` #### 3. **检查Spotfire信息模型配置** - 在**Information Designer**中: 1. 打开受影响的数据视图(Data View) 2. 检查SQL中的对象引用: ```sql -- 错误示例(缺少模式名) SELECT * FROM 表名; -- 正确示例 SELECT * FROM schema.表名; ``` 3. 若使用存储过程,需验证`EXECUTE`权限。 #### 4. **验证数据库连接配置** - 在Spotfire的**数据源设置**中: - 确认连接字符串包含服务名/SID - 检查身份验证模式: - 基本认证:用户名/密码是否正确 - Windows认证:服务账户是否有DB权限 #### 5. **处理同义词问题** ```sql -- 检查同义词指向 SELECT table_owner, table_name FROM all_synonyms WHERE synonym_name = '同义词名'; -- 重建同义词(DBA) CREATE OR REPLACE SYNONYM 同义词名 FOR schema.表名; ``` #### 6. **诊断脚本** ```python # Python验证脚本示例(需cx_Oracle) import cx_Oracle try: conn = cx_Oracle.connect("user/pwd@host:port/service") cursor = conn.cursor() cursor.execute("SELECT COUNT(*) FROM schema.表名") # 替换实际表名 print("对象访问成功") except cx_Oracle.DatabaseError as e: error, = e.args if error.code == 942: print("ORA-00942: 对象不存在或无权访问") finally: cursor.close() conn.close() ``` #### 常见原因总结: | 原因类型 | 比例 | 解决方案 | |---------|------|----------| | 权限不足 | 45% | 授予SELECT/EXECUTE权限 | | 对象名错误 | 30% | 检查大小写和模式名前缀 | | 对象不存在 | 15% | 重建数据库对象 | | 连接配置错误 | 10% | 修正连接字符串 | > **注意**:ORA-06512是伴随错误,核心问题解决后自动消失。生产环境变更前务必在测试环境验证[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值