linux oracle 启动状态,Oracle 启动阶段 OPEN

启动数据库查看数据库日志:Wed Dec 17 17:40:32 2014

db_recovery_file_dest_size of 3882 MB is 0.00% used. This is a

user-specified limit on the amount of space that will be used by this

database for recovery-related files, and does not reflect the amount of

space available in the underlying filesystem or ASM diskgroup.

Wed Dec 17 17:40:34 2014

Starting background process CJQ0

Wed Dec 17 17:40:34 2014

CJQ0 started with pid=21, OS id=5863

Oracle Open阶段通过controlfile加载数据文件,加载过程中会进行数据文件的检查,并比对数据的一致性。存在不一致需要恢复。

该阶段进行如下两项内容的检查:

1、检查数据文件中的CheckPoint cnt(检查点计数)是否与控制文件中的CheckPoint cnt一致,此步骤的目的是确认数据文件中是原数据还是来自于备份。SQL> alter session set events'immediate trace name controlf level 12';

Session altered.

***************************************************************************

DATA FILE RECORDS

***************************************************************************

(size = 520, compat size = 520, section max = 100, section in-use = 5,

last-recid= 34, old-recno = 0, last-recno = 0)

(extent = 1, blkno = 11, numrecs = 100)

DATA FILE #1:

name #7: /DBBK/oracle/oradata/orcl/system01.dbf

creation size=0 block size=8192 status=0xe head=7 tail=7 dup=1

tablespace 0, index=1 krfil=1 prev_file=0

unrecoverable scn: 0x0000.00000000 01/01/1988 00:00:00

Checkpoint cnt:182 scn: 0x0000.001d621a 01/04/2015 08:05:09

Stop scn: 0xffff.ffffffff 12/31/2014 18:00:30

Creation Checkpointed at scn:  0x0000.00000007 08/15/2009 00:16:48

thread:0 rba:(0x0.0.0)

......

Offline scn: 0x0000.000e6c1f prev_range: 0

Online Checkpointed at scn:  0x0000.000e6c20 12/16/2014 13:08:16

thread:1 rba:(0x1.2.0)

......

Hot Backup end marker scn: 0x0000.00000000

aux_file is NOT DEFINED

Plugged readony: NO

Plugin scnscn: 0x0000.00000000

Plugin resetlogs scn/timescn: 0x0000.00000000 01/01/1988 00:00:00

Foreign creation scn/timescn: 0x0000.00000000 01/01/1988 00:00:00

Foreign checkpoint scn/timescn: 0x0000.00000000 01/01/1988 00:00:00

Online move state: 0

从上面可以看到,我从controlfile文件中dump的信息包括数据文件记录,记录的信息包含数据文件号,Checkpoint cnt号,scn号等。SQL> alter tablespace system begin backup;

Tablespace altered.

SQL> alter session set events'immediate trace name controlf level 12';

Session altered.

***************************************************************************

DATA FILE RECORDS

***************************************************************************

(size = 520, compat size = 520, section max = 100, section in-use = 5,

last-recid= 34, old-recno = 0, last-recno = 0)

(extent = 1, blkno = 11, numrecs = 100)

DATA FILE #1:

name #7: /DBBK/oracle/oradata/orcl/system01.dbf

creation size=0 block size=8192 status=0xe head=7 tail=7 dup=1

tablespace 0, index=1 krfil=1 prev_file=0

unrecoverable scn: 0x0000.00000000 01/01/1988 00:00:00

Checkpoint cnt:183 scn: 0x0000.001d6f61 01/04/2015 09:14:06

Stop scn: 0xffff.ffffffff 12/31/2014 18:00:30

Creation Checkpointed at scn:  0x0000.00000007 08/15/2009 00:16:48

thread:0 rba:(0x0.0.0)

......

Offline scn: 0x0000.000e6c1f prev_range: 0

Online Checkpointed at scn:  0x0000.000e6c20 12/16/2014 13:08:16

thread:1 rba:(0x1.2.0)

......

Hot Backup end marker scn: 0x0000.00000000

aux_file is NOT DEFINED

Plugged readony: NO

Plugin scnscn: 0x0000.00000000

Plugin resetlogs scn/timescn: 0x0000.00000000 01/01/1988 00:00:00

Foreign creation scn/timescn: 0x0000.00000000 01/01/1988 00:00:00

Foreign checkpoint scn/timescn: 0x0000.00000000 01/01/1988 00:00:00

Online move state: 0

DATA FILE #2:

name #6: /DBBK/oracle/oradata/orcl/sysaux01.dbf

creation size=0 block size=8192 status=0xe head=6 tail=6 dup=1

tablespace 1, index=2 krfil=2 prev_file=0

unrecoverable scn: 0x0000.00000000 01/01/1988 00:00:00

Checkpoint cnt:182 scn: 0x0000.001d621a 01/04/2015 08:05:09

可以看到这数据文件间的差异显示Checkpoint cnt号以及scn的改变

---

>  Checkpoint cnt:182 scn: 0x0000.001d621a 01/04/2015 08:05:09

手动触发检查点检查,再次查看控制文件的dump文件SQL> alter system checkpoint;

System altered.

SQL> alter session set events'immediate trace name controlf level 12';

Session altered.

发现由于将system数据文件(即DATA FILE #1)修改为在线备份状态,其Checkpoint cnt发生改变,但scn未改变,而其他数据文件的scn和Checkpoint发生改变。DATA FILE #1:

name #7: /DBBK/oracle/oradata/orcl/system01.dbf

creation size=0 block size=8192 status=0xe head=7 tail=7 dup=1

tablespace 0, index=1 krfil=1 prev_file=0

unrecoverable scn: 0x0000.00000000 01/01/1988 00:00:00

Checkpoint cnt:184 scn: 0x0000.001d6f61 01/04/2015 09:14:06

Stop scn: 0xffff.ffffffff 12/31/2014 18:00:30

Creation Checkpointed at scn:  0x0000.00000007 08/15/2009 00:16:48

thread:0 rba:(0x0.0.0)

......

Offline scn: 0x0000.000e6c1f prev_range: 0

Online Checkpointed at scn:  0x0000.000e6c20 12/16/2014 13:08:16

thread:1 rba:(0x1.2.0)

......

Hot Backup end marker scn: 0x0000.00000000

aux_file is NOT DEFINED

Plugged readony: NO

Plugin scnscn: 0x0000.00000000

Plugin resetlogs scn/timescn: 0x0000.00000000 01/01/1988 00:00:00

Foreign creation scn/timescn: 0x0000.00000000 01/01/1988 00:00:00

Foreign checkpoint scn/timescn: 0x0000.00000000 01/01/1988 00:00:00

Online move state: 0

DATA FILE #2:

name #6: /DBBK/oracle/oradata/orcl/sysaux01.dbf

creation size=0 block size=8192 status=0xe head=6 tail=6 dup=1

tablespace 1, index=2 krfil=2 prev_file=0

unrecoverable scn: 0x0000.00000000 01/01/1988 00:00:00

Checkpoint cnt:183 scn: 0x0000.001d7114 01/04/2015 09:25:07

Stop scn: 0xffff.ffffffff 12/31/2014 18:00:30

Creation Checkpointed at scn:  0x0000.0000085c 08/15/2009 00:17:00

thread:0 rba:(0x0.0.0)

......

Offline scn: 0x0000.000e6c1f prev_range: 0

Online Checkpointed at scn:  0x0000.000e6c20 12/16/2014 13:08:16

thread:1 rba:(0x1.2.0)

......

Hot Backup end marker scn: 0x0000.00000000

aux_file is NOT DEFINED

Plugged readony: NO

Plugin scnscn: 0x0000.00000000

Plugin resetlogs scn/timescn: 0x0000.00000000 01/01/1988 00:00:00

Foreign creation scn/timescn: 0x0000.00000000 01/01/1988 00:00:00

Foreign checkpoint scn/timescn: 0x0000.00000000 01/01/1988 00:00:00

Online move state: 0

关闭system表空间的在线备份状态:SQL> alter tablespace system end backup;

Tablespace altered.

DATA FILE #1:

name #7: /DBBK/oracle/oradata/orcl/system01.dbf

creation size=0 block size=8192 status=0xe head=7 tail=7 dup=1

tablespace 0, index=1 krfil=1 prev_file=0

unrecoverable scn: 0x0000.00000000 01/01/1988 00:00:00

Checkpoint cnt:185 scn: 0x0000.001d7114 01/04/2015 09:25:07

Stop scn: 0xffff.ffffffff 12/31/2014 18:00:30

Creation Checkpointed at scn:  0x0000.00000007 08/15/2009 00:16:48

thread:0 rba:(0x0.0.0)

.......

Offline scn: 0x0000.000e6c1f prev_range: 0

Online Checkpointed at scn:  0x0000.000e6c20 12/16/2014 13:08:16

thread:1 rba:(0x1.2.0)

......

Hot Backup end marker scn: 0x0000.00000000

aux_file is NOT DEFINED

Plugged readony: NO

Plugin scnscn: 0x0000.00000000

Plugin resetlogs scn/timescn: 0x0000.00000000 01/01/1988 00:00:00

Foreign creation scn/timescn: 0x0000.00000000 01/01/1988 00:00:00

Foreign checkpoint scn/timescn: 0x0000.00000000 01/01/1988 00:00:00

Online move state: 0

可以看到DATA FILE #1的Checkpoint cnt和scn均发生改变

2、当检查点计数器检查通过后,检查数据文件头开始的scn号是否与控制文件中记录的该数据文件的结束scn是否一致,如一致则无需恢复。SQL> select file#,name,checkpoint_change# from v$datafile_header where file#=1;

FILE# NAME                                     CHECKPOINT_CHANGE#

---------- ---------------------------------------- ------------------

1 /DBBK/oracle/oradata/orcl/system01.dbf              1934813

SQL> select to_number('1d7114','XXXXXX') from dual;

TO_NUMBER('1D7114','XXXXXX')

----------------------------

1929492

可以看到我通过不同时间点的controlf dump发现9:25分的时候controlfile记录的DATA FILE #1的SCN结束号为1929492,而当我10:35分查看数据文件头的scn为1934813,如果存在这种控制文件中记录的数据文件scn不等于数据文件头的SCN的情况,就可能涉及到数据恢复的情况。当我10:35 重新dump controlfile的时候,确认这两块的scn是一致的DATA FILE #1:

name #7: /DBBK/oracle/oradata/orcl/system01.dbf

creation size=0 block size=8192 status=0xe head=7 tail=7 dup=1

tablespace 0, index=1 krfil=1 prev_file=0

unrecoverable scn: 0x0000.00000000 01/01/1988 00:00:00

Checkpoint cnt:186 scn: 0x0000.001d85dd 01/04/2015 10:05:27

Stop scn: 0xffff.ffffffff 12/31/2014 18:00:30

Creation Checkpointed at scn:  0x0000.00000007 08/15/2009 00:16:48

thread:0 rba:(0x0.0.0)

SQL> select to_number('1d85dd','XXXXXX') from dual;

TO_NUMBER('1D85DD','XXXXXX')

----------------------------

1934813

关于SCN的解释:

SCN(System Change Number)被作为数据库某一时刻版本的标识,同时在事务提交时,它也被赋予唯一的SCN号,SCN被Oracle数据库用作内部的时钟机制,可以被看成逻辑上的时钟。每个数据库都有一个全局的SCN生成器。

作为Oracle数据库的逻辑时钟,数据库的事务依SCN进行排序,同时数据库依据SCN实现一致读(Read Consistency)的功能。

SCN 存在于数据库的控制文件、数据文件头、日志文件、数据块头、事务表中。冠以不同的名称如:Checkpoint、Resetlogs等

获取SCN的方法:SQL> select dbms_flashback.get_system_change_number from dual;

GET_SYSTEM_CHANGE_NUMBER

------------------------

2027427

通过系统底层表SQL> select max(ktuxescnw*power(2,32)+ktuxescnb) as current_scn from x$ktuxe;

CURRENT_SCN

-----------

2027381

系统的SCN通常在事务提交和回滚时改变 ,对于日志文件头则包含Low SCN和Next SCN记录,重做信息则介于Low SCN和Next SCN间,而对于状态为CURRENT的日志文件,则日志的Next SCN被置为无穷大,RECID #1 Recno 1 Record timestamp  12/16/14 13:08:40 Thread=1 Seq#=1 Link-Recid=0 kccic-Recid=2

Low scn: 0x0000.000e6c20 12/16/14 13:08:16 Next scn: 0x0000.000ee43bSQL> select status,first_change#,next_change# from v$log;

STATUS         FIRST_CHANGE# NEXT_CHANGE#

-------------- ------------- ------------

INACTIVE       2003999       2017783

CURRENT        2017783       2.8147E+14

INACTIVE       1991500       2003999

尝试切换日志SQL> alter system switch logfile;

System altered.

GROUP# STATUS     FIRST_CHANGE# NEXT_CHANGE#

---------- ---------- ------------- ------------

1 INACTIVE         2003999      2017783

2 INACTIVE         2017783      2028494

3 CURRENT          2028494   2.8147E+14

SQL> select dbms_flashback.get_system_change_number from dual;

GET_SYSTEM_CHANGE_NUMBER

------------------------

2028498

LOG FILE #2:

name #2: /DBBK/oracle/oradata/orcl/redo02.log

Thread 1 redo log links: forward: 3 backward: 1

siz: 0x19000 seq: 0x0000005c hws: 0x2 bsz: 512 nab: 0x5962 flg: 0x1 dup: 1

Archive links: fwrd: 0 back: 0 Prev scn: 0x0000.001e941f

Low scn: 0x0000.001ec9f7 01/05/2015 12:54:06

Next scn: 0x0000.001ef3ce 01/05/2015 16:44:22

可以看到日志切换后,LOG FILE #2的Next SCN 发生改变,其范围从2017783到2028494,通过dump控制文件信息发现文件中也记录了日志文件SCN的这一变化。另外,系统之前SCN:2027427,说明当时的重做信息被记录到了LOG FILE #2中了。当对Oracle进行恢复时,读取归档日志时就要根据这个范围值确定记录所在的日志文件。

书中也提到通过DUMP日志文件的方式来获取日志文件中的记录信息:SQL> select group#,type,is_recovery_dest_file,member from v$logfile;

GROUP# TYPE   IS_RECOVE MEMBER

---------- ------ --------- -----------------------------------------

3 ONLINE NO        /DBBK/oracle/oradata/orcl/redo03.log

2 ONLINE NO        /DBBK/oracle/oradata/orcl/redo02.log

1 ONLINE NO        /DBBK/oracle/oradata/orcl/redo01.log

*** 2015-01-05 17:40:15.184

DUMP OF REDO FROM FILE '/DBBK/oracle/oradata/orcl/redo02.log'

Opcodes *.*

RBAs: 0x000000.00000000.0000 thru 0xffffffff.ffffffff.ffff

SCNs: scn: 0x0000.00000000 thru scn: 0xffff.ffffffff

Times: creation thru eternity

FILE HEADER:

Compatibility Vsn = 186646528=0xb200000

Db ID=1394247230=0x531a863e, Db Name='ORCL'

Activation ID=1394245182=0x531a7e3e

Control Seq=8108=0x1fac, File size=102400=0x19000

File Number=2, Blksiz=512, File Type=2 LOG

descrip:"Thread 0001, Seq# 0000000092, SCN 0x0000001ec9f7-0x0000001ef3ce"

thread: 1 nab: 0x5962 seq: 0x0000005c hws: 0x2 eot: 0 dis: 0

resetlogs count: 0x33a53ac0 scn: 0x0000.000e6c20 (945184)

prev resetlogs count: 0x296b946b scn: 0x0000.00000001 (1)

Low  scn: 0x0000.001ec9f7 (2017783) 01/05/2015 12:54:06

Next scn: 0x0000.001ef3ce (2028494) 01/05/2015 16:44:22

Enabled scn: 0x0000.000e6c20 (945184) 12/16/2014 13:08:16

Thread closed scn: 0x0000.001ec9f7 (2017783) 01/05/2015 12:54:06

关于Checkpoint:

Checkpoint的意义在于减少数据库崩溃恢复的时间。

当修改数据的时候,数据先被读取到内存当中,被修改的记录会被记录到Redo中用于恢复,因为有了Redo,修改数据在提交后不会被立即写回到磁盘中。

常见的情况是当主机断电导致数据库Crash,在内存中修改,且尚未写入磁盘的数据将丢失,那么在下一次数据库启动时,数据库会通过Redo日志进行事务重演,进行前推操作将数据库恢复到崩溃前的状态,之后再对未提交的事务进行回滚。

通过检查点就可以减少崩溃恢复的时间,而检查点的发生频度则影响到崩溃恢复的时间长度。与部分参数有关SQL> select file#,creation_change#,creation_time,checkpoint_change#,checkpoint_time from v$datafile;

FILE# CREATION_CHANGE# CREATION_TIME       CHECKPOINT_CHANGE# CHECKPOINT_TIME

---------- ---------------- ------------------- ------------------ -------------------

1                7 2009-08-15 00:16:48            2078903 2015-01-06 08:06:35

2             2140 2009-08-15 00:17:00            2078903 2015-01-06 08:06:35

3           942603 2009-08-15 00:52:15            2078903 2015-01-06 08:06:35

4            17993 2009-08-15 00:17:30            2078903 2015-01-06 08:06:35

5           974159 2014-12-16 13:08:33            2078903 2015-01-06 08:06:35

SQL> select dbid,checkpoint_change# from v$database;

DBID CHECKPOINT_CHANGE#

---------- ------------------

1394247230            2078903

通过获取系统当前的SCN号,可以看到目前的数据文件的检查时间发生在08:06:35秒,而当生产的SCN的系统时间如下:SQL> select dbms_flashback.get_system_change_number from dual;

GET_SYSTEM_CHANGE_NUMBER

------------------------

2085591

SQL> select scn_to_timestamp(2085591) from dual;

SCN_TO_TIMESTAMP(2085591)

-----------------------------------------

06-JAN-15 10.35.52.000000000 AM

可以看系统检查时间发生时间与当前系统时间相差还是比较大的,这主要是因为测试库,没有触发频繁的Checkpoint。

总的来说,为了减少数据库崩溃恢复的时间,在数据库性能允许的情况下,使Checkpoint的SCN尽量接近Redo的最新变更。加快规则恢复的速度。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值