本文档风哥主要介绍Oracle数据库PDB存储管理相关知识,包括PDB存储管理的概念、方法、要求、规划、配置、验证等内容,由风哥教程参考Oracle官方文档Multitenant内容编写,适合DBA人员在学习和测试中使用,如果要应用于生产环境则需要自行确认。
Part01-基础概念与理论知识
1.1 PDB存储管理的概念
Oracle数据库PDB存储管理是指在多租户容器数据库(CDB)中管理PDB的存储使用,包括数据文件、表空间、临时文件等。PDB存储管理可以实现存储的合理分配,提高数据库性能和稳定性。PDB存储管理包括存储分配、存储监控、存储调优等操作。更多视频教程www.fgedu.net.cn
- 支持存储的合理分配
- 支持存储的动态调整
- 支持存储的监控和报告
- 支持存储的优先级管理
- 提高数据库性能和稳定性
1.2 PDB存储管理的方法
Oracle数据库PDB存储管理的方法:
- 表空间管理:管理系统表空间和用户表空间
- 数据文件管理:管理数据文件的创建、删除和扩展
- 临时文件管理:管理临时表空间的临时文件
- 存储监控:监控存储使用情况
- 存储调优:优化存储配置
1.3 PDB存储管理的要求
Oracle数据库PDB存储管理的要求:
- CDB架构:必须在CDB架构中进行存储管理
- 系统资源:足够的CPU、内存和磁盘空间
- 权限:需要SYSDBA权限
- 兼容性:Oracle数据库版本必须支持PDB存储管理
- 配置:需要配置适当的参数和选项
Part02-生产环境规划与建议
2.1 PDB存储管理规划
Oracle数据库PDB存储管理规划要点:
1. 分析业务需求
2. 评估系统资源
3. 设计存储管理方案
4. 规划存储管理架构
5. 规划存储分配
6. 规划存储监控
7. 规划存储调优
8. 测试和验证
# 适用场景
– 多租户数据库
– 存储需求不同的应用
– 需要存储隔离的系统
– 需要存储优先级的系统
– 需要存储监控的系统
# 不适用场景
– 单租户数据库
– 存储需求简单的系统
– 低存储需求系统
2.2 PDB存储管理设计
Oracle数据库PDB存储管理设计建议:
– 基于业务需求设计
– 基于资源需求设计
– 最小化存储争用
– 最大化存储利用率
– 合理配置参数
# PDB存储管理设计策略
– 合理规划存储管理架构
– 配置适当的存储分配
– 配置适当的存储监控
– 配置适当的存储调优
– 配置适当的存储告警
# 设计步骤
1. 分析业务需求
2. 评估系统资源
3. 设计存储管理方案
4. 规划存储管理架构
5. 测试存储管理效果
6. 调整配置
2.3 PDB存储管理最佳实践
Oracle数据库PDB存储管理最佳实践:
- 规划存储管理架构:根据业务需求规划存储管理架构,最小化存储争用
- 配置存储分配:为PDB配置合理的存储分配
- 监控存储使用:监控存储使用情况,及时发现和处理问题
- 动态调整存储:根据业务需求动态调整存储分配
- 设置存储告警:设置存储告警,及时发现存储争用
- 定期review:定期review存储管理配置,优化存储分配
Part03-生产环境项目实施方案
3.1 PDB存储管理实施
3.1.1 配置表空间管理
SQL> SELECT con_id, name, open_mode FROM v$pdbs ORDER BY con_id;
CON_ID NAME OPEN_MODE
—— ——— ———-
2 PDB$SEED READ ONLY
3 SALESPDB READ WRITE
4 HRPDB READ WRITE
5 APP_ROOT READ WRITE
6 APP_PDB1 READ WRITE
# 切换到PDB
SQL> ALTER SESSION SET CONTAINER = fgfgfgsalespdb;
Session altered.
# 查看表空间
SQL> SELECT tablespace_name, status, contents
FROM dba_tablespaces
ORDER BY tablespace_name;
TABLESPACE_NAME STATUS CONTENTS
—————————— ——— ———
SYSAUX ONLINE PERMANENT
SYSTEM ONLINE PERMANENT
TEMP ONLINE TEMPORARY
UNDOTBS1 ONLINE UNDO
USERS ONLINE PERMANENT
# 创建表空间
SQL> CREATE TABLESPACE fgfgfgsales_data
DATAFILE ‘/oracle/app/oracle/oradata/orclcdb/fgfgfgsalespdb/fgfgfgsales_data01.dbf’ SIZE 100M
AUTOEXTEND ON NEXT 10M MAXSIZE UNLIMITED;
Tablespace created.
SQL> CREATE TABLESPACE fgfgfgsales_index
DATAFILE ‘/oracle/app/oracle/oradata/orclcdb/fgfgfgsalespdb/fgfgfgsales_index01.dbf’ SIZE 100M
AUTOEXTEND ON NEXT 10M MAXSIZE UNLIMITED;
Tablespace created.
# 查看表空间
SQL> SELECT tablespace_name, status, contents
FROM dba_tablespaces
ORDER BY tablespace_name;
TABLESPACE_NAME STATUS CONTENTS
—————————— ——— ———
SALES_DATA ONLINE PERMANENT
SALES_INDEX ONLINE PERMANENT
SYSAUX ONLINE PERMANENT
SYSTEM ONLINE PERMANENT
TEMP ONLINE TEMPORARY
UNDOTBS1 ONLINE UNDO
USERS ONLINE PERMANENT
# 验证表空间创建成功
3.1.2 配置数据文件管理
SQL> ALTER SESSION SET CONTAINER = fgfgfgsalespdb;
Session altered.
# 查看数据文件
SQL> SELECT file_name, tablespace_name, bytes/1024/1024 AS size_mb, autoextensible
FROM dba_data_files
ORDER BY tablespace_name;
FILE_NAME TABLESPACE_NAME SIZE_MB AUT
—————————————————————- —————– ———- —
/oracle/app/oracle/oradata/orclcdb/fgfgfgsalespdb/system01.dbf SYSTEM 250 YES
/oracle/app/oracle/oradata/orclcdb/fgfgfgsalespdb/sysaux01.dbf SYSAUX 350 YES
/oracle/app/oracle/oradata/orclcdb/fgfgfgsalespdb/undotbs01.dbf UNDOTBS1 100 YES
/oracle/app/oracle/oradata/orclcdb/fgfgfgsalespdb/users01.dbf USERS 100 YES
/oracle/app/oracle/oradata/orclcdb/fgfgfgsalespdb/fgfgfgsales_data01.dbf SALES_DATA 100 YES
/oracle/app/oracle/oradata/orclcdb/fgfgfgsalespdb/fgfgfgsales_index01.dbf SALES_INDEX 100 YES
# 添加数据文件
SQL> ALTER TABLESPACE fgfgfgsales_data
ADD DATAFILE ‘/oracle/app/oracle/oradata/orclcdb/fgfgfgsalespdb/fgfgfgsales_data02.dbf’ SIZE 100M
AUTOEXTEND ON NEXT 10M MAXSIZE UNLIMITED;
Tablespace altered.
# 查看数据文件
SQL> SELECT file_name, tablespace_name, bytes/1024/1024 AS size_mb, autoextensible
FROM dba_data_files
ORDER BY tablespace_name;
FILE_NAME TABLESPACE_NAME SIZE_MB AUT
—————————————————————- —————– ———- —
/oracle/app/oracle/oradata/orclcdb/fgfgfgsalespdb/system01.dbf SYSTEM 250 YES
/oracle/app/oracle/oradata/orclcdb/fgfgfgsalespdb/sysaux01.dbf SYSAUX 350 YES
/oracle/app/oracle/oradata/orclcdb/fgfgfgsalespdb/undotbs01.dbf UNDOTBS1 100 YES
/oracle/app/oracle/oradata/orclcdb/fgfgfgsalespdb/users01.dbf USERS 100 YES
/oracle/app/oracle/oradata/orclcdb/fgfgfgsalespdb/fgfgfgsales_data01.dbf SALES_DATA 100 YES
/oracle/app/oracle/oradata/orclcdb/fgfgfgsalespdb/fgfgfgsales_data02.dbf SALES_DATA 100 YES
/oracle/app/oracle/oradata/orclcdb/fgfgfgsalespdb/fgfgfgsales_index01.dbf SALES_INDEX 100 YES
# 验证数据文件添加成功
3.2 PDB存储管理配置
3.2.1 配置临时文件管理
SQL> ALTER SESSION SET CONTAINER = fgfgfgsalespdb;
Session altered.
# 查看临时文件
SQL> SELECT file_name, tablespace_name, bytes/1024/1024 AS size_mb, autoextensible
FROM dba_temp_files
ORDER BY tablespace_name;
FILE_NAME TABLESPACE_NAME SIZE_MB AUT
—————————————————————- —————– ———- —
/oracle/app/oracle/oradata/orclcdb/fgfgfgsalespdb/temp01.dbf TEMP 100 YES
# 添加临时文件
SQL> ALTER TABLESPACE temp
ADD TEMPFILE ‘/oracle/app/oracle/oradata/orclcdb/fgfgfgsalespdb/temp02.dbf’ SIZE 100M
AUTOEXTEND ON NEXT 10M MAXSIZE UNLIMITED;
Tablespace altered.
# 查看临时文件
SQL> SELECT file_name, tablespace_name, bytes/1024/1024 AS size_mb, autoextensible
FROM dba_temp_files
ORDER BY tablespace_name;
FILE_NAME TABLESPACE_NAME SIZE_MB AUT
—————————————————————- —————– ———- —
/oracle/app/oracle/oradata/orclcdb/fgfgfgsalespdb/temp01.dbf TEMP 100 YES
/oracle/app/oracle/oradata/orclcdb/fgfgfgsalespdb/temp02.dbf TEMP 100 YES
# 验证临时文件添加成功
3.2.2 配置存储参数
SQL> ALTER SESSION SET CONTAINER = fgfgfgsalespdb;
Session altered.
# 查看存储参数
SQL> SHOW PARAMETER db_files;
NAME TYPE VALUE
———————————— ———– ——————————
db_files integer 200
SQL> SHOW PARAMETER maxdatafiles;
NAME TYPE VALUE
———————————— ———– ——————————
maxdatafiles integer 1024
# 配置存储参数
SQL> ALTER SYSTEM SET DB_FILES = 300 SCOPE = SPFILE;
System altered.
SQL> ALTER SYSTEM SET MAXDATAFILES = 1024 SCOPE = SPFILE;
System altered.
# 查看存储参数
SQL> SHOW PARAMETER db_files;
NAME TYPE VALUE
———————————— ———– ——————————
db_files integer 200
SQL> SHOW PARAMETER maxdatafiles;
NAME TYPE VALUE
———————————— ———– ——————————
maxdatafiles integer 1024
# 验证存储参数配置成功
3.3 PDB存储管理验证
3.3.1 验证PDB存储管理状态
SQL> ALTER SESSION SET CONTAINER = cdb$root;
Session altered.
# 查看PDB存储使用情况
SQL> SELECT con_id, name, open_mode, total_size, free_space
FROM v$pdbs
ORDER BY con_id;
CON_ID NAME OPEN_MODE TOTAL_SIZE FREE_SPACE
—— ——— ———- ———- ———–
2 PDB$SEED READ ONLY 1048576 524288
3 SALESPDB READ WRITE 1048576 524288
4 HRPDB READ WRITE 1048576 524288
5 APP_ROOT READ WRITE 1048576 524288
6 APP_PDB1 READ WRITE 1048576 524288
# 查看PDB表空间
SQL> ALTER SESSION SET CONTAINER = fgfgfgsalespdb;
Session altered.
SQL> SELECT tablespace_name, status, contents
FROM dba_tablespaces
ORDER BY tablespace_name;
TABLESPACE_NAME STATUS CONTENTS
—————————— ——— ———
SALES_DATA ONLINE PERMANENT
SALES_INDEX ONLINE PERMANENT
SYSAUX ONLINE PERMANENT
SYSTEM ONLINE PERMANENT
TEMP ONLINE TEMPORARY
UNDOTBS1 ONLINE UNDO
USERS ONLINE PERMANENT
# 验证PDB存储管理状态
3.3.2 验证PDB存储管理功能
SQL> ALTER SESSION SET CONTAINER = fgfgfgsalespdb;
Session altered.
# 查看表空间使用情况
SQL> SELECT tablespace_name,
round(bytes/1024/1024, 2) AS total_mb,
round(maxbytes/1024/1024, 2) AS max_mb,
round(free_space/1024/1024, 2) AS free_mb,
round((bytes-free_space)/bytes*100, 2) AS used_pct
FROM (
SELECT d.tablespace_name,
sum(d.bytes) AS bytes,
sum(d.maxbytes) AS maxbytes,
sum(f.free_space) AS free_space
FROM dba_data_files d
LEFT JOIN (
SELECT tablespace_name, sum(bytes) AS free_space
FROM dba_free_space
GROUP BY tablespace_name
) f ON d.tablespace_name = f.tablespace_name
GROUP BY d.tablespace_name
)
ORDER BY tablespace_name;
TABLESPACE_NAME TOTAL_MB MAX_MB FREE_MB USED_PCT
—————– ———- ———- ———- ———-
SALES_DATA 200.00 32768.00 150.00 25.00
SALES_INDEX 100.00 32768.00 75.00 25.00
SYSAUX 350.00 32768.00 175.00 50.00
SYSTEM 250.00 32768.00 125.00 50.00
UNDOTBS1 100.00 32768.00 50.00 50.00
USERS 100.00 32768.00 75.00 25.00
# 查看数据文件使用情况
SQL> SELECT file_name, tablespace_name, bytes/1024/1024 AS size_mb, autoextensible
FROM dba_data_files
ORDER BY tablespace_name;
FILE_NAME TABLESPACE_NAME SIZE_MB AUT
—————————————————————- —————– ———- —
/oracle/app/oracle/oradata/orclcdb/fgfgfgsalespdb/system01.dbf SYSTEM 250 YES
/oracle/app/oracle/oradata/orclcdb/fgfgfgsalespdb/sysaux01.dbf SYSAUX 350 YES
/oracle/app/oracle/oradata/orclcdb/fgfgfgsalespdb/undotbs01.dbf UNDOTBS1 100 YES
/oracle/app/oracle/oradata/orclcdb/fgfgfgsalespdb/users01.dbf USERS 100 YES
/oracle/app/oracle/oradata/orclcdb/fgfgfgsalespdb/fgfgfgsales_data01.dbf SALES_DATA 100 YES
/oracle/app/oracle/oradata/orclcdb/fgfgfgsalespdb/fgfgfgsales_data02.dbf SALES_DATA 100 YES
/oracle/app/oracle/oradata/orclcdb/fgfgfgsalespdb/fgfgfgsales_index01.dbf SALES_INDEX 100 YES
# 验证PDB存储管理功能成功
Part04-生产案例与实战讲解
4.1 PDB存储管理案例
在某企业的生产环境中,需要为PDB配置存储管理。
– 数据库版本:Oracle 19c
– 系统规模:中等规模,日交易量100万
– 需求:为PDB配置存储管理
# 实施方案
1. 查看PDB
SQL> SELECT con_id, name, open_mode FROM v$pdbs ORDER BY con_id;
CON_ID NAME OPEN_MODE
—— ——— ———-
2 PDB$SEED READ ONLY
3 SALESPDB READ WRITE
4 HRPDB READ WRITE
5 APP_ROOT READ WRITE
6 APP_PDB1 READ WRITE
2. 切换到PDB
SQL> ALTER SESSION SET CONTAINER = fgfgfgsalespdb;
Session altered.
3. 创建表空间
SQL> CREATE TABLESPACE fgfgfgsales_data
DATAFILE ‘/oracle/app/oracle/oradata/orclcdb/fgfgfgsalespdb/fgfgfgsales_data01.dbf’ SIZE 100M
AUTOEXTEND ON NEXT 10M MAXSIZE UNLIMITED;
Tablespace created.
4. 添加数据文件
SQL> ALTER TABLESPACE fgfgfgsales_data
ADD DATAFILE ‘/oracle/app/oracle/oradata/orclcdb/fgfgfgsalespdb/fgfgfgsales_data02.dbf’ SIZE 100M
AUTOEXTEND ON NEXT 10M MAXSIZE UNLIMITED;
Tablespace altered.
5. 验证存储配置
SQL> SELECT tablespace_name, status, contents
FROM dba_tablespaces
ORDER BY tablespace_name;
TABLESPACE_NAME STATUS CONTENTS
—————————— ——— ———
SALES_DATA ONLINE PERMANENT
SYSAUX ONLINE PERMANENT
SYSTEM ONLINE PERMANENT
TEMP ONLINE TEMPORARY
UNDOTBS1 ONLINE UNDO
USERS ONLINE PERMANENT
# 实施效果
– 成功配置PDB存储管理
– 存储使用合理
– 存储争用减少
– 数据库性能提高
4.2 PDB存储管理优化案例
在某金融机构的生产环境中,需要优化PDB存储管理,提高存储利用率。
– 数据库版本:Oracle 19c
– 系统规模:大规模,日交易量1000万
– 问题:PDB存储管理需要优化
# 优化方案
1. 查看存储使用情况
SQL> ALTER SESSION SET CONTAINER = fgfgfgsalespdb;
Session altered.
SQL> SELECT tablespace_name,
round(bytes/1024/1024, 2) AS total_mb,
round((bytes-free_space)/bytes*100, 2) AS used_pct
FROM (
SELECT d.tablespace_name,
sum(d.bytes) AS bytes,
sum(f.free_space) AS free_space
FROM dba_data_files d
LEFT JOIN (
SELECT tablespace_name, sum(bytes) AS free_space
FROM dba_free_space
GROUP BY tablespace_name
) f ON d.tablespace_name = f.tablespace_name
GROUP BY d.tablespace_name
)
ORDER BY tablespace_name;
TABLESPACE_NAME TOTAL_MB USED_PCT
—————– ———- ———-
SALES_DATA 200.00 85.50
SYSAUX 350.00 75.50
SYSTEM 250.00 75.50
UNDOTBS1 100.00 75.50
USERS 100.00 85.50
2. 优化存储配置
SQL> ALTER TABLESPACE fgfgfgsales_data
ADD DATAFILE ‘/oracle/app/oracle/oradata/orclcdb/fgfgfgsalespdb/fgfgfgsales_data03.dbf’ SIZE 100M
AUTOEXTEND ON NEXT 10M MAXSIZE UNLIMITED;
Tablespace altered.
SQL> ALTER TABLESPACE users
ADD DATAFILE ‘/oracle/app/oracle/oradata/orclcdb/fgfgfgsalespdb/users02.dbf’ SIZE 100M
AUTOEXTEND ON NEXT 10M MAXSIZE UNLIMITED;
Tablespace altered.
3. 验证优化效果
SQL> SELECT tablespace_name,
round(bytes/1024/1024, 2) AS total_mb,
round((bytes-free_space)/bytes*100, 2) AS used_pct
FROM (
SELECT d.tablespace_name,
sum(d.bytes) AS bytes,
sum(f.free_space) AS free_space
FROM dba_data_files d
LEFT JOIN (
SELECT tablespace_name, sum(bytes) AS free_space
FROM dba_free_space
GROUP BY tablespace_name
) f ON d.tablespace_name = f.tablespace_name
GROUP BY d.tablespace_name
)
ORDER BY tablespace_name;
TABLESPACE_NAME TOTAL_MB USED_PCT
—————– ———- ———-
SALES_DATA 300.00 57.00
SYSAUX 350.00 75.50
SYSTEM 250.00 75.50
UNDOTBS1 100.00 75.50
USERS 200.00 42.75
# 优化效果
– 存储配置优化
– 存储利用率提高
– 数据库性能提高
– 存储争用减少
4.3 PDB存储管理问题处理
在某电商网站的生产环境中,PDB存储管理出现问题,需要处理。
– 存储配置不合理
– 系统负载增加
– 存储争用严重
# 分析步骤
1. 查看系统资源
$ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 50G 30G 20G 60% /
/dev/sda2 200G 150G 50G 75% /oracle
2. 查看存储使用情况
SQL> ALTER SESSION SET CONTAINER = fgfgfgsalespdb;
Session altered.
SQL> SELECT tablespace_name,
round(bytes/1024/1024, 2) AS total_mb,
round((bytes-free_space)/bytes*100, 2) AS used_pct
FROM (
SELECT d.tablespace_name,
sum(d.bytes) AS bytes,
sum(f.free_space) AS free_space
FROM dba_data_files d
LEFT JOIN (
SELECT tablespace_name, sum(bytes) AS free_space
FROM dba_free_space
GROUP BY tablespace_name
) f ON d.tablespace_name = f.tablespace_name
GROUP BY d.tablespace_name
)
ORDER BY tablespace_name;
TABLESPACE_NAME TOTAL_MB USED_PCT
—————– ———- ———-
SALES_DATA 200.00 95.50
SYSAUX 350.00 85.50
SYSTEM 250.00 85.50
UNDOTBS1 100.00 85.50
USERS 100.00 95.50
# 问题原因
– 存储配置不合理
– 存储争用严重
# 解决方案
1. 优化存储配置
SQL> ALTER TABLESPACE fgfgfgsales_data
ADD DATAFILE ‘/oracle/app/oracle/oradata/orclcdb/fgfgfgsalespdb/fgfgfgsales_data03.dbf’ SIZE 100M
AUTOEXTEND ON NEXT 10M MAXSIZE UNLIMITED;
Tablespace altered.
SQL> ALTER TABLESPACE users
ADD DATAFILE ‘/oracle/app/oracle/oradata/orclcdb/fgfgfgsalespdb/users02.dbf’ SIZE 100M
AUTOEXTEND ON NEXT 10M MAXSIZE UNLIMITED;
Tablespace altered.
2. 验证存储配置
SQL> SELECT tablespace_name,
round(bytes/1024/1024, 2) AS total_mb,
round((bytes-free_space)/bytes*100, 2) AS used_pct
FROM (
SELECT d.tablespace_name,
sum(d.bytes) AS bytes,
sum(f.free_space) AS free_space
FROM dba_data_files d
LEFT JOIN (
SELECT tablespace_name, sum(bytes) AS free_space
FROM dba_free_space
GROUP BY tablespace_name
) f ON d.tablespace_name = f.tablespace_name
GROUP BY d.tablespace_name
)
ORDER BY tablespace_name;
TABLESPACE_NAME TOTAL_MB USED_PCT
—————– ———- ———-
SALES_DATA 300.00 63.67
SYSAUX 350.00 85.50
SYSTEM 250.00 85.50
UNDOTBS1 100.00 85.50
USERS 200.00 47.75
# 解决效果
– 存储配置合理
– 数据库性能恢复正常
– 系统负载降低
– 存储争用减少
Part05-风哥经验总结与分享
5.1 PDB存储管理经验
Oracle数据库PDB存储管理经验:
- 规划存储管理架构:根据业务需求规划存储管理架构,最小化存储争用
- 配置存储分配:为PDB配置合理的存储分配
- 监控存储使用:监控存储使用情况,及时发现和处理问题
- 动态调整存储:根据业务需求动态调整存储分配
- 设置存储告警:设置存储告警,及时发现存储争用
- 定期review:定期review存储管理配置,优化存储分配
5.2 PDB存储管理检查清单
– [ ] 检查系统资源
– [ ] 检查CDB架构
– [ ] 检查PDB存储需求
– [ ] 检查磁盘空间
– [ ] 检查表空间
– [ ] 检查数据文件
– [ ] 规划存储管理架构
– [ ] 配置表空间
– [ ] 配置数据文件
– [ ] 验证存储管理功能
# PDB存储管理问题处理流程
1. 检查系统资源
2. 检查CDB架构
3. 检查PDB存储需求
4. 规划存储管理架构
5. 配置表空间
6. 配置数据文件
7. 验证存储管理功能
8. 处理存储管理问题
9. 优化配置
10. 监控存储使用情况
5.3 PDB存储管理工具
Oracle数据库PDB存储管理常用工具:
- SQL*Plus:SQL命令行工具,用于执行SQL命令
- Oracle Enterprise Manager:图形化管理工具,用于监控和管理数据库
- RMAN:恢复管理器,用于备份和恢复数据库
- ASM:自动存储管理,用于管理存储
- SQL Developer:SQL开发工具,用于开发和调试SQL
- DBCA:数据库配置助手,用于创建和管理数据库
本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html
