navicat for oracle 的 er 图完全不支持表空间分配管理,仅可视化表结构、字段及关系,无表空间字段、设置入口或拖拽绑定功能,修改必须通过 sql 手动执行 alter table ... move tablespace。

Navicat for Oracle 的 ER 图功能完全不支持表空间分配管理。它只用于可视化表结构、字段、主外键关系和索引,对表空间这类存储层配置无任何编辑、绑定或映射能力。
ER 图里根本看不到表空间字段或设置入口
打开任意表的 ER 图(双击表 → 切换到「ER 图」标签),界面只显示:字段名、数据类型、长度、是否为空、主键/外键标记、索引图标。没有「表空间」列,也没有右键菜单能跳转到所属表空间配置——这不是隐藏了,而是压根没实现。
即使你手动用 SQL 把一张表建在 TS_APP_INDEX 上,ER 图里也只会显示表名和字段,不会标注「当前位于 TS_APP_INDEX」。想确认归属,必须切回「表」节点,右键该表 → 「对象信息」→ 查看「Tablespace」字段值。
试图拖拽表到不同表空间?ER 图不响应也不报错
有人误以为 ER 图支持“拖表换空间”,实际行为是:拖动无效、无视觉反馈、不触发任何 SQL。Navicat 不会拦截这个操作,也不会提示“不支持”,只是静默忽略——容易让人误判为操作失败而非功能缺失。
真正修改表所在表空间,只能用 SQL:
ALTER TABLE app_user MOVE TABLESPACE ts_app_data;
注意:MOVE 会重建表段,需确保目标表空间有足够空间,且用户对该表有 ALTER 权限;如果是分区表,还要逐个移动分区。
新建表时 ER 图也不参与表空间选择
在 ER 图中点击「添加表」画布上新建一个表,保存时 Navicat 会弹出标准建表对话框,但其中没有表空间下拉选项。最终该表创建在哪,取决于你当前连接的用户默认表空间(SELECT default_tablespace FROM dba_users WHERE username = 'APP_USER'),或显式在 DDL 中写 TABLESPACE ts_app_data。
如果你希望新表强制落在特定表空间,必须:
- 在 Navicat 建表对话框中切换到「SQL」标签页,手动补全
TABLESPACE子句 - 或建完后立刻执行
ALTER TABLE ... MOVE TABLESPACE - 或提前用
ALTER USER APP_USER DEFAULT TABLESPACE ts_app_data设定用户级默认值
最易被忽略的是:表空间名大小写敏感,且 Oracle 内部统一转为大写。你在 ER 图里看到的表名是小写,但背后对应的 TABLESPACE_NAME 字段永远是大写(如 USERS)。写 SQL 时若误用小写,会直接报 ORA-00955。











