零、系统信息

select * from v$systeminfo;

 

 

一、数据字典相关

这个数据字典表可以查询数据库中所有的对象,通过where中的type列和subtype$可以做过滤,比如通过以下sql可以查询所有用户自创建的表:

select * from SYS.SYSOBJECTS where subtype$ = 'UTAB';

(SELECT * FROM ALL_TABLES;当然也可以通过这个视图查询,类似视图还有all_users/all_views/all_objects等等;)
(这两个不用+v$)
这两个一样,主要排查数据字典缓冲区的信息
SELECT * FROM V$DB_CACHE
SELECT * FROM V$DICT_CACHE


这两个一样,主要是排查数据字典的所存的系统对象的信息:
select * from V$DICT_CACHE_ITEM where type = 'TABLE';
SELECT * FROM V$DB_OBJECT_CACHE WHERE TYPE = 'TABLE';

 

 二、数据库参数相关

select * from v$dm_INI;

 

 三、许可证及版本相关

select * from V$license;
select * from v$version;  #数据库服务器版本
select id_code;

四、日志相关

DM SERVER 的 REDO 日志用于存储被修改数据的新值,包括事务对数据文件和回滚段的修改(就是说只要数据发生DML操作就会被记录在redo日志lsn就会改变,即时后面rollback也会被记录)。

REDO 日志每次被修改以后,都会自动生成一个新的日志序列值 LSN(Log SequenceNumber)。LSN 取值范围 0~正无穷大,新建的库 LSN 为 0,以后日志每被写入一次,LSN值增加 1。

 

 

很多时候,主备机的lsn因为网络问题会导致不一致,导致的现象就是数据库在执行任何sql时都会不定时的卡顿个几秒或十几秒然后又好了,原因是故障处理备机lsn要追赶主机lsn。在此时需要检查一下两台服务器日志的lsn,可以通过如下方式:

select * from V$RLOG;

 

五、会话相关

观察目前服务器有多少个会话连接,是否已经超过ini参数中max_sessions的限制

select * from v$sessions

 

 

六、事务和检查点相关

观察事务阻塞和死锁;

阻塞:相同数据的并发操作是主因,比如一个事务在操作这个数据时,需要等待另外一个先操作这个数据的事务commit后,才可以成功操作数据不然就一直等待。

select * from v$trx;
select * from V$TRXWAIT   
select * from v$lock;
select * from V$DEADLOCK_HISTORY

 

select * from V$CKPT  #当前检查点信息
select * from V$CKPT_HISTORY  #历史检查点的信息

 

七、数据库进程与线程

select * from v$process; #查看当前进程信息
select * from v$threads;#查看当前线程信息

  select * from V$LATCHES; #查看线程等待信息,可以配合事务等待一起用

 

 

 

 

 

 

 

 

 

 

 

和实时归档即时归档的区别在于,实时即时归档不需要配置远程服务器的归档目录,而远程归档需要在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、检查点时刻系统将缓冲区中的日志和脏数据页都刷盘

在系统恢复时,那些已经执行了COMMIT操作但修改仍留在内存缓冲区的事务需要做恢复工作,可以直接重做redo日志来恢复。具体原理如下:由于在事务执行时,会在日志中记下事务的开始标记、结束标志以及事务对DB的每一个修改,所以在系统恢复时,直接在热动日志中,通过检查故障点lsn(即系统恢复时启动的当前检查点)与最近一个检查点lsn(即上一个检查点)之间,哪些事务执行了COMMIT操作(这些事务应重做),哪些事务还未结束(这些事务应撤销)。