sql translation framework - doag deutsche oracle ... · pdf filesql translation framework ......

20
SQL Translation Framework ADAM BOLIŃSKI

Upload: vuphuc

Post on 08-Mar-2018

232 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: SQL Translation Framework - DOAG Deutsche ORACLE ... · PDF fileSQL Translation Framework ... • Kerry Osborne Blog • MOS

SQL Translation Framework

ADAM BOLIŃSKI

Page 2: SQL Translation Framework - DOAG Deutsche ORACLE ... · PDF fileSQL Translation Framework ... • Kerry Osborne Blog • MOS

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

Page 3: SQL Translation Framework - DOAG Deutsche ORACLE ... · PDF fileSQL Translation Framework ... • Kerry Osborne Blog • MOS

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

Page 4: SQL Translation Framework - DOAG Deutsche ORACLE ... · PDF fileSQL Translation Framework ... • Kerry Osborne Blog • MOS

Let’s migrate ”almost brand new” App

Page 5: SQL Translation Framework - DOAG Deutsche ORACLE ... · PDF fileSQL Translation Framework ... • Kerry Osborne Blog • MOS

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

Page 6: SQL Translation Framework - DOAG Deutsche ORACLE ... · PDF fileSQL Translation Framework ... • Kerry Osborne Blog • MOS

How it works

Page 7: SQL Translation Framework - DOAG Deutsche ORACLE ... · PDF fileSQL Translation Framework ... • Kerry Osborne Blog • MOS

Installation

Page 8: SQL Translation Framework - DOAG Deutsche ORACLE ... · PDF fileSQL Translation Framework ... • Kerry Osborne Blog • MOS

Scratch editor

Page 9: SQL Translation Framework - DOAG Deutsche ORACLE ... · PDF fileSQL Translation Framework ... • Kerry Osborne Blog • MOS

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

Page 10: SQL Translation Framework - DOAG Deutsche ORACLE ... · PDF fileSQL Translation Framework ... • Kerry Osborne Blog • MOS

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

Page 11: SQL Translation Framework - DOAG Deutsche ORACLE ... · PDF fileSQL Translation Framework ... • Kerry Osborne Blog • MOS

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

Page 12: SQL Translation Framework - DOAG Deutsche ORACLE ... · PDF fileSQL Translation Framework ... • Kerry Osborne Blog • MOS

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';

Page 13: SQL Translation Framework - DOAG Deutsche ORACLE ... · PDF fileSQL Translation Framework ... • Kerry Osborne Blog • MOS

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 |--------------------------------------------------------

Page 14: SQL Translation Framework - DOAG Deutsche ORACLE ... · PDF fileSQL Translation Framework ... • Kerry Osborne Blog • MOS

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

Page 15: SQL Translation Framework - DOAG Deutsche ORACLE ... · PDF fileSQL Translation Framework ... • Kerry Osborne Blog • MOS

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

Page 16: SQL Translation Framework - DOAG Deutsche ORACLE ... · PDF fileSQL Translation Framework ... • Kerry Osborne Blog • MOS

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;

Page 17: SQL Translation Framework - DOAG Deutsche ORACLE ... · PDF fileSQL Translation Framework ... • Kerry Osborne Blog • MOS

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

Page 18: SQL Translation Framework - DOAG Deutsche ORACLE ... · PDF fileSQL Translation Framework ... • Kerry Osborne Blog • MOS

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

Page 19: SQL Translation Framework - DOAG Deutsche ORACLE ... · PDF fileSQL Translation Framework ... • Kerry Osborne Blog • MOS

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

Page 20: SQL Translation Framework - DOAG Deutsche ORACLE ... · PDF fileSQL Translation Framework ... • Kerry Osborne Blog • MOS

BASIC DEMo Systemtap