Part1問(wèn)題定位
數(shù)據(jù)庫(kù)因?yàn)楫惓jP(guān)閉,無(wú)法啟動(dòng),報(bào)錯(cuò)ora-01102。
Part2問(wèn)題解決
1清理問(wèn)題鎖文件
查找鎖文件:
find $ORACLE_HOME/dbs -name "lk*"
find $ORACLE_HOME/dbs -name ".dblink*"
刪除鎖文件:
rm -f $ORACLE_HOME/dbs/lk<SID>
rm -f $ORACLE_HOME/dbs/.dblink<SID>
根據(jù)業(yè)務(wù)人員的溝通,他們說(shuō)已經(jīng)清理了相關(guān)文件,但是還是無(wú)法啟動(dòng),再還需要處理數(shù)據(jù)庫(kù)實(shí)例涉及的共享內(nèi)存和信號(hào)量時(shí),因?yàn)槭嵌鄬?shí)例,不敢確定實(shí)例對(duì)應(yīng)的使用信息,所以卡在這,其他實(shí)例使用的業(yè)務(wù)用戶(hù)也不讓重啟數(shù)據(jù)庫(kù)和服務(wù)器,卡在這無(wú)法操作。
2清理共享內(nèi)存和信號(hào)量
因?yàn)楫?dāng)時(shí)處理比較著急,這個(gè)是后續(xù)在自己實(shí)驗(yàn)環(huán)境搭建和復(fù)現(xiàn)的。
檢查數(shù)據(jù)庫(kù)的實(shí)例,分別是orcl和test
[oracle ]$ ps -ef| grep smon | grep -v grep
oracle 4113 1 0 12:21 ? 00:00:00 ora_smon_orcl
oracle 23664 1 0 Jul23 ? 00:00:05 ora_smon_test
查看多實(shí)例分配的信息
[oracle ]$ ipcs -a
------ Message Queues --------
key msqid owner perms used-bytes messages
------ Shared Memory Segments --------
key shmid owner perms bytes nattch status
0x00000000 9 oracle 640 33554432 17
0x00000000 10 oracle 640 4966055936 17
0x4568630c 11 oracle 640 2097152 17
0x00000000 17 oracle 640 33554432 25
0x00000000 18 oracle 640 4966055936 25
0xd5cbea68 19 oracle 640 2097152 25
#以上是共享內(nèi)存段
------ Semaphore Arrays --------
key semid owner perms nsems
0x662f7600 14 oracle 640 154
0x860e1920 34 oracle 640 154
#以上是信號(hào)量
確定數(shù)據(jù)庫(kù)實(shí)例對(duì)應(yīng)的共享內(nèi)存段和信號(hào)量
[oracle ]$ sysresv -l orcl test
IPC Resources for ORACLE_SID "orcl" : ————數(shù)據(jù)庫(kù)實(shí)例orcl
Shared Memory: ————數(shù)據(jù)庫(kù)實(shí)例orcl占用的共享內(nèi)存
ID KEY
17 0x00000000
18 0x00000000
19 0xd5cbea68
Semaphores: ————數(shù)據(jù)庫(kù)實(shí)例orcl占用的信號(hào)量
ID KEY
34 0x860e1920
Oracle Instance alive for sid "orcl"
IPC Resources for ORACLE_SID "test" :————數(shù)據(jù)庫(kù)實(shí)例test
Shared Memory: ————數(shù)據(jù)庫(kù)實(shí)例test占用的共享內(nèi)存
ID KEY
9 0x00000000
10 0x00000000
11 0x4568630c
Semaphores:
ID KEY
14 0x662f7600 ————數(shù)據(jù)庫(kù)實(shí)例test占用的信號(hào)量
Oracle Instance alive for sid "test"
sysresv是oracle處理異常數(shù)據(jù)庫(kù)的一種清理方式
但是不會(huì)刪除正常實(shí)例的共享內(nèi)存和信號(hào)量
[oracle ]$ sysresv -f orcl
IPC Resources for ORACLE_SID "orcl" :
Shared Memory:
ID KEY
17 0x00000000
18 0x00000000
19 0xd5cbea68
Semaphores:
ID KEY
34 0x860e1920
Oracle Instance alive for sid "orcl"
SYSRESV-005: Warning
Instance maybe alive - aborting remove for sid "orcl"
系統(tǒng)錯(cuò)誤 - 005:警告
該實(shí)例可能仍在運(yùn)行 - 正在停止刪除操作,針對(duì)的 SID 為“orcl”
清理數(shù)據(jù)庫(kù)實(shí)例的辦法
ipcrm -m ID (移除共享內(nèi)存進(jìn)程)
ipcrm -s ID (移除信號(hào)量)
干掉orcl實(shí)例的方法和順序
##干掉共享內(nèi)存
ipcrm -m 17
ipcrm -m 18
ipcrm -m 19
##干掉信號(hào)量
ipcrm -s 24
再啟動(dòng)數(shù)據(jù)庫(kù)就沒(méi)問(wèn)題了
Part3相關(guān)命令
ipcs命令用于報(bào)告Linux中進(jìn)程間通信設(shè)施的狀態(tài),顯示的信息包括消息列表、共享內(nèi)存和信號(hào)量的信息。
##顯示具體參數(shù)
ipcs -h
##顯示所有的ipcs信息
ipcs -a
##顯示所有的信號(hào)量
ipcs -s
##顯示所有的信號(hào)量共享內(nèi)存
ipcs -m
##顯示所有的資源限制
ipcs -m -l
------ Shared Memory Limits --------
max number of segments = 4096
max seg size (kbytes) = 16265871
max total shared memory (kbytes) = 16265872
min seg size (bytes) = 1
key
shmid:表示共享內(nèi)存段ID
owner:表示共享內(nèi)存段屬于哪個(gè)用戶(hù),默認(rèn)值是640,這表示除了root和oracle用戶(hù)以外不允許其他用戶(hù)修改或者查看
perms:
bytes:表示共享內(nèi)存段的大小
nattch:表示連接到共享內(nèi)存段的進(jìn)程數(shù)
status:表示共享內(nèi)存段的狀態(tài),dest表示該內(nèi)存段被標(biāo)記為destroyed狀態(tài)
驗(yàn)證共享內(nèi)存和sga之間的關(guān)系,但是做的數(shù)值比對(duì)好像不一致
SQL> show parameter sga
NAME TYPE VALUE
------------- ----------- -----------
sga_max_size big integer 4768M
sga_target big integer 4768M
################################################
[oracle ]$ sysresv -l orcl
IPC Resources for ORACLE_SID "orcl" :
Shared Memory:
ID KEY
17 0x00000000
18 0x00000000
19 0xd5cbea68
Semaphores:
ID KEY
34 0x860e1920
Oracle Instance alive for sid "orcl"
################################################
[oracle]$ ipcs -m
------ Shared Memory Segments --------
key shmid owner perms bytes nattch status
0x00000000 17 oracle 640 33554432 23
0x00000000 18 oracle 640 4966055936 23
0xd5cbea68 19 oracle 640 2097152 23
33554432 / 1024 /1024 = 32M
4966055936 / 1024 /1024 = 4,736M
2097152 / 1024 /1024 = 2M
好像不一樣? 數(shù)據(jù)庫(kù)sga參數(shù)和 ipcs的加起來(lái)不一樣 共享內(nèi)存到了峰值才會(huì)創(chuàng)建新的,為什么我的這三個(gè)共享內(nèi)存段看起來(lái)不是這樣
答案: SGA和PGA都是用懶算法 不是上來(lái)直接劃分內(nèi)存 而是不夠了才去借用 但是最大只能用到你給他的的最大共享內(nèi)存。 段會(huì)有超分的情況
Part4原理解析
驗(yàn)證了一句話(huà):數(shù)據(jù)庫(kù)實(shí)例是內(nèi)存和后臺(tái)進(jìn)程的組合。




