Oracle标题le数据库提示报错:无法从套接字获取到数据
Oracle标题le数据库提示报错:无法从套接字获取到数据无法从套接字获取到数据因为服务器迁移需要,新旧环境数据库版本不一致。旧数据库版本Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production。新版本数据库Oracle Database 11g Enterprise Edition Release 11.2.0.
·
Oracle标题le数据库提示报错:无法从套接字获取到数据
无法从套接字获取到数据
前因后果----因为服务器迁移需要,新旧环境数据库版本不一致。新数据库版本Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production。旧版本数据库Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production。(4和1的差别。查看数据库版本的语句: select * from v$version; 。
问题示例:
这个是 执行的sql, 据了解好像是数据库bug,自定义函数( GET_HEADER(‘XXXX’) )无法和order by一起使用
// 注意是 sys 用户下
SELECT * FROM (SELECT originTable.*, ROWNUM rn_0192837465 FROM (select case when nvl(NUM_EXPOSE,'0') <> '0' then to_char(NUM_ILL/NUM_EXPOSE*100,'fm9990.00')||'%'
else '-' end as num_lihuan,a.*
from (
select decode(t.is_over, 'Y', 'XXXX', 'XXXX') as NMISOVER,
t.is_over,
t.ID_EVENT,
t.NO_EVENT,
t.NM_EVENT_ORG,
t.NUM_STUDENT,
t.NUM_TEACHER,
t.NUM_EVENT_ORG,
t.NUM_EXPOSE,
(SELECT COUNT(*) FROM HFM_CASE S WHERE T.ID_EVENT = S.ID_EVENT AND S.IS_DEL = '0') AS NUM_ILL,
t.DT_ILL_FIRST,
t.DT_ILL_LAST
from HFM_EVENT t where t.is_del = '0'
and 1=1
and t.dt_report >= to_date('2021-01-01','yyyy-mm-dd')
and t.dt_report <=to_date('2021-04-21','yyyy-mm-dd')
and 1=1
// GET_HEADER() 就是这个自定义函数
and t.org_area LIKE GET_HEADER('5544800') || '%'
and 1=1
// order by 位置
order by t.dt_add desc) a) originTable WHERE ROWNUM<11) WHERE rn_0192837465>=1 and rn_0192837465<11;
解决方案(导致这个问题的原因有很多种,可能并不是全适用)
这个是代码,把数据库用户切换到sys下,执行语句即可( 其实我执行语句之后重启过数据库服务,但是不确定是否需要)。
// 注意是 sys 用户下
alter system set "_optimizer_cost_based_transformation" = off;
更多推荐
已为社区贡献1条内容
所有评论(0)