[20210113]给PB开发人员的一个建议.txt --//PB 表示PowerBuild开发工具,目前至少许多企业依旧在使用它. --//许多开发在拼接sql语句时使用\r来连接字符串,这在dba诊断问题时出现一些奇怪的现象,通过遇到的例子来说明. --//想查看那个会话执行某个语句发现.输出怪异: 1.环境: SYS> @ ver1 PORT_STRING VERSION BANNER ------------------------------ -------------- -------------------------------------------------------------------------------- x86_64/Linux 2.4.xx 11.2.0.3.0 Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production 2.测试: SYS> column CURSOR_TYPE format a20 SYS> select * from v$open_cursor where sql_id='fagcu20tqqc7x'; SADDR SID USER_NAME ADDRESS HASH_VALUE SQL_ID SQL_TEXT LAST_SQL_ACTIVE_TIM SQL_EXEC_ID CURSOR_TYPE ---------------- ---------- ------------------------------ ---------------- ---------- ------------- ---------------------- ------------------- ----------- -------------------- OPEN 00000000AB7718C0 862662909 fagcu20tqqc7x SELECT MS_CF01.CFHM, OPEN 00000000AB7718C0 862662909 fagcu20tqqc7x SELECT MS_CF01.CFHM, OPEN 00000000AB7718C0 862662909 fagcu20tqqc7x SELECT MS_CF01.CFHM, --//奇怪看不见SID,而且OPEN跑到user_NAME来了.看见sql_text才明白开发使用\r换行. --//整个开发团队的管理存在问题,实际上N久以前就建议开发不要这样使用. SYS> select * from v$open_cursor where sql_id='fagcu20tqqc7x' 2 @ prxx ============================== SADDR : 00000000BC329A58 SID : 448 USER_NAME : XXXYYY_HIS ADDRESS : 00000000AB7718C0 HASH_VALUE : 862662909 SQL_ID : fagcu20tqqc7x MS_CF01.CFSB, : SELECT MS_CF01.CFHM, LAST_SQL_ACTIVE_TIME : SQL_EXEC_ID : CURSOR_TYPE : OPEN ============================== SADDR : 00000000BC80C9F8 SID : 856 USER_NAME : XXXYYY_HIS ADDRESS : 00000000AB7718C0 HASH_VALUE : 862662909 SQL_ID : fagcu20tqqc7x MS_CF01.CFSB, : SELECT MS_CF01.CFHM, LAST_SQL_ACTIVE_TIME : SQL_EXEC_ID : CURSOR_TYPE : OPEN ============================== SADDR : 00000000BDDB7FE0 SID : 19 USER_NAME : XXXYYY_HIS ADDRESS : 00000000AB7718C0 HASH_VALUE : 862662909 SQL_ID : fagcu20tqqc7x MS_CF01.CFSB, : SELECT MS_CF01.CFHM, LAST_SQL_ACTIVE_TIME : SQL_EXEC_ID : CURSOR_TYPE : OPEN PL/SQL procedure successfully completed. SYS> column SQL_TEXT noprint SYS> select * from v$open_cursor where sql_id='fagcu20tqqc7x'; SADDR SID USER_NAME ADDRESS HASH_VALUE SQL_ID LAST_SQL_ACTIVE_TIM SQL_EXEC_ID CURSOR_TYPE ---------------- ---------- ------------------------------ ---------------- ---------- ------------- ------------------- ----------- -------------------- 00000000BC329A58 448 XXXYYY_HIS 00000000AB7718C0 862662909 fagcu20tqqc7x OPEN 00000000BC80C9F8 856 XXXYYY_HIS 00000000AB7718C0 862662909 fagcu20tqqc7x OPEN 00000000BDDB7FE0 19 XXXYYY_HIS 00000000AB7718C0 862662909 fagcu20tqqc7x OPEN --//这样显示就正常了.看看是什么字符作怪. SYS> select dump(sql_text,16) c100,to_char(replace(sql_fulltext,chr(13),'')) c100 from v$sqlarea where sql_id='fagcu20tqqc7x'; C100 C100 ---------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------- Typ=1 Len=660: 20,20,53,45,4c,45,43,54,20,4d,53,5f,43,46,30,31,2e,43,46,48,4d,2c,20,20,20,d,20,20,20 SELECT MS_CF01.CFHM, ,20,20,20,20,20,20,20,4d,53,5f,43,46,30,31,2e,43,46,53,42,2c,20,20,20,d,20,20,20,20,20,20,20,20,20,2 MS_CF01.CFSB, 0,4d,53,5f,43,46,30,31,2e,42,52,58,4d,2c,d,20,20,20,20,20,20,20,20,20,20,4d,53,5f,43,46,30,31,2e,46, MS_CF01.BRXM, 50,48,4d,20,20,d,20,20,20,20,20,46,52,4f,4d,20,4d,53,5f,43,46,30,31,20,20,d,20,20,20,20,57,48,45,52, MS_CF01.FPHM 45,20,28,20,4d,53,5f,43,46,30,31,2e,46,59,42,5a,20,3d,20,3a,61,69,5f,66,79,62,7a,20,29,20,41,4e,44,2 FROM MS_CF01 0,20,d,20,20,20,20,20,20,20,20,20,20,28,20,4d,53,5f,43,46,30,31,2e,59,46,53,42,20,3d,20,3a,61,69,5f, WHERE ( MS_CF01.FYBZ = :ai_fybz ) AND 79,66,73,62,20,20,6f,72,20,4d,53,5f,43,46,30,31,2e,59,46,53,42,20,3d,20,3a,61,69,5f,67,6c,79,66,73,6 ( MS_CF01.YFSB = :ai_yfsb or MS_CF01.YFSB = :ai_glyfsb) AND 2,29,20,41,4e,44,20,20,d,20,20,20,20,20,20,20,20,20,20,28,20,4d,53,5f,43,46,30,31,2e,5a,46,50,42,20, ( MS_CF01.ZFPB = :"SYS_B_0" ) AND 3d,20,3a,22,53,59,53,5f,42,5f,30,22,20,29,20,41,4e,44,20,20,d,20,20,20,20,20,20,20,20,20,20,28,20,4d ( MS_CF01.KFRQ >= :ai_cfxq ) AND ,53,5f,43,46,30,31,2e,4b,46,52,51,20,3e,3d,20,3a,61,69,5f,63,66,78,71,20,29,20,41,4e,44,d,20,20,20,2 MS_CF01.CFLX in (:ai_xycf,:ai_zycf,:ai_cycf) AND 0,20,20,20,20,20,20,4d,53,5f,43,46,30,31,2e,43,46,4c,58,20,69,6e,20,28,3a,61,69,5f,78,79,63,66,2c,3a (MS_CF01.XTCFBZ < :"SYS_B_1" OR MS_CF01.XTCFBZ IS NULL) AND ,61,69,5f,7a,79,63,66,2c,3a,61,69,5f,63,79,63,66,29,20,20,41,4e,44,d,20,20,20,20,28,4d,53,5f,43,46,3 ((MS_CF01.BRID = :al_brid AND :ai_skbz = :"SYS_B_2") OR 0,31,2e,58,54,43,46,42,5a,20,3c,20,3a,22,53,59,53,5f,42,5f,31,22,20,4f,52,20,4d,53,5f,43,46,30,31,2e ((MS_CF01.FYCK = :"SYS_B_3" OR MS_CF01.FYCK = :ai_ckbh) AND ,58,54,43,46,42,5a,20,49,53,20,4e,55,4c,4c,29,20,20,41,4e,44,d,20,20,20,20,20,20,20,20,20,20,28,28,4 ( MS_CF01.FPHM is not null AND :ai_skbz = :"SYS_B_4" ))) d,53,5f,43,46,30,31,2e,42,52,49,44,20,3d,20,3a,61,6c,5f,62,72,69,64,20,41,4e,44,20,3a,61,69,5f,73,6b ,62,7a,20,3d,20,3a,22,53,59,53,5f,42,5f,32,22,29,20,4f,52,d,20,20,20,20,20,20,20,20,20,20,28,28,4d,5 3,5f,43,46,30,31,2e,46,59,43,4b,20,3d,20,3a,22,53,59,53,5f,42,5f,33,22,20,4f,52,20,4d,53,5f,43,46,30 ,31,2e,46,59,43,4b,20,3d,20,3a,61,69,5f,63,6b,62,68,29,20,41,4e,44,20,d,20,20,20,20,20,20,20,20,20,2 0,20,28,20,20,4d,53,5f,43,46,30,31,2e,46,50,48,4d,20,69,73,20,6e,6f,74,20,6e,75,6c,6c,20,41,4e,44,20 ,3a,61,69,5f,73,6b,62,7a,20,3d,20,3a,22,53,59,53,5f,42,5f,34,22,20,29,29,29,d,20 20,20,53,45,4c,45,43,54,20,4d,53,5f,43,46,30,31,2e,43,46,48,4d,2c,20,20,20,d,20,20,20 S E L E C T M S _ C F 0 1 . C F H M , ~~ --//注意看下划线0xd编码(对应的就chr(13)),没有0xa.难道开发连\r仅仅表示回车不懂吗? --//如果开发使用\n或者\r\n作为回车换行,这个问题根本不存在.\r仅仅表示回车并没有换行. --//另外我个人认为许多开发连基本的计算机常识都没有,可悲可叹.讲了N多次,1次全部替换有这么难吗?
[20210113]给PB开发人员的一个建议.txt
来源:这里教程网
时间:2026-03-03 16:21:40
作者:
编辑推荐:
下一篇:
相关推荐
-
雷神推出 MIX PRO II 迷你主机:基于 Ultra 200H,玻璃上盖 + ARGB 灯效
2 月 9 日消息,雷神 (THUNDEROBOT) 现已宣布推出基于英
-
制造商 Musnap 推出彩色墨水屏电纸书 Ocean C:支持手写笔、第三方安卓应用
2 月 10 日消息,制造商 Musnap 现已在海外推出一款 Oce
热文推荐
- Oracle如何删除表中重复记录保留第一条
Oracle如何删除表中重复记录保留第一条
26-03-03 - Oracle网络服务基础(二)之监听器与TNS配置管理
Oracle网络服务基础(二)之监听器与TNS配置管理
26-03-03 - ORACLE 数据库业务用户密码重置慎用特殊字符
ORACLE 数据库业务用户密码重置慎用特殊字符
26-03-03 - oracle优化之生产系统不改代码解决SQL性能问题的几种方法
oracle优化之生产系统不改代码解决SQL性能问题的几种方法
26-03-03 - Oracle网络服务基础(一)之监听器概念
Oracle网络服务基础(一)之监听器概念
26-03-03 - Oracle 21c新特性预览与日常管理相关的几个新特性
Oracle 21c新特性预览与日常管理相关的几个新特性
26-03-03 - ora-00279 ora-00289 ora-00280
ora-00279 ora-00289 ora-00280
26-03-03 - 深入解析 oracle drop table内部原理
深入解析 oracle drop table内部原理
26-03-03 - Oracle 9i 11g历史库升级迁移数据至19c CDB
Oracle 9i 11g历史库升级迁移数据至19c CDB
26-03-03 - Oracle 19c Database Configure the HTTPS Port for EM Express
