数据库的一些设计redo、undo、checkpoint;
服务器和终端的区别:
简单来说,服务器由于要像一个中心一样对各种请求进行处理,所以服务器要是一台高计算能力、高硬件配置的机器,而终端不用。
远程和实时归档即时归档的区别:
在于,实时即时归档不需要配置远程服务器的归档目录,而远程归档需要在dmarch.ini中配置。
自我感觉,实时即时归档偏向于发送到远程服务器,然后让远程服务器重做(主备),而远程归档偏向于把自己的这份归档发送到远程服务器让每一个远程服务器都有整个系统的完整rredo日志(DSC)
产生检查点的几种情形:
1.日志即将满,自动产生检查点,刷盘日志和数据,然后可以便清空部分redo日志特出空间存后面的redo日志,以此实现联机日志文件的轮询使用。
2.dm.ini参数设置的ckpt—interval时间到了,调度线程产生检查点
3.ckpt—rlog—size参数,设置得日志空间大小以达到,则产生检查点
4.ckpt—dirty—pages参数,设置得数据脏页达到目标数后产生检查点刷盘。
5.服务器正常启动和关闭时也会产生检查点;数据库服务器为什么启动时要产生检查点?就是如果上次服务器异常关闭的话可能有些数据还没刷盘,在本次启动时产生检查点通过redo日志把数据刷盘;数据库服务器正常关闭时产生检查点自然就是要把所有的日志和脏数据页刷盘。
检查点lsn和redo日志文件lsn有什么 区别:
检查点的lsn的到了5种情况下才会产生,然后活动事务对数据任何修改(包括rollback,commit语句)都会产生file lsn。
检查点和commit的区别:
1、commit可以保证日志刷盘但脏数据页不刷盘;
事务运行时,会把生成的 REDO 日志保留在日志缓冲区中,当事务被提交之后,DM 数据库进行以下操作:
- 将事务任何更改的记录写入日志文件(即通知 日志FLUSH 线程进行日志刷盘)并最终在合适的时机(如检查点、缓冲区满)写入到数据文件;
- 释放事务上的所有锁,将事务标记为完成;
- 返回提交成功消息给请求者。
所以COMMIT操作就不一定保证事务对DB的修改写到磁盘即脏数据页刷盘,但可以保证commit可以保证日志刷盘。
2、检查点时刻系统将缓冲区中的日志和脏数据页都刷盘,但是未提交的数据不会回滚,而数据库服务器启停会回滚。
为什么会先刷redo日志盘而不是commit之后直接刷数据盘?
因为刷数据盘因为数据文件格式麻烦会导致数据库性能降底等原因所以先将redo日志落盘,再在合适的时候将通过redo日志将数据刷盘;
数据库服务器启动时会产生检查点并做前滚和回滚。为什么要回滚因为redo日志仍然包含了未结束的事务,在服务器重启后要结束所有未结束的事务,所以要回滚;
数据库服务器关闭时会成产生检查点并做回滚;
在系统恢复时,那些已经执行了COMMIT操作但修改仍留在内存缓冲区的事务需要做恢复工作,可以直接重做redo日志来恢复。具体原理如下:由于在事务执行时,会在日志中记下事务的开始标记、结束标志以及事务对DB的每一个修改,所以在系统恢复时,直接在热动日志中,通过检查故障点lsn(即系统恢复时启动的当前检查点)与最近一个检查点lsn(即上一个检查点)之间,哪些事务执行了COMMIT操作(这些事务应重做),哪些事务还未结束(这些事务应撤销)。