Oracle 18c bug 执行 DBMS_PDB.CHECK_PLUG_COMPATIBILITY报错

Oracle 18c bug 执行 DBMS_PDB.CHECK_PLUG_COMPATIBILITY 报ORA-7445[__intel_ssse3_rep_memcpy()]的解决方法


icon_rar.gif p28502403_183000DBRU_Linux-x86-64.zip


在Oracle 18c 插入PDB时需要进行兼容性检查,在执行DBMS_PDB.CHECK_PLUG_COMPATIBILITY时会报ORA-07445: exception encountered: core dump [__intel_ssse3_rep_memcpy()+6461]的错误,如下:

[dave@www.cndba.cn admin]$ sqlplus / as sysdba
SQL*Plus: Release 18.0.0.0.0 - Production on Thu Oct 25 11:52:34 2018
Version 18.3.0.0.0
Copyright (c) 1982, 2018, Oracle.  All rights reserved.
Connected to:
Oracle Database 18c Enterprise Edition Release 18.0.0.0.0 - Production
Version 18.3.0.0.0
SQL> select banner from v$version;
BANNER
--------------------------------------------------------------------------------
Oracle Database 18c Enterprise Edition Release 18.0.0.0.0 - Production
SQL> SET SERVEROUTPUT ON  
DECLARE  
  compatible CONSTANT VARCHAR2(3) :=   
    CASE DBMS_PDB.CHECK_PLUG_COMPATIBILITY(  
           pdb_descr_file => '/opt/oracle/oradata/ORCLCDB/dave/dave.xml',  
           pdb_name       => 'dave')  
    WHEN TRUE THEN 'YES'  
    ELSE 'NO'  
END;  
BEGIN  
  DBMS_OUTPUT.PUT_LINE(compatible);  
END;  
/  
SQL>   2    3    4    5    6    7    8    9   10   11   12  
ERROR:
ORA-03114: not connected to ORACLE
DECLARE
*
ERROR at line 1:
ORA-03113: end-of-file on communication channel
Process ID: 2748
Session ID: 1 Serial number: 37812

查看log 日志:

2018-10-25T11:10:15.262580+08:00
Exception [type: SIGSEGV, Invalid permissions for mapped object] [ADDR:0x7F6B69AF5000] [PC:0x6E46EED, __intel_ssse3_rep_memcpy()+6461] [flags: 0x0, count: 1]
Errors in file /opt/oracle/diag/rdbms/orclcdb/ORCLCDB/trace/ORCLCDB_ora_2123.trc  (incident=19481) (PDBNAME=CDB$ROOT):
ORA-07445: exception encountered: core dump [__intel_ssse3_rep_memcpy()+6461] [SIGSEGV] [ADDR:0x7F6B69AF5000] [PC:0x6E46EED] [Invalid permissions for mapped object] []
Incident details in: /opt/oracle/diag/rdbms/orclcdb/ORCLCDB/incident/incdir_19481/ORCLCDB_ora_2123_i19481.trc
Use ADRCI or Support Workbench to package the incident.
See Note 411.1 at My Oracle Support for error and packaging details.
Exception [type: SIGSEGV, SI_KERNEL(general_protection)] [ADDR:0x0] [PC:0x112C4711, pfrtcs()+65] [flags: 0x0, count: 2]
Errors in file /opt/oracle/diag/rdbms/orclcdb/ORCLCDB/trace/ORCLCDB_ora_2123.trc  (incident=19482) (PDBNAME=CDB$ROOT):
ORA-07445: exception encountered: core dump [pfrtcs()+65] [SIGSEGV] [ADDR:0x0] [PC:0x112C4711] [SI_KERNEL(general_protection)] []
ORA-07445: exception encountered: core dump [__intel_ssse3_rep_memcpy()+6461] [SIGSEGV] [ADDR:0x7F6B69AF5000] [PC:0x6E46EED] [Invalid permissions for mapped object] []
Incident details in: /opt/oracle/diag/rdbms/orclcdb/ORCLCDB/incident/incdir_19482/ORCLCDB_ora_2123_i19482.trc
Use ADRCI or Support Workbench to package the incident.
See Note 411.1 at My Oracle Support for error and packaging details.

根据MOS 文档说明,这里是Oracle 18c 的bug:

DBMS_PDB.CHECK_PLUG_COMPATIBILITY = ORA-3113 / ORA-7445[__intel_ssse3_rep_memcpy()+6429] (文档 ID 2446450.1)

解决方法就是升级到19.1 或者打Patch 28502403 ,我们这里选择打补丁:

[dave@www.cndba.cn tmp]$ unzip p28502403_183000DBRU_Linux-x86-64.zip 
Archive:  p28502403_183000DBRU_Linux-x86-64.zip
   creating: 28502403/
  inflating: 28502403/README.txt     
   creating: 28502403/files/
   creating: 28502403/files/lib/
   creating: 28502403/files/lib/libserver18.a/
  inflating: 28502403/files/lib/libserver18.a/kpdbe.o  
   creating: 28502403/etc/
   creating: 28502403/etc/config/
  inflating: 28502403/etc/config/actions.xml  
  inflating: 28502403/etc/config/inventory.xml  
  inflating: PatchSearch.xml         
[dave@www.cndba.cn tmp]$ cd 28502403/
[dave@www.cndba.cn 28502403]$ ls
etc  files  README.txt
[dave@www.cndba.cn 28502403]$  $ORACLE_HOME/OPatch/opatch apply
Oracle Interim Patch Installer version 12.2.0.1.14
Copyright (c) 2018, Oracle Corporation.  All rights reserved.
Oracle Home       : /opt/oracle/product/18c/dbhome_1
Central Inventory : /opt/oracle/oraInventory
   from           : /opt/oracle/product/18c/dbhome_1/oraInst.loc
OPatch version    : 12.2.0.1.14
OUI version       : 12.2.0.4.0
Log file location : /opt/oracle/product/18c/dbhome_1/cfgtoollogs/opatch/opatch2018-10-25_11-28-32AM_1.log
Verifying environment and performing prerequisite checks...
Prerequisite check "CheckActiveFilesAndExecutables" failed.
The details are:
Following executables are active :
/opt/oracle/product/18c/dbhome_1/bin/oracle
UtilSession failed: Prerequisite check "CheckActiveFilesAndExecutables" failed.
Log file location: /opt/oracle/product/18c/dbhome_1/cfgtoollogs/opatch/opatch2018-10-25_11-28-32AM_1.log
OPatch failed with error code 73
[dave@www.cndba.cn 28502403]$

补丁报错,查看日志:

[Oct 25, 2018 11:28:38 AM] [INFO]   Files in use by a process: /opt/oracle/product/18c/dbhome_1/bin/oracle PID(  2665 2667 2669 2671 2675 2677 2684 2687 2690 2693 2695 2700 2702 2704 2706 2
708 2710 2712 2714 2716 2718 2720 2722 2724 2728 2730 2733 2735 2737 2742 2744 2750 2752 2754 2756 2758 2760 2762 2770 2777 2782 2784 2803 2996 3003 3017 3021 3023 3039 3850 )
[Oct 25, 2018 11:28:38 AM] [INFO]   Following executables are active :
                                    /opt/oracle/product/18c/dbhome_1/bin/oracle
[Oct 25, 2018 11:28:38 AM] [INFO]   Prerequisite check "CheckActiveFilesAndExecutables" failed.
                                    The details are:

数据库在使用,关闭数据库和监听后,在打正常:

[dave@www.cndba.cn 28502403]$  $ORACLE_HOME/OPatch/opatch apply
Oracle Interim Patch Installer version 12.2.0.1.14
Copyright (c) 2018, Oracle Corporation.  All rights reserved.
Oracle Home       : /opt/oracle/product/18c/dbhome_1
Central Inventory : /opt/oracle/oraInventory
   from           : /opt/oracle/product/18c/dbhome_1/oraInst.loc
OPatch version    : 12.2.0.1.14
OUI version       : 12.2.0.4.0
Log file location : /opt/oracle/product/18c/dbhome_1/cfgtoollogs/opatch/opatch2018-10-25_11-34-28AM_1.log
Verifying environment and performing prerequisite checks...
OPatch continues with these patches:   28502403  
Do you want to proceed? [y|n]
y
User Responded with: Y
All checks passed.
Please shutdown Oracle instances running out of this ORACLE_HOME on the local system.
(Oracle Home = '/opt/oracle/product/18c/dbhome_1')
Is the local system ready for patching? [y|n]
y
User Responded with: Y
Backing up files...
Applying interim patch '28502403' to OH '/opt/oracle/product/18c/dbhome_1'
Patching component oracle.rdbms, 18.0.0.0.0...
Patch 28502403 successfully applied.
Log file location: /opt/oracle/product/18c/dbhome_1/cfgtoollogs/opatch/opatch2018-10-25_11-34-28AM_1.log
OPatch succeeded.
[dave@www.cndba.cn 28502403]$

打完补丁后函数也正常执行:

SQL> SET SERVEROUTPUT ON  
DECLARE  
  compatible CONSTANT VARCHAR2(3) :=   
    CASE DBMS_PDB.CHECK_PLUG_COMPATIBILITY(  
           pdb_descr_file => '/opt/oracle/oradata/ORCLCDB/dave/dave.xml',  
           pdb_name       => 'dave')  
    WHEN TRUE THEN 'YES'  
    ELSE 'NO'  
END;  
BEGIN  
  DBMS_OUTPUT.PUT_LINE(compatible);  
END;  
/  
SQL>   2    3    4    5    6    7    8    9   10   11   12  NO
PL/SQL procedure successfully completed.





About Me

........................................................................................................................

● 本文作者:小麦苗,部分内容整理自网络,若有侵权请联系小麦苗删除

● 本文在itpub、博客园、CSDN和个人微 信公众号( xiaomaimiaolhr )上有同步更新

● 本文itpub地址: http://blog.itpub.net/26736162

● 本文博客园地址: http://www.cnblogs.com/lhrbest

● 本文CSDN地址: https://blog.csdn.net/lihuarongaini

● 本文pdf版、个人简介及小麦苗云盘地址: http://blog.itpub.net/26736162/viewspace-1624453/

● 数据库笔试面试题库及解答: http://blog.itpub.net/26736162/viewspace-2134706/

● DBA宝典今日头条号地址: http://www.toutiao.com/c/user/6401772890/#mid=1564638659405826

........................................................................................................................

● QQ群号: 230161599 (满) 、618766405

● 微 信群:可加我微 信,我拉大家进群,非诚勿扰

● 联系我请加QQ好友 646634621 ,注明添加缘由

● 于 2019-08-01 06:00 ~ 2019-08-31 24:00 在西安完成

● 最新修改时间:2019-08-01 06:00 ~ 2019-08-31 24:00

● 文章内容来源于小麦苗的学习笔记,部分整理自网络,若有侵权或不当之处还请谅解

● 版权所有,欢迎分享本文,转载请保留出处

........................................................................................................................

小麦苗的微店 https://weidian.com/s/793741433?wfr=c&ifr=shopdetail

小麦苗出版的数据库类丛书 http://blog.itpub.net/26736162/viewspace-2142121/

小麦苗OCP、OCM、高可用网络班 http://blog.itpub.net/26736162/viewspace-2148098/

小麦苗腾讯课堂主页 https://lhr.ke.qq.com/

........................................................................................................................

使用 微 信客户端 扫描下面的二维码来关注小麦苗的微 信公众号( xiaomaimiaolhr )及QQ群(DBA宝典)、添加小麦苗微 信, 学习最实用的数据库技术。

........................................................................................................................

欢迎与我联系

 

 



来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/26736162/viewspace-2653526/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/26736162/viewspace-2653526/

<think>好的,我现在需要帮用户介绍存储过程中使用DBMS_LOCK.SLEEP的情况。首先,我得确认用户对Oracle数据库的存储过程有基本了解,可能他们需要暂停或延迟执行流程。DBMS_LOCK.SLEEP这个包可能用于这个目的。 接下来,我需要回想一下DBMS_LOCK.SLEEP的具体用法。记得这个函数属于DBMS_LOCK包,参数是秒数,可以让会话暂停一段时间。但可能需要注意权限问题,比如用户是否有执行这个包的权限,可能需要授权。 然后,用户可能想知道为什么用这个而不是其他方法,比如Java的sleep或者应用层的等待。这时候需要比较不同方法的适用场景,比如在数据库层面直接控制延迟可能更直接,但也会占用数据库连接资源,影响性能。 还要考虑使用场景,比如模拟长时间操作、测试并发控制、或者定时任务中的间隔执行。同时,需要注意长时间睡眠可能导致会话挂起,消耗资源,甚至引发锁的问题,尤其是在高并发环境下。 另外,可能提到替代方案,比如DBMS_SESSION.SLEEP,但不同版本可能有不同,需要确认Oracle版本兼容性。还要提醒用户谨慎使用,避免在生产环境中滥用,导致性能问题。 最后,总结使用时的注意事项,比如合理设置时间、权限管理、资源消耗评估,以及可能的替代方案。确保用户理解正确使用场景和潜在风险。</think>在Oracle数据库中使用`DBMS_LOCK.SLEEP`的注意事项和典型场景如下: ### 基本语法 ```sql DBMS_LOCK.SLEEP(seconds IN NUMBER); ``` 参数单位为秒,支持小数(如`0.5`表示500毫秒) ### 核心用途 1. **模拟耗时操作** ```sql BEGIN DBMS_OUTPUT.PUT_LINE('开始操作'); DBMS_LOCK.SLEEP(5); -- 暂停5秒 DBMS_OUTPUT.PUT_LINE('5秒后继续'); END; ``` 2. **并发控制测试** 测试锁竞争时制造人为延迟: ```sql CREATE OR REPLACE PROCEDURE concurrent_test IS BEGIN LOCK TABLE orders IN EXCLUSIVE MODE; DBMS_LOCK.SLEEP(10); -- 持有锁10秒 END; ``` 3. **定时任务调度** 简单轮询场景(生产环境建议改用DBMS_SCHEDULER): ```sql LOOP -- 检查条件 IF condition_not_met THEN DBMS_LOCK.SLEEP(60); -- 每分钟检查一次 END IF; END LOOP; ``` ### 关键注意事项 1. **权限要求** 需要显式授权(DBA执行): ```sql GRANT EXECUTE ON DBMS_LOCK TO your_user; ``` 2. **版本兼容性** - Oracle 11g及更早版本:只能使用`DBMS_LOCK.SLEEP` - Oracle 18c+:推荐使用`DBMS_SESSION.SLEEP`(语法相同) 3. **性能影响** 执行期间会保持: - 数据库连接 - 事务锁(如果处于事务中) - PGA内存资源 ### 替代方案对比 | 方法 | 精度 | 是否释放连接 | 适用场景 | |----------------------|--------|------------|---------------------| | DBMS_LOCK.SLEEP | 秒级 | 否 | 短时间阻塞 | | DBMS_SESSION.SLEEP | 微秒级 | 否 | 高精度等待(18c+) | | JAVA调用Thread.sleep | 毫秒级 | 是 | 应用层延迟 | ### 典型错误示例 ```sql BEGIN FOR i IN 1..100 LOOP DBMS_LOCK.SLEEP(1); -- 避免在循环中高频使用 UPDATE logs SET count = count + 1; END LOOP; COMMIT; END; ``` **问题分析**: - 每个循环迭代产生1秒延迟 - 持续持有未提交的事务锁 - 总执行时间超过100秒,容易导致锁竞争和资源浪费 建议改用`DBMS_JOB`/`DBMS_SCHEDULER`实现定时任务调度,而非在代码中硬编码延迟逻辑。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值