AIX系统的非计算内存最大值设置过大导致Oracle数据库有些不能连接上
AIX系统、Oracle数据库以及其监听器都没有做任何的修改,发现连接远程的数据库,有时可以连接上,有时连接不上数据库。
错误描述:
AIX系统、Oracle数据库以及其监听器都没有做任何的修改,发现连接远程的数据库,有时可以连接上,有时连接不上数据库。
1、连接不上数据库时:回报ORA-12537:TNS连接己关闭
2、发现alert_SID.log没有发现错误
3、查看$ORACLE_HOME/network/log/listener.log日志错误如下:
25-MAY-2010 18:54:26 * (CONNECT_DATA=(SERVICE_NAME=testoms)(CID=(PROGRAM=D:\项目资料\plsqldev\plsqldev.exe)(HOST=89587D60816246E)(USER=Administrator))) * (ADDRESS=(PROTOCOL=tcp)(HOST=10.88.22.77)(PORT=4954)) * establish * testoms * 12518
TNS-12518: TNS:listener could not hand off client connection
TNS-12547: TNS:lost contact
TNS-12560: TNS:protocol adapter error
TNS-00517: Lost contact
IBM/AIX RISC System/6000 Error: 32: Broken pipe
原因分析:
连接数据库,有时可以连接,有时连接不上。
用ping数据库ip -t 发现网络很稳定
一般出现上面的ora-12537错误,一般是因为数据库的listener.ora文件没有配置好,导致这样的错误。但没有改变过该文件,,原来连接数据库一直很正常,突然发现有时能连接有时不能连接的现象。
用lsnrct status查看该监听正常。
该库为测试库,尝试了关闭数据库,再启动
>shutdown immediate 关闭正常
但启动时出现下面的错误
SQL> startup
Could not load program oracletestoms:
Could not load module /usr/lib/libperfstat.a(shr_64.o).
Dependent module liblvm.a(shr_64.o) could not be loaded.
Could not load module liblvm.a(shr_64.o).
System error: Not enough space
Could not load module oracle.
Dependent module /usr/lib/libperfstat.a(shr_64.o) could not be loaded.
Could not load module .
ORA-12547: TNS:lost contact
再次启动的错误又不一样:
SQL> startup
ORA-00443: background process "MMAN" did not start
感到这是AIX系统出现的问题,查看下交换空间
omstestdb:/> lsps -a
Page Space Physical Volume Volume Group Size %Used Active Auto Type
Could not load program /usr/bin/sed:
Dependent module libc.a(shr.o) could not be loaded.
Could not load module libc.a(shr.o).
Could not load program /usr/bin/awk:
Dependent module libc.a(shr.o) could not be loaded.
Could not load module libc.a(shr.o).
0517-041 lsps: Cannot list paging space .
提示不能列出交换空间的大小,从这可以知道这是由于AIX的内存耗尽。
用topas查看目前的AIX查看内存及其交换空间的使用情况。
AIX的comp(计算内存)使用了4 GB,而nocomp(非计算内存)也使用了4GB,而交换空间则有很多的空闲。系统总共8GB的内存,而oracle中内存一般使用comp内存。而oracle的缓存则使用nocomp,有很多sql语句一直没有释放,使用了4GB的内存,而AIXnocomp的最大值也为4GB,导致内存不足。
限制AIX的nocomp(非计算)内存最大值。
把AIX的
minperm% = 20
maxclient% = 80
maxperm% = 80
调整更低。
解决步骤:
查看原来的AIX的minperm%、maxclient%、maxperm%的值。如下:
Root用户查看:
>vmo –a
minperm% = 20
maxclient% = 80
maxperm% = 80
把minperm%设置成10,maxclient%设置成20,maxperm%设置成20
用root命令行执行:
1、
vmo -p -o minperm%=10
2、
vmo -p -o maxclient%=20
3、
vmo -p -o maxperm%=20
执行上面的操作,AIX的nocomp还不能释放内存,重启了AIX系统
# reboot
重启之后,重启oracle以及监听器
SQL>startup
$lsnrctl start
启动数据库及其监听器均正常,连接数据库则正常。
备注:
minperm 和 maxperm 参数的值
操作系统通过把在曾经读写的内存页留在实内存一满足不同要求。如果文件页面在它们的页帧被重新分配前被请求,那就节省了输入输出操作。该文件页面可以来自本地的或远程的(如 NFS)系统。
页帧使用的文件相对用于计算的(工作或程序文本)段的文件的比例是松散地受控于 minperm 和 maxperm 的值的:
如果 RAM 中文件页面所占的百分比高于 maxperm,页面替换的窃取只用于文件页。
如果 RAM 中文件页面所占的百分比低于 minperm,页面替换的窃取同时用于文件页和计算页。
如果 RAM 中文件页面所占的百分比介于 minperm 和 maxperm之间,页面替换只窃取文件页,除非文件页的重调入数量大于计算页数。
其中Noncomp在20%-80%之间,此时内存页交换算法通常只交换文件缓存页,但如果文件缓存页的交换率大于程序页时,程序页也同样被交换。由于SGA属于Comp页,数据文件缓存属于Noncomp页,而在数据大量访问时,文件缓存页的交换率大于程序页(SGA),因此大量的SGA页面被交换;为避免大量SGA页被交换,需要降低maxperm%值到35%以下,这样就只有文件缓存页面被交换,减少了SGA交换的次数。

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

oracle查看表屬於哪個表空間的方法:1、使用「SELECT」語句,並透過指定表名來查找指定表所屬的表空間;2、使用Oracle提供的資料庫管理工具來查看表所屬的表空間,這些工具通常提供了圖形介面,使得操作更加直覺和方便;3、在SQL*Plus中,可以透過輸入「DESCRIBEyour_table_name;」命令來查看表所屬的表空間。

如何使用PDO連接到Oracle資料庫概述:PDO(PHPDataObjects)是PHP中一個操作資料庫的擴充庫,它提供了一個統一的API來存取多種類型的資料庫。在本文中,我們將討論如何使用PDO連接到Oracle資料庫,並執行一些常見的資料庫操作。步驟:安裝Oracle資料庫驅動擴充功能在使用PDO連接Oracle資料庫之前,我們需要安裝對應的Oracl

oracle只取一條重複的數據的步驟:1、使用SELECT語句結合GROUP BY和HAVING子句來查找重複數據;2、使用ROWID刪除重複數據,可以確保刪除的是精確的重複數據記錄,或者使用「ROW_NUMBER ()」函數刪除重複數據,這將刪除每組重複資料中的除了第一筆記錄之外的其他記錄;3、使用「select count(*) from」語句傳回刪除記錄數確保結果。

如何使用PHP擴充PDO連接Oracle資料庫導語:PHP是一種非常流行的伺服器端程式語言,而Oracle是一款常用的關係型資料庫管理系統。本文將介紹如何使用PHP擴充PDO(PHPDataObjects)來連接Oracle資料庫。一、安裝PDO_OCI擴充要連接Oracle資料庫,首先需要安裝PDO_OCI擴充。以下是安裝PDO_OCI擴充的步驟:確保

實作PHP和Oracle資料庫的資料匯入在Web開發中,使用PHP作為伺服器端腳本語言可以方便地操作資料庫。 Oracle資料庫作為一種常見的關聯式資料庫管理系統,具備強大的資料儲存與處理能力。本文將介紹如何使用PHP將資料匯入Oracle資料庫中,並給出對應的程式碼範例。首先,我們需要確保已經安裝了PHP和Oracle資料庫,並且已經配置了PHP對Orac

oracle資料庫需要jdk,原因是:1、使用特定的軟體或功能時需要包含在JDK中的其他軟體或函式庫;2、需要安裝Java JDK才能在Oracle資料庫中執行Java程式;3、JDK提供了開發和編譯Java應用程式的功能;4、滿足Oracle對Java函數的要求,以幫助實現和實現特定功能。

oracle查詢表空間大小步驟:1.使用資料庫管理員帳號登入Oracle資料庫;2、使用「SELECT」語句來查看空間清單;3、查詢表空間大小有3種方法:使用dbms_utility包查詢、使用dba_segments視圖查詢、使用dba_data_files檢視查詢;4、使用「DBMS_OUTPUT.PUT_LINE」函數或其他顯示結果的方法來顯示查詢結果。

如何有效率地使用PHP和Oracle資料庫的連接池引言:在開發PHP應用程式時,使用資料庫是不可或缺的一部分。而在與Oracle資料庫互動時,連接池的使用對於提高應用程式的效能和效率至關重要。本文將介紹如何在PHP中有效地使用Oracle資料庫連接池,並提供對應的程式碼範例。一、連接池的概念及優勢連接池是一種管理資料庫連接的技術,它透過事先創建一批連接並維護一個
