一、基础知识
1、数据库结构
实例:实例一般是由一组正在运行的 DM 后台进程/线程以及一个大型的共享内存组成。数据库的物理数据文件是由实例来操作读写的,故障恢复主要为实例恢复。
表空间:表空间由一个或者多个数据文件组成。是逻辑的结构,初始化数据库默认创建4个表空间,SYSTEM 存放一些元数据,MAIN为用户默认表空间,需要注意 MAIN 表空间扩展后不能收缩 不方便管理,建议业务用户创建专用的表空间。ROLL 表空间为回滚表空间,存储更新或者删除的 旧值。TEMP 为临时表空间,所有临时段都会用到,表创建索引就用到临时表空间来临时存放。所以临时表空间最大限制可根据数据库最大表20% 来大概估算。
数据文件:数据文件以 dbf 为扩展名,是真实数据存储的地方。
控制文件:是一个二进制文件,它记录了数据库必要的初始信息。
重做日志文件:重做日志(即 REDO 日志,联机日志文件)指在 DM 数据库中添加、删除、修改对象,或者改变数据,DM 都会按照特定的格式,将这些操作执行的结果写入到当前的重做日志文件中。
归档日志文件:归档日志文件,就是在归档模式下,重做日志被连续写入到归档日志后,所生成了归档日志文件。归档的写入 不是等redo写满 切换组后才写,写redo 后就尽快写归档了,所以归档和redo是差不太多的。
2、redo和undo
Redo 默认生成两组,256M 的redo文件。 当一个写满后,切换到另一个redo文件,写满了又切换 这样循环使用redo文件的。任何修改数据库的操作都会产生重做日志。
Undo 是存储修改前的旧值在 ROLL.DBF 文件,回滚段的数据不是一直保留的,事务结束后,由系统的 PURGE 模块释放回滚页。回滚表空间不允许修改和删除操作。当roll表空间能存下系统产生的回滚段时,由UNDO_RETENTION参数控制清理多久前的回滚段。默认为90s。如roll表空间不足,系统又需要用到回滚段, 那就不能保证90秒后才清理,事务写盘后就可以清理了。
3、回滚页的清理过程
更新一行数据后提交,查询select * from V$PURGE; 显示1个事务待PURGE
select * from V$PURGE_PSEG_TAB;--显示待purge 表信息,主要看事务ID 和表ID ,通过表ID 去关联 查询确认表。
SELECT * FROM dba_objects where object_type='TABLE' AND OBJECT_ID IN(select TAB_ID from V$PURGE_PSEG_TAB);