[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.环境:
[email protected]> @ 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语句.

[email protected]> alter session set sql_translation_profile=test_profile;
Session altered.

[email protected]> 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:

[email protected]> select sysdate;
SYSDATE
-------------------
2018-10-15 20:24:21

[email protected]> Select sysdate;
Select sysdate
             *
ERROR at line 1:
ORA-00923: FROM keyword not found where expected
--//一定要与原来文本一样.

--//刷新共享池问题:

[email protected]> alter system flush shared_pool;
System altered.

[email protected]> select sysdate;
SYSDATE
-------------------
2018-10-15 20:27:07

[email protected]> SELECT INVALID SELECT STATEMENT TO FORCE ODBC DRIVER TO UNPREPARED STATE;
D
-
X

[email protected]> alter system flush shared_pool;
System altered.

[email protected]> 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

[email protected]> @ 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.

[email protected]> @ 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;
/

[email protected]> select user;
USER
--------------------
SCOTT

--//删除执行如下:
[email protected]> exec dbms_sql_translator.drop_profile(profile_name => ‘test_profile‘);
PL/SQL procedure successfully completed.

[email protected]> select sysdate;
select sysdate
             *
ERROR at line 1:
ORA-00923: FROM keyword not found where expected

[email protected]> @ pt2 ‘select * from DBA_SQL_TRANSLATIONS where PROFILE_NAME=‘‘TEST_PROFILE‘‘‘;
no rows selected

4.顺便看看这个包dbms_sql_translator的其它功能:

--//可以使用它计算sql_id:
[email protected]> select dbms_sql_translator.SQL_ID(‘select sysdate‘) c20  from dual ;
C20
--------------------
bw2c1d6sqyjpy

--//和前面的能对上.

[email protected]> set linesize 100
[email protected]> 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.

原文地址:https://www.cnblogs.com/lfree/p/9794875.html

时间: 2024-08-02 00:30:40

[20181015]12C SQL Translation Framework.txt的相关文章

[20181007]12cR2 Using SQL Patch 2.txt

--//12cR2 已经把sql打补丁集成进入dbms_sqldiag,不是11g的 DBMS_SQLDIAG_INTERNAL.I_CREATE_PATCH .做一个记录.--//以前的链接:http://blog.itpub.net/267265/viewspace-751900/=>[20121231]给sql打补丁.txt --//想看看打补丁的提示写入那张表.奇怪没有地方显示hint_text信息. 1.环境:[email protected]> @ ver1PORT_STRING 

OCA认证考试指南(1Z0-061)Oracle Database 12c SQL 基础

这篇是计算机类的优质预售推荐<OCA认证考试指南(1Z0-061)Oracle Database 12c SQL 基础>. Oracle认证大师(OCM)最新作品,OCA认证考试官方用书,涵盖了1Z0-061考试的所有OCA目标. 内容简介 <OCA认证考试指南(1Z0-061):Oracle Database 12c SQL基础 旨在帮助读者备战Oracle Certifi ed Associate Oracle Database 12c SQL Fundamentals I考试.书中

sql脚本读取txt文本文件插入新表

今天老大让我录入一大批数据,我的第一个想法就是用inser来一条条插入,或者用C#代码读取Excel然后再插入到数据库,经过老大的介绍.我才知道,还有用sql脚本导入数据的方法.呵呵,真的是长知识了.其实代码很简单 BULK INSERT cartemp FROM 'd:\1.txt' WITH( FIELDTERMINATOR = '\t', ROWTERMINATOR = '\n' ) 可是执行后一直报这样的错误.让我找不到原因,百度了好多解释,却解决不了我的问题 消息 4832,级别 16

[20170603]12c Top Frequency histogram.txt

---恢复内容开始--- --//个人对直方图了解很少,以前2种直方图类型对于目前的许多应用来讲已经足够,或者讲遇到的问题很少.--//抽一点点时间,简单探究12c Top Frequency histogram. --//以前的频率直方图Frequency histogram,受限bucket(桶的大小),如果有255个不同值,oracle分析后不会建立频率直方图,而是建立高--//度直方图.这样的情况会导致一些流行值的统计在显示执行计划时差距很大.而12c引入了Top Frequency h

[20181105]再论12c set feedback only.txt

--//前一阵子的测试,链接:http://blog.itpub.net/267265/viewspace-2216290/--//12CR2 ,增强了set FEEDBACK功能,加入only选项可以禁止输出信息显示,仅仅显示返回几行,有利于dba集中精力调试--//sql语句,18c还增加返回执行语句的sql_id的功能,简单测试. --//我一直以为这种功能是针对特定版本的比如仅仅对12c有效,实际上如果你使用12c的客户端连接11g,执行set feedback only应该不支持.--

sql 读取本地txt文件批量插入数据库

--导入 INSERT INTO [netmonsdb].[dbo].[keywordlist]([keyword]) SELECT * FROM OPENROWSET( BULK 'D:/xmsys/dd/dd.txt', FORMATFILE='d:/BCPFORMAT.xml' --, FIRSTROW=2 ) AS T; <?xml version="1.0"?> <BCPFORMAT xmlns="http://schemas.microsoft.

Entity Framework 与 LINQ to SQL

Entity Framework和LINQ to SQL到底有什么区别?这是一个很常见的问题.下面的表中简要罗列了两种技术的主要区别. LINQ to SQL Entity Framework 复杂度 相对不复杂 相对比较复杂 模型 域模型(Domain model) 概念数据模型(Conceptual data model) 数据库服务器 SQL Server 多种数据库产品 开发时间 快速应用开发 需要较长时间,但支持更多特性 继承 困难 容易 文件类型 DBML文件 EDMX,CDSL,M

LINQ之路10:LINQ to SQL 和 Entity Framework(下)

在本篇中,我们将接着上一篇“LINQ to SQL 和 Entity Framework(上)”的内容,继续使用LINQ to SQL和Entity Framework来实践“解释查询”,学习这些技术的关键特性.我们在此关注的是LINQ to SQL和Entity Framework中的”LINQ”部分,并会比较这两种技术的相同和不同之处.通过我们之前介绍的LINQ知识还有将来会讨论的更多LINQ Operators,相信阅者能针对LINQ to SQL和Entity Framework写出优雅

zz entity framework vs linq to sql

http://blog.csdn.net/jfchef/article/details/7632872 Entity Framework和LINQ to SQL到底有什么区别?这是一个很常见的问题.下面的表中简要罗列了两种技术的主要区别. LINQ to SQL Entity Framework 复杂度 相对不复杂 相对比较复杂 模型 域模型(Domain model) 概念数据模型(Conceptual data model) 数据库服务器 SQL Server 多种数据库产品 开发时间 快速