【问题标题】:How to (un)mark an Oracle table read-only for the owner?如何为所有者(取消)将 Oracle 表标记为只读?
【发布时间】:2023-03-13 03:22:01
【问题描述】:

在我的 Oracle 实例中,我有一个表。它存在很多年都没有问题,我每天(通过我的软件)运行数千个查询,主要是选择和插入,很少(每周一次)更新。

今天,在上次更新一周后,我对其进行了更新,但失败并显示 ORA-00942: table or view does not exist

我是那张桌子的主人。我很确定数据库在一周内没有太大变化,当然不是这张表。

我可以从中选择:select * from table_x,但更新和插入失败:insert into table_x select * from table_x where 1 = 0 带有奇怪的ORA-00942

由于我是所有者,因此通常的可见性和特权问题似乎并不适用,遗憾的是,谷歌搜索也无济于事。我确定我遗漏了一些非常简单的东西,所以非常欢迎任何建议。

我如何让我自己(所有者)的 Oracle 表只读(或不可见)?

它是分区的(不确定是否有帮助)。它的大小约为 50GB,是索引的一半(不确定这是否有帮助)。

编辑:这是来自 PL/SQL Developer 的示例语句的屏幕截图:

【问题讨论】:

  • 你能显示整个错误信息栈吗?我只能想象你在表上有一个触发器,它是 that 正在引用一个不再存在的表。查找触发器,检查其状态,以及 user_errors 中的内容;但它可能归结为对代码的视觉检查,以查看它正在尝试使用哪个表。您不能将表格设置为对其所有者只读,以返回您的问题/标题。
  • 虽然,我认为触发器必须执行动态 SQL 才能获得该错误,而不是仅仅说它无效并且重新编译失败。有趣...
  • 你能做一个文字插入,插入table_x值(1,2,3); - 我猜你插入的选择位有问题。
  • 你有基于这个表的物化视图吗?
  • 所以我想这是因为物化视图日志用于快速刷新视图。试试DROP MATERIALIZED VIEW LOG ON <table_x>

标签: oracle oracle11g


【解决方案1】:

一旦我运行了同样的情况,根据跟踪文件和小谷歌搜索,它引用了与主表关联的物化视图日志。

使用以下命令删除物化视图日志

DROP MATERIALIZED VIEW LOG ON <table_x> 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-10-26
    • 1970-01-01
    • 1970-01-01
    • 2022-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多