3 深入解析controlfile

3 深入解析controlfile

Control file: dump

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

Session altered
SQL> select * from v$diag_info;
/u01/app/oracle/diag/rdbms/orcl/orcl/trace/orcl_ora_16425.trc

分析控制文件的1号块

bbed

BBED> set filename '/u01/app/oracle/oradata/orcl/control01.ctl';
    FILENAME           /u01/app/oracle/oradata/orcl/control01.ctl

BBED> dump
 File: /u01/app/oracle/oradata/orcl/control01.ctl (0)
 Block: 1                Offsets:    0 to  511           Dba:0x00000000
------------------------------------------------------------------------
 15c20000 01000000 00000000 00000104 96b20000 00000000 0004200b cf766f5b 
 4f52434c 00000000 e50f0000 66020000 00400000 00000100 00000000 00000000 
 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 
 322f835b cfbd033c f8281400 00000000 05f1103c 00000000 00000000 00000000 

dumpfile

[root@DSI ~]# more /u01/app/oracle/diag/rdbms/orcl/orcl/trace/orcl_ora_16425.trc

DUMP OF CONTROL FILES, Seq # 4067 = 0xfe3
 V10 STYLE FILE HEADER:
    Compatibility Vsn = 186647552=0xb200400
    Db ID=1534031567=0x5b6f76cf, Db Name='ORCL'
    Activation ID=0=0x0
    Control Seq=4067=0xfe3, File size=614=0x266
    File Number=0, Blksiz=16384, File Type=1 CONTROL

Offset 0~0 15 表示mask
Offset 1~1 c2 表示blocksize(16384)
Offset 4~4 01 表示No. 1 block
Offset 24~27 0004200b 表示Version
Offset 28~31 cf766f5b 表示DBID
Offset 32~39 4f52434c 00000000 表示DBNAME
Offset 40~41 e50f 表示sequence
Offset 44~45 6602 表示file size (block Number)
Offset 49~50 0040 表示blocksize 16834
Offset 53~54 0000 表示fileNo
Offset 55~56 0100 表示fileType

控制文件3号块

BBED> set filename '/u01/app/oracle/oradata/orcl/control01.ctl' block 3;
    FILENAME           /u01/app/oracle/oradata/orcl/control01.ctl
    BLOCK#             3

BBED> dump
 File: /u01/app/oracle/oradata/orcl/control01.ctl (0)
 Block: 3                Offsets:    0 to  511           Dba:0x00000000
------------------------------------------------------------------------
 15c20000 03000000 00000000 00000104 7d2c0000 02000000 00000000 03000000 
 6a000000 9d260000 00000000 6a000000 a8260000 00000000 03291400 00000000 
 20f1103c 4f2bfa3b 01000000 00000000 18430e3c 322f835b 00000000 00000000 
 00000000 00000000 00000000 00000000 00000000 00000000 00000000 6a000000 
 01000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000

***************************************************************************
CHECKPOINT PROGRESS RECORDS
***************************************************************************
 (size = 8180, compat size = 8180, section max = 11, section in-use = 0,
  last-recid= 0, old-recno = 0, last-recno = 0)
 (extent = 1, blkno = 2, numrecs = 11)
THREAD #1 - status:0x2 flags:0x0 dirty:17
low cache rba:(0x6a.2650.0) on disk rba:(0x6a.266c.0)
on disk scn: 0x0000.00142867 05/08/2019 16:35:15
resetlogs scn: 0x0000.00000001 04/22/2019 10:07:11
heartbeat: 1007567480 mount id: 1535323954
THREAD #2 - status:0x0 flags:0x0 dirty:0
low cache rba:(0x0.0.0) on disk rba:(0x0.0.0)
on disk scn: 0x0000.00000000 01/01/1988 00:00:00
resetlogs scn: 0x0000.00000000 01/01/1988 00:00:00
heartbeat: 0 mount id: 0


Offset 0~0 15 表示mask
Offset 1~1 c2 表示blocksize(16384)
Offset 4~4 03 表示No. 3 block
Offset 20~20 02 表示thread status ,1表示线程关闭,2表标线程处于open状态
Offset 32~41 6a000000 9d260000 0000 表示low cache rba:(0x6a.2650.0)
Offset 42~51 0000 6a000000 a8260000 表示on disk rba:(0x6a.266c.0)
Offset 56~59 03291400 表示表示on disk SCN
Offset 72~75 01000000 表示resetlogs scn: 0x0000.00000001

控制文件包含的信息

*** 2019-05-07 11:43:04.818
DUMP OF CONTROL FILES, Seq # 3472 = 0xd90
 V10 STYLE FILE HEADER:
    Compatibility Vsn = 186647552=0xb200400
    Db ID=1534031567=0x5b6f76cf, Db Name='ORCL'
    Activation ID=0=0x0
    Control Seq=3472=0xd90, File size=614=0x266
    File Number=0, Blksiz=16384, File Type=1 CONTROL

DATABASE ENTRY
CHECKPOINT PROGRESS RECORDS
EXTENDED DATABASE ENTRY
REDO THREAD RECORDS
LOG FILE RECORDS
DATA FILE RECORDS
TEMP FILE RECORDS
TABLESPACE RECORDS
RMAN CONFIGURATION RECORDS
FLASHBACK LOGFILE RECORDS
THREAD INSTANCE MAPPING RECORDS
MTTR RECORDS
STANDBY DATABASE MAP RECORDS
RESTORE POINT RECORDS
ACM SERVICE RECORDS
LOG FILE HISTORY RECORDS
OFFLINE RANGE RECORDS
ARCHIVED LOG RECORDS
FOREIGN ARCHIVED LOG RECORDS
BACKUP SET RECORDS
BACKUP PIECE RECORDS
BACKUP DATAFILE RECORDS
BACKUP LOG RECORDS
DATAFILE COPY RECORDS
BACKUP DATAFILE CORRUPTION RECORDS
DATAFILE COPY CORRUPTION RECORDS
DELETION RECORDS
PROXY COPY RECORDS
INCARNATION RECORDS
RMAN STATUS RECORDS
DATAFILE HISTORY RECORDS
NORMAL RESTORE POINT RECORDS
DATABASE BLOCK CORRUPTION RECORDS

#控制文件中有信息些是能覆盖的,有些不能覆盖

***************************************************************************
CHECKPOINT PROGRESS RECORDS
***************************************************************************
 (size = 8180, compat size = 8180, section max = 11, section in-use = 0,
  last-recid= 0, old-recno = 0, last-recno = 0)
 (extent = 1, blkno = 2, numrecs = 11)
THREAD #1 - status:0x2 flags:0x0 dirty:40
low cache rba:(0x68.9513.0) on disk rba:(0x68.954f.0) ##low cache rba 实例崩溃恢复,从这里开始,redo log的地址。on disk rba恢复终点的位置,至少在这个位置。
on disk scn: 0x0000.001353c8 05/07/2019 11:28:41
resetlogs scn: 0x0000.00000001 04/22/2019 10:07:11
heartbeat: 1007532704 mount id: 1535323954
THREAD #2 - status:0x0 flags:0x0 dirty:0
low cache rba:(0x0.0.0) on disk rba:(0x0.0.0)
on disk scn: 0x0000.00000000 01/01/1988 00:00:00
resetlogs scn: 0x0000.000
Control File : Temp File Records
***************************************************************************
TEMP FILE RECORDS
***************************************************************************
 (size = 56, compat size = 56, section max = 100, section in-use = 1,
  last-recid= 1, old-recno = 0, last-recno = 0)
 (extent = 1, blkno = 90, numrecs = 100)
TEMP FILE #1: External File #201 
  name #9: /u01/app/oracle/oradata/orcl/temp01.dbf
creation size=7552 block size=8192 status=0x1e head=9 tail=9 dup=1
 tablespace 3, index=6 krfil=1 prev_file=0
 unrecoverable scn: 0x0000.0011299e 04/29/2019 16:33:33
====
The status field is different from that for permanent files :
0x01 – Created in primary database
0x02 – File is Online
0x04 – Reading is Enabled
0x08 – Changing is Enabled
====
Control File : Tablespace Records
***************************************************************************
TABLESPACE RECORDS
***************************************************************************
 (size = 68, compat size = 68, section max = 100, section in-use = 6,
  last-recid= 1, old-recno = 0, last-recno = 0)
 (extent = 1, blkno = 89, numrecs = 100)
TABLESPACE #0 SYSTEM: recno=1
 First datafile link=1  Tablespace Flag=0
 Tablespace PITR mode start scn: 0x0000.00000000 01/01/1988 00:00:00
 Tablespace PITR last completion scn: 0x0000.00000000 01/01/1988 00:00:00
====
select * from V$TABLESPACE;
select * from v$dbfile;
The first data file link is a pointer to the number of the first data file defined for this tablespace. For
temporary tablespace, this points only to temp files.
The TSPITR records are used to record when tablespace point-in-time recovery operations were
performed on the tablespace.
Starting in 8i, there is a status flag for the tablespace records.
0x01 – Temporary tablespace contains only temp files
====
Control File : RMAN configuration Records
RMAN CONFIGURATION RECORDS
***************************************************************************
 (size = 1108, compat size = 1108, section max = 50, section in-use = 3,
  last-recid= 3, old-recno = 0, last-recno = 0)
 (extent = 1, blkno = 91, numrecs = 50)
RETENTION POLICY:TO RECOVERY WINDOW OF 7 DAYS recno=1
CONTROLFILE AUTOBACKUP:ON recno=2
BACKUP OPTIMIZATION:ON recno=3
====
Low scn= Low SCN of the flashback log
High SCN = Last SCN of the flashback log.
Redo in this log will have SCN > low SCN
====
Control File : Offline Range Records
***************************************************************************
OFFLINE RANGE RECORDS
***************************************************************************
 (size = 200, compat size = 200, section max = 163, section in-use = 0,
  last-recid= 0, old-recno = 0, last-recno = 0)
 (extent = 1, blkno = 96, numrecs = 163)
====
Records are created only when a file is taken offline and then brought back online. This
information can be viewed through V$OFFLINE_RANGE
An offline range is created for a datafile when its tablespace is first altered to be OFFLINE
NORMAL or READ ONLY, and then subsequently altered to be ONLINE or read/write.
Note that no offline range is created if the datafile itself is altered to be OFFLINE or if the
tablespace is altered to be OFFLINE IMMEDIATE.
====
Control File : Database Block Corruption Records
***************************************************************************
DATABASE BLOCK CORRUPTION RECORDS
***************************************************************************
 (size = 80, compat size = 80, section max = 8384, section in-use = 0,
  last-recid= 0, old-recno = 0, last-recno = 0)
 (extent = 1, blkno = 228, numrecs = 8384)
===
Corruption type
KCCBLKCOR_DEL 1 /* record marked as deleted */
KCCBLKCOR_ZER 2 /* zero'ed block range */
KCCBLKCOR_FRA 3 /* fractured block range */
KCCBLKCOR_CHK 4 /* invalid checksum range */
KCCBLKCOR_CRPT 5 /* other media corruption */
KCCBLKCOR_NOLOGGING 6 /* nologging corruption */
KCCBLKCOR_LOGICAL 7 /* logical corruption */
===

问题:

1 数据文件5号文件头offset=1的a2代表什么意思?如何把5号文件的文件头offset=1的值a2变为c2

2 Oracle实例恢复从low cache rba开始恢复,至少恢复到on disk rba请用实验来证明?

3 误操作rm -rf control0*.ctl删除全部控制文件,通过文件描述符对控制文件进行恢复。

1.数据文件5号文件头offset=1的a2代表什么意思?如何把5号文件的文件头offset=1的值a2变为c2(写出详细操作步骤,切不能用BBED修改)
SQL> select * from v$dbfile where file#=5;

     FILE# NAME
---------- --------------------------------------------------
     5 /u01/app/oracle/oradata/dsidb/ts.dbf

BBED> set file 5 block 1
    FILE#              5
    BLOCK#             1

BBED> dump
 File: /u01/app/oracle/oradata/dsidb/ts16k.dbf (5)
 Block: 1                Offsets:    0 to  199           Dba:0x01400001
------------------------------------------------------------------------
 0ba20000 01004001 00000000 00000104 56740000 00000000 0004200b 4edbac96
##

Offset 1~1 a2 表示blocksize(8192)
BBED> set file 5 block 1
    FILE#              5
    BLOCK#             1

BBED> dump
 File: /u01/app/oracle/oradata/orcl/test01.dbf (5)
 Block: 1                Offsets:    0 to  511           Dba:0x01400001
------------------------------------------------------------------------
 0ba20000 01004001 00000000 00000104 2c170000 00000000 0004200b cf766f5b 
 4f52434c 00000000 9c0f0000 00190000 00200000 05000300 00000000 00000000 


2.Oracle实例恢复从low cache rba开始恢复,至少恢复到on disk rba请用实验来证明?
??
3.误操作rm -rf control0*.ctl删除全部控制文件,通过文件描述符对控制文件进行恢复。 ##数据库状态正常 SQL> select open_mode from v$database; OPEN_MODE -------------------- READ WRITE SQL> select name from v$controlfile; ##控制文件位置 NAME -------------------------------------------------------------------------------- /u01/app/oracle/oradata/orcl/control01.ctl /u01/app/oracle/oradata/orcl/control02.ctl ##删除控制文件 [root@DSI orcl]# ll control0* -rw-r----- 1 oracle oinstall 10076160 May 8 16:54 control01.ctl -rw-r----- 1 oracle oinstall 10076160 May 8 16:54 control02.ctl [root@DSI orcl]# rm -rf control0* 由于ckpt进程会打开控制文件,所有可以通过进程ckpt的文件句柄来恢复控制文件 [root@DSI orcl]# ps -ef|grep ckpt oracle 1960 1 0 May06 ? 00:00:20 ora_ckpt_orcl root 17739 2045 0 16:56 pts/1 00:00:00 grep ckpt [root@DSI orcl]# ll -l /proc/1960/fd total 0 lr-x------ 1 oracle oinstall 64 May 8 16:56 0 -> /dev/null l-wx------ 1 oracle oinstall 64 May 8 16:56 1 -> /dev/null lrwx------ 1 oracle oinstall 64 May 8 16:56 10 -> /u01/app/oracle/product/11.2.0/db_1/dbs/lkORCL lr-x------ 1 oracle oinstall 64 May 8 16:56 11 -> /u01/app/oracle/product/11.2.0/db_1/rdbms/mesg/oraus.msb l-wx------ 1 oracle oinstall 64 May 8 16:56 2 -> /dev/null lrwx------ 1 oracle oinstall 64 May 8 16:56 256 -> /u01/app/oracle/oradata/orcl/control01.ctl (deleted) lrwx------ 1 oracle oinstall 64 May 8 16:56 257 -> /u01/app/oracle/oradata/orcl/control02.ctl (deleted) lrwx------ 1 oracle oinstall 64 May 8 16:56 258 -> /u01/app/oracle/oradata/orcl/system01.dbf lrwx------ 1 oracle oinstall 64 May 8 16:56 259 -> /u01/app/oracle/oradata/orcl/sysaux01.dbf lrwx------ 1 oracle oinstall 64 May 8 16:56 260 -> /u01/app/oracle/oradata/orcl/undotbs01.dbf lrwx------ 1 oracle oinstall 64 May 8 16:56 261 -> /u01/app/oracle/oradata/orcl/users01.dbf lrwx------ 1 oracle oinstall 64 May 8 16:56 262 -> /u01/app/oracle/oradata/orcl/test01.dbf lr-x------ 1 oracle oinstall 64 May 8 16:56 3 -> /dev/null lr-x------ 1 oracle oinstall 64 May 8 16:56 4 -> /dev/null lr-x------ 1 oracle oinstall 64 May 8 16:56 5 -> /dev/null lr-x------ 1 oracle oinstall 64 May 8 16:56 6 -> /u01/app/oracle/product/11.2.0/db_1/rdbms/mesg/oraus.msb lr-x------ 1 oracle oinstall 64 May 8 16:56 7 -> /proc/1960/fd lr-x------ 1 oracle oinstall 64 May 8 16:56 8 -> /dev/zero lrwx------ 1 oracle oinstall 64 May 8 16:56 9 -> /u01/app/oracle/product/11.2.0/db_1/dbs/hc_orcl.dat 直接使用操作系统的cp命令,从操作系统级别恢复控制文件 [root@DSI orcl]# cp /proc/1960/fd/256 /u01/app/oracle/oradata/orcl/control01.ctl [root@DSI orcl]# cp /proc/1960/fd/257 /u01/app/oracle/oradata/orcl/control02.ctl 修改权限,由于这里是root操作的 [root@DSI orcl]# chown oracle:oinstall control0* [root@DSI orcl]# ll total 2792184 -rw-r----- 1 oracle oinstall 10076160 May 8 16:57 control01.ctl -rw-r----- 1 oracle oinstall 10076160 May 8 16:57 control02.ctl SQL> shutdown immediate; Database closed. ORA-00210: cannot open the specified control file ORA-00202: control file: '/u01/app/oracle/oradata/orcl/control01.ctl' ORA-27041: unable to open file Linux-x86_64 Error: 13: Permission denied Additional information: 3 SQL> shutdown immediate; ORA-03113: end-of-file on communication channel SQL> select open_mode from v$database; ERROR: ORA-03114: not connected to ORACLE SQL> startup; ORA-24324: service handle not initialized ORA-01041: internal error. hostdef extension doesn't exist SQL> shutdown abort; ORA-24324: service handle not initialized ORA-01041: internal error. hostdef extension doesn't exist SQL> exit Disconnected from Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production With the Partitioning, OLAP, Data Mining and Real Application Testing options [oracle@DSI ~]$ sqlplus / as sysdba SQL*Plus: Release 11.2.0.4.0 Production on Wed May 8 17:02:35 2019 Copyright (c) 1982, 2013, Oracle. All rights reserved. Connected to an idle instance. SQL> shutdown abort; ORACLE instance shut down. SQL> startup; ORACLE instance started. Total System Global Area 784998400 bytes Fixed Size 2257352 bytes Variable Size 511708728 bytes Database Buffers 264241152 bytes Redo Buffers 6791168 bytes Database mounted. Database opened.

猜你喜欢

转载自www.cnblogs.com/yhq1314/p/10833222.html