暂无图片
暂无图片
1
暂无图片
暂无图片
暂无图片

Oracle表空间详解

原创 落荃 2022-03-01
3110

表空间概念

ORACLE数据库被划分成称作为表空间的逻辑区域——形成ORACLE数据库的逻辑结构

一个ORACLE数据库能够有一个或多个表空间,而一个表空间则对应着一个或多个物理的数据库文件,但一个数据库文件只能与一个表空间相联系。表空间是ORACLE数据库恢复的最小单位,容纳着许多数据库实体,如表、视图、索引、聚簇、回退段和临时段等。

每个ORACLE数据库均有SYSTEM表空间,这是数据库创建时自动创建的,用于存储系统的数据字典表、程序单元、过程、函数、包和触发器等。SYSTEM表空间必须总要保持联机,因为其包含着数据库运行所要求的基本信息(关于整个数据库的数据字典、联机求助机制、所有回退段、临时段和自举段、所有的用户数据库实体、其它ORACLE软件产品要求的表)。

一个小型应用的ORACLE数据库通常仅包括SYSTEM表空间,然而一个稍大型应用的ORACLE数据库采用多个表空间会对数据库的使用带来更大的方便。

表空间类型

永久性表空间:一般保存表、视图、过程和索引等的数据。

临时性表空间:只用于保存系统中短期活动的数据。

撤销表空间:用来帮助回退未提交的事务数据。

表空间作用

表空间的作用能帮助DBA用户完成以下工作:

  1. 决定数据库实体的空间分配

  2. 设置数据库用户的空间份额

  3. 控制数据库部分数据的可用性

  4. 分布数据于不同的设备之间以改善性能

  5. 备份和恢复数据。

用户创建其数据库实体时,必须给予表空间中具有相应的权力,所以对一个用户来说,其要操纵一个ORACLE数据库中的数据,应该:

  1. 被授予关于一个或多个表空间中的RESOURCE特权

  2. 被指定缺省表空间

  3. 被分配指定表空间的存储空间使用份额

  4. 被指定缺省临时段表空间,建立不同的表空间,设置最大的存储容量。

操作示例

1. 创建表空间

语法:

CREATE TABLESPACE 表空间名
DATAFILE '数据文件路径' SIZE 大小
[AUTOEXTEND ON] [NEXT 大小]
[MAXSIZE 大小];

说明:

  [ ]里面内容可选项,数据文件路径中若包含目录需先创建

  SIZE 为初始表空间大小,单位为K或者M

  AUTOEXTEND 是否自动扩展,值为ON或OFF

  NEXT 为文件满了后扩展大小

  MAXSIZE 为文件最大大小,值为数值或UNLIMITED(表示不限大小)

示例:

CREATE TABLESPACE ts_test
DATAFILE 'D:\oracle_tablespace\ts_test.dbf' SIZE 20M
AUTOEXTEND ON;

2. 查询表空间

查看所有的表空间

select name from v$tablespace;

示例:

--管理员角色查看表空间
SELECT file_name, tablespace_name, bytes, autoextensible
FROM dba_data_files
WHERE tablespace_name = 'ts_test';

3. 修改表空间

语法:

ALTER TABLESPACE 表空间名
ADD DATAFILE '文件路径' SIZE 大小
[AUTOEXTEND ON] [NEXT大小]
[MAXSIZE 大小];

示例:

ALTER TABLESPACE ts_test
ADD DATAFILE 'D:\oracle_tablespace\ts_test2.dbf 'SIZE 5M
AUTOEXTEND ON;

4. 删除表空间

语法:

--仅删除表空间
DROP TABLESPACE 表空间名;
--删除表空间及数据文件
DROP TABLESPACE 表空间名 INCLUDING CONTENTS AND DATAFILES;

示例:

--仅删除表空间
DROP TABLESPACE ts_test;
--删除表空间及数据文件
DROP TABLESPACE ts_test INCLUDING CONTENTS AND DATAFILES;


一、查询默认表空间


  1. 用PL/SQL登录到sys用户,执行命令:select default_tablespace from user_users;

    可以看到sys用户默认的永久表空间为SYSTEM.

    Oracle如何查询和修改用户的默认表空间


  2. 用PL/SQL登录到我们要操作的用户,比如lottery用户。执行命令

    select default_tablespace from user_users;

    可以看到当前用户的默认表空间为TS_LOTTERY_DATA。

    Oracle如何查询和修改用户的默认表空间


  3. 上面查询到的TS_LOTTERY_DATA是用户的永久表空间,执行命令select * from user_users还可以查询到当前用户的临时表空间及账户状态等。

    Oracle如何查询和修改用户的默认表空间

    END

二、修改默认表空间


  1. 如果想要修改用户的永久表空间可以执行命令:

    alter user user default tablespace tablespaceName,其中第二个user为要操作的用户,tablespaceName为将要设置的默认表空间名称。

    如果想修改新添加的用户的默认表空间可以执行如下命名:

    alter database default tablespace tablespaceName,这样新建立的用户的默认表空间就为tablespaceName。

    Oracle如何查询和修改用户的默认表空间


  2. 如果tablespaceName不存在,则需要执行如下语句先创建表空间。

    create tablespace tablespaceName datafile datafile

    size 500M autoextend on;

    Oracle如何查询和修改用户的默认表空间


  3. 新建数据表时就可以看到新建的表都会存放在新指定的表空间里。

    Oracle如何查询和修改用户的默认表空间

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论