
Oracle 19C V$TABLESPACE 动态性能视图详解
1 视图概述与核心作用
V$TABLESPACE 是 Oracle 数据库中一个重要的动态性能视图,它提供了当前数据库实例中所有表空间的基本信息。这个视图显示了表空间的内存中表示,包含了表空间的关键属性和状态信息,是数据库存储管理的基础视图。
与数据字典视图 DBA_TABLESPACES 不同,V$TABLESPACE 提供的是内存中的实时信息,而不是数据字典中的持久化信息。它主要反映了实例启动后表空间的状态变化。
2 字段详解
以下是 V$TABLESPACE 视图包含的字段及其详细含义:
| 字段名称 | 数据类型 | 描述 |
|---|---|---|
| TS# | NUMBER | 表空间的内部编号标识符(Tablespace Number) |
| NAME | VARCHAR2(30) | 表空间的名称 |
| INCLUDED_IN_DATABASE_BACKUP | VARCHAR2(3) | 指示表空间是否包含在数据库备份中(YES/NO) |
| BIGFILE | VARCHAR2(3) | 指示表空间是否是大文件表空间(YES/NO) |
| FLASHBACK_ON | VARCHAR2(3) | 指示表空间是否启用了闪回功能(YES/NO) |
| ENCRYPT_IN_BACKUP | VARCHAR2(3) | 指示表空间在备份中是否加密(YES/NO) |
| CON_ID | NUMBER | 容器ID(在多租户环境中) |
关键字段解读:
TS#:表空间的内部编号,与数据字典中的表空间编号一致。NAME:表空间的名称,与DBA_TABLESPACES.TABLESPACE_NAME对应。INCLUDED_IN_DATABASE_BACKUP:这个字段对于备份策略很重要,标识表空间是否应该包含在整体数据库备份中。BIGFILE:标识表空间是否是大文件表空间。大文件表空间只能包含一个数据文件,但该文件可以非常大(最大可达128TB)。FLASHBACK_ON:指示表空间是否参与了数据库的闪回功能。
3 底层原理与相关对象
3.1 底层原理
V$TABLESPACE 视图的数据来源于 Oracle 实例的内存结构:
-
内存存储:
- 表空间信息存储在 SGA 的内存结构中
- 实例启动时从控制文件和数据字典加载表空间信息
- 运行时表空间状态的变化会实时更新到内存中
-
数据一致性:
V$TABLESPACE提供的是内存中的实时信息- 与数据字典视图
DBA_TABLESPACES相比,它更及时地反映了表空间的状态变化
-
控制文件关联:
- 表空间信息也存储在控制文件中
- 实例启动时从控制文件读取表空间信息到内存
3.2 相关视图
| 视图名称 | 描述 |
|---|---|
| DBA_TABLESPACES | 数据字典视图,提供表空间的详细信息 |
| DBA_DATA_FILES | 显示数据文件信息,与表空间关联 |
| V$DATAFILE | 动态性能视图,显示数据文件信息 |
| V$TABLESPACE_STATS | 提供表空间的统计信息 |
3.3 基表
V$TABLESPACE 基于 Oracle 内部的 X$ 表构建,主要是:
- X$KCVTS:表空间信息表
这些 X$ 表是 Oracle 内部的内存结构,不建议直接查询。
4 主要使用场景
-
表空间状态监控:
- 实时监控表空间的状态和属性
- 检查表空间是否包含在备份中
-
存储管理:
- 识别大文件表空间
- 检查表空间的加密状态
-
备份和恢复:
- 确定哪些表空间需要备份
- 验证备份策略的实施
-
多租户环境管理:
- 在不同容器间管理表空间
- 监控各PDB的表空间使用情况
5 常用SQL查询示例
5.1 查看所有表空间的基本信息
SELECT ts#, name, included_in_database_backup, bigfile, flashback_on
FROM v$tablespace
ORDER BY ts#;
5.2 检查表空间备份状态
SELECT name, included_in_database_backup
FROM v$tablespace
WHERE included_in_database_backup = 'YES'
ORDER BY name;
5.3 识别大文件表空间
SELECT name, bigfile
FROM v$tablespace
WHERE bigfile = 'YES';
5.4 查看表空间闪回状态
SELECT name, flashback_on
FROM v$tablespace
ORDER BY flashback_on DESC, name;
5.5 结合DBA_TABLESPACES获取更多信息
SELECT v.name,
v.bigfile,
v.included_in_database_backup,
d.status,
d.contents
FROM v$tablespace v
JOIN dba_tablespaces d ON v.name = d.tablespace_name
ORDER BY v.name;
6 表空间类型和状态解读
6.1 表空间类型
| 类型 | 描述 | 相关字段 |
|---|---|---|
| 大文件表空间 | 只能包含一个数据文件,但文件可以非常大 | BIGFILE = ‘YES’ |
| 小文件表空间 | 可以包含多个数据文件,是传统表空间类型 | BIGFILE = ‘NO’ |
| 永久表空间 | 存储永久数据库对象 | 需要通过DBA_TABLESPACES.CONTENTS确认 |
| 临时表空间 | 存储临时数据,用于排序操作 | 需要通过DBA_TABLESPACES.CONTENTS确认 |
| 撤销表空间 | 存储撤销信息,用于事务回滚和一致性读 | 需要通过DBA_TABLESPACES.CONTENTS确认 |
6.2 备份相关状态
INCLUDED_IN_DATABASE_BACKUP 字段的含义:
- YES:表空间包含在数据库备份中
- NO:表空间不包含在数据库备份中,需要单独备份
7 高级应用与最佳实践
7.1 表空间监控脚本
创建一个监控表空间状态的脚本:
-- 表空间状态监控脚本
SELECT v.name AS tablespace_name,
v.bigfile,
v.included_in_database_backup,
v.flashback_on,
d.status,
d.contents,
COUNT(f.file_id) AS datafile_count,
ROUND(SUM(f.bytes)/1024/1024, 2) AS total_size_mb
FROM v$tablespace v
JOIN dba_tablespaces d ON v.name = d.tablespace_name
LEFT JOIN dba_data_files f ON v.name = f.tablespace_name
GROUP BY v.name, v.bigfile, v.included_in_database_backup,
v.flashback_on, d.status, d.contents
ORDER BY v.name;
7.2 备份状态检查
定期检查表空间备份状态,确保备份策略正确实施:
-- 检查可能被排除在备份之外的表空间
SELECT name, included_in_database_backup
FROM v$tablespace
WHERE included_in_database_backup = 'NO'
AND name NOT IN ('TEMP', 'TEMP2') -- 排除临时表空间
ORDER BY name;
7.3 多租户环境管理
在 CDB 环境中,管理各个 PDB 的表空间:
-- 查看所有容器的表空间信息
SELECT v.name, v.bigfile, v.con_id, c.name AS pdb_name
FROM v$tablespace v
JOIN v$containers c ON v.con_id = c.con_id
ORDER BY c.name, v.name;
8 重要知识点总结
- 实时信息:
V$TABLESPACE提供的是内存中的实时信息,反映了实例启动后的表空间状态变化。 - 备份状态:
INCLUDED_IN_DATABASE_BACKUP字段对于备份策略至关重要,标识表空间是否包含在数据库备份中。 - 大文件表空间:
BIGFILE字段标识表空间是否是大文件表空间,这影响表空间的管理方式。 - 多租户支持:在 CDB 环境中,可以通过
CON_ID字段区分不同容器的表空间。 - 与其他视图结合:通常需要与
DBA_TABLESPACES、DBA_DATA_FILES等视图结合使用,获取完整的表空间信息。
9 故障排查示例
9.1 排查表空间相关问题
-- 检查表空间状态异常
SELECT v.name, d.status, d.contents
FROM v$tablespace v
JOIN dba_tablespaces d ON v.name = d.tablespace_name
WHERE d.status != 'ONLINE'
ORDER BY v.name;
-- 检查可能缺少备份的表空间
SELECT v.name, v.included_in_database_backup
FROM v$tablespace v
WHERE v.included_in_database_backup = 'NO'
AND v.name NOT IN (SELECT tablespace_name
FROM dba_tablespaces
WHERE contents = 'TEMPORARY')
ORDER BY v.name;
V$TABLESPACE 是 Oracle 数据库存储管理的基础工具,提供了表空间的关键属性和状态信息。通过这个视图,DBA 可以:
- 监控表空间的状态和属性
- 验证备份策略的实施
- 识别大文件表空间
- 在多租户环境中管理表空间
虽然 V$TABLESPACE 提供的信息相对基础,但它是理解数据库存储结构的重要组成部分,通常需要与其他视图结合使用以获得完整的表空间信息。
欢迎关注我的公众号《IT小Chen》
892

被折叠的 条评论
为什么被折叠?



