【问题标题】:Is there a need to create a tablespace in oracleoracle中是否需要创建表空间
【发布时间】:2017-01-31 13:36:32
【问题描述】:

oracle中是否必须创建表空间?我知道默认情况下它会占用用户表空间。指定表空间和不指定表空间有什么区别?现在我创建了一个没有表空间的模式,并且默认它位于用户表空间中,将我的对象和数据从默认值移动到一个自定义表空间的步骤是什么。请建议

【问题讨论】:

  • 你有像ALTER TABLE <TABLE NAME to be moved> MOVE TABLESPACE <destination TABLESPACE NAME>这样的函数来移动数据。当您拥有数千个表和 TBytes 数据时,表空间管理变得更加令人兴奋。
  • @Wernfried Domscheit :哇,非常感谢,它成功了,您能否建议如何移动约束相关和索引相关的表空间
  • 显然创建额外的表空间不是强制性的,从你已经完成的。 Read about having multiple tablespaces;和the concepts guide on tablespaces
  • 对于索引,它类似于Alter index <index-name> rebuild tablespace <new-tablespace>;。约束、触发器等只是在SYSTEM表空间中定义的,不能移动。

标签: oracle tablespace


【解决方案1】:

如果您不喜欢 USERS 表空间的名称,您可以简单地重命名它。

alter tablespace USERS rename to COOLNAME;

如果您还想重命名文件,那么您需要离线表空间并重命名它们。 要知道可以从 dba_data_files 或 v$datafile 中选择的名称

alter tablespace COOLNAME OFFLINE; 

move file at OS level..
host mv /oracle/users01.dbf /oracle/coolname01.dbf
alter database rename file '/oracle/users01.dbf' to '/oracle/coolname01.dbf';

alter tablespace COOLNAME online;

如果您需要将对象移动到另一个表空间,您应该使用移动和重建 DDL。下面是一些用于生成 DDL 的有用查询。

select 'alter table ' || OWNER || '.' || SEGMENT_NAME || ' move tablespace COOLNAME;' from dba_segments where OWNER='YOURUSER' and SEGMENT_TYPE='TABLE' and TABLESPACE_NAME='USERS';

select 'alter index ' || OWNER || '.' || SEGMENT_NAME || ' rebuild tablespace COOLNAME;' from dba_segments where OWNER='YOURUSER' and SEGMENT_TYPE='INDEX' and TABLESPACE_NAME='USERS';

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-11
    • 1970-01-01
    • 2014-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多