oracle - 如何更改 Oracle 中模式的默认表空间
问题描述
有一个名为 Docker 的模式,其中有名为 TABLE2、TABLE3 的表。
例子
SELECT * FROM all_all_tables WHERE TABLE_name= 'TABLE3';
此外,Docker 模式属于 DEFAULT TABLESPACE SYSTEM 表空间。
select
username
, default_tablespace from dba_users WHERE USERNAME = 'DOCKER';
以下语法用于更改模式的默认表空间。(TS3 表空间已经存在)
ALTER USER docker DEFAULT tablespace TS3;
然后,当我再次搜索时,我发现 DEFAULT TABLESPACE 已更改。
select
username
, default_tablespace from dba_users WHERE USERNAME = 'DOCKER';
而且,当然,我以为指定了TABLE2和TABLE3的表空间也会改成TS3,于是执行了下面的语句。
但是,该表的表空间是 SYSTEM,而不是 TS3。我很好奇为什么它没有改变,我想知道如何。SELECT * FROM all_all_tables WHERE TABLE_name='TABLE3';
解决方案
默认表空间就是这样——创建段时的默认值(通常是表或索引,但段可以是表的分区、物化视图或其他任何需要空间的东西)并且不指定表空间。一旦您创建了一个段并将其分配给特定的表空间,除非您移动它,否则它将保留在该表空间中。
假设您使用的是 12.2 或更高版本,因此可以选择在线移动(在其他版本中,您需要删除online
关键字)
alter table table3
move online tablespace ts3;
你需要为每张桌子这样做。如果表空间中还有索引system
,您也需要移动这些索引
alter index index_name
rebuild online tablespace ts3;
根据所涉及的表和索引的数量,您可能需要编写一些动态 SQL 来为您生成各种alter table
和alter index
语句。
推荐阅读
- webpack - 如何避免在生产构建中给出垃圾名称
- python - 如何在 Mac 上正确安装 virtualenvwrapper?
- reactjs - 我有一个 react native 组件,我正在尝试通过 connect 将该组件连接到 react-redux,但出现错误
- android - 可运行与服务;用用例解释寿命
- javascript - 将文件从输入元素传递到 plupload(添加文件夹)
- ios - 这里有人知道如何解决“传递给不带参数的调用的参数”吗?
- html - 如何在标题上方制作段落层
- android - 每 5 分钟添加一次价值并重置 textview
- wordpress - Wordpress 的图像遮罩模块
- p5.js - 错误创建画布未定义-尝试保存示例项目时