我们将 Oracle 从 11g 升级到 19c,并且尝试截断 user1 中由 user2 拥有的表。我们有必要的 ALTER 授权、user1 中表的同义词和公共同义词。我们可以通过指定模式(即“user2.table”)来截断表。但是,如果不添加 user2 前缀,我们无法直接截断它。
我们尝试重新创建公共同义词,然后在 user1 中创建一个同义词,并通过撤销现有的授予来再次提供授予。没有运气。
我们希望在不指定 user2 前缀的情况下截断表。在 Oracle 11g 中截断表而不指定 user2 前缀效果很好。
我在 Oracle 文档中找不到与此相关的任何更改。所以,我怀疑我错过了什么。
请提出解决方案。
您可以在以下 DML 语句中引用同义词:SELECT、INSERT、UPDATE、DELETE、FLASHBACK TABLE、EXPLAIN PLAN、LOCK TABLE、MERGE 和 CALL。
您可以在以下 DDL 语句中引用同义词:AUDIT、NOAUDIT、GRANT、REVOKE 和 COMMENT。
因此您不能在 TRUNCATE 语句(即 DDL)中引用同义词。
Oracle 11gR2 文档也说了同样的事情,所以它似乎不太可能像您在该版本中想象的那样工作。