[20210722]資料庫異常關閉的處理.txt

lfree發表於2021-07-22

[20210722]資料庫異常關閉的處理.txt

--//昨天的測試,本來想輸入show recyclebin,沒想到手快使用命令補全輸入shutdown immediate;然後馬上按ctrl+c.
--//我還輸入一些命令還能正常使用.但是退出再次連線出現:

$ rlsql
SQL*Plus: Release 11.2.0.4.0 Production on Wed Jul 21 10:25:47 2021
Copyright (c) 1982, 2013, Oracle.  All rights reserved.
Connected.

SYS@book> show sga
ORA-01012: not logged on
Process ID: 0
Session ID: 0 Serial number: 0
--//已經無法使用,所以講做運維一定要小心.如果關閉生產庫麻煩就大了.
--//檢查alert發現:
Wed Jul 21 10:21:24 2021
Shutting down instance (immediate)
Shutting down instance: further logons disabled
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Stopping background process MMNL
Wed Jul 21 10:21:24 2021
Stopping background process CJQ0
Stopping background process MMON
--//僅僅停止了3個程式.
--//以下我透過測試演示資料庫異常關閉的處理.

1.環境:
SYS@book> @ ver1
PORT_STRING                    VERSION        BANNER
------------------------------ -------------- --------------------------------------------------------------------------------
x86_64/Linux 2.4.xx            11.2.0.4.0     Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production

2.測試:

SYS@book> shutdown immediate
ORA-01013: user requested cancel of current operation

--//執行後馬上按ctrl+c.
--//alert記錄如下:
Thu Jul 22 09:18:13 2021
Shutting down instance (immediate)
Shutting down instance: further logons disabled
Stopping background process MMNL
Thu Jul 22 09:18:13 2021
Stopping background process CJQ0
Stopping background process MMON

--//不退出會話,還可以執行命令.
SYS@book> show sga
Total System Global Area  643084288 bytes
Fixed Size                  2255872 bytes
Variable Size             205521920 bytes
Database Buffers          427819008 bytes
Redo Buffers                7487488 bytes

--//退出會話,然後開啟兩個session,以sys使用者登入,注其它使用者已經無法登入了.
--//在其中一個會話上執行shutdown abort,注shutdown immediate無法正常執行.
--//session 1,sesson 2不要退出.
--//session 1:
SYS@book> shutdown abort
ORACLE instance shut down.

$ ipcs
------ Shared Memory Segments --------
key        shmid      owner      perms      bytes      nattch     status
0x00000000 33456130   oracle    640        12582912   1          dest
0x00000000 33488899   oracle    640        633339904  1          dest
0x00000000 33521668   oracle    640        2097152    1          dest

------ Semaphore Arrays --------
key        semid      owner      perms      nsems

------ Message Queues --------
key        msqid      owner      perms      used-bytes   messages
--//你可以發現還有1個連線attach共享記憶體段.

$ free -m
             total       used       free     shared    buffers     cached
Mem:        129161      39955      89206          0        628      35884
-/+ buffers/cache:       3441     125719
Swap:        30718          0      30718

--//session 1:
SYS@book> startup
ORACLE instance started.
Total System Global Area  643084288 bytes
Fixed Size                  2255872 bytes
Variable Size             205521920 bytes
Database Buffers          427819008 bytes
Redo Buffers                7487488 bytes
Database mounted.
Database opened.

$ free -m
             total       used       free     shared    buffers     cached
Mem:        129161      40466      88695          0        628      35885
-/+ buffers/cache:       3951     125209
Swap:        30718          0      30718

--//使用增加 40466-39955 = 511
$ ipcs
------ Shared Memory Segments --------
key        shmid      owner      perms      bytes      nattch     status
0x00000000 33456130   oracle    640        12582912   1          dest
0x00000000 33488899   oracle    640        633339904  1          dest
0x00000000 33521668   oracle    640        2097152    1          dest
0x00000000 33718277   oracle    640        12582912   23
0x00000000 33751046   oracle    640        633339904  23
0xe8a8ec10 33783815   oracle    640        2097152    23

------ Semaphore Arrays --------
key        semid      owner      perms      nsems
0x6aa88594 23920640   oracle    640        204

------ Message Queues --------
key        msqid      owner      perms      used-bytes   messages

--//可以發現原來的共享記憶體段佔用的記憶體沒有釋放.出現這種情況有一些資料庫甚至無法啟動的情況.感覺11g以後不會出現這種情況,具體看後面的測試.
--//必須釋放前面例項佔用的共享記憶體段,當然我這裡如果session 2退出,就可以釋放.

$ ipcs -t
------ Shared Memory Attach/Detach/Change Times --------
shmid      owner      attached             detached             changed
33456130   oracle      Jul 22 09:22:36      Jul 22 09:22:36      Jul 22 09:15:43
33488899   oracle      Jul 22 09:22:36      Jul 22 09:22:36      Jul 22 09:15:43
33521668   oracle      Jul 22 09:22:36      Jul 22 09:22:36      Jul 22 09:15:43
33718277   oracle      Jul 22 09:40:28      Jul 22 09:40:28      Jul 22 09:25:23
33751046   oracle      Jul 22 09:40:28      Jul 22 09:40:28      Jul 22 09:25:23
33783815   oracle      Jul 22 09:40:28      Jul 22 09:40:28      Jul 22 09:25:23

------ Semaphore Operation/Change Times --------
semid    owner      last-op                    last-changed
23920640 oracle      Thu Jul 22 09:41:59 2021   Thu Jul 22 09:41:59 2021

------ Message Queues Send/Recv/Change Times --------
msqid    owner      send                 recv                 change

--//有點奇怪的是這兩個使用的共享記憶體段的地址是一樣的.
$ pstree -p | grep sqlplus
        |             |-bash(40500)---rlwrap(18044)---sqlplus(18045)---oracle(18047)
        |             `-bash(61211)---rlwrap(18052)---sqlplus(18053)---oracle(18229)

$ cat /proc/18047/maps  | grep SYSV
60000000-60c00000 rw-s 00000000 00:0b 33456130                           /SYSV00000000 (deleted)
60c00000-86800000 rw-s 00000000 00:0b 33488899                           /SYSV00000000 (deleted)
86800000-86a00000 rw-s 00000000 00:0b 33521668                           /SYSVe8a8ec10 (deleted)

$ cat /proc/18229/maps  | grep SYSV
60000000-60c00000 rw-s 00000000 00:0b 33718277                           /SYSV00000000 (deleted)
60c00000-86800000 rw-s 00000000 00:0b 33751046                           /SYSV00000000 (deleted)
86800000-86a00000 rw-s 00000000 00:0b 33783815                           /SYSVe8a8ec10 (deleted)

--//使用ipcrm刪除.
$ ipcs -a | grep "dest *$" | awk '{print $2}' |  xargs -IQ echo ipcrm -m Q
ipcrm -m 33456130
ipcrm -m 33488899
ipcrm -m 33521668

$ ipcs -a | grep "dest *$" | awk '{print $2}' |  xargs -IQ  ipcrm -m Q
$ ipcs

------ Shared Memory Segments --------
key        shmid      owner      perms      bytes      nattch     status
0x00000000 33456130   oracle    640        12582912   1          dest
0x00000000 33488899   oracle    640        633339904  1          dest
0x00000000 33521668   oracle    640        2097152    1          dest
0x00000000 33718277   oracle    640        12582912   25
0x00000000 33751046   oracle    640        633339904  25
0xe8a8ec10 33783815   oracle    640        2097152    25

------ Semaphore Arrays --------
key        semid      owner      perms      nsems
0x6aa88594 23920640   oracle    640        204

------ Message Queues --------
key        msqid      owner      perms      used-bytes   messages

--//你可以發現竟然無法刪除對應共享記憶體段.這也是我昨天遇到的情況.
--//也就是你必須找到shmid= 33456130  33488899 33521668 的程式,kill掉才可以釋放.

# grep "SYSV" /proc/*/maps |  egrep  "33456130|33488899|33521668"
/proc/18047/maps:60000000-60c00000 rw-s 00000000 00:0b 33456130                           /SYSV00000000 (deleted)
/proc/18047/maps:60c00000-86800000 rw-s 00000000 00:0b 33488899                           /SYSV00000000 (deleted)
/proc/18047/maps:86800000-86a00000 rw-s 00000000 00:0b 33521668                           /SYSVe8a8ec10 (deleted)
*/

$ ps -fp 18047
UID        PID  PPID  C STIME TTY          TIME CMD
oracle   18047 18045  0 09:20 ?        00:00:00 oraclebook (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)))

$ kill -9 18047
$ ipcs -a

------ Shared Memory Segments --------
key        shmid      owner      perms      bytes      nattch     status
0x00000000 33718277   oracle    640        12582912   25
0x00000000 33751046   oracle    640        633339904  25
0xe8a8ec10 33783815   oracle    640        2097152    25

------ Semaphore Arrays --------
key        semid      owner      perms      nsems
0x6aa88594 23920640   oracle    640        204

------ Message Queues --------
key        msqid      owner      perms      used-bytes   messages

--//OK.

$ free -m
             total       used       free     shared    buffers     cached
Mem:        129161      40390      88770          0        628      36101
-/+ buffers/cache:       3660     125501
Swap:        30718          0      30718

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/267265/viewspace-2782627/,如需轉載,請註明出處,否則將追究法律責任。

相關文章