网站建设技术部奖惩制度外发加工网接单

pingmian/2026/1/21 0:23:31/文章来源:
网站建设技术部奖惩制度,外发加工网接单,物联网平台层,网站建设公司南昌在 Oracle 和 OB Oracle 租户下调用存储过程时#xff0c;两者表现并不一致#xff0c;导致获取到的 SQL 文本拼接不完整#xff0c;影响到了业务侧的功能测试。本文将针对这个问题进行相关的测试和验证。 作者#xff1a;赵黎明#xff0c;爱可生 MySQL DBA 团队成员两者表现并不一致导致获取到的 SQL 文本拼接不完整影响到了业务侧的功能测试。本文将针对这个问题进行相关的测试和验证。 作者赵黎明爱可生 MySQL DBA 团队成员熟悉 Oracle、MySQL 等数据库擅长数据库性能问题诊断、事务与锁问题的分析等负责处理客户 MySQL 及我司自研 DMP 平台日常运维中的问题对开源数据库相关技术非常感兴趣。 爱可生开源社区出品原创内容未经授权不得随意使用转载请联系小编并注明来源。 本文约 3100 字预计阅读需要 10 分钟。 背景 最近在客户这边遇到一个故障在 Oracle 和 OB Oracle 租户下调用存储过程时两者表现并不一致导致获取到的 SQL 文本拼接不完整影响到了业务侧的功能测试。 客户的存储过程逻辑并不复杂就是通过查询系统视图 user_tab_columns 来获取用户的表名然后再进行 SQL 拼接完成后续的业务逻辑。 本文将针对这个问题进行相关的测试和验证。 问题复现 Oracle 环境中验证 -- 创建测试用户并赋权 [rootlocalhost ~]# sqlplus / as sysdba SQL create user u1 identified by u1; User created. SQL create user u2 identified by u2; User created. SQL grant connect,resource to u1; Grant succeeded. SQL grant create procedure to u1; Grant succeeded. SQL grant connect,resource to u2; Grant succeeded. SQL grant create synonym to u2; Grant succeeded. SQL grant select any table to u2; Grant succeeded.-- 创建测试表并赋权 SQL conn u1/u1 Connected. SQL create table t1(id int); Table created. SQL insert into t1(id) values(1); 1 row created.-- 创建表的同义词 SQL conn u2/u2 Connected. SQL create synonym t1 for u1.t1; Synonym created.SQL set lin 200 SQL col owner for a5 SQL col table_owner for a5 SQL col db_link for a10 SQL select * from all_synonyms where ownerU2;OWNER SYNONYM_NAME TABLE TABLE_NAME DB_LINK ----- ------------------------------ ----- ------------------------------ ---------- U2 T1 U1 T1-- 创建存储过程并赋权 SQL conn u1/u1 Connected. SQL create or replace procedure proc_case1 as v_str varchar2(10); begin select table_name into v_str from user_tab_columns where table_nameT1; dbms_output.put_line(v_str); end; / 2 3 4 5 6 7 Procedure created. SQL grant execute on proc_case1 to u2; Grant succeeded.-- 创建存储过程同义词 SQL conn u2/u2 Connected. SQL create synonym proc_case1 for u1.proc_case1; Synonym created.SQL select * from all_synonyms where ownerU2; OWNER SYNONYM_NAME TABLE TABLE_NAME DB_LINK ----- ------------------------------ ----- ------------------------------ ---------- U2 PROC_CASE1 U1 PROC_CASE1 U2 T1 U1 T1-- 验证 SQL conn u1/u1 Connected. SQL select * from t1;ID ----------1SQL set serveroutput on; SQL call proc_case1(); T1 Call completed.SQL conn u2/u2 Connected. SQL select * from t1;ID ----------1SQL set serveroutput on; SQL call proc_case1(); T1 Call completed. SQL 由此可见在 Oracle 中无论是 u1 还是 u2 用户调用存储过程时都能正确返回表名说明两者查询 user_tab_columns 视图的返回结果是一致的这也是符合预期的。 OB Oracle 环境中验证 -- 创建测试用户并赋权 SYS[SYS] create user u1 identified by u1; Query OK, 0 rows affected (0.04 sec) SYS[SYS] create user u2 identified by u2; Query OK, 0 rows affected (0.04 sec) SYS[SYS] grant connect,resource to u1; Query OK, 0 rows affected (0.04 sec) SYS[SYS] grant create procedure to u1; Query OK, 0 rows affected (0.03 sec) SYS[SYS] grant connect,resource to u2; Query OK, 0 rows affected (0.05 sec) SYS[SYS] grant create synonym to u2; Query OK, 0 rows affected (0.03 sec) SYS[SYS] grant select any table to u2; Query OK, 0 rows affected (0.03 sec)-- 创建测试表并赋权 SYS[SYS] conn u1 Connection id: 269006 Current database: U1 SYS[U1] create table t1(id int); Query OK, 0 rows affected (0.21 sec) SYS[U1] insert into t1(id) values(1); Query OK, 1 row affected (0.03 sec) SYS[U1] commit; Query OK, 0 rows affected (0.01 sec)-- 创建表的同义词 SYS[U1] conn u2 Connection id: 50837 Current database: U2 SYS[U2] create synonym t1 for u1.t1; Query OK, 0 rows affected (0.05 sec) SYS[U2] select * from all_synonyms where ownerU2; ------------------------------------------------------- | OWNER | SYNONYM_NAME | TABLE_OWNER | TABLE_NAME | DB_LINK | ------------------------------------------------------- | U2 | T1 | U1 | T1 | NULL | ------------------------------------------------------- 2 rows in set (0.01 sec)-- 创建存储过程并赋权 SYS[U2] conn u1 Connection id: 269078 Current database: U1 SYS[U1] create or replace procedure proc_case1 as- v_str varchar2(10);- begin- select table_name into v_str from user_tab_columns where table_nameT1;- dbms_output.put_line(v_str);- end;- / Query OK, 0 rows affected (0.17 sec) SYS[U1] grant execute on proc_case1 to u2; Query OK, 0 rows affected (0.06 sec)-- 创建存储过程同义词 SYS[U1] conn u2 Connection id: 50896 Current database: U2 SYS[U2] create synonym proc_case1 for u1.proc_case1; Query OK, 0 rows affected (0.05 sec) SYS[U2] select * from all_synonyms where ownerU2; ------------------------------------------------------- | OWNER | SYNONYM_NAME | TABLE_OWNER | TABLE_NAME | DB_LINK | ------------------------------------------------------- | U2 | PROC_CASE1 | U1 | PROC_CASE1 | NULL | | U2 | T1 | U1 | T1 | NULL | ------------------------------------------------------- 2 rows in set (0.01 sec)-- 验证 SYS[U2] conn u1 Connection id: 269134 Current database: U1 SYS[U1] select * from t1; ------ | ID | ------ | 1 | ------ 1 row in set (0.01sec)SYS[U1] set serveroutput on; Query OK, 0 rows affected (0.41 sec) SYS[U1] call proc_case1(); Query OK, 0 rows affected (0.21 sec) SYS[U1] select table_name,column_name from user_tab_columns; ------------------------- | TABLE_NAME | COLUMN_NAME | ------------------------- | C | NAME | | C | ADDRESS | ------------------------- 2 rows in set (0.08 sec)此处其实已经可以发现一些端倪在 OB 中虽然可以通过 conn 进行用户切换切换后的用户也能访问自己的对象但是在访问 USER_ 等视图时返回结果与 Oracle 不同。 用户 u1 查询 user_tab_columns 表时只能看到 SYS 用户下的表 C 表是由 SYS 用户创建的所以存储过程无法返回 T1 表的表名其查询结果为空。 -- 直连 u1 用户验证 U1[U1] select * from t1; ------ | ID | ------ | 1 | ------ 1 row in set (0.01sec)U1[U1] set serveroutput on; Query OK, 0 rows affected (0.02sec)U1[U1] call proc_case1(); Query OK, 0 rows affected (0.08sec)T1 U1[U1]-- 直连 u2 用户进行验证 U2[U2] select * from t1; ------ | ID | ------ | 1 | ------ 1 row in set (0.03sec)U2[U2] set serveroutput on; Query OK, 0 rows affected (0.44 sec)U2[U2] call proc_case1(); Query OK, 0 rows affected (0.43 sec)U2[U2] select * from user_tab_columns; Empty set (0.08 sec)# 同样地u2 也无法从 user_tab_columns 视图中查询到 u1 创建的表调用存储过程返回结果为空-- 将 user_tab_columns 替换成 all_tab_columns 视图 U2[U2] select table_name,column_name from all_tab_columns where ownerU1; ------------------------- | TABLE_NAME | COLUMN_NAME | ------------------------- | T1 | ID | ------------------------- 1 row in set (0.08 sec)U2[U2] create or replace procedure proc_case2 as- v_str varchar2(10);- begin- select table_name into v_str from all_tab_columns where table_nameT1 and ownerU1;- dbms_output.put_line(v_str);- end;- / Query OK, 0 rows affected (0.17ec)U2[U2] call proc_case2(); Query OK, 0 rows affected (0.16ec)T1 U2[U2]-- 将 SELECT ANY TABLE 权限回收 SYS[SYS] revoke select any table from u2; Query OK, 0 rows affected (0.03 sec)U2[U2] select table_name,column_name from all_tab_columns where ownerU1; Empty set (0.05 sec)U2[U2] set serveroutput on; Query OK, 0 rows affected (0.01 sec)U2[U2] call proc_case2(); Query OK, 0 rows affected (0.05 sec) 当用户 u2 没有 SELECT ANY TABLE 系统权限后即使查询 all_tab_columns 视图也无法获取其他用户创建表的相关信息。 排查调用系统视图的相关对象 PL 对象 PL 对象如函数存储过程等。 -- dba_source 视图中存放了各种 PL 对象的定义 SQL select count(*),type from dba_source group by type;COUNT(*) TYPE ---------- ------------152202 PROCEDURE89318 PACKAGE31504 PACKAGE BODY1276 TYPE BODY2210 TRIGGER3895 FUNCTION7 JAVA SOURCE12338 TYPE8 rows selected.-- 创建测试存储过程大小写各1个SQL CREATE OR REPLACE PROCEDURE PROC_1 IS V_N NUMBER :0; BEGINSELECT COUNT(*) INTO V_N FROM USER_TAB_COLUMNS; END; / 2 3 4 5 6 Procedure created.SQL create or replace procedure proc_2 is v_n number :0; beginselect count(*) into v_n from user_tab_columns; end; / 2 3 4 5 6 Procedure created.-- 查询常用系统视图名此处只列举了几个与表相关的视图 select owner,object_name,object_type from dba_objects where ownerSYS and (object_name like USER_PART_% or object_name like USER_T% or object_name like ALL_PART_% or object_name like ALL_T% or object_name like DBA_PART_% or object_name like DBA_T%);-- 根据上一步获取到的系统视图名通过模糊搜索即可捕获到涉及查询这些系统视图的 PL 对象 SQL set line 200 pages 9999 long 999999 SQL col owner for a10 SQL col name for a30 SQL col text for a80 SQL select owner,name,type,text from dba_source where owner not in(SYS, SYSTEM, SYSMAN, OUTLN, DIP, TSMSYS, DBSNMP,ORACLE_OCM, WMSYS, EXFSYS, XDB, ANONYMOUS, ORDSYS,ORDPLUGINS, SI_INFORMTN_SCHEMA, MDSYS, MGMT_VIEW, PERFSTAT,DMSYS, CTXSYS, OLAPSYS, MDDATA, APPQOSSYS, XS$NULL,ORDDATA, SPATIAL_WFS_ADMIN_USR, SPATIAL_CSW_ADMIN_USR,OWBSYS, APEX_PUBLIC_USER, APEX_030200, FLOWS_FILES, SCOTT,OMS, OWBSYS_AUDIT, DSG, DBMGR, PATROL, SPA, GOLDENGATE,DBADM) and owner not like MYNET% and (text like %USER_TAB_COLUMNS% or text like %user_tab_columns% or text like %USER%TABLES% or text like %user%tables% or text like %ALL_TAB_COLUMNS% or text like %ALL_tab_columns% or text like %ALL%TABLES% or text like %ALL%tables%); 2 3 4 5 6 7 8 OWNER NAME TYPE TEXT ---------- ------------------------------ ------------ --------------------------------------------------------------------------------U1 PROC_CASE1 PROCEDURE select table_name into v_str from user_tab_columns where table_nameT1; ZLM PROC_1 PROCEDURE SELECT COUNT(*) INTO V_N FROM USER_TAB_COLUMNS; ZLM PROC_2 PROCEDURE select count(*) into v_n from user_tab_columns; 视图对象 -- 创建测试视图1 SQL create view view_1 as select * from user_tables; View created.-- 查询 dba_views 获取视图定义 SQL select owner,view_name,text from dba_views where owner not in(SYS, SYSTEM, SYSMAN, OUTLN, DIP, TSMSYS, DBSNMP,ORACLE_OCM, WMSYS, EXFSYS, XDB, ANONYMOUS, ORDSYS,ORDPLUGINS, SI_INFORMTN_SCHEMA, MDSYS, MGMT_VIEW, PERFSTAT,DMSYS, CTXSYS, OLAPSYS, MDDATA, APPQOSSYS, XS$NULL,ORDDATA, SPATIAL_WFS_ADMIN_USR, SPATIAL_CSW_ADMIN_USR,OWBSYS, APEX_PUBLIC_USER, APEX_030200, FLOWS_FILES, SCOTT,OMS, OWBSYS_AUDIT, DSG, DBMGR, PATROL, SPA, GOLDENGATE,DBADM) and (text like %USER_TAB_COLUMNS% or text like %user_tab_columns% or text like %USER%TABLES% or text like %user%tables% or text like %ALL_TAB_COLUMNS% or text like %ALL_tab_columns% or text like %ALL%TABLES% or text like %ALL%tables%);2 3 4 5 6 7 8 DBADM) and (text like %USER_TAB_COLUMNS% or text like %user_tab_columns% or text like %USER%TABLES% or text like %user%tables% or text like %ALL_TAB_COLUMNS% or text like %ALL_tab_columns% or text like %ALL%TABLES% or text like %ALL%tables%)* ERROR at line 8:ORA-00932: inconsistent datatypes: expected NUMBER got LONGdba_source 视图中的 text 列是 varchar2 类型的可以直接使用 like 进行模糊查询。 dba_views 视图中的 text 列是 long 类型的无法直接使用 like 进行模糊查询会报 ORA-00932 的错误。 workaround先创建一张表用 to_lob 函数将 text 字段转换为 clob 类型然后将 dba_views 拷贝到该表中再通过以上 SQL 进行查询。 -- 创建中间表并将系统视图 dba_views 内容拷贝到该表 SQL create table my_views as select owner,view_name,to_lob(text) text from dba_views;Table created.-- 查询中间表捕获目标视图对象 SQL select owner,view_name,text from my_views where owner not in(SYS, SYSTEM, SYSMAN, OUTLN, DIP, TSMSYS, DBSNMP, ORACLE_OCM, WMSYS, EXFSYS, XDB, ANONYMOUS, ORDSYS, ORDPLUGINS, SI_INFORMTN_SCHEMA, MDSYS, MGMT_VIEW, PERFSTAT, DMSYS, CTXSYS, OLAPSYS, MDDATA, APPQOSSYS, XS$NULL, ORDDATA, SPATIAL_WFS_ADMIN_USR, SPATIAL_CSW_ADMIN_USR, OWBSYS, APEX_PUBLIC_USER, APEX_030200, FLOWS_FILES, SCOTT, OMS, OWBSYS_AUDIT, DSG, DBMGR, PATROL, SPA, GOLDENGATE, DBADM) and (text like %USER_TAB_COLUMNS% or text like %user_tab_columns% or text like %USER%TABLES% or text like %user%tables% or text like %ALL_TAB_COLUMNS% or text like %ALL_tab_columns% or text like %ALL%TABLES% or text like %ALL%tables%); 2 3 4 5 6 7 8 OWNER VIEW_NAME TEXT---------- ------------------------------ -------------------------------------------------------------------------------- ZLM VIEW_1 select TABLE_NAME,TABLESPACE_NAME,CLUSTER_NAME,IOT_NAME,STATUS,PCT_FR EE,PCT_USED,INI_TRANS,MAX_TRANS,INITIAL_EXTENT,NEXT_EXTENT,MIN_EXTEN TS,MAX_EXTENTS,PCT_INCREASE,FREELISTS,FREELIST_GROUPS,LOGGING,BACKED _UP,NUM_ROWS,BLOCKS,EMPTY_BLOCKS,AVG_SPACE,CHAIN_CNT,AVG_ROW_LEN,A VG_SPACE_FREELIST_BLOCKS,NUM_FREELIST_BLOCKS,DEGREE,INSTANCES,CACHE,TA BLE_LOCK,SAMPLE_SIZE,LAST_ANALYZED,PARTITIONED,IOT_TYPE,TEMPORARY,SE CONDARY,NESTED,BUFFER_POOL,ROW_MOVEMENT,GLOBAL_STATS,USER_STATS,DURA TION,SKIP_CORRUPT,MONITORING,CLUSTER_OWNER,DEPENDENCIES,COMPRESSION, DROPPED from user_tables该方法可以满足需求但每次有新的视图被创建时需要 drop 并重建表比较繁琐。 workaround创建物化视图来代替中间表。 -- 创建物化视图 SQL create materialized view my_mviews refresh force on demand start with sysdate next sysdate 10 /(24*60) as select owner,view_name,to_lob(text) text from dba_views; 2 3 4 5 6 7 Materialized view created.-- 创建测试视图2 SQL CREATE VIEW VIEW_2 AS SELECT * FROM USER_TABLES; View created.-- 查看是否捕获到 view_2 视图 SQL select owner,view_name,text from my_mviews where owner not in(SYS, SYSTEM, SYSMAN, OUTLN, DIP, TSMSYS, DBSNMP,ORACLE_OCM, WMSYS, EXFSYS, XDB, ANONYMOUS, ORDSYS,ORDPLUGINS, SI_INFORMTN_SCHEMA, MDSYS, MGMT_VIEW, PERFSTAT,DMSYS, CTXSYS, OLAPSYS, MDDATA, APPQOSSYS, XS$NULL,ORDDATA, SPATIAL_WFS_ADMIN_USR, SPATIAL_CSW_ADMIN_USR,OWBSYS, APEX_PUBLIC_USER, APEX_030200, FLOWS_FILES, SCOTT,OMS, OWBSYS_AUDIT, DSG, DBMGR, PATROL, SPA, GOLDENGATE,DBADM) and (text like %USER_TAB_COLUMNS% or text like %user_tab_columns% or text like %USER%TABLES% or text like %user%tables% or text like %ALL_TAB_COLUMNS% or text like %ALL_tab_columns% or text like %ALL%TABLES% or text like %ALL%tables%); 2 3 4 5 6 7 8 OWNER VIEW_NAME TEXT ---------- ------------------------------ -------------------------------------------------------------------------------- ZLM VIEW_1 select TABLE_NAME,TABLESPACE_NAME,CLUSTER_NAME,IOT_NAME,STATUS,PCT_FREE,PCT_USED,INI_TRANS,MAX_TRANS,INITIAL_EXTENT,NEXT_EXTENT,MIN_EXTENTS,MAX_EXTENTS,PCT_INCREASE,FREELISTS,FREELIST_GROUPS,LOGGING,BACKED_UP,NUM_ROWS,BLOCKS,EMPTY_BLOCKS,AVG_SPACE,CHAIN_CNT,AVG_ROW_LEN,AVG_SPACE_FREELIST_BLOCKS,NUM_FREELIST_BLOCKS,DEGREE,INSTANCES,CACHE,TABLE_LOCK,SAMPLE_SIZE,LAST_ANALYZED,PARTITIONED,IOT_TYPE,TEMPORARY,SECONDARY,NESTED,BUFFER_POOL,ROW_MOVEMENT,GLOBAL_STATS,USER_STATS,DURATION,SKIP_CORRUPT,MONITORING,CLUSTER_OWNER,DEPENDENCIES,COMPRESSION,DROPPED from user_tables-- 查看物化视图刷新时间 SQL select owner,mview_name,last_refresh_type,last_refresh_date from user_mviews; OWNER MVIEW_NAME LAST_REF LAST_REFRESH_DATE ---------- ------------------------------ -------- ------------------- ZLM MY_MVIEWS COMPLETE 2023-08-03 16:07:15-- 手动刷新物化视图 SQL exec dbms_mview.refresh(my_mviews);PL/SQL procedure successfully completed.SQL select owner,mview_name,last_refresh_type,last_refresh_date from user_mviews;OWNER MVIEW_NAME LAST_REF LAST_REFRESH_DATE ---------- ------------------------------ -------- ------------------- ZLM MY_MVIEWS COMPLETE 2023-08-03 16:21:45-- 再次查询物化视图此时 view_2 也能被捕获到了这样就无需重复建表当有新视图被创建的时候只需手动刷新物化视图即可 SQL select owner,view_name,text from my_mviews where owner not in(SYS, SYSTEM, SYSMAN, OUTLN, DIP, TSMSYS, DBSNMP,ORACLE_OCM, WMSYS, EXFSYS, XDB, ANONYMOUS, ORDSYS,ORDPLUGINS, SI_INFORMTN_SCHEMA, MDSYS, MGMT_VIEW, PERFSTAT,DMSYS, CTXSYS, OLAPSYS, MDDATA, APPQOSSYS, XS$NULL,ORDDATA, SPATIAL_WFS_ADMIN_USR, SPATIAL_CSW_ADMIN_USR,OWBSYS, APEX_PUBLIC_USER, APEX_030200, FLOWS_FILES, SCOTT,OMS, OWBSYS_AUDIT, DSG, DBMGR, PATROL, SPA, GOLDENGATE,DBADM) and (text like %USER_TAB_COLUMNS% or text like %user_tab_columns% or text like %USER%TABLES% or text like %user%tables% or text like %ALL_TAB_COLUMNS% or text like %ALL_tab_columns% or text like %ALL%TABLES% or text like %ALL%tables%); 2 3 4 5 6 7 8 OWNER VIEW_NAME TEXT ---------- ------------------------------ -------------------------------------------------------------------------------- ZLM VIEW_1 select TABLE_NAME,TABLESPACE_NAME,CLUSTER_NAME,IOT_NAME,STATUS,PCT_FREE,PCT_USED,INI_TRANS,MAX_TRANS,INITIAL_EXTENT,NEXT_EXTENT,MIN_EXTENTS,MAX_EXTENTS,PCT_INCREASE,FREELISTS,FREELIST_GROUPS,LOGGING,BACKED_UP,NUM_ROWS,BLOCKS,EMPTY_BLOCKS,AVG_SPACE,CHAIN_CNT,AVG_ROW_LEN,AVG_SPACE_FREELIST_BLOCKS,NUM_FREELIST_BLOCKS,DEGREE,INSTANCES,CACHE,TABLE_LOCK,SAMPLE_SIZE,LAST_ANALYZED,PARTITIONED,IOT_TYPE,TEMPORARY,SECONDARY,NESTED,BUFFER_POOL,ROW_MOVEMENT,GLOBAL_STATS,USER_STATS,DURATION,SKIP_CORRUPT,MONITORING,CLUSTER_OWNER,DEPENDENCIES,COMPRESSION,DROPPED from user_tablesZLM VIEW_2 select TABLE_NAME,TABLESPACE_NAME,CLUSTER_NAME,IOT_NAME,STATUS,PCT_FREE,PCT_USED,INI_TRANS,MAX_TRANS,INITIAL_EXTENT,NEXT_EXTENT,MIN_EXTENTS,MAX_EXTENTS,PCT_INCREASE,FREELISTS,FREELIST_GROUPS,LOGGING,BACKED_UP,NUM_ROWS,BLOCKS,EMPTY_BLOCKS,AVG_SPACE,CHAIN_CNT,AVG_ROW_LEN,AVG_SPACE_FREELIST_BLOCKS,NUM_FREELIST_BLOCKS,DEGREE,INSTANCES,CACHE,TABLE_LOCK,SAMPLE_SIZE,LAST_ANALYZED,PARTITIONED,IOT_TYPE,TEMPORARY,SECONDARY,NESTED,BUFFER_POOL,ROW_MOVEMENT,GLOBAL_STATS,USER_STATS,DURATION,SKIP_CORRUPT,MONITORING,CLUSTER_OWNER,DEPENDENCIES,COMPRESSION,DROPPED from USER_TABLES解决方案 将存储过程中的 user_tab_columns 视图替换成 all_tab_columns虽然可作为临时方案不过存在以下缺点 需要修改业务代码即替换存储过程中查询相关系统视图的部分。使用同义词来访问对象的用户需要有 SELECT ANY TABLE 的系统权限否则即便使用 all_ 的视图也查询不到目标对象。赋予执行用户 dba 权限并修改原有查询 SQL增加 ownerXXX 的条件存在安全隐患不推荐。OB 能提供一个 hotfix patch 来彻底解决该问题。 问题总结 在 OB 中普通用户查询 USER_TAB_COLUMNS 系统视图权限的逻辑与 Oracle 并不一致导致查询结果有差异。 除了 USER_TAB_COLUMNS 视图还有其他以 USER_ 开头的视图也存在类似的问题比如USER_SYNONYMS、USER_TABLES 等。 对于系统中已有的对象应尽快排查并确认在哪些对象中用到了这些系统视图在该问题被彻底修复前建议先对相关代码进行临时修改使其能继续完成后续的功能验证。 更多技术文章请访问https://opensource.actionsky.com/ 关于 SQLE 爱可生开源社区的 SQLE 是一款面向数据库使用者和管理者支持多场景审核支持标准化上线流程原生支持 MySQL 审核且数据库类型可扩展的 SQL 审核工具。 SQLE 获取 类型地址版本库https://github.com/actiontech/sqle文档https://actiontech.github.io/sqle-docs/发布信息https://github.com/actiontech/sqle/releases数据审核插件开发文档https://actiontech.github.io/sqle-docs/docs/dev-manual/plugins/howtouse

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/87344.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

网站开发专业都有哪些课程Wordpress虚拟域名

初中英语语法——形容词与副词(二)比较的用法语法解释1、形容词与副词比较级和最高级的规则变化单音节词与部分双音节词:(1)一般情况加-er,-estlong-longer-longest strong-stronger-strongestclean-cleaner-cleanest(2)以不发音的e结尾的词,…

现在网站开发哪个语言好宿州市住房和城乡建设局网站

简介:vPaaS全新定义企业级音视频应用开发 1月5日,阿里云视频云“低代码音视频工厂vPaaS“正式上线,极大程度降低音视频开发门槛,打破传统音视频技术壁垒,全新定义企业级的音视频应用开发。 低代码音视频工厂基于云原生…

电子商务网站建设岗位要求做金融类网站

前后端交互时的数据传输模型 前后端交互流程 前后端交互的流程: 前端与后端开发人员之间主要依据接口进行开发 前端通过Http协议请求后端服务提供的接口后端服务的控制层Controller接收前端的请求Contorller层调用Service层进行业务处理Service层调用Dao持久层对数据持久化 …

景区官方网站建设方案网站屏蔽省份

气候变化对农业、生态系统、社会经济以及人类的生存与发展具有深远影响,是当前全球关注的核心议题之一。IPCC(Intergovernmental Panel on Climate Change,政府间气候变化专门委员会)的第六次评估报告明确;指出&#x…

app手机软件开发沧州快速关键词排名优化

文章目录1. 问题描述2. 问题分析2.1 回溯法求解2.2 DP状态转移方程法2.3 DP状态转移表法1. 问题描述 找零问题,在贪心算法讲过。但是贪心不一定能得出最优解。假设有几种不同币值的硬币v1,v2,.……vn(单位是元)。如果…

手游网站建设方案预算短视频制作自学教程

一.选择字体 二.批量替换 编辑—>替换相同字体

网站建设是属于虚拟产品吗网站设计公司电话

目录 无法加载响应数据解决 无法加载响应数据 上线项目时 改用服务器上的redis和MySQL 出现请求能请求到后端,后端也能正常返回数据,但是在前端页面会显示 以为是跨域问题,但是环境还在本地,排除跨域问题以为是服务器问题&#…

外国教程网站有哪些网站推广公司需要多少钱

Service的表现形式为IP地址端口号的方式,即工作在TCP/IP层,而对于基于HTTP的服务来说,Service机制很难实现,7层应用的复杂转发逻辑。kubernetes在1.1版本开始引入ingress资源对象,用于将集群外部的客户端请求路由到集群…

苏州网站建设培训开发一个商城网站需要多少钱

SpringBoot中的RestTemplate使用笔记 为了方便使用,这里我封装成一个工具类来静态调用RestTemplate以下代码是基于SpringBoot2.4.2版本写的案例 需要配置的application.yml如下 server:port: 7024servlet:context-path: /demosession:timeout: 30m #默认会话过期…

太和县建设银行网站网站开发技巧

1.安装 sudo apt-get install mysql-server sudo mysql -u root -p2.关系模型 在关系数据库中,一张表中的每一行数据被称为一条记录。一条记录就是由多个字段组成的。 每一条记录都包含若干定义好的字段。同一个表的所有记录都有相同的字段定义。 对于关系表&#…

滨湖区知名做网站选哪家备案 几个网站

1.问题简介 1.1问题描述 在这个问题中,你将面临一个经典的机器学习分类挑战——猫狗大战。你的任务是建立一个分类模型,能够准确地区分图像中是猫还是狗。 1.2预期解决方案 你的目标是通过训练一个机器学习模型,使其在给定一张图像时能够准…

网站建设经验交流发言wordpress底部自豪采用

通信公司“内鬼” 批量提供手机卡 超6万张手机卡用来发涉赌短信 2023年10月2日,据报道2022年12月,湖北省公安厅“雷火”打击整治治安突出问题专项行动指挥部研判发现,有人在湖北随州利用虚拟拨号设备GOIP发出大量赌博短信。随州市公安局研判…

网站建设+人员+年终总结响应式网站算几个页面

1143.最长公共子序列 题目要求:给定两个字符串 text1 和 text2,返回这两个字符串的最长公共子序列的长度。 一个字符串的 子序列 是指这样一个新的字符串:它是由原字符串在不改变字符的相对顺序的情况下删除某些字符(也可以不删…

湖南餐饮网站建设上海建站模板厂家

给定一个 n 个点 m 条边的有向图,图中可能存在重边和自环,所有边权均为非负值。 请你求出 1 号点到 n 号点的最短距离,如果无法从 1 号点走到 n 号点,则输出 −1 。 输入格式 第一行包含整数 n 和 m 。 接下来 m 行每行包含三个…

wordpress 免费主题站交互 网站

这是目录 **一、引言****二、Spring Boot Starter基本概念****三、Spring Boot Starter的主要特点****四、Spring Boot Starter的应用场景****五、Spring Boot Starter的实现原理****六、自定义spring boot starter****为什么要创建自定义Starter?****创建自定义Spr…

小蘑菇网站建设软件要做好网络营销首先要

描述 E5071C网络分析仪提供同类产品中最高的RF性能和最快的速度,具有宽频率范围和多功能。E5071C是制造和R&D工程师评估频率范围高达20 GHz的RF元件和电路的理想解决方案。特点: 宽动态范围:测试端口的动态范围> 123 dB(典型值)快速测量速度:41毫秒全2端口…

网站seo自己怎么做网站开发者工具的网络选项

1、题目 2、工具 jd-gui:Java反汇编器。 ​python:编写自动化脚本。 3、方法 下载压缩包,解压得到一个.class文件。 ​题目已经说了是java逆向,所以使用jd-gui打开该文件。 代码如下: import java.io.PrintStream; …

如何建设网站的论文跨境电商亚马逊

预加载图片是提高用户体验的一个很好方法。图片预先加载到浏览器中,访问者便可顺利地在你的网站上冲浪,并享受到极快的加载速度。这对图片画廊及图片占据很大比例的网站来说十分有利,它保证了图片快速、无缝地发布,也可帮助用户在…

投资建设网站一站式服务门户

3.组件插槽 3-1组件插槽 注意 插槽内容可以访问到父组件的数据作用域,因为插槽内容本身就是在父组件模版中定义的 插槽内容无法访问子组件的数据.vue模版中的表达式只能访问其定义时所处的作用域,这和JavaScript的词法作用域是一致的,换言之: 父组件模版的表达式只能访问父组…

网站建设是什么职位在线阅读小说网站怎么做

exiftool:查看图片的exif信息。 pngcheck:修复被破坏的png图片 pngtools:深入研究png文件的数据 steganographic:用来提取图片中的隐藏信息 stegsolve.jar:kali中没有该工具,但是可以自己下 gimp:提供了转换各类图像文件可视化数据的功能,还可…