SQL Translation Framework - DOAG Deutsche ORACLE ... · PDF fileSQL Translation Framework ......

Post on 08-Mar-2018

223 views 2 download

Transcript of SQL Translation Framework - DOAG Deutsche ORACLE ... · PDF fileSQL Translation Framework ......

SQL Translation Framework

ADAM BOLIŃSKI

TIENTO DB ApplianceEVENT CNT MS AVG_MS———————————————————————————————————

DiskfileoperationsI/O 23 0.78 .034

DiskfileI/OCalibration 279612790 559225.58.002controlfilesequentialread 217 1.519.007

controlfileparallelwrite 29 .522 .018

dbfilesequentialread 7 .098 .014

Calibrate_IOResults

—————————

max_iops=5037421latency=0

max_mbps=32912

Run non-Oracle apps

against Oracle,

translate SQL on-the-fly

SQL Translation Framework

- SQL Translation Profile – collection of translated statements

• Each application or user can have its own profile

- SQL Translator – java engine that translates the SQL

SQL Translation Framework Benefits

- Test and Verify application code before production

- Convert Applications To Oracle Quicker

- Change Bad Written SQL query

SQL Translation Framework

Let’s migrate ”almost brand new” App

How it works

12

34

5Framework receivesSelect Top 2 * from T1

Performs static lookup of a conversion in the SQL Translation Dictionary Not Available: Generate the Fingerprint

“Select Top <ora:literaltype=integer order=1> *

From T1”

Lookup fingerprint in the SQL Translation Dictionary

Available: Gets the Fingerprint

“Select * From T1 FETCH FIRST <ora:literal type=integer order=1> ROWS ONLY“

Processes the Template with values acquired

“Select * From T1 FETCH FIRST 2 ROWS ONLY“

Returns the translated SQL to

the Framework

How it works

Installation

Scratch editor

sqlplus system/<password>

SQL> grant create sql translation profile to <user>;

Grant create privileges to the standard user.This allows the standard user to create a SQL Translation Profile.

Login as a standard user.

sqlplus <user>/<password>Invoke the methods of DBMS_SQL_TRANSLATOR PL/SQL package to create and configure the translation profile.

SQL> exec dbms_sql_translator.create_profile('sybase_profile') SQL> exec dbms_sql_translator.set_attribute('sybase_profile', dbms_sql_translator.attr_translator, 'migration_repo.sybase_tsql_translator')

SYBASE usage

Setting Up a Database Service to Use the SQL Translation Profile

Setting Up a Database Service in a Standard Environment

SQL> declare params dbms_service.svc_parameter_array; begin params('SQL_TRANSLATION_PROFILE') := 'user.sybase_profile'; dbms_service.create_service('sybase_service', 'network_name', params); dbms_service.start_service('sybase_service'); end; /

Setting Up a Database Service in Oracle Real Application Clusters

srvctl add service -db db_name -service sybase_service -sql_translation_profileuser.sybase_profile

srvctl start service -db db_name -service sybase_service

Connect profile to service

How to “Repair” BAD SQL before 12c …

SQL> beginsys.dbms_sqldiag_internal.i_create_patch(sql_text => 'select table_name from

a_test a where table_name=''xxx''',hint_text =>'FULL(@"SEL$1""A"@"SEL$1")',

name => 'patch_test');end;/

1 3Outlines Baselines SQLProfiles SQLPatches2 4

SQL Repair

How to start using

Create profileexec dbms_sql_translator.create_profile('T01');

BEGINDBMS_SQL_TRANSLATOR.REGISTER_SQL_TRANSLATION(

profile_name => 'T01',sql_text => 'select count(*) from dba_tables',translated_text => 'select index_name from dba_indexes where rownum<10');

END;

Register Translation

Alter Session to test translationalter session set sql_translation_profile = T01;alter session set events = '10601 trace name context forever, level 32';

EXAMPLE

BEGINDBMS_SQL_TRANSLATOR.REGISTER_SQL_TRANSLATION(

profile_name => 'T01',sql_text => 'select 888 from dual',translated_text => 'select 11111 from dual);

END;

exec dbms_sql_translator.create_profile('T01');

select 888 from dual;

11111

SQL_ID 7tr6y6c6ua5df, child number 0-------------------------------------select 11111 from dual--------------------------------------------------------| Id | Operation | Name | Rows | Cost (%CPU)| Time |--------------------------------------------------------| 0 | SELECT STATEMENT | | | 2 (100)| || 1 | FAST DUAL | | 1 | 2 (0)| 00:00:01 |--------------------------------------------------------

SQL> exec dbms_sql_translator.create_profile(‘BIND_TEST’);PL/SQL procedure successfully completed.SQL> BEGIN DBMS_SQL_TRANSLATOR.REGISTER_SQL_TRANSLATION(profile_name => 'BIND_TEST', sql_text => 'SELECT COUNT(*) FROM bigtab WHERE object_id = :B1', translated_text => 'SELECT COUNT(*) FROM t_empty WHERE object_id = :B1'); END;

SQL> conn test/testConnected.SQL> variable B1 numberSQL> exec :B1 := 12345PL/SQL procedure successfully completed.

SQL> SELECT COUNT(*) bigtab WHERE object_id= :B1;

COUNT(*)----------12

SQL> alter session set sql_translation_profile= BIND_TEST;SQL> alter session set events = '10601 trace name context forever, level 32';

SQL> SELECT COUNT(*) t_empty WHERE object_id= :B1;

COUNT(*)----------0

EXAMPLE

Translation listing

Looking at SQL Translation Profiles in the database

Use [CDB|DBA|USER]_SQL_TRANSLATION_PROFILES

Look at the translation details

OWNER TESTPROFILE_NAME T01SQL_TEXT select * from transactions where trans_number=2000TRANSLATED_TEXT select * from transactions where trans_number='2000'SQL_ID 4fu1jz0442a28HASH_VALUE 138487880ENABLED TRUECON_ID 4

Use [CDB|DBA|USER]_SQL_TRANSLATIONS

Monitoring & Tracing

Tracing execDBMS_SQL_TRANSLATOR.SET_ATTRIBUTE(profile_name =>'TRANS',attribute_name =>DBMS_SQL_TRANSLATOR.ATTR_TRACE_TRANSLATION,attribute_value =>'TRUE');

select*fromV$MAPPED_SQL;

2 3

Injection ?

1N E T W O R K M O N I T O R I N G S O L U T I O N S

Guardium Imperva SNORT

selectgranteefromdba_tab_privs wheretable_name='DBMS_SQL_TRANSLATOR';

GRANTEE-----------

PUBLIC

1

2

3

4

5

WHY I LIKE IT

LICENSING !!! – FREE IN Oracle EE

Easy to Export and Import Between Databases

Extremely Easy to Use

Great way to Block Bad Written SQL Query

You can use it on Standby Databases

UseFull links

• Kerry Osborne Blog

• MOS

• SQL Translation Framework OBE

• Tiento Blog

http://www.oracle.com/webfolder/technetwork/tutorials/obe/db/12c/r1/12c_sqldev/sql_translation_sql_dev/sql_translation_sql_dev.html

http://kerryosborne.oracle-guy.com/2013/07/sql-translation-framework/

http://blog.tiento.pl/sql-translation-framework/

Note 1586667.1Note 1585091.1

BASIC DEMo Systemtap