[20181015]12C SQL Translation Framework.txt
[20181015]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
--//和前面的能对上.
SCOTT@test01p> set linesize 100
SCOTT@test01p> DECLARE
2 content CLOB;
3 BEGIN
4 DBMS_SQL_TRANSLATOR.EXPORT_PROFILE(
5 profile_name => 'ODBC_PROFILE',
6 content => content);
7 dbms_output.put_line(content);
8 END;
9 /
<SQLTranslationProfile ForeignSQLSyntax="TRUE" TranslateNewSQL="TRUE" RaiseTranslationError="FALSE"
LogTranslationError="FALSE" TraceTranslation="FALSE" LogErrors="FALSE"
Editionable="TRUE"><SQLTranslations><SQLTranslation Enabled="TRUE"><SQLText>SELECT INVALID SELECT
STATEMENT TO FORCE ODBC DRIVER TO UNPREPARED STATE</SQLText><TranslatedText>SELECT DUMMY FROM
DUAL</TranslatedText><RegistrationTime>2018-10-13T21:02:21.964000</RegistrationTime></SQLTranslation
></SQLTranslations><ErrorTranslations></ErrorTranslations></SQLTranslationProfile>
PL/SQL procedure successfully completed.
[20181015]12C SQL Translation Framework.txt的更多相关文章
- [20181225]12CR2 SQL Plan Directives.txt
[20181225]12CR2 SQL Plan Directives.txt --//12C引入SQL PLAN Directives.12cR1版本会造成大量的动态取样,影响性能.许多人把OPTI ...
- [20181105]再论12c set feedback only.txt
[20181105]再论12c set feedback only.txt --//前一阵子的测试,链接:http://blog.itpub.net/267265/viewspace-2216290/ ...
- [20181015]为什么是3秒.txt
[20181015]为什么是3秒.txt --//以前测试:连接http://blog.itpub.net/267265/viewspace-2144765/=>为什么是12秒.txt.--// ...
- [20181007]12cR2 Using SQL Patch 2.txt
[20181007]12cR2 Using SQL Patch 2.txt --//12cR2 已经把sql打补丁集成进入dbms_sqldiag,不是11g的 DBMS_SQLDIAG_INTERN ...
- [20180914]oracle 12c 表 full_hash_value如何计算.txt
[20180914]oracle 12c 表 full_hash_value如何计算.txt --//昨天在12c下看表full_hash_value与11g的full_hash_value不同,不过 ...
- [20170603]12c Top Frequency histogram.txt
---恢复内容开始--- [20170603]12c Top Frequency histogram.txt --//个人对直方图了解很少,以前2种直方图类型对于目前的许多应用来讲已经足够,或者讲遇到 ...
- Oracle 12c SQL Developer连接报错(ORA-12505)
Oracle 12c SQL Developer连接报错(ORA-12505) 连接时报错码:Listener refused the connection with following error: ...
- sql 读取本地txt文件批量插入数据库
--导入 INSERT INTO [netmonsdb].[dbo].[keywordlist]([keyword]) SELECT * FROM OPENROWSET( BULK 'D:/xmsys ...
- 20181015记录一个简单的TXT日志类
20190422添加换行以及时间记录 using System; using System.Collections.Generic; using System.IO; using System.Lin ...
随机推荐
- Android数据保存之SharedPreference
前言: 程序中处理的大部分问题都与数据有关,读取数据显示在UI上,读取的数据可以是本地的,也可以是网络的.保存用户数据到存储空间,可以是本地的数据库,文件等,也可以是保存到网络服务器.总之大部分的程序 ...
- 微信分享config:ok 但自定义内容无效
一.问题 使用微信 JSSDK 分享,出现自定义内容无效 ,也就是分享出去的内容不是你配置的内容. 但在调试过程中发现 congfig 都是 ok 的 二.解决 检查config 配置是否正确 js ...
- "i=i++"在java等高级语言的解释
前言 最近学习我在的团队招人,面试.我出了一道c的题. int main(){ ; i+=++i; printf("%d",i); } 别喷!今晚学长们说,java,c#中完全不同 ...
- 前端XSS相关整理
前端安全方面,主要需要关注 XSS(跨站脚本攻击 Cross-site scripting) 和 CSRF(跨站请求伪造 Cross-site request forgery) 当然了,也不是说要忽略 ...
- 给HTML页面指定元素添加属性,添加父元素
给HTML页面指定元素添加属性,添加父元素 下面拿一个给富文本中所有的图片增加layer弹窗效果. 思路: 给富文本父元素设置属性. 获取父元素里所有的img 此处用到querySelectorA ...
- Docker容器Tomcat部署war包
在docker容器中使用tomcat部署war包主要包括四个步骤,创建tomcat容器.上传war包到容器.重启容器.访问应用. 1.创建tomcat容器 使用docker run -d --nam ...
- JavaScript 系列博客(四)
JavaScript 系列博客之(四) 前言 本篇介绍 JavaScript 中的对象.在第一篇博客中已经说到 JavaScript 是一种''对象模型''语言.所以可以这样说,对象是 JavaScr ...
- Web网站配置Gzip,压缩js css文件
启用apache的gzip 找到httpd.conf,打开文件找到对mod_deflate的注释 #LoadModule deflate_module modules/mod_deflate.so 去 ...
- mybatis_02简单操作数据库
模糊查询用户信息 <!-- [${}]:表示拼接SQL字符串 [${value}]:表示要拼接的是简单类型参数. 注意: 1.如果参数为简单类型时,${}里面的参数名称必须为value 2.${ ...
- Python_简单三级菜单制作
一:制作要求 1.三级菜单 2.可依次选择进入各子菜单 3.所需新知识点:字典,列表 *本文通过三种方法完成,第一种:只使用循环,第二种:使用列表,第三种:使用字典 二:FlowChart流程图 与上 ...