----SCN:system_change_number
select dbms_flashback.get_system_change_number from dual;
select dbms_flashback.get_system_change_number scnno,
SCN_TO_TIMESTAMP(dbms_flashback.get_system_change_number) time
from dual;---时间与SCN对应的关系
select current_scn from v$database;
select timestamp_to_scn(SYSTIMESTAMP) as scn from dual;---转换
--在控制文件中
(1)SYSTEM CHECKPOINT SCN
select checkpoint_change# from v$database; --1054470322784保存在控制文件中
(2)Datafile checkpoint SCN
select file#,name,checkpoint_change# from v$datafile;
(3)Stop SCN(END SCN)
select file#,name,last_change# from v$datafile;
alter tablespace users read only;
alter tablespace users read write;
--一个在数据文件头内:
4) StartSCN
SELECT FILE#, NAME, checkpoint_change#, STATUS, TABLESPACE_NAME FROM V$DATAFILE_HEADER;
系统检查点和数据文件检查点不一致时,则会启动SMON进程,进行数据库恢复.
stop scn 是最后一次修改scn号
select checkpoint_change#,last_change# from v$datafile;
shutdown abort
startup mount ----会在last_change中记录SCN值
SQL> shutdown abort
ORACLE 例程已经关闭。
SQL> startup mount
ORACLE 例程已经启动。
Total System Global Area 1703624704 bytes
Fixed Size 2255864 bytes
Variable Size 1275069448 bytes
Database Buffers 419430400 bytes
Redo Buffers 6868992 bytes
数据库装载完毕。
SQL> select checkpoint_change#,last_change# from v$datafile;
CHECKPOINT_CHANGE# LAST_CHANGE#
------------------ ---------------
1054471237178 1054471237178
1054471237178 1054471237178
1054471237178 1054471237178
1054471237178 1054471237178
1054471237178 1054471237178
SQL> select checkpoint_change# from v$database;
CHECKPOINT_CHANGE#
------------------
1054471237178
SQL> alter database open;
数据库已更改。
SQL> select checkpoint_change# from v$database;
CHECKPOINT_CHANGE#
------------------
1054471237181
SQL> select checkpoint_change#,last_change# from v$datafile;
CHECKPOINT_CHANGE# LAST_CHANGE#
------------------ ---------------
1054471237181
1054471237181
1054471237181
1054471237181
1054471237181
SQL> alter system checkpoint
2 /
系统已更改。
SQL> shutdown abort
ORACLE 例程已经关闭。
SQL> startup mount
ORACLE 例程已经启动。
Total System Global Area 1703624704 bytes
Fixed Size 2255864 bytes
Variable Size 1275069448 bytes
Database Buffers 419430400 bytes
Redo Buffers 6868992 bytes
数据库装载完毕。
SQL> select checkpoint_change#,last_change# from v$datafile;
CHECKPOINT_CHANGE# LAST_CHANGE#
------------------ ---------------
1054471237709
1054471237709
1054471237709
1054471237709
1054471237709
SQL> select checkpoint_change# from v$database;
CHECKPOINT_CHANGE#
------------------
1054471237709
----------------------------------------------------------------------------
SQL> alter system checkpoint;
系统已更改。
SQL> shutdown immediate
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startup mount
ORACLE 例程已经启动。
Total System Global Area 1703624704 bytes
Fixed Size 2255864 bytes
Variable Size 1275069448 bytes
Database Buffers 419430400 bytes
Redo Buffers 6868992 bytes
数据库装载完毕。
SQL> select checkpoint_change#,last_change# from v$datafile;
CHECKPOINT_CHANGE# LAST_CHANGE#
------------------ ---------------
1054471258835 1054471258835
1054471258835 1054471258835
1054471258835 1054471258835
1054471258835 1054471258835
1054471258835 1054471258835
SQL> select checkpoint_change# from v$database;
CHECKPOINT_CHANGE#
------------------
1054471258835
-----------------所以当数据库是正常关闭时,系统scn和数据文件中的scn会保持一致,但是如果是不正常关闭,而且在数据库open中有队数据文件进行写,那么会导致系统scn和文件scn
-----------不一致,从而在再次open数据库是会触发smon进程进行前滚在回滚,使得数据库恢复成一致状态。
--检查点的分类:
--第一种分法
--1.database checkpoint,数据库级的检查点: 会触发的情况:
1)alter system checkpoint;
2) alter system switch logfile;
3) alter database begin backup;
4) 正常关闭实例shutdown(immediate,transcational,normal)
--2.表空间和数据文件检查点:会出发的情况:
1) alter tablespace ... read only
2) alter datafile .... shrink
3) alter tablespace .... offline;
4) alter tablespace.... begin backup
--第二种分类方法
1. 完全检查点 :手动触发的,和关闭数据库时候发生的均为完全检查点
2. 增量检查点
--完全检查点:
1》alter system checkpoint
2》正常关闭shutdown(immediate,transcational,normal)
------checkpiont的几个概念
----RBA(Redo Byte Address)
当一个checkpoint事件发生的时候,checkpoint进程会记录下当时所写的重做日志块的地址即RBA,此时记录的RBA被称为checkpoint RBA。
Low RBA(LRBA), High RBA(HRBA)
RBA就是重做日志块(redo log block)的地址,相当与数据文件中的ROWID,通过这个地址来定位重做日志块。
RBA由三个部分组成:
1.日志文件序列号(4字节)
2.日志文件块编号(4字节)
3.重做日志记录在日志块中的起始偏移字节数(2字节)
LRBA
数据缓存(buffer cache)中一个脏块第一次被更新的时候产生的重做日志记录在重做日志文件中所对应的位置就称为LRBA。
HRBA
数据缓存(buffer cache)中一个脏块最近一次(最后一次)被更新的时候产生的重做日志记录在重做日志文件中所对应的位置就称为HRBA。
HRBA 最后一次变脏
LRBA 第一次变脏
--Buffer checkpoint Queues(BCQ)
前滚到最后的状态,回滚到最后一次提交的状态
Oracle将所有在数据缓存中被修改的脏块按照LRBA顺序的组成一个checkpoint队列,这个队列主要记录了buffer cache第一次发生变化的时间顺序.
HRBA
--checkpoint RBA ( Target Rba )
当一个checkpoint事件发生的时候,checkpoint进程会记录下当时所写的重做日志块的地址即RBA,此时记录的RBA被称为checkpoint RBA。
--====================数据库启动与关闭
---
1) 第1步是NOMOUNT,读取初始化参数(SPFILE或PFILE),初始化在SPFILE或PFILE里设置的内存及进程,并知道了控制文件的地址。
spfile
pfile
2) 第2步MOUNT就是要从控制文件读取物理文件的结构
3) 但是MOUNT后的数据文件,控制文件也许数据不一致,有可能是异常关闭的,所以后续要做一个一致性检查,这属于第3步,数据库OPEN
实例恢复:mount之后先前滚后回滚在打开数据库
介质恢复:需要DBA手动干预
alter database backup controlfile to trace as 'D:\control_file.txt';---将控制文件备份成文本格式
---启动方式
⊙ STARTUP FORCE
相当于SHUTDOWN ABORT + STARTUP
⊙ STARTUP RESTRICT 受限模式
select logins from v$instance;
⊙ STARTUP RECOVER--该命令相当于STARTUP MOUNT + RECOVER DATABASE
---关闭方式
1. shutdown abort
---no allow new connections,no wait until current sessions end,no until current transactiona end ,no force a checkpoint and close files
2. shutdown immediate---不用等待事务完成,也不用等待用户退出,
? 检查点,写脏数据到数据文件,
? 回滚没有提交的事务
? 释放相关资源
? 不需要做实例恢复
---no allow new connections,no wait until current sessions end,no until current transactiona end , yes force a checkpoint and close files
3. shutdown transactional
---no allow new connections,yes wait until current sessions end,yes until current transactiona end ,yes force a checkpoint and close files
4. shutdown normal
---no allow new connections,no wait until current sessions end,yes until current transactiona end ,yes force a checkpoint and close files
shutdown immediate
startup nomount---后台进程服务器进程都已启动,会启动instance和后台进程
alter database mount;---mount只是get the name of the datafiles and redo log files.
alter database open;----此时才能查看数据库中的文件
startup restrict
select * from user_sys_privs where PRIVILEGE='RESTRICTED SESSION';
alter system disable restricted session;
select logins from v$instance;
alter system enable restricted session; ----可以将数据库改成受限模式
--How a Database Is Mounted
The instance mounts a database to associate the database with that instance.
To mount the database, the instance finds the database control files and opens them.
Control files are specified in the CONTROL_FILES initialization parameter in the parameter file used
to start the instance. Oracle then reads the control files to get the names of the database's datafiles and redo log files.'
---Restricted Mode of Instance Startupaaa
You can start an instance in restricted mode (or later alter an existing instance to be in restricted mode).
This restricts connections to only those users who have been granted the RESTRICTED SESSION system privilege.
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/30018455/viewspace-1415560/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/30018455/viewspace-1415560/