问题描述
我正在为同步 oracle 文本 ctx 索引创建批处理作业。
情况如下:
我有两个 Oracle 帐户,帐户 A 是架构所有者,帐户 B 是批处理作业服务器中使用的 Oracle 帐户。上下文索引是在账户A中创建的。我想使用Oracle账户B来执行一个批处理作业来同步上下文索引。 .
Oracle 帐户 A(架构所有者)
上下文索引 -> myindex
Oracle 帐户 B
批处理作业脚本
begin
ctx_ddl.sync_index('myindex','2M');
end;
上述脚本返回未找到的 myIndex。
请问有什么办法可以使用Oracle账户B对Oracle账户A中存储的上下文索引执行ctx_ddl.sync_index?
我尝试使用 A.myIndex、创建别名等,它仍然返回 not found
请帮忙:(
解决方法
错误消息在说谎 - 这是权限问题,而不是名称问题。如果您在架构名称前面加上 ALTER ANY INDEX
权限,同步应该可以工作。
以用户 A 或任何管理员帐户的身份运行:
grant alter any index to B;
以用户 B 身份运行:
begin
ctx_ddl.sync_index('a.myindex','2M');
end;
/
索引没有对象权限,因此您必须授予任何系统权限。 ANY 权限通常既强大又危险,但创建索引不会造成太大损害,因此希望您的管理员不会抱怨。如果 DBA 不允许这样做,您可以在模式 A 上创建一个过程来执行同步,然后将对该权限的执行授予模式 B。