ORA-4031错误 解决方法
遇到ORA-4031错误时,你的心里会不会发怵?ORA-4031很容易导致数据库出现异常崩溃,当Oracle的核心进程无法获得共享池内存时,它
遇到ORA-4031错误时,你的心里会不会发怵?ORA-4031很容易导致数据库出现异常崩溃,当Oracle的核心进程无法获得共享池内存时,它们会把数据库异常宕掉。当然,ORA-4031就像黄灯一样,它在提醒你需要马上采取紧急策略了。不是说它一出现,数据库马上就会宕机。
话题讨论:
1.ORA-4031是Oracle中最令人厌恶的报错,,它的出现有哪几种原因?
2.一旦出现4031错误,也就是说共享池内存不足的情况下,我们该如何释放内存呢?你有木有遇到过相应的情形呢?请回忆下当时是如何解决的?
3.有一句俗语叫丢车保帅,执行计划是SQL核心关键所在,是否意味着在释放内存时,不应该覆盖执行计划这部分?当执行计划部分占用内存比较多时,如何优化呢?
4.消耗共享池内存的主要有两种对象,一种是SQL,而是存储过程、函数、包等这类可执行对象,当遇到4031错误时,您觉得需要优先释放哪种对象
问题分析:
1、ORA-4031错误的原因,一般是大量的hard parse导致了shared pool中的free list中产生大量的内存小碎片,当一个需要很大内存来进行hard parse的sql语句到来时,无法从free list中找到内存,即使进行内存的释放,还是不能找到符合的内存块。从而报ORA-4031错误。
2. ORA-4031错误的解决方法:
1)alter system flush shared_pool;将shared pool中的所有内存清空。该方法治标不治本。
2)共享SQL语句:规范SQL语句的书写;使用绑定变量;找到没有使用绑定变量的SQL:
如果在结果中发现一系列仅仅字面值不同的SQL,则可以修改cursor_sharing参数:
alter system set cursor_sharing = 'force'; 来强制使用绑定变量。
3)使用shared pool中的保留区:
select request_misses from v$shared_pool_reserved;
如果结果大于0,则可以调大shared_pool_reserved的大小;
SQL> show parameter shared_pool
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
shared_pool_reserved_size big integer 4M
shared_pool_size big integer 0
alter system set shared_pool_reserved=xxM scope=both;
4)使用dbms_shared_pool.keep('对象名')将使用内存很大的对象keep在内存中:
先要执行:@?/rdbms/admin/dbmspool.sql
SQL> @?/rdbms/admin/dbmspool.sql
Package created.
Grant succeeded.
View created.
Package body created.
再查出需要keep的对象:
SQL> select owner,name,namespace,type,sharable_mem from v$db_object_cache where sharable_mem>10000
2 and (type='PACKAGE' or type='PACKAGE BODY' or type='FUNCTION' or type='PROCEDURE') and kept='NO';
OWNER NAME NAMESPACE TYPE SHARABLE_MEM
---------- ------------------------- ------------------ --------------- ------------
SYS DBMS_BACKUP_RESTORE TABLE/PROCEDURE PACKAGE 33215
SYSMAN EMD_COLLECTION BODY PACKAGE BODY 33233
SYS DBMS_SHARED_POOL BODY PACKAGE BODY 12644
SYS SYS$RAWTOANY TABLE/PROCEDURE FUNCTION 12640
SYSMAN EMD_MAINTENANCE TABLE/PROCEDURE PACKAGE 29030
SYSMAN EMD_MAINTENANCE BODY PACKAGE BODY 62930
SYSMAN MGMT_JOB_ENGINE BODY PACKAGE BODY 218914
SYSMAN EM_PING BODY PACKAGE BODY 29086
SYS DBMS_BACKUP_RESTORE BODY PACKAGE BODY 95519
SYSMAN EMD_LOADER TABLE/PROCEDURE PACKAGE 12641
SYSMAN EMD_LOADER BODY PACKAGE BODY 71861
SYS PRVT_HDM BODY PACKAGE BODY 43624
SYSMAN MGMT_JOB_ENGINE TABLE/PROCEDURE PACKAGE 24938
SYS STANDARD BODY PACKAGE BODY 24960
SYSMAN EM_SEVERITY_REPOS BODY PACKAGE BODY 33236
SYS PRVT_ADVISOR TABLE/PROCEDURE PACKAGE 12640
SYSMAN MGMT_GLOBAL TABLE/PROCEDURE PACKAGE 29902
SYS DBMS_STANDARD TABLE/PROCEDURE PACKAGE 24929
SYS DBMS_ADVISOR BODY PACKAGE BODY 25000
SYS PRVT_HDM TABLE/PROCEDURE PACKAGE 16732
SYS PRVT_ADVISOR BODY PACKAGE BODY 66780
SYS DBMS_RCVMAN TABLE/PROCEDURE PACKAGE 43295
SYS STANDARD TABLE/PROCEDURE PACKAGE 438648
SYS DBMS_RCVMAN BODY PACKAGE BODY 375759
24 rows selected.
5)增加shared_pool_size的大小:
SQL> select component,current_size from v$sga_dynamic_components;

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

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

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

苹果公司最新发布的iOS18、iPadOS18以及macOSSequoia系统为Photos应用增添了一项重要功能,旨在帮助用户轻松恢复因各种原因丢失或损坏的照片和视频。这项新功能在Photos应用的"工具"部分引入了一个名为"已恢复"的相册,当用户设备中存在未纳入其照片库的图片或视频时,该相册将自动显示。"已恢复"相册的出现为因数据库损坏、相机应用未正确保存至照片库或第三方应用管理照片库时照片和视频丢失提供了解决方案。用户只需简单几步

如何在PHP中使用MySQLi建立数据库连接:包含MySQLi扩展(require_once)创建连接函数(functionconnect_to_db)调用连接函数($conn=connect_to_db())执行查询($result=$conn->query())关闭连接($conn->close())

PHP中处理数据库连接报错,可以使用以下步骤:使用mysqli_connect_errno()获取错误代码。使用mysqli_connect_error()获取错误消息。通过捕获并记录这些错误信息,可以轻松识别并解决数据库连接问题,确保应用程序的顺畅运行。

在Golang中使用数据库回调函数可以实现:在指定数据库操作完成后执行自定义代码。通过单独的函数添加自定义行为,无需编写额外代码。回调函数可用于插入、更新、删除和查询操作。必须使用sql.Exec、sql.QueryRow或sql.Query函数才能使用回调函数。

如何将GoWebSocket与数据库集成:设置数据库连接:使用database/sql包连接到数据库。将WebSocket消息存储到数据库:使用INSERT语句将消息插入数据库。从数据库检索WebSocket消息:使用SELECT语句检索数据库中的消息。

在C++中使用DataAccessObjects(DAO)库连接和操作数据库,包括建立数据库连接、执行SQL查询、插入新记录和更新现有记录。具体步骤为:1.包含必要的库语句;2.打开数据库文件;3.创建Recordset对象执行SQL查询或操作数据;4.遍历结果或按照具体需求更新记录。

通过Go标准库database/sql包,可以连接到MySQL、PostgreSQL或SQLite等远程数据库:创建包含数据库连接信息的连接字符串。使用sql.Open()函数打开数据库连接。执行SQL查询和插入操作等数据库操作。使用defer关闭数据库连接以释放资源。

PHP连接数据库指南:MySQL:安装MySQLi扩展,创建连接(servername、username、password、dbname)。PostgreSQL:安装PgSQL扩展,创建连接(host、dbname、user、password)。Oracle:安装OracleOCI8扩展,创建连接(servername、username、password)。实战案例:获取MySQL数据、PostgreSQL查询、OracleOCI8更新记录。
