1、脏页
数据库中的脏页是指与磁盘不一致的内存页面。如果一个页面已经被修改但是还没有被写入磁盘,那么它就是脏页。当数据库需要将这些脏页写入磁盘时,会占用磁盘IO,脏页的存在时为了确保数据库的一致性和恢复能力。如果脏页已经持久化到磁盘上,那么系统可以安全的丢弃该页面并释放内存。
2、归档和落盘
将在线日志转换为归档日志的过程称之为归档,归档日志是在线日志的一个副本。redo日志根据自己的ASN归档序列号归档到归档日志,active和inactive的日志都会归档。落盘是指将数据保存到存储介质上,比如磁盘。可是理解为归档是将一份redo日志存在到一个大的文件夹中,归档是逻辑的,落盘是物理的。
3、redo日志
数据库的redo日志是一种用于回复数据的机制。当数据库执行事务时,它会将事务的操作记录到redo日志中,这些操作包括插入、更新和删除等。redo日志记录了这些操作的顺序和细节,一边在数据库崩溃或意外关闭时,可以使用redo日志来恢复数据。当数据库重新启动时,它会检查redo日志并将其中未完成的事务重新执行,以确保数据的一致性。如果redo中的事务嘟已经完成,则数据库可以跳过这个步骤。redo通常是在内存中维护的,因为它需要快速记录事务操作,然儿,为了保证数据的持久性,redo日志也会被写入磁盘。通常redo日志会被分成多个文件,以便在写入的时候可以轮转使用它们,从而提高性能。
4、archive log
归档日志是数据库管理系统中的一个重要概念,它是指将数据库中的事务日志文件(Transaction log)备份并存储到另一个位置,以便数据库在发生故障时可以使用这些归档日志来恢复数据库。归档日志的作用是保证数据库的完整性和可恢复性。当数据库发生故障时,可以使用归档日志恢复数据库到故障前的状态。归档日志还可用于数据备份和恢复,以及数据库性能分析和故障排除。
current: 当前正在从log buffer写入的redo日志文件
active: 日志对应脏页未落盘的redo日志文件
inactive: 志对应脏页已经落盘的redo日志文件
unused:刚添加的redo日志文件
可以通过DV_LOG_FILES视图查看
SQL> select * from dv_log_files;
SQL> des DV_LOG_FILES;
序号 | 字段名 | 字段定义 | 字段说明 |
3 | FILE_NAME | VARCHAR(256BYTE) | 日志文件名称 |
4 | BYTES | BINARY_BEGINT | 日志文件的大小 |
5 | WRITE_POS | BINARY_BEGINT | 日志写位置 |
6 | FREE_SIZE | BINARY_BEGINT | 日志剩余空间大小 |
7 | RESET_ID | BINARY_INTEGER | 日志的resetid号 |
8 | ASN | BINARY_INTEGER | 日志的归档序列号 |
9 | BLOCK_SIZE | BINARY_INTEGER | 日志每个block大小 |
10 | CURRENT_POINT | VARCHAR(128BYTE) | 当前日志落盘点 |
11 | ARCH_POS | BINARY_BEGINT | 日志的归档点 |
curent状态的redo日志写满后,就需要切换redo
curent -> active: curent中的write_pos不断推移,current写满之后状态变为active, 下一个序号的redo变为current。
active -> inactive: 处于active的日志文件需要等待脏页落盘后才会变成inactive;手动执行alter system checkpoint落盘后,可以看到active的redo变成inactive了。
inactive -> current: 如果存在inactive的redo, 则current -> active之后,下一个redo inactive -> current。
redo日志切换时,会自动找到当前需要的下一个, 如果下一个redo处于active状态,无法立即切换,则称为redo日志追尾。
一般原因:
一般redo日志的个数在数据库安装的时候就创建好了。如果出现频繁的redo追尾,可以考虑增加redo日志。
a、增加redo日志
SQL> alter database add logfile('redologxxx' size 512M);
b、删除redo日志。脏页还未落盘的redo日志(active的)删除不了
SQL> alter database drop logfile('redologxxx');
a、备机回访日志
根据redo日志,把主机的所有操作,在备机上重新做一遍,保证主备机数据的一致性(build)。
b、非一致性关机重启时,数据库做恢复,重演日志
数据库非一致性关机时,脏页队列中可能存在未落盘的页面。再次重启时,通过重演日志,将发生的修改再重新做一遍,保证了数据库数据的一致性。
c、备份集恢复数据库时,重演备份集的归档日志。