[20240818]测试21c下sqlplus show recyclebin的小问题2.txt
--//以前测试过,链接[20210722]sqlplus下show recycebin的小问题.txt
--//注:recycebin 拼写错误 应该是 recyclebin.
--//这个问题当时也是浪费了大量实际,我记忆遇到问题时是上午,执行show recyclebin ;[注空格+;],linux下sqlplus进程会直接崩溃.
--//当时手头有其他事情,第二天测试一切正常,好在我使用rlwrap会写.sqlplus_history,这才发现问题.
--//当时测试11g,看看21c情况如下.
1.环境:
SCOTT@book01p> @pr
==============================
PORT_STRING : x86_64/Linux 2.4.xx
VERSION : 21.0.0.0.0
BANNER : Oracle Database 21c Enterprise Edition Release 21.0.0.0.0 - Production
BANNER_FULL : Oracle Database 21c Enterprise Edition Release 21.0.0.0.0 - Production
Version 21.3.0.0.0
BANNER_LEGACY : Oracle Database 21c Enterprise Edition Release 21.0.0.0.0 - Production
CON_ID : 0
PL/SQL procedure successfully completed.
2.测试:
SCOTT@book01p> create table tx as select * from dept ;
Table created.
SCOTT@book01p> create table ty as select * from dept ;
Table created.
SCOTT@book01p> show recyclebin
SCOTT@book01p> drop table tx ;
Table dropped.
SCOTT@book01p> drop table ty ;
Table dropped.
SCOTT@book01p> show recyclebin
ORIGINAL NAME RECYCLEBIN NAME OBJECT TYPE DROP TIME
---------------- ------------------------------ ------------ -------------------
TX BIN$H8nC3h4CElHgY2U4qMBHSA==$0 TABLE 2024-08-16:16:29:43
TY BIN$H8nC3h4DElHgY2U4qMBHSA==$0 TABLE 2024-08-16:16:29:46
--//但是后面测试出现的问题更加奇葩.
3.测试结果:
$ rlsql scott/book@book01p
SQL*Plus: Release 21.0.0.0.0 - Production on Sun Aug 18 09:37:20 2024
Version 21.3.0.0.0
Copyright (c) 1982, 2021, Oracle. All rights reserved.
Last Successful login time: Sun Aug 18 2024 09:07:02 +08:00
Connected to:
Oracle Database 21c Enterprise Edition Release 21.0.0.0.0 - Production
Version 21.3.0.0.0
SCOTT@book01p> show linesize
linesize 269
SCOTT@book01p> show recyclebin ;
SCOTT@book01p> @ hash
HASH_VALUE SQL_ID CHILD_NUMBER KGL_BUCKET PLAN_HASH_VALUE HASH_HEX SQL_EXEC_START SQL_EXEC_ID
---------- ------------- ------------ ---------- --------------- ---------- ------------------- -----------
551811298 b3vdwbwhf7y72 0 129250 360870971 20e3f8e2 2024-08-18 09:37:29 16777220
SCOTT@book01p> show recyclebin ;
ORIGINAL NAME RECYCLEBIN NAME OBJECT TYPE DROP TIME
---------------- ------------------------------ ------------ -------------------
TX BIN$H8nC3h4CElHgY2U4qMBHSA==$0 TABLE 2024-08-16:16:29:43
TY BIN$H8nC3h4DElHgY2U4qMBHSA==$0 TABLE 2024-08-16:16:29:46
SCOTT@book01p> @ hash
HASH_VALUE SQL_ID CHILD_NUMBER KGL_BUCKET PLAN_HASH_VALUE HASH_HEX SQL_EXEC_START SQL_EXEC_ID
---------- ------------- ------------ ---------- --------------- ---------- ------------------- -----------
2786599706 c380v8fm1h8su 0 8986 1501318174 a618231a 2024-08-18 09:38:16 16777216
--//第1次显示没有输出,第2次显示有输出!!注意show recyclebin执行后面有空格+分号.
--//注意看每次执行的sql_id不同.
SCOTT@book01p> @ sql_id b3vdwbwhf7y72
--SQL_ID = b3vdwbwhf7y72
SELECT ORIGINAL_NAME ORIGNAME_PLUS_SHOW_RECYC,
OBJECT_NAME OBJECTNAME_PLUS_SHOW_RECYC,TYPE OBJTYPE_PLUS_SHOW_RECYC,
DROPTIME DROPTIME_PLUS_SHOW_RECYC
FROM USER_RECYCLEBIN
WHERE CAN_UNDROP = 'YES'
AND ORIGINAL_NAME = UPPER(:NMBIND_SHOW_OBJ)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
ORDER BY ORIGINAL_NAME,DROPTIME DESC,OBJECT_NAME;
SCOTT@book01p> @ sql_id c380v8fm1h8su
--SQL_ID = c380v8fm1h8su
SELECT ORIGINAL_NAME ORIGNAME_PLUS_SHOW_RECYC,
OBJECT_NAME OBJECTNAME_PLUS_SHOW_RECYC,TYPE OBJTYPE_PLUS_SHOW_RECYC,
DROPTIME DROPTIME_PLUS_SHOW_RECYC
FROM USER_RECYCLEBIN
WHERE CAN_UNDROP = 'YES'
ORDER BY ORIGINAL_NAME,DROPTIME DESC,OBJECT_NAME;
--//注意看下划线,第1次有带入参数:NMBIND_SHOW_OBJ,而第2次没有带入参数.
SCOTT@book01p> @ bind_cap b3vdwbwhf7y72 ''
SQL_ID CHILD_NUMBER WAS NAME POSITION MAX_LENGTH LAST_CAPTURED DATATYPE_STRING VALUE_STRING INST_ID
------------- ------------ --- ------------------------------ ---------- ---------- ------------------- --------------- ------------ -------
b3vdwbwhf7y72 0 YES :NMBIND_SHOW_OBJ 1 32 2024-08-18 09:37:29 VARCHAR2(32) С? 1
--//注意看带入的值存在一个乱码.查询肯定没有这个表,自然第1次查询没有输出,而第2次没有带入参数.自然是全部输出.
--//如果以前在11g是crash的化,21c问题视乎更严重,第1次不知道那里取了值,第2次不知道为什么选择没有参数的执行.
SCOTT@book01p> show recyclebin ;
SCOTT@book01p> show recyclebin ;
ORIGINAL NAME RECYCLEBIN NAME OBJECT TYPE DROP TIME
---------------- ------------------------------ ------------ -------------------
TX BIN$H8nC3h4CElHgY2U4qMBHSA==$0 TABLE 2024-08-16:16:29:43
TY BIN$H8nC3h4DElHgY2U4qMBHSA==$0 TABLE 2024-08-16:16:29:46
SCOTT@book01p> show recyclebin ;
ORIGINAL NAME RECYCLEBIN NAME OBJECT TYPE DROP TIME
---------------- ------------------------------ ------------ -------------------
TX BIN$H8nC3h4CElHgY2U4qMBHSA==$0 TABLE 2024-08-16:16:29:43
TY BIN$H8nC3h4DElHgY2U4qMBHSA==$0 TABLE 2024-08-16:16:29:46
SCOTT@book01p> show recyclebin ;
ORIGINAL NAME RECYCLEBIN NAME OBJECT TYPE DROP TIME
---------------- ------------------------------ ------------ -------------------
TX BIN$H8nC3h4CElHgY2U4qMBHSA==$0 TABLE 2024-08-16:16:29:43
TY BIN$H8nC3h4DElHgY2U4qMBHSA==$0 TABLE 2024-08-16:16:29:46
SCOTT@book01p> show recyclebin ;
--//测试时有时候正常有时候异常,相同的执行方法结果可以完成不同.
--//真是见鬼了.放弃探究.
--//我使用windows 21c的sqlplus客户端测试:
[email protected]:1521/book01p> show recyclebin ;
--//每次都是没有输出!!
[email protected]:1521/book01p> @ hash
HASH_VALUE SQL_ID CHILD_NUMBER KGL_BUCKET PL
---------- ------------- ------------ ---------- --------------- ---------- ------------------- -----------
551811298 b3vdwbwhf7y72 0 129250 360870971 20e3f8e2 2024-08-18 11:38:39 16777220
[email protected]:1521/book01p> @ bind_cap b3vdwbwhf7y72 ''
SQL_ID CHILD_NUMBER WAS NAME POSITION MAX_LENGTH LAST_CAPTURED DATATYPE_STRING VALUE_STRING INST_ID
------------- ------------ --- ------------------------------ ---------- ---------- ------------------- --------------- ------------ -------
b3vdwbwhf7y72 0 YES :NMBIND_SHOW_OBJ 1 32 2024-08-18 11:36:25 VARCHAR2(32) ||to_char 1
--//但是抓取的绑定变量值明显存在问题.
5.总结:
--//不想在上面在浪费时间,怎么感觉oracel的bug也太多了.
--//总之规避的方法就是在结尾写分号之前不要留空格.
--//或者干脆不写分号,实际上对于这类语句写分号是多余的.