【问题标题】:How to change the default tablespace of the schema in Oracle如何更改 Oracle 中模式的默认表空间
【发布时间】:2021-07-17 07:39:53
【问题描述】:

有一个叫做 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';

【问题讨论】:

    标签: oracle schema tablespace


    【解决方案1】:

    默认表空间就是这样——创建段时的默认值(通常是表或索引,但段可以是表的分区、物化视图或其他任何需要空间的东西)并且不要'不指定表空间。一旦您创建了一个段并将其分配给特定的表空间,除非您移动它,否则它将保留在该表空间中。

    假设您使用的是 12.2 或更高版本,因此可以选择在线移动(在其他版本中,您需要删除 online 关键字)

    alter table table3
      move online tablespace ts3;
    

    您需要为每张桌子这样做。如果system 表空间中也有索引,您也需要移动这些索引

    alter index index_name
      rebuild online tablespace ts3;
    

    根据涉及的表和索引的数量,您可能需要编写一些动态 SQL 来为您生成各种 alter table 和 alter index 语句。

    【讨论】:

      猜你喜欢
      • 2011-11-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-01
      • 2011-03-13
      • 2015-07-21
      • 1970-01-01
      • 2018-12-02
      • 1970-01-01
      相关资源
      最近更新 更多