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 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

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 データベースに接続する前に、対応する Oracle をインストールする必要があります

Oracle が重複データを 1 つだけフェッチする手順: 1. SELECT ステートメントを GROUP BY および HAVING 句と組み合わせて使用し、重複データを検索します。 2. ROWID を使用して重複データを削除し、正確な重複データ レコードが削除されるようにします。重複データを削除するには、「ROW_NUMBER」() 関数を使用します。これにより、重複データの各セットの最初のレコードを除くすべてのレコードが削除されます。 3. 「select count(*) from」ステートメントを使用して、削除されたレコードの数を返します。結果を保証します。

PHP を使用して PDO を拡張し、Oracle データベースに接続する方法 はじめに: PHP は非常に人気のあるサーバー側プログラミング言語であり、Oracle は一般的に使用されるリレーショナル データベース管理システムです。この記事では、PHP 拡張機能 PDO (PHPDataObjects) を使用して Oracle データベースに接続する方法を紹介します。 1. PDO_OCI 拡張機能のインストール Oracle データベースに接続するには、まず PDO_OCI 拡張機能をインストールする必要があります。 PDO_OCI 拡張機能をインストールする手順は次のとおりです。

PHP および Oracle データベースへのデータ インポートの実装 Web 開発では、サーバー側のスクリプト言語として PHP を使用すると、データベースを便利に操作できます。一般的なリレーショナル データベース管理システムとして、Oracle データベースは強力なデータ ストレージ機能と処理機能を備えています。この記事では、PHP を使用して Oracle データベースにデータをインポートする方法と、対応するコード例を紹介します。まず、PHP と Oracle データベースがインストールされていること、および PHP が次のように構成されていることを確認する必要があります。

PHP および Oracle データベースで接続プーリングを効率的に使用する方法 はじめに: PHP アプリケーションを開発する場合、データベースの使用は不可欠な部分です。 Oracle データベースと対話する場合、アプリケーションのパフォーマンスと効率を向上させるには接続プールの使用が重要です。この記事では、PHP で Oracle データベース接続プールを効率的に使用する方法と、対応するコード例を紹介します。 1. コネクションプーリングの概念とメリット コネクションプーリングとは、データベースのコネクションを管理する技術で、あらかじめコネクションをまとめて作成し、コネクションを維持します。

oracle データベースには jdk が必要です。その理由は、1. 特定のソフトウェアや機能を使用する場合、JDK に含まれる他のソフトウェアやライブラリが必要であること、2. Oracle データベースで Java プログラムを実行するには Java JDK をインストールする必要があること、3. JDK であることです。 Java アプリケーション関数の開発とコンパイルを提供します。 4. 特定の関数の実装と実装に役立つ Java 関数に対する Oracle の要件を満たします。

Oracle でテーブル スペース サイズをクエリする手順: 1. データベース管理者アカウントを使用して Oracle データベースにログインします; 2. 「SELECT」ステートメントを使用してスペース リストを表示します; 3. テーブル スペース サイズをクエリするには 3 つの方法があります: dbms_utility パッケージを使用してクエリを実行し、dba_segments ビュー クエリを使用して、dba_data_files ビュー クエリを使用します; 4. 「DBMS_OUTPUT.PUT_LINE」関数またはその他のメソッドを使用して結果を表示し、クエリ結果を表示します。
