TAUS Dynamic Quality Framework, Rahzeb Choudhury, Translation Technology Showcase, Seattle, 17 10-12
SQL Translation Framework - DOAG Deutsche ORACLE ... · PDF fileSQL Translation Framework ......
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