【问题标题】:alter index across schemas跨模式更改索引
【发布时间】:2010-09-20 01:16:25
【问题描述】:

我正在使用存储的 PL/SQL 过程作为 Web 应用程序的一部分来同步表 - 当它们点击按钮时,它会进行同步。 PL/SQL 以用户 A 的身份执行,但需要禁用索引并同步模式 B 中的几个表。尽管授予用户 A“更改任何索引”,但我无法让用户 A“更改索引 B.indexName 不可用”,甚至DBA都绝望了。错误是 ORA-01418: 指定的索引不存在。这正在另一个开发人员的沙箱上工作,但我不知道为什么。任何建议将不胜感激。

【问题讨论】:

  • 糟糕,上一篇文章让我有点超前了。更改索引失败,并且 SQL 在从表中删除所有内容之前退出。然后它尝试进行插入并在完整性约束上失败。

标签: database oracle indexing grant


【解决方案1】:

您是否通过角色授予 ALTER ANY INDEX 权限?还是直接将权限授予用户 A?

通过角色(例如 DBA)授予的权限不可用于定义者权限存储过程(默认设置)。只有直接授予用户的权限在定义者权限存储过程中可用。

【讨论】:

  • 作为sys直接授予用户A。
  • 我不确定“to user A as sys”中的“as sys”是什么意思。你是说你运行了语句 GRANT ALTER ANY INDEX TO userA 注销,登录,但代码仍然不起作用?
  • 是的,按照此语句以用户 A 身份运行:从 DBA_CONSTRAINTS WHERE UPPER(TABLE_NAME) = 'TABLE' 中选择 OWNER、CONSTRAINT_NAME、CONSTRAINT_TYPE、TABLE_NAME、STATUS; OWNER CONSTRAINT NAME CONSTRAINT TYPE TABLE_NAME STATUS B BTABLE_FKEY R TABLE ENABLED
【解决方案2】:

索引是否存在?不止一次,我因为不接受错误信息而浪费了时间。

【讨论】:

    【解决方案3】:

    我删除了索引并重建了它,这似乎解决了上述问题。现在它允许我禁用索引,但告诉我用户没有足够的权限来更改索引...当我完成填充表时在线重建。如果您愿意的话,用户 A 需要什么权限来执行该操作?

    【讨论】:

    • 重建时得到的错误号是多少?您应该只需要对要在其中构建索引的任何表空间的 ALTER ANY INDEX 特权和配额。Oracle 版本是什么?这是标准的 b*-tree 索引吗?
    猜你喜欢
    • 1970-01-01
    • 2016-05-25
    • 2013-07-25
    • 2021-03-17
    • 2019-01-27
    • 2015-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多