一則資料庫無法重啟的案例分析(r8筆記第96天)
阿新 • • 發佈:2022-05-04
今天一個開發的同事找到我,說有個問題想諮詢一下我,突然想起他昨天讓我幫他處理一個工單,他這麼一問我才想起來還沒做,結果他說是另外一件事,說有個開 發測試的環境,資料庫報04031的錯誤,想讓我幫忙看看是怎麼回事,這種問題剛好就找對了。首先開發測試環境,訪問量不高,業務量不大,環境也要簡單很 多,出現這個問題,讓我能夠唯一覺得可能的原因就是sga設定太小了。當然帶著這個想法也讓另外一個同事去現場看看問題,如果問題確實要複雜一些,那我們 再採取其它的措施,當然解決不了問題也沒關係,權當是給新同事的一次歷練吧。
然後很快從同事那裡得到了反饋,說調整了sga為200M之後資料庫貌似起不來了。如果是這樣的情況,也是意料之中,報錯資訊是:
ORA-27102: out of memory
Linux-x86_64 Error: 12: Cannot allocate memory
ORA-27102: out of memory
Linux-x86_64 Error: 28: No space left on device
那麼和核心引數shmall和shmmax關聯要大一些,而目前的是 Linux-x86_64 Error: 12: Cannot allocate memory其實另有原因,但是當時也沒有多想。
就讓同事繼續提供free -m的結果
[oracle@dev_mobileBI dbs]$ free -m
total used free shared buffers cached
Mem: 5709 4762 946 0 39 3365
核心引數的值如下:
kernel.shmmax = 2147483648
kernel.shmall = 536870912
mbidev.__oracle_base='/home/U01/app/oracle'#ORACLE_BASE set from environment
*.audit_file_dest='/home/U01/app/oracle/admin/mbidev/adump'
*.audit_trail='db'
*.compatible='11.2.0.0.0'
*.control_files='/home/U01/app/oracle/oradata/mbidev/control01.ctl',/oradata/mbidev/control03.ctl'
*.db_block_size=8192
*.db_domain=''
*.db_name='mbidev'
*.db_recovery_file_dest='/home/U01/app/oracle/fast_recovery_area'
*.db_recovery_file_dest_size=10737418240
*.diagnostic_dest='/home/U01/app/oracle'
*.dispatchers='(PROTOCOL=TCP) (SERVICE=mbidevXDB)'
*.lock_sga=TRUE
*.open_cursors=300
*.pre_page_sga=TRUE
*.processes=300
*.remote_login_passwordfile='EXCLUSIVE'
*.undo_tablespace='UNDOTBS1'
$ ulimit -a|grep lock
max locked memory (kbytes, -l) unlimited
file locks (-x) unlimited
比如對oracle使用者設定較高的資源使用許可權。
oracle soft memlock unlimited
oracle hard memlock unlimited
這個時候設定lock_sga和pre_page_sga為true,啟動就沒有任何問題了,不過確實能夠明顯感受到啟動的時候還是很遲緩的。這兩個引數在有些優化場景中還是有一席之地,但是相對來說使用範圍還是有限。