删除view后为什么能在回收站看到

【 使用环境 】测试环境
【 OB or 其他组件 】OB
【 使用版本 】4.3.5.2
【问题描述】删除view后为什么能在回收站看到?看文档应该不在才对
https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000003977754
【复现路径】问题出现前后相关操作
1、开启回收站
2、创建视图
mysql> create view s2 as select * from t2;
Query OK, 0 rows affected (0.30 sec)
3、删除视图
mysql> drop view s2;
Query OK, 0 rows affected (0.29 sec)
4、查看回收站
image
5、恢复/删除回收对象都报语法错误

【附件及日志】推荐使用OceanBase敏捷诊断工具obdiag收集诊断信息,详情参见链接(右键跳转查看):

【SOP系列 22 】——故障诊断第一步(自助诊断和诊断信息收集)

【备注】基于 LLM 和开源文档 RAG 的论坛小助手已开放测试,在发帖时输入 [@论坛小助手] 即可召唤小助手,欢迎试用!

在 OceanBase 中,视图确实不应该直接出现在回收站中,因为回收站主要是用于存储被删除的表等对象。如果您发现删除视图后视图仍然出现在回收站中,这可能是一个异常情况,可以使用 obdiag 工具来进一步调查这个问题。

日志采集场景: SQL执行出错
日志采集命令: obdiag gather scene run --scene=observer.sql_err --env “{db_connect=’-h127.0.0.1 -P2881 -utest@test -p****** -Dtest’, trace_id=‘Yxx’}”

请根据上述命令采集日志并提供给我们,以便于我们进一步分析问题的原因。同时,为了更好地理解您的情况,请您回答以下几个问题:

  1. 您是在哪个版本的 OceanBase 上观察到了这个现象?
  2. 您能否提供删除视图的具体命令?
  3. 您能否提供视图创建时的定义语句?
  4. 视图是否与其他数据库对象有关联(例如,是否通过视图引用了某些表或函数)?
  5. 您是否尝试过在其他环境(如开发环境或测试环境)中复现此问题?

这些问题的答案将有助于我们更准确地定位问题。谢谢!

附上敏捷诊断工具 obdiag 使用帮助链接

1 个赞

记得回收站只支持表和库的删除,不支持视图和索引的删除。

1 个赞

嗯。看文档说view不应该进回收站,为什么能看到呢?

确实不应该看到VIEW,得具体看一下日志,或用工具诊断一下了。

是物化视图么?本地在435bp3未复现成功,麻烦提供一下完整的操作流程截图。

复现出来了,稍等 这边先咨询下相关内核同学

1 个赞

看上去把view当做table放到了回收站

-- 删除view
obclient [test]> drop view v_t1;
Query OK, 0 rows affected (0.069 sec)

-- 进入了回收站,TYPE是VIEW
obclient [test]> show recyclebin;
+-----------------------------------------+---------------+-------+----------------------------+
| OBJECT_NAME                             | ORIGINAL_NAME | TYPE  | CREATETIME                 |
+-----------------------------------------+---------------+-------+----------------------------+
| __recycle_$_1757569992_1760079409863928 | t1            | TABLE | 2025-10-10 14:56:49.880738 |
| __recycle_$_1757569992_1760079418566256 | v_t1          | VIEW  | 2025-10-10 14:56:58.565607 |
+-----------------------------------------+---------------+-------+----------------------------+
2 rows in set (0.004 sec)

-- 用flashback view语法恢复,报错语法不支持
obclient [test]> flashback view v_t1 to before drop;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your OceanBase version for the right syntax to use near 'view v_t1 to before drop' at line 1

-- 用flashback table闪回VIEW,正常成功
obclient [test]> flashback table v_t1 to before drop;
Query OK, 0 rows affected (0.071 sec)

-- 查询视图,报错,因为依赖的表之前drop了
obclient [test]> select * from v_t1;
ERROR 1356 (42S22): View 'test.v_t1' references invalid table(s) or column(s) or function(s) or definer/invoker of view lack rights to use them

-- 闪回表
obclient [test]> flashback table t1  to before drop;
Query OK, 0 rows affected (0.075 sec)

-- 再查询视图,正常可用
obclient [test]> select * from v_t1;
+------+------+
| id   | name |
+------+------+
|    1 | A    |
|    2 | B    |
|    3 | C    |
+------+------+
3 rows in set (0.163 sec)

代码层view会被纳入回收站,可以用户表恢复方法进行恢复

这个闪回好像就是把试图当成表对待, 创建视图后,show tables 也能看到视图

那ocp考试中的那个答案就可以包含view了吧?应该是有一道题是说一下哪些对象可以进回收站。