show param..."/>
溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

oracle的控制文件深入理解(一)

發(fā)布時(shí)間:2020-08-14 19:59:04 來源:ITPUB博客 閱讀:170 作者:波仔strong 欄目:關(guān)系型數(shù)據(jù)庫

Oraclecontrol文件

這里我們要實(shí)驗(yàn)的是數(shù)據(jù)庫在open的狀態(tài)下,破快控制文件,數(shù)據(jù)庫會不會down

 

查看controlfiles的路徑

SQL> show parameter control_files

 

NAME                          TYPE                  VALUE

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

control_files               string                   /u01/app/oracle/oradata/orcl/control01.ctl, /u01/app/oracle/fast_recovery_area/orcl/control02.ctl

 

破壞控制文件

[oracle@togogo ~]$ cat /dev/null > /u01/app/oracle/oradata/orcl/control01.ctl

[oracle@togogo ~]$ cat /dev/null > /u01/app/oracle/fast_recovery_area/orcl/control02.ctl

 

驗(yàn)證數(shù)據(jù)庫的狀態(tài)

SQL> select * from dual;

 

D

-

X

 

#### 做檢查點(diǎn),切換redo log

 SQL> alter system checkpoint;

 System altered.

 

 SQL> alter system switch logfile;

 System altered.

 

 SQL> alter system switch logfile;

 System altered.

 

  #### check alert log

 

Sat Feb 10 20:09:55 2018

Thread 1 cannot allocate new log, sequence 8

Private strand flush not complete

  Current log# 1 seq# 7 mem# 0: /u01/app/oracle/oradata/orcl/redo01.log

Thread 1 advanced to log sequence 8 (LGWR switch)

  Current log# 2 seq# 8 mem# 0: /u01/app/oracle/oradata/orcl/redo02.log

Sat Feb 10 20:10:19 2018

Thread 1 cannot allocate new log, sequence 9

Private strand flush not complete

  Current log# 2 seq# 8 mem# 0: /u01/app/oracle/oradata/orcl/redo02.log

Thread 1 advanced to log sequence 9 (LGWR switch)

  Current log# 3 seq# 9 mem# 0: /u01/app/oracle/oradata/orcl/redo03.log

Thread 1 cannot allocate new log, sequence 10

Checkpoint not complete

  Current log# 3 seq# 9 mem# 0: /u01/app/oracle/oradata/orcl/redo03.log

Thread 1 cannot allocate new log, sequence 10

Private strand flush not complete

  Current log# 3 seq# 9 mem# 0: /u01/app/oracle/oradata/orcl/redo03.log

Thread 1 advanced to log sequence 10 (LGWR switch)

  Current log# 1 seq# 10 mem# 0: /u01/app/oracle/oradata/orcl/redo01.log

 

 

這是為什么呢?那是因?yàn)槠溥M(jìn)程持有的句柄并有釋放,如下

[oracle@togogo ~]$ ps -ef|grep ckpt|grep -v grep

oracle    8427     1  0 19:47 ?        00:00:00 ora_ckpt_orcl

[oracle@togogo ~]$ cd /proc/8427/fd

[oracle@togogo fd]$  ls -ltr |grep control

lrwx------ 1 oracle oinstall 64 Feb 10 20:09 257 -> /u01/app/oracle/fast_recovery_area/orcl/control02.ctl

lrwx------ 1 oracle oinstall 64 Feb 10 20:09 256 -> /u01/app/oracle/oradata/orcl/control01.ctl

 

#### session 1 trace跟蹤

 

這里說一個命令 strace

 

舉一個例子

strace -o output.txt -T -tt -e trace=all -p 28979

上面的含義是 跟蹤28979進(jìn)程的所有系統(tǒng)調(diào)用(-e trace=all),并統(tǒng)計(jì)系統(tǒng)調(diào)用的花費(fèi)時(shí)間,以及開始時(shí)間(并以可視化的時(shí)分秒格式顯示),最后將記錄結(jié)果存在output.txt文件里面

 

[oracle@togogo fd]$ strace -fr -o /tmp/8427.log -p 8427

Process 8427 attached - interrupt to quit

 

####觀察trace.log

 

8427       0.000156 gettimeofday({1518265363, 443228}, NULL) = 0

8427       0.000176 gettimeofday({1518265543, 106769}, NULL) = 0

8427       0.000077 gettimeofday({1518265543, 106845}, NULL) = 0

8427       0.000072 gettimeofday({1518265543, 106917}, NULL) = 0

8427       0.000077 pwrite64(256, "\25\302\0\0\3\0\0\0\0\0\0\0\0\0\1\4\312T\0\0\2\0\0\0\0\0\0\0Q\0\0\0"..., 16384, 49152) = 16384

8427       0.006462 gettimeofday({1518265543, 113463}, NULL) = 0

8427       0.000089 gettimeofday({1518265543, 113548}, NULL) = 0

8427       0.000080 pwrite64(257, "\25\302\0\0\3\0\0\0\0\0\0\0\0\0\1\4\312T\0\0\2\0\0\0\0\0\0\0Q\0\0\0"..., 16384, 49152) = 16384

8427       0.000734 gettimeofday({1518265543, 114364}, NULL) = 0

8427       0.000081 gettimeofday({1518265543, 114443}, NULL) = 0

8427       0.000081 gettimeofday({1518265543, 114525}, NULL) = 0

8427       0.000078 gettimeofday({1518265543, 114603}, NULL) = 0

8427       0.000211 gettimeofday({1518265543, 114816}, NULL) = 0

8427       0.000080 gettimeofday({1518265543, 114891}, NULL) = 0

8427       0.000081 pread64(256, "\25\302\0\0\1\0\0\0\0\0\0\0\0\0\1\4r\t\0\0\0\0\0\0\0\0 \v\373M\21Y"..., 16384, 16384) = 16384

這的 256 257 是表示的是文件描述符 FD file discription

16384是表示一個塊的大小

49152是表示偏移量

 

通過以上可以得到結(jié)論

1. 進(jìn)程信息可以在/proc下看到,例如: /proc/8427/stat

2. 對于linux,對于文件的讀寫,是通過調(diào)用函數(shù)read,pwrite64 來實(shí)現(xiàn)的。

3. 我們可以發(fā)現(xiàn)檢查點(diǎn)進(jìn)程ckpt 3s觸發(fā)一次的機(jī)制。

4. 對于pwrite64的操作,是通過寫fd 256.2572個文件來完成的,其中對應(yīng)的offset都是49152,且我們知道這3個被寫入的文件      (我們知道是controlfile) block大小是16384.

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI