Extending a Proxy to Analyze and Modify Data Streams based on the Oracle Database Protocol
-
Upload
pinaet-poonsarakhun -
Category
Documents
-
view
236 -
download
1
Transcript of Extending a Proxy to Analyze and Modify Data Streams based on the Oracle Database Protocol
-
7/30/2019 Extending a Proxy to Analyze and Modify Data Streams based on the Oracle Database Protocol
1/21
Extending a Proxy to Analyze and Modify Data Streams
based on the Oracle Database Protocol
Internship Technical Report, Software Systems Engineering
Author : Pinaet Phoonsarakun
Mentor : Alexander Adam, Dipl.-Inf.
InternshipPlace : Dimensio Informatics GmbH
Chemnitz, Germany
Timeperiod : April 1September 30, 2011
-
7/30/2019 Extending a Proxy to Analyze and Modify Data Streams based on the Oracle Database Protocol
2/21
2
Internship Technical Report
Topic Name : Extending a Proxy to Analyze and Modify DataStreams Based on the Oracle Database Protocol
Author Name : Pinaet Phoonsarakun
Personal Number : 51-5708-007-7
Department : Software Systems Engineering
Mentor Name : Alexander Adam
Organization : dimensio informatics GmbH
Organization Address : Brckenstrae 4, 09111 Chemnitz, Germany
Time Period : April 1stSeptember 30th, 2011
This internship report submitted in Partial Fulfillment of the requirement for the
degree of Master of Software Systems Engineering department of the Sirindhorn
International Thai-German Graduate School of Engineering, King Mongkuts University of
Technology North Bangkok.
-
7/30/2019 Extending a Proxy to Analyze and Modify Data Streams based on the Oracle Database Protocol
3/21
3
-
7/30/2019 Extending a Proxy to Analyze and Modify Data Streams based on the Oracle Database Protocol
4/21
4
Internship Project Description
Project Title : Extending a Proxy to Analyze and Modify Data
Streams Based on the Oracle Database Protocol
Student : Mr. Pinaet Phoonsarakun
Organization Mentor : Alexander Adam, Dipl.-Inf.
Development Director,
dimensio informatics GmbH
Brckenstrae 4, 09111 Chemnitz, Germany
Phone +49 (0) 371 / 26 20 19 - 0
Fax +49 (0) 371 / 26 20 19 - 10
Email [email protected]
TGGS Advisors : Dr. Kamol Limtanyakul
Coordinator of Software Systems Engineering,
TGGS at KMUTNB Campus
1518 Pracharaj soi 1 Road (Pibulsongkram Road),
Bangsue, Bangkok 10800, Thailand
Phone +66 (0) 2 587 2904
Email [email protected]
Description:
A real database, for instance a banking database, has to deal with very large amounts
of data and complex database queries. To improve the performance of the queries and to
analyze which of those queries takes minutes, hours or, in uncommon cases, even one ormore nights, a proxy server is an efficient solution. Such a proxy is produced by dimensio
informatics GmbH.
This paper discusses that proxy server and its functionality. During my internship I
developed improvements to modify the performance of database queries for the Oracle
database.
The tasks range was from an initial extraction of the SQL statements that were sent to
the database and reached up to an own generated answer, independently from the database.
-
7/30/2019 Extending a Proxy to Analyze and Modify Data Streams based on the Oracle Database Protocol
5/21
5
Table of Contents
Abstract 6
1. Introduction .. 7
1.1 Background for proxy servers ... 7
1.2 Database drivers ... 8
1.3 The TNS protocol ..... 9
1.4 Basic and extended functionality .... 12
2. Project Description ... 13
2.1 SQL statement extracting function ..... 13
2.2 SQL statement changing function ... 14
2.3 Bind values encoding and decoding function ...... 16
2.4 Direct answer generating function ...... 183. Conclusion ... 19
Appendix A: List of Abbreviation and Acronyms ....... 20
References ... 21
-
7/30/2019 Extending a Proxy to Analyze and Modify Data Streams based on the Oracle Database Protocol
6/21
6
Abstract
This report paper discusses the internship task that was to extend the functionality of a
proxy server to improve and analyze the performance of database queries for the Oracle
database. The proxy server acts as a man in the middle. It receives requests from a client and
sends it to a destination server, afterwards receiving an answer and sending it back to client.
Before sending the request or the answer to a destination server or client, the proxy server
may observe, extract, modify, filter, redirect, or analyze it for specific purposes. The goal of
this internship was to implement functions to extract, modify, and analyze SQL statements to
improve and analyze the performance of database queries for the Oracle database and then
integrate those functions into the proxy server from dimensio informatics GmbH.
-
7/30/2019 Extending a Proxy to Analyze and Modify Data Streams based on the Oracle Database Protocol
7/21
7
1. Introduction
During four months, the internship concentrated on extending the functionality of a
proxy server which is one of the products of dimensio informatics GmbH. Due to the main
theme of the products of dimensio informatics GmbH, to speed up databases as the motto ofthe company states the spirit of speed [Dim11], a proxy server is a solution to achieve this.
The internship task is the implementation of extended functionality into the proxy
server. There were four tasks in this internship:
implement a function for extracting SQL statement from a packet sent by aclient.
develop a function for changing SQL statement in a packet sent by client. implementation of a function for encoding and decoding bind values in data
stream based on the Oracle database protocol.
develop a function for generating direct answer to client.This report is divided into three sections: the first section contains an introduction to
this internship. It contains background for proxy servers, database drivers, the TNS protocol,
and basic and extended functionality. The next section explains project which includes the
four tasks that were worked on. The last section contains the conclusion of this report.
1.1 Background for proxy servers
Proxy servers are a concept in computer networks to have a server which acts as
intermediary for requests from clients seeking resources from other servers. The proxy server
will be connected by a client to request some service, such as a file, a connection, a web page,
a database view or a table, or another resource, available from a different server. The proxy
server evaluates the request according to its functionality. For instance, it may filter traffic by
IP address or protocol according to rules in its filtering function. If the request is valid for the
filter, the proxy will provide the resource by connecting to the relevant server and requesting
the service on behalf of the client. A proxy server may optionally alter the client's request or
the server's response, and sometimes it may serve the request without contacting the specified
server. In this case, it 'caches' responses from the remote server, and returns subsequent
requests for the same content directly. For example, web proxies are commonly used to cacheweb pages from a web server to speed up access to resources [Tho06].
The proxy concept was invented in the early days of distributed computers [Sha86] as
a way to simplify and control their complexity.
The figure 1.1 illustrates how a proxy works in a simple way. In this figure, the server
in the middle shown in red acts as a proxy server. It receives a request from Charles which
acts as a client. Then the proxy forwards the request to Jonas which acts as a destination
server. Jonas spends sometime to process an answer for the request. After that, Jonas reply an
answer to the proxy, and then it forwards the answer from Jonas to Charles.
-
7/30/2019 Extending a Proxy to Analyze and Modify Data Streams based on the Oracle Database Protocol
8/21
8
Figure 1.1 Two-computer communication connected through a proxy server (shown in red)
In figure 1.1, there are a large diversity of potential purposes for the proxy to be used,
including: to block undesired requests; to log / audit usage; to bypass security / parental
controls; to scan transmitted contents for viruses and malwares before forwarding; to pass
queries and answers unmodified or act as a tunneling proxy; and to store answers from the
destination server for the frequently requests (using caching).
Proxy servers can be placed in the user's local computer or at various points between
the user and the destination servers on the Internet.
Moreover proxy servers can be used as a front-end to control and protect access to a
server on a private network, commonly also performing tasks such as load-balancing,
authentication, decryption or caching, as a reverse proxy or an Internet-facing proxy.
1.2 Database drivers
To develop extended functionality into the proxy server, this has to observe physical
packets from network traffic. The packets will be the data streams based on the Oracle
database protocol. Before database queries from a client are sent to a destination database
server, they are encoded into packets or in a format that the destination server can understand.
After finish the packet encoding, the client sends them to a destination server. Then the
destination server receives packets from the client and process replies. After that the replies
are encoded into packets and sent back to the client. Finally the client receives the replies and
decodes them in a format that it can understand. The software routine that encodes and
decodes the queries and answer is the database driver.
In other words, database drivers are client-side adapters (installed on the client
machine, not on the server) that convert requests from application programs to a protocol that
the DBMS can understand.
-
7/30/2019 Extending a Proxy to Analyze and Modify Data Streams based on the Oracle Database Protocol
9/21
9
To connect with individual databases, different database drivers require different API
(application programming interface) [Api08], for instance, JDBC driver requires JDBC API,
ODBC driver requires ODBC API, and OCCI driver requires OCCI API [Oci94].
Java Database Connectivity commonly referred to as JDBC [Jdbc05], is an API for
the Java programming language that defines how a client may access a database. It providesmethods for querying and updating data in a database. JDBC is oriented towards relational
databases. The JDBC driver gives out the connection to the database and implements the
protocol for transferring the query and result between client and database.
Open Database Connectivity commonly known as ODBC [Odbc95] is an API for
accessing database management systems. The designers of ODBC aimed to make it
independent of programming languages, database systems, and operating systems. ODBC
accomplishes platform and language independence by using an ODBC driver.
The Oracle C++ Call Interface, commonly referred to as OCCI [Occi05], provided by
Oracle Corporation. It offers C++ programmers a comfortable interface to access Oracledatabases. The OCCI classes have parameters reminiscent of SQL statements. The interface
is available since Oracle release 9i. OCCI driver provides OCCI the connection to the
database and implements the protocol for transferring the query and result between client and
database.
The overview of database driver process as mentioned above is illustrated in Figure
1.2.
Figure 1.2 Database drivers convert requests that database can understand
The four functions developed during this internship have to be flexible and able to
support all of these database drivers, in formatting data streams between clients and servers.
1.3 The TNS protocol
Since this internship has to develop functions to deal with problems in Oracle, it is
necessary to understand the Transparent Network Substrate protocol known as TNS. In the
Oracle network architecture (shown in Figure 1.2), the task of TNS is to select the Oracle
Protocol Adapter, wrapping the communication in one of the supported transport protocols,
-
7/30/2019 Extending a Proxy to Analyze and Modify Data Streams based on the Oracle Database Protocol
10/21
10
including TCP/IP, with or without TCP, Named Pipes and Sockets Direct Protocol (SDP),
which enables communication over Infiband high-speed networks [Dav07].
Figure 1.3 The Oracle network architecture
Moreover TNS is the protocol SQL*Net based on [Ora11]. The SQL*Net is the
program for establishing connections between local Oracle database clients and the related
Oracle database instance or between two different Oracle database instances through database
link.
All common physical network protocols, for instance TCP/IP, can execute TNS on
top of themselves because it is a generic logical protocol. Also TNS is based on individual
logic packets which are mapped transparently to physical packets.
To detail TNS packet, every TNS packet has an 8-byte wide global header. The 8
identical bytes of the global header are composed of:
WORD 00 00 Total packet size
WORD 00 00 Checksum of packet
BYTE 00 Type of packet
BYTE 00 Flags or Reserved
WORD 00 00 Checksum of global header.
The first two bytes (WORD) of the header are the packet length or total packet size.All values in TNS header are big-endian. The next two bytes are for the packet checksum, by
-
7/30/2019 Extending a Proxy to Analyze and Modify Data Streams based on the Oracle Database Protocol
11/21
11
default they are 0x0000. The next byte is used to indicate the packet type. The next byte is the
header flags. Normally, the flags are unused and reserved, but the 10g client may set the
value to 0x04 [Dav07]. Finally, the last two bytes are for the header checksum. Generally
they are unused by default and set to 0x0000.
TNS packet is determined by the type field and that makes the packet body differsaccordingly. Currently there are 12 different types of packet are in use.
The 12 different types of TNS packet can be roughly divided into 3 groups as
following:
Connection
Connect packet Type 1
Accept packet Type 2
Ack packet Type 3
Refuse packet Type 4
Redirect packet Type 5
Data Transfer
Data packet Type 6
NULL packet Type 7
Control Flow
Abort packet Type 9
Resend packet Type 11
Marker packet Type 12Attention packet Type 13
Control packet Type 14.
This is how they work. Firstly, a local Oracle database client sends a packet type 1,
Connect packet, to specify the service name while connecting to a Oracle database instance.
Then two things can happen if the Listener provided knows such the service: it sends the
client an Accept packet if it knows otherwise it sends the client a Redirect packet to redirect
the client to other port. If the first option happens, then the client tries authentication. If the
second option happens, then the client sends a Connect packet to the other port according to
the Redirect packet and requests access to the service. If everything is fine, the destination
server send the client an Accept packet and authentication takes place. All packets sent for
authentication are data packets. If the Listener does not know the service, then it sends the
client a packet type 4, a Refuse packet.
After the client and the server authenticated, the client sends requests and the server
sends replies. All request and reply packets are Data packets. While sending request and reply
packets, a Marker packet may have been sent for interrupting. For instance, the server will
send the client a Marker packet if it wants to stop the client sending data.
Moreover the packets that can clearly provide useful information are Refuse packets
because they point some obvious error. For example, a logon denied error with an ORA-
-
7/30/2019 Extending a Proxy to Analyze and Modify Data Streams based on the Oracle Database Protocol
12/21
12
01017 invalid user name / password". With these errors, the 54th byte indicates the problem.
A 3 is an invalid password; a 2 indicates no such user [Dav07].
This knowledge of how and when each type of TNS packet has been sent will be
applied into the second section of this report and explained about the four tasks in more
details.
1.4 Basic and extended functionality
The internship does not built a proxy server on its own but it takes a proxy server
provided by dimensio informatics GmbH instead. The main task of this internship is to
extend functionalities of that proxy server, to analyze and modify data streams based on the
Oracle database protocol. Before beginning the task, it has to observe and learn the base
functionality of that proxy in order to know where to implement those functionalities.
The proxy has basic functions as a simple proxy server:
pass-through of a connection, to initialize a connection between a client and aserver. forwarding packets, to receive packets from clients and send them to a
destination server, afterwards receiving an answer and sending it back to
client.
balancing connection, to load-balance client connections for the proxy toconnect to a server instance.
The place where to implement the extended functionalities is the function where
packets are forwarded. In this function, there were four functionalities developed:
a function for extracting SQL statements from a packet sent by a client. a function for changing SQL statements in a packet sent by client. a function for encoding and decoding bind values in data stream based on the
Oracle database protocol.
a function for generating direct answers to a client.Showing in Figure 1.3, it summaries basic and extended functionality of the proxy
server.
-
7/30/2019 Extending a Proxy to Analyze and Modify Data Streams based on the Oracle Database Protocol
13/21
13
Figure 1.4 Basic and extended functionality of the proxy server
A further description of the tasks, is given in the project description, in section two.
2. Project Description
This section will givethe explanation of the tasks worked on during the internship by
development:
a function for extracting SQL statements from a packet sent by a client. a function for changing SQL statements in a packet sent by a client. a function for encoding and decoding bind values in data stream based on the
Oracle database protocol.
a function for generating direct answers to a client.The software used for developing and testing these four functionalities, included:
1 Oracle database2 Wireshark3 QtCreator4 SQLDeveloper5 SQLPlus6 Toad for Oracle
More details are explained in the following contents
2.1 SQL statement extracting function
First of all, SQL statement extracting functionality has to be accomplished. It is used
as a basic functionality to develop more advanced functions. The SQL statement extracting
function has to fetch and not miss any single one of the database SQL statement queries.
-
7/30/2019 Extending a Proxy to Analyze and Modify Data Streams based on the Oracle Database Protocol
14/21
14
Moreover this functionality has to work with different database drivers as JDBC, ODBC, and
OCCI.
To develop this function, the internship has to observe which packets, that are sent
between a client and a Oracle database server, contain database queries, and to locate where
these database queries are in them.This process consumed most of the time of the internship. First I had to gain
knowledge of the Oracle database protocol and architecture. Next, I monitored and analyzed
packets transparently in the network traffic by using Wireshark. Also I had to monitor how
packets are different with the applications SQLDeveloper, SQL+, and Toad for Oracle, and
different database drivers. After that I used a proxy server of dimensio informatics GmbH.
Finally I developed extended functionality for the proxy to extract SQL statements.
Figure 2.1 shows how a simple proxy of dimensio informatics GmbH works.
Figure 2.1 how a simple proxy of dimensio informatics GmbH works
In Figure 2.1, the client application changes from connecting directly to the database
server (shown in blue), to connecting to this server through the proxy server (shown in
green). When the proxy receives a packet sent by the client, it is usually not a complete TNS
packet, but it is fragmented into many small packets. Consequently the proxy has to collect
all of the packets and reconstruct them into a complete TNS packet for extracting SQL
statements before delivery. Collecting, re-arranging packets, and extracting SQL statement,
all of these processes are done in the SQL statement extracting function.
To extract an SQL statement from a complete TNS packet, first it has to recognize the
pattern of bytes blocks in the body of TNS packet, which type of database drivers it is based
-
7/30/2019 Extending a Proxy to Analyze and Modify Data Streams based on the Oracle Database Protocol
15/21
15
on and to decide that this packet contains any SQL statement or not. After that, if it does, the
function analyzes the offset to reach and extract the SQL statement, and finally forwards that
packet to the database server.
To make the function more useful, the internship developed a more advanced function
for changing SQL statements as explained in the following.
2.2 SQL statement changing function
The SQL statement changing function is used to modify and optimize specific
database queries for specific purpose. To develop this function, the function for extracting
SQL statements has to finish first because the changing function has to analyze and modify
the results from that function. Those are the SQL statement and the complete TNS packet.
Figure 2.2 shows the steps of how the SQL statement changing works.
Figure 2.2 the flow chart of the SQL statement changing function
As shown in Figure 2.2, first it receives the results from the extracting function that
are an SQL statement and a complete TNS packet. Then it compares that SQL statement with
the specific SQL it wants to modify. If the statement meets the intention, it analyzes the
packet for necessary values such as the total of packet length, packet type, type of statement,
number of variables, type of SQL, and SQL length, altering flag, otherwise it forwards the
packet to a server. After having finished analyzing the packet, it generates the new SQL
statement to replace the old one. Next it modifies the necessary values in that packet, remove
the old SQL, and replace it with the new SQL. Finally it gives the modified packet to the
connection forwarding function to forward the packet to the destination server.
To modify significant values in the packet, it has to know which type of byte order
they are stored in. There are three types of byte order: Big Endian (BE), Little Endian (LE),and Middle Endian (ME)[BLE05]. In BE, the byte with the most significant bits is stored at
-
7/30/2019 Extending a Proxy to Analyze and Modify Data Streams based on the Oracle Database Protocol
16/21
16
the lowest memory address. In LE, the byte with the least significant bits is stored at the
lowest memory address. In ME, the byte with the most or the least significant bits is stored at
the lowest memory address. (See Figure 2.3 for example)
Figure 2.3 Example of three types of byte order for value 0x1A2B3C4D
The next content will explain the functionality of the proxy for encoding and
decoding bind values.
2.3 Bind values encoding and decoding function
The internship developed the encoding and decoding function to deal with prepared
statements or SQL statements that take parameters, and to prepare for developing the direct
answer generating function.
Sometimes client applications use a prepared statement object for sending SQL
statements to the database instead of a regular statement object. This usually reduces
execution time if it has to execute a regular statement object many times. Because of using a
prepared statement object for SQL statements that take parameters one can use the same
statement and supply it with different values each time it is executed.
The following is sample code for creating SQL statement with a prepared statement
object and supplying it with values.
1:String updateString;
2:updateString = "update " + dbName + ".COFFEES " +
"set SALES = :1 where COF_NAME = :2";
3:updateSales = con.prepareStatement( updateString );4:updateSales.setInt( 1, 5 );
5:updateSales.setString( 2, Dark Coffee );
6:updateSales.executeUpdate( );
This code creates a prepared statement object (shown in line 1-3), takes two input
parameters (shown in line 4-5), and finally executes the statement (shown in line 6). This
must supply values in place of the two colon mark placeholders before it executes a prepared
statement object. Do this by calling the setter methods. The first argument for each of these
setter methods specifies which placeholder, :1
or :2
. In this example,setInt()
specifies the first placeholder and setString() specifies the second placeholder. After
-
7/30/2019 Extending a Proxy to Analyze and Modify Data Streams based on the Oracle Database Protocol
17/21
17
that it calls executeUpdate() to execute the SQL statement with these two parameters in
the database.
The task of the bind values encoding and decoding function is to decode parameter
values of prepared statements from a data stream based on the Oracle database protocol.
Figure 2.4 shows the bind values encoding and decoding function flow.
Figure 2.4 the flow chart of bind values encoding and decoding function
In Figure 2.4, first the bind values encoding and decoding function receives the results
from the SQL statement extracting function.
Second the encoding and decoding function analyzes the TNS data packet for
necessary information such as the position of the statement type, the position of the bind
values, and the position of the number of parameters.
Third it checks the statement type of the SQL statement that it is a regular statement
or a prepared statement with or without parameter values. If the results of the checking turn
out to be satisfied, the encoding and decoding function goes to the fourth step; otherwise it
skips the fourth step and move to the fifth step.
For the fourth step, it decodes or fetches bind values regarding to the result from the
previous step especially the TNS packet analyzing step. To decode bind values, first the
function counts the number of bind values in the packet. Next the function analyzes the type
of each value. 4 bind value types are currently supported, including: integer, float, string, and
date. Then the function locates where the bind values are. Finally the function decodes data in
the packet into the corresponding bind values.
Fifth the encoding and decoding function adds the SQL statement and its bind values
into a queue list for analysis purposes. Finally it gives the TNS packet to the connection
forwarding function to forward it to the destination database server.
-
7/30/2019 Extending a Proxy to Analyze and Modify Data Streams based on the Oracle Database Protocol
18/21
18
Also this function can encode bind values or parameters of each type back into byte
code. This is very useful for developing a function to generate an answer, independently from
the database as explained in following.
2.4 Direct answer generating functionThe direct answer generating function accelerates service requests by retrieving
content saved from a previous request made by the same client or even other clients. It
extends the functionality of the proxy for keeping local copies of frequently requested
resources, allowing large organizations to significantly reduce their upstream bandwidth
usage and costs, while significantly increasing performance. Also it can generate own
answers, independently from the database server.
The task of the function is to accelerate the performance of database queries with two
options. The first option is to save answers of frequent queries. The second is to modify
and/or generate answers on its own, independently from the database.Figure 2.5 shows the direct answer generating function flow.
Figure 2.5 the flow chart of the direct answer generating function
In Figure 2.5, first the generating function receives the results from the extracting
function for an SQL statement and a complete TNS packet. Next the generating function
compares that SQL statement with frequently SQL statements it prepares to increase the
performance. If that SQL statement matches, the generating function generates an answer or
retrieves the answer saved from previous similar database queries, otherwise it gives the
packet to the connection forwarding function. After generating an answer or retrieving a
-
7/30/2019 Extending a Proxy to Analyze and Modify Data Streams based on the Oracle Database Protocol
19/21
19
saved answer for the SQL statement, the generating function analyzes the answer packet for
all necessary values and positions it has to modify to corresponds with the current situation
such as packet cursor and the answer for a specific SQL statement. Then the function
modifies them. Finally the function sends the modified answer packet to the client.
3. Conclusion
This internship report is separated into three sections which compose of an
introduction of a proxy which is one of the products of dimensio informatics GmbH, a project
description which includes the four tasks, and the conclusion of this report.The first task was the function for extracting SQL statement from a packet sent by a
client.
The second task was the function for changing SQL statement in a packet sent by
client.After that, the third task was the function for encoding and decoding bind values in
packet.
Finally, the function for generating direct answer, independently from database, to
client was the fourth task.
All of the four functions, that are based especially on the Oracle database protocol,
work fine. They can operate and provide good results when they are running especially with
the applications: SQLDeveloper, SQL+, and Toad for Oracle; and the database drivers:
JDBC, ODBC, and OCCI. But the fourth function is an exception; it only works with the
application SQLDeveloper and the database drivers JDBC due to the time limited.
Looking beyond the current context, there are many client applications with different
database drivers accessing to the Oracle database need to be covered by all of the four
functions. For example, the direct answer generating function works only with
SQLDeveloper using JDBC driver to access Oracle database. This function should be
developed more to cover the applications: SQL+ and Toad for Oracle; and the database
drivers: ODBC and OCCI.
Moreover the function for encoding and decoding bind values can lead to develop
more functions for measurement of time used by each of SQL statements separately. For
instance, how long the statement binds values and executes, and how long it fetches data
from database each time.More topics are the proxy performance optimization, the proxy user interface for
customization in run time, and the proxy structure that is easily customized to different
database protocols.
In summary, all of these can enhance the proxy to be an effective solution to achieve
the main theme of its products that is to speed up databases as the motto of the company
states: the spirit of speed.
-
7/30/2019 Extending a Proxy to Analyze and Modify Data Streams based on the Oracle Database Protocol
20/21
20
Appendix A: List of Abbreviation and Acronyms
Abbreviation Full Form
API Application Programming Interface
[Api08]
BE Big Endian
[BLE05]
DBMS Database Management System
[Rag02]
JDBC the Java Database Connectivity
[Jdbc05]
LE Little Endian
[BLE05]
ME Middle Endian
[BLE05]
OCI Oracle Call Interface
[Oci94]
OCCI Oracle C++ Call Interface[Occi05]
ODBC Open Database Connectivity
[Odbc95]
SQL Structure Query Language
[Sql10]
TNS the Transparent Network Substrate
[Dav07]
-
7/30/2019 Extending a Proxy to Analyze and Modify Data Streams based on the Oracle Database Protocol
21/21
21
References
[Api08] Joshua Bloch (2008).Effective Java (2nd edition). Addison-Wesley. pp. 259312.
ISBN 978-0321356680.
[BLE05] Bertrand Blanc, Bob Maaraoui. (2005).Endianness or Where is Byte 0?. Retrieved
4 September 2011, from http://3bc.bertrand-blanc.com/endianness05.pdf.
[Dav07] David Litchfield. (2007). The Oracle Hacker's Handbook: Hacking and Defending
Oracle. John Wiley & Sons. ISBN: 978-0470080221.
[Dim11] dimensio informatics GmbH. (2011). dimensio informatics GmbH. Retrieved 4
September 2011, from http://dimensio-informatics.com/index.html
[Jdbc05] R.M. Menon. (2005).Expert Oracle JDBC Programming. Apress. ISBN: 978-
1590594070.
[Occi05] Roza Leyderman. (2005). Oracle C++ Call Interface Programmers Guide, 10g
Release 2 (10.2). Oracle Publishing Ltd. B14294-01.
[Oci94] Tom Smith. (1994). Programmer's Guide to the Oracle Call Interface: Release 7.1.
Oracle Publishing Ltd. ASIN: B0036BZOCE.
[Odbc95] Robert Signore, John Creamer, Michael O. Stegman. (1995). The Odbc Solution:
Open Database Connectivity in Distributed Environments. Mcgraw-Hill. ISBN: 978-
0079118806.
[Ora11] Oracle Wiki. (n.d.). SQL*Net. Retrieved 4 September 2011, from
http://www.orafaq.com/wiki/SQL*Net
[Rag02] Raghu Ramakrishnan and Johannes Gehrke. (2002).Database Management Systems.
Mcgraw Hill Higher Education. ISBN: 978-0071231510.
[Sha86]Shapiro, Marc (1986). Structure and encapsulation in distributed systems: the ProxyPrinciple. Retrieved 4 September 2011, Int. Conf. on Distributed Computer Sys.: 198204.
[Sql10] Karen Morton, Kerry Osborne, Robyn Sands et al. (2010). Pro Oracle SQL (Expert's
Voice in Oracle). Apress. ISBN: 978-1430232285.
[Tho06]Thomas, Keir (2006).Beginning Ubuntu Linux: From Novice to Professional.Apress. ISBN: 978-1590596272. "A proxy server helps speed up Internet access by storing
frequently accessed pages"