[20210722]資料庫異常關閉的處理.txt
[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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- [20200309]資料庫異常關閉恢復的終點.txt資料庫
- 資料庫連線異常處理思路資料庫
- springboot統一異常處理及返回資料的處理Spring Boot
- Sqoop匯入資料異常處理OOP
- 異常的處理
- 異常-throws的方式處理異常
- 異常篇——異常處理
- 異常處理
- JSP 異常處理如何處理?JS
- 異常錯誤資訊處理
- React 異常處理React
- JS異常處理JS
- oracle異常處理Oracle
- Python——異常處理Python
- Python異常處理Python
- ThinkPHP 異常處理PHP
- JavaScript 異常處理JavaScript
- JAVA 異常處理Java
- golang - 異常處理Golang
- 異常處理2
- 異常處理1
- Java 異常處理Java
- Abp 異常處理
- JAVA異常處理Java
- 08、異常處理
- SpringMVC異常處理SpringMVC
- 異常處理及其相關知識點
- springBoot資料校驗與統一異常處理Spring Boot
- 異常處理機制(二)之異常處理與捕獲
- 異常-try...catch的方式處理異常1
- 異常-try...catch的方式處理異常2
- Java 異常表與異常處理原理Java
- restframework 異常處理及自定義異常RESTFramework
- springboot下新增全域性異常處理和自定義異常處理Spring Boot
- 從原始碼解析 Spring 資料庫異常抽理原始碼Spring資料庫
- 優雅的處理Spring Boot異常資訊Spring Boot
- NodeJS之異常處理NodeJS
- JAVA_異常處理Java