外观
DM 存储管理
表空间管理
1. 表空间类型
DM数据库中的表空间分为以下几种类型:
- 系统表空间:存储系统数据和字典信息,如SYSTEM、ROLL、TEMP等
- 用户表空间:存储用户数据,由用户创建和管理
- 临时表空间:存储临时数据,如排序结果、临时表等
- 回滚表空间:存储事务回滚信息
2. 表空间创建
sql
-- 创建用户表空间
CREATE TABLESPACE USERS
DATAFILE '/dm/data/DAMENG/users01.dbf' SIZE 100M
AUTOEXTEND ON NEXT 10M MAXSIZE 1000M;
-- 创建临时表空间
CREATE TEMPORARY TABLESPACE TEMP2
TEMPFILE '/dm/data/DAMENG/temp02.dbf' SIZE 50M
AUTOEXTEND ON NEXT 10M MAXSIZE 500M;
-- 创建大文件表空间
CREATE TABLESPACE BIG_DATA
DATAFILE '/dm/data/DAMENG/big_data01.dbf' SIZE 10G
AUTOEXTEND ON NEXT 1G MAXSIZE UNLIMITED;3. 表空间管理
sql
-- 查看表空间信息
SELECT * FROM V$TABLESPACE;
-- 查看表空间使用情况
SELECT T.NAME AS TABLESPACE_NAME,
ROUND(T.TOTAL_SIZE * P.PAGE_SIZE / 1024 / 1024, 2) AS TOTAL_MB,
ROUND((T.TOTAL_SIZE - T.FREE_SIZE) * P.PAGE_SIZE / 1024 / 1024, 2) AS USED_MB,
ROUND(T.FREE_SIZE * P.PAGE_SIZE / 1024 / 1024, 2) AS FREE_MB,
ROUND((T.TOTAL_SIZE - T.FREE_SIZE) * 100 / T.TOTAL_SIZE, 2) AS USED_PERCENT
FROM V$TABLESPACE T, V$DM_INI P
WHERE P.PARA_NAME = 'PAGE_SIZE';
-- 修改表空间状态
-- 联机表空间
ALTER TABLESPACE USERS ONLINE;
-- 脱机表空间
ALTER TABLESPACE USERS OFFLINE;
-- 删除表空间
DROP TABLESPACE USERS INCLUDING CONTENTS AND DATAFILES;数据文件管理
1. 数据文件创建
sql
-- 向现有表空间添加数据文件
ALTER TABLESPACE USERS ADD DATAFILE '/dm/data/DAMENG/users02.dbf' SIZE 100M;
-- 添加自动扩展的数据文件
ALTER TABLESPACE USERS ADD DATAFILE '/dm/data/DAMENG/users03.dbf'
SIZE 100M AUTOEXTEND ON NEXT 10M MAXSIZE 500M;2. 数据文件管理
sql
-- 查看数据文件信息
SELECT * FROM V$DATAFILE;
-- 修改数据文件大小
ALTER DATABASE DATAFILE '/dm/data/DAMENG/users01.dbf' RESIZE 200M;
-- 启用数据文件自动扩展
ALTER DATABASE DATAFILE '/dm/data/DAMENG/users01.dbf'
AUTOEXTEND ON NEXT 10M MAXSIZE 500M;
-- 禁用数据文件自动扩展
ALTER DATABASE DATAFILE '/dm/data/DAMENG/users01.dbf' AUTOEXTEND OFF;
-- 重命名数据文件
ALTER TABLESPACE USERS OFFLINE;
ALTER DATABASE RENAME FILE '/dm/data/DAMENG/users01.dbf' TO '/dm/data/DAMENG/new_users01.dbf';
ALTER TABLESPACE USERS ONLINE;存储参数配置
1. 页面大小配置
页面大小是DM数据库的重要存储参数,影响数据库的性能和存储效率。
配置方法:
- 数据库创建时指定,默认为8KB
- 支持的页面大小:4KB、8KB、16KB、32KB
- 页面大小一旦确定,无法修改
选择原则:
- 小页面(4KB、8KB)适合OLTP系统,减少I/O开销
- 大页面(16KB、32KB)适合OLAP系统,提高大查询性能
2. extent大小配置
extent是数据库存储分配的基本单位,由多个连续的页面组成。
sql
-- 查看当前extent大小
SELECT PARA_VALUE FROM V$DM_INI WHERE PARA_NAME = 'EXTENT_SIZE';
-- 修改extent大小(需要重启数据库)
ALTER SYSTEM SET EXTENT_SIZE = 16 SCOPE = SPFILE;3. 存储参数优化
根据业务需求和系统特点,优化存储参数可以提高数据库性能:
- DB_CACHE_SIZE:调整数据库缓存大小,提高数据访问速度
- LOG_BUFFER:调整日志缓冲区大小,提高日志写入性能
- SORT_BUF_SIZE:调整排序缓冲区大小,提高排序性能
- TEMP_SPACE_LIMIT:调整临时表空间大小限制
存储优化策略
1. 表空间优化
- 合理规划表空间:根据业务特点和数据类型,创建不同的表空间
- 设置合适的自动扩展策略:避免频繁的空间扩展操作
- 定期监控表空间使用情况:及时扩展表空间,避免空间不足
- 定期进行表空间碎片整理:提高存储利用率和查询性能
2. 数据文件优化
- 合理分布数据文件:将数据文件分布在不同的磁盘上,提高I/O并行度
- 设置合适的数据文件大小:避免数据文件过大或过小
- 使用大文件表空间:对于大数据量场景,使用大文件表空间提高管理效率
3. 存储结构优化
- 使用分区表:对于大表,使用分区表提高查询性能和管理效率
- 使用索引组织表:对于频繁按主键访问的表,使用索引组织表提高访问速度
- 合理设置存储参数:根据表的特点,设置合适的存储参数,如PCTFREE、PCTUSED等
存储监控与维护
1. 存储监控
sql
-- 监控表空间使用情况
SELECT T.NAME AS TABLESPACE_NAME,
ROUND(T.TOTAL_SIZE * P.PAGE_SIZE / 1024 / 1024, 2) AS TOTAL_MB,
ROUND((T.TOTAL_SIZE - T.FREE_SIZE) * P.PAGE_SIZE / 1024 / 1024, 2) AS USED_MB,
ROUND(T.FREE_SIZE * P.PAGE_SIZE / 1024 / 1024, 2) AS FREE_MB,
ROUND((T.TOTAL_SIZE - T.FREE_SIZE) * 100 / T.TOTAL_SIZE, 2) AS USED_PERCENT
FROM V$TABLESPACE T, V$DM_INI P
WHERE P.PARA_NAME = 'PAGE_SIZE'
ORDER BY USED_PERCENT DESC;
-- 监控数据文件I/O情况
SELECT DF.NAME AS FILE_NAME,
FI.PHY_READS,
FI.PHY_WRITES,
FI.PHY_READ_TIME,
FI.PHY_WRITE_TIME
FROM V$DATAFILE DF, V$FILE_IOSTAT FI
WHERE DF.ID = FI.FILE_ID
ORDER BY (FI.PHY_READ_TIME + FI.PHY_WRITE_TIME) DESC;2. 存储维护
定期进行表空间碎片整理:
sqlALTER TABLESPACE USERS COALESCE;定期重建表和索引:
sql-- 重建表 ALTER TABLE EMP MOVE; -- 重建索引 ALTER INDEX PK_EMP REBUILD;定期检查存储完整性:
sql-- 检查表空间完整性 DBMS_DBHELP.CHECK_TABLESPACE('USERS'); -- 检查数据文件完整性 DBMS_DBHELP.CHECK_DATAFILE('/dm/data/DAMENG/users01.dbf');
存储故障处理
1. 表空间空间不足
症状:
- 应用程序报错:"表空间不足"
- 数据库日志中出现表空间满的错误信息
- V$TABLESPACE视图中表空间使用率接近100%
处理方法:
sql
-- 方法1:扩展数据文件大小
ALTER DATABASE DATAFILE '/dm/data/DAMENG/users01.dbf' RESIZE 200M;
-- 方法2:添加新的数据文件
ALTER TABLESPACE USERS ADD DATAFILE '/dm/data/DAMENG/users02.dbf' SIZE 100M;
-- 方法3:启用数据文件自动扩展
ALTER DATABASE DATAFILE '/dm/data/DAMENG/users01.dbf'
AUTOEXTEND ON NEXT 10M MAXSIZE 500M;2. 数据文件损坏
症状:
- 数据库无法启动
- 查询时出现数据文件损坏错误
- 错误日志中出现数据文件损坏信息
处理方法:
尝试使用dmrman工具修复数据文件:
shelldmrman CTLSTMT="REPAIR DATAFILE '/dm/data/DAMENG/users01.dbf'";如果修复失败,使用备份恢复数据文件:
shell-- 还原数据文件 dmrman CTLSTMT="RESTORE DATABASE '/dm/data/DAMENG/dm.ini' DATAFILE '/dm/data/DAMENG/users01.dbf' FROM BACKUPSET '/dm/backup/full_backup_20230101'"; -- 恢复数据文件 dmrman CTLSTMT="RECOVER DATABASE '/dm/data/DAMENG/dm.ini' DATAFILE '/dm/data/DAMENG/users01.dbf' FROM BACKUPSET '/dm/backup/full_backup_20230101'";
3. 存储I/O性能问题
症状:
- 查询响应时间变长
- 数据库负载升高
- V$DISK_IO视图中I/O等待时间增加
处理方法:
分析I/O热点:
sqlSELECT DF.NAME AS FILE_NAME, FI.PHY_READS, FI.PHY_WRITES, FI.PHY_READ_TIME, FI.PHY_WRITE_TIME FROM V$DATAFILE DF, V$FILE_IOSTAT FI WHERE DF.ID = FI.FILE_ID ORDER BY (FI.PHY_READ_TIME + FI.PHY_WRITE_TIME) DESC;将热点数据文件分布到不同的磁盘上
优化查询语句,减少I/O操作
增加数据库缓存大小,减少物理I/O
考虑使用高性能存储设备,如SSD
存储备份与恢复
1. 表空间备份
sql
-- 备份表空间
BACKUP TABLESPACE USERS BACKUPSET '/dm/backup/tablespace_users_backup';
-- 备份多个表空间
BACKUP TABLESPACE SYSTEM, USERS, TEMP BACKUPSET '/dm/backup/multiple_tablespaces_backup';2. 表空间恢复
sql
-- 还原表空间
RESTORE TABLESPACE USERS FROM BACKUPSET '/dm/backup/tablespace_users_backup';
-- 恢复表空间
RECOVER TABLESPACE USERS FROM BACKUPSET '/dm/backup/tablespace_users_backup';
-- 还原并恢复表空间
RESTORE TABLESPACE USERS FROM BACKUPSET '/dm/backup/tablespace_users_backup';
RECOVER TABLESPACE USERS FROM BACKUPSET '/dm/backup/tablespace_users_backup';
ALTER TABLESPACE USERS ONLINE;3. 数据文件备份与恢复
sql
-- 备份数据文件
BACKUP DATAFILE '/dm/data/DAMENG/users01.dbf' BACKUPSET '/dm/backup/datafile_users01_backup';
-- 还原数据文件
RESTORE DATAFILE '/dm/data/DAMENG/users01.dbf' FROM BACKUPSET '/dm/backup/datafile_users01_backup';
-- 恢复数据文件
RECOVER DATAFILE '/dm/data/DAMENG/users01.dbf' FROM BACKUPSET '/dm/backup/datafile_users01_backup';版本差异
| 版本 | 存储管理功能差异 |
|---|---|
| DM 8.1.1.41 及以上 | 支持基本的存储管理功能 |
| DM 8.1.1.133 及以上 | 增强了表空间管理功能,支持大文件表空间 |
| DM 8.1.2.126 及以上 | 支持更灵活的存储参数配置和优化策略 |
常见问题(FAQ)
Q1: 如何选择合适的页面大小?
A1: 选择页面大小需要考虑以下因素:
- 业务类型:OLTP系统适合小页面(4KB、8KB),OLAP系统适合大页面(16KB、32KB)
- 数据大小:大页面适合存储大型数据,减少I/O操作
- 内存大小:大页面需要更多的内存支持
- 应用兼容性:某些应用可能对页面大小有特定要求
Q2: 如何监控表空间使用情况?
A2: 可以通过以下方法监控表空间使用情况:
sql
SELECT T.NAME AS TABLESPACE_NAME,
ROUND(T.TOTAL_SIZE * P.PAGE_SIZE / 1024 / 1024, 2) AS TOTAL_MB,
ROUND((T.TOTAL_SIZE - T.FREE_SIZE) * P.PAGE_SIZE / 1024 / 1024, 2) AS USED_MB,
ROUND(T.FREE_SIZE * P.PAGE_SIZE / 1024 / 1024, 2) AS FREE_MB,
ROUND((T.TOTAL_SIZE - T.FREE_SIZE) * 100 / T.TOTAL_SIZE, 2) AS USED_PERCENT
FROM V$TABLESPACE T, V$DM_INI P
WHERE P.PARA_NAME = 'PAGE_SIZE'
ORDER BY USED_PERCENT DESC;Q3: 如何处理表空间碎片?
A3: 处理表空间碎片的方法包括:
- 表空间碎片整理:
ALTER TABLESPACE USERS COALESCE; - 重建表:
ALTER TABLE EMP MOVE; - 重建索引:
ALTER INDEX PK_EMP REBUILD; - 导出导入表数据:通过导出导入操作重建表,消除碎片
Q4: 如何优化存储性能?
A4: 优化存储性能的方法包括:
- 合理规划表空间和数据文件
- 将数据文件分布在不同的磁盘上
- 使用合适的页面大小和extent大小
- 优化数据库缓存参数
- 使用SSD等高性能存储设备
- 定期进行存储维护和优化
Q5: 如何备份和恢复表空间?
A5: 可以使用以下命令备份和恢复表空间:
sql
-- 备份表空间
BACKUP TABLESPACE USERS BACKUPSET '/dm/backup/tablespace_users_backup';
-- 还原表空间
RESTORE TABLESPACE USERS FROM BACKUPSET '/dm/backup/tablespace_users_backup';
-- 恢复表空间
RECOVER TABLESPACE USERS FROM BACKUPSET '/dm/backup/tablespace_users_backup';Q6: 如何处理数据文件损坏?
A6: 处理数据文件损坏的步骤包括:
- 尝试使用dmrman工具修复数据文件
- 如果修复失败,使用备份恢复数据文件
- 恢复后验证数据完整性
- 分析损坏原因,采取预防措施
