01. 概述
表空间在 Oracle 数据库中扮演着非常重要的角色,它是存储表、索引、视图、存储过程、触发器等对象信息的容器。因此,管理表空间的使用情况、容量、空间释放等是 Oracle 数据库管理员必须要掌握的技能之一。在本文中,我们将详细介绍如何使用 SQL 语句查询 Oracle 数据库中的表空间信息。
02. 查看表空间信息
2.1 查询表空间名称
在 Oracle 数据库中,表空间名称可以用来标识各个表空间之间的差异。因此,查询表空间名称是非常常见的需求。
SELECT tablespace_name FROM dba_tablespaces;
以上 SQL 语句将返回数据库中所有表空间的名称。
2.2 查询表空间的大小和空闲情况
在 Oracle 数据库中,表空间的大小和空闲情况是非常重要的信息。可以通过以下 SQL 语句来查询表空间的总大小、已用空间、剩余空间及空间使用率。
SELECT tablespace_name AS "表空间名称",
sum(bytes) / (1024 * 1024) AS "表空间大小(M)",
sum(bytes - blocks * 1024) / (1024 * 1024) AS "已使用空间(M)",
sum(blocks * 1024) / (1024 * 1024) AS "剩余空间(M)",
round((sum(bytes - blocks * 1024) / sum(bytes)) * 100,2) AS "空间使用率(%)"
FROM dba_free_space
WHERE tablespace_name NOT LIKE '%UNDO%'
GROUP BY tablespace_name
UNION ALL
SELECT tablespace_name AS "表空间名称",
sum(bytes) / (1024 * 1024) AS "表空间大小(M)",
sum(bytes - blocks * 1024) / (1024 * 1024) AS "已使用空间(M)",
sum(blocks * 1024) / (1024 * 1024) AS "剩余空间(M)",
round((sum(bytes - blocks * 1024) / sum(bytes)) * 100,2) AS "空间使用率(%)"
FROM dba_data_files
WHERE tablespace_name NOT LIKE '%UNDO%'
GROUP BY tablespace_name;
注: 以上 SQL 语句用了两个 union all 合并了 dba_free_space(已分配但未使用的空间)和 dba_data_files(已使用的空间)两张表。
2.3 查询表空间数据文件信息
表空间的数据文件是用来存储表空间中表、索引等数据库对象的,查询数据文件信息可以帮助 DBA 了解数据文件的位置、状态等信息。
SELECT tablespace_name, file_name, bytes / (1024 * 1024) AS "数据文件大小(M)", status
FROM dba_data_files;
以上 SQL 语句将返回数据库中所有数据文件的信息。
03. 系统表空间和用户表空间
在 Oracle 数据库中,有两类表空间:系统表空间和用户表空间。
3.1 查询系统表空间
系统表空间是 Oracle 数据库内置的表空间,包括 SYSTEM 和 SYSAUX 两个表空间。
SELECT tablespace_name, file_name, bytes / (1024 * 1024) AS "数据文件大小(M)", status
FROM dba_data_files
WHERE tablespace_name IN ('SYSTEM', 'SYSAUX');
3.2 查询用户表空间
用户表空间是由 DBA 和普通用户创建和管理的表空间。
3.2.1 查询已创建的用户表空间
SELECT tablespace_name, contents, extent_management
FROM dba_tablespaces
WHERE tablespace_name NOT IN ('SYSAUX', 'SYSTEM');
3.2.2 创建用户表空间
DBA 可以使用以下 SQL 语句创建用户表空间。
CREATE TABLESPACE user_ts DATAFILE '/u01/app/oracle/oradata/ORCL/user_ts01.dbf' SIZE 10M;
注:以上 SQL 语句创建了一个名为 user_ts 的用户表空间,大小为 10MB。
04. 表空间管理
在 Oracle 数据库中,管理员可以通过以下方法管理表空间的使用情况,包括:为表空间添加数据文件、移除表空间数据文件、调整表空间大小等。
4.1 为表空间添加数据文件
ALTER TABLESPACE user_ts ADD DATAFILE '/u01/app/oracle/oradata/ORCL/user_ts02.dbf' SIZE 10M;
以上 SQL 语句为用户表空间 user_ts 添加了一个大小为 10MB 的数据文件。
4.2 移除表空间数据文件
ALTER TABLESPACE user_ts DROP DATAFILE '/u01/app/oracle/oradata/ORCL/user_ts02.dbf';
以上 SQL 语句从用户表空间 user_ts 中移除了数据文件 /u01/app/oracle/oradata/ORCL/user_ts02.dbf。
4.3 调整表空间大小
管理员可以通过以下 SQL 语句调整表空间的大小:
ALTER DATABASE DATAFILE '/u01/app/oracle/oradata/ORCL/user_ts01.dbf' RESIZE 100M;
以上 SQL 语句将用户表空间 user_ts01.dbf 的大小调整为 100MB。
05. 总结
在 Oracle 数据库中,表空间是一个非常重要的概念,管理好表空间可以有效地控制数据库的使用情况,并且保证数据库的性能和可靠性。本文中我们介绍了多种方法来查询表空间信息,包括了表空间名称、表空间大小、空闲情况、数据文件信息等,并且简单介绍了表空间管理的常用方法。