平台配置与部署(老版本)
本篇解释 O2OA 平台在相同 Oracle 实例中用不同账号启动时出现的表或视图不存在报错。原因是高权限账号能跨模式看到已建对象,后启动的实例便跳过了建表,而对象实际落在别处模式。解决办法是收回管理级权限,改为按连接、资源等常规角色授权,并补齐会话、建表与表空间配额,使各账号的对象彼此隔离。调整后建议重启,并从日志里确认缺失对象是否已补齐。
在使用 Oracle 数据库时,多个 O2OA 服务器若在同一个实例中使用不同的用户启动,可能会遇到数据库访问错误。本文阐述此类问题及解决方案。
1、O2OA 已下载并解压到指定目录;
2、Oracle 数据库已安装完成,并已创建数据库实例和不同的数据库用户。
在同一个 Oracel 数据库实例中建立两个不同的用户,如:usera,userb。我们使用两个独立的 O2OA 服务器分别使用 usera 和 userb 连接到数据库。
我们会发现:先启动的 o2server 能够正常完成服务器启动,但是后启动 o2server 在控制台会出现如下图所示报错:
由于 usera 和 userb 都具有 dba 权限,服务器启动时会先通过 DatabaseMetaData 对象判断需要访问的数据表或视图是否存在,不存在则主动创建相关数据库对象。拥有 dba 权限的用户可以查询到指定的数据表已经存在(已在第一个 o2server 服务器启动时由 usera 创建)。但由 usera 创建的对象并不在 userb 可访问的 Schema 下,因此定义在 userb 用户 schema 下的数据库对象实际上并不存在。
因此,使用 userb 数据库用户启动 O2OA 时会跳过数据表创建过程,并报错:表或视图不存在。
删除 O2OA 所用数据库用户的 dba 权限,并为 usera、userb 设置以下权限。
GRANT RESOURCE TO USERA; GRANT CONNECT TO USERA; GRANT UNLIMITED TABLESPACE TO USERA; GRANT CREATE SESSION TO USERA; GRANT CREATE TABLE TO USERA; GRANT RESOURCE TO USERB; GRANT CONNECT TO USERB; GRANT UNLIMITED TABLESPACE TO USERB; GRANT CREATE SESSION TO USERB; GRANT CREATE TABLE TO USERB;
这样可以避免不同用户相互看到数据库对象,实现对象隔离。
所需角色:CONNECT、RESOURCE,如下图所示:
需要的权限:CREATESESSION、CREATETABLE、UNLIMITED TABLESPACE,如下图所示:
以上是此类问题的解决方法,希望对您有帮助。
相关内容