[20181013]12C SQL Translation Framework.txt --//12c提供一个dba改写sql语句的可能性,实际上10g,11g之前也有一个包DBMS_ADVANCED_REWRITE能实现类似的功能. --//这种功能实在是一种旁门左道,还是测试看看. --//不过如果程序存在大量的执行错误,一样会影响性能,导致出现SQL*Net break/reset to client. --//参考连接:0624使用10035事件跟踪无法执行的sql语句 =>http://blog.itpub.net/267265/viewspace-2120884/ --//http://www.itpub.net/thread-2061952-1-1.html 1.环境: SCOTT@test01p> @ ver1 PORT_STRING VERSION BANNER CON_ID ------------------------------ -------------- -------------------------------------------------------------------------------- ---------- IBMPC/WIN_NT64-9.1.0 12.2.0.1.0 Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production 0 2.测试: begin dbms_sql_translator.create_profile('test_profile'); dbms_sql_translator.register_sql_translation( profile_name => 'test_profile', sql_text => 'select sysdate', translated_text => 'SELECT SYSDATE FROM DUAL'); end; / --//注sql_text可以写不对,但是前面一定开始是select,不然sqlplus无法识别是sql语句. SCOTT@test01p> alter session set sql_translation_profile=test_profile; Session altered. SCOTT@test01p> alter session set events = '10601 trace name context forever, level 32'; Session altered. D:\tools\rlwrap>oerr ora 10601 10601, 00000, "turn on debugging for cursor_sharing (literal replacement)" // *Cause: // *Action: SCOTT@test01p> select sysdate; SYSDATE ------------------- 2018-10-15 20:24:21 SCOTT@test01p> Select sysdate; Select sysdate * ERROR at line 1: ORA-00923: FROM keyword not found where expected --//一定要与原来文本一样. --//刷新共享池问题: SCOTT@test01p> alter system flush shared_pool; System altered. SCOTT@test01p> select sysdate; SYSDATE ------------------- 2018-10-15 20:27:07 SCOTT@test01p> SELECT INVALID SELECT STATEMENT TO FORCE ODBC DRIVER TO UNPREPARED STATE; D - X SYS@test> alter system flush shared_pool; System altered. SCOTT@test01p> select sysdate; SYSDATE ------------------- 2018-10-15 20:27:50 --//我记忆里早期12.1.0.1版本刷新共享池后执行会报错.12cR2版本修复这个错误. 3.看看记录在那些表中,如何删除等等操作. --//涉及视图: DBA_ERROR_TRANSLATIONS DBA_SQL_TRANSLATION_PROFILES DBA_SQL_TRANSLATIONS SCOTT@test01p> @ pt2 'select * from DBA_SQL_TRANSLATIONS where PROFILE_NAME=''TEST_PROFILE'''; ROW_NUM COL_NUM COL_NAME COL_VALUE ---------- ---------- -------------------- ------------------------------------------------------------- 1 1 OWNER SCOTT 2 PROFILE_NAME TEST_PROFILE 3 SQL_TEXT select sysdate 4 TRANSLATED_TEXT SELECT SYSDATE FROM DUAL 5 SQL_ID bw2c1d6sqyjpy 6 HASH_VALUE 2976859838 7 ENABLED TRUE 8 REGISTRATION_TIME 2018-10-15 20:23:15.415000 8 rows selected. SYS@test> @ sharepool/shp4 bw2c1d6sqyjpy 0 TEXT KGLHDADR KGLHDPAR C40 KGLHDLMD KGLHDPMD KGLHDIVC KGLOBHD0 KGLOBHD6 KGLOBHS0 KGLOBHS6 KGLOBT16 N0_6_16 N20 KGLNAHSH KGLOBT03 KGLOBT09 -------------- ---------------- ---------------- -------------- -------- ---------- ---------- ---------------- ---------------- ---------- ---------- ---------- --------- ---------- ---------- ------------- ---------- 父游标句柄地址 000007FF130DCBC8 000007FF130DCBC8 select sysdate 1 0 0 00 00 0 0 0 0 0 2327677740 bw2c1d6sqyjpy 0 --//看到一个很奇怪的父游标句柄,没有子游标,而且父游标的堆0是0. --//如果还有一些语句还可以加入: BEGIN dbms_sql_translator.register_sql_translation ( profile_name => 'test_profile' ,sql_text => 'select user' ,translated_text => 'SELECT usera FROM DUAL' ); END; / SCOTT@test01p> select user; USER -------------------- SCOTT --//删除执行如下: SCOTT@test01p> exec dbms_sql_translator.drop_profile(profile_name => 'test_profile'); PL/SQL procedure successfully completed. SCOTT@test01p> select sysdate; select sysdate * ERROR at line 1: ORA-00923: FROM keyword not found where expected SCOTT@test01p> @ pt2 'select * from DBA_SQL_TRANSLATIONS where PROFILE_NAME=''TEST_PROFILE'''; no rows selected 4.顺便看看这个包dbms_sql_translator的其它功能: --//可以使用它计算sql_id: SCOTT@test01p> select dbms_sql_translator.SQL_ID('select sysdate') c20 from dual ; C20 -------------------- bw2c1d6sqyjpy --//和前面的能对上.
12C SQL Translation Framework.txt
来源:这里教程网
时间:2026-03-03 12:05:35
作者:
编辑推荐:
- 12C SQL Translation Framework.txt03-03
- Word2010怎样新建文档03-03
- 如何解决Word文档中小标题在一页底部的办法03-03
- [20181015]为什么是3秒.txt03-03
- oracle 11g 单实例数据库的安装03-03
- Oracle 12CR2查询转换之视图合并03-03
- Word2010创建新的项目符号实例教程03-03
- word2010中怎样录制宏03-03
下一篇:
相关推荐
-
雷神推出 MIX PRO II 迷你主机:基于 Ultra 200H,玻璃上盖 + ARGB 灯效
2 月 9 日消息,雷神 (THUNDEROBOT) 现已宣布推出基于英
-
制造商 Musnap 推出彩色墨水屏电纸书 Ocean C:支持手写笔、第三方安卓应用
2 月 10 日消息,制造商 Musnap 现已在海外推出一款 Oce
热文推荐
- DBF导入到Oracle数据库
DBF导入到Oracle数据库
26-03-03 - oracle 11g 单实例数据库的安装
oracle 11g 单实例数据库的安装
26-03-03 - 恩墨放大招|OCM直通之路系列课程免费听
恩墨放大招|OCM直通之路系列课程免费听
26-03-03 - ASM元数据之FST损坏的修复
ASM元数据之FST损坏的修复
26-03-03 - Oracle表 列字段的增加、删除、修改以及重命名操作sql
Oracle表 列字段的增加、删除、修改以及重命名操作sql
26-03-03 - 如何修复Word2007/2010文档中插入图片显示空白框的方法
如何修复Word2007/2010文档中插入图片显示空白框的方法
26-03-03 - Word2010页边距的设置图解
Word2010页边距的设置图解
26-03-03 - 18C新特性之PDB snapshot Carousel,够用吗?
18C新特性之PDB snapshot Carousel,够用吗?
26-03-03 - 利用Connect By构造数列
利用Connect By构造数列
26-03-03 - sqlldr 导入乱码解决办法
sqlldr 导入乱码解决办法
26-03-03
