MarkD said:
The oracle tables are for reporting and not transaction
processing; I don't have update/append privileges. In any
case, whether the back end is Oracle or Access shouldn't
affect performance much, should it?
Yes, in fact, this will effect performance VERY much. In my article, one of
the possible solutions here is to move the back end data from a simple file
to a true database server. (that server can be the free desktop sql server
engine included on the office cd for use with ms-access, or that server can
be sql-server, or in your case you have Oracle as a database server).
Using a server based system can dramatically effect performance. (it is a
different architecture)
Right now you have:
Ms-access->JET engine
------------> t1 line -----------> mdb file on server
To retrieve a record, jet has to:
Process sql command (no t1 traffic)
open table (this occurs across the t1 line...and is slow)
read/load index (this occurs across the t1 line...and is slow)
Of course, very little information from the index file is read from the mdb
file on the server, but it is slow
The index information is then used to "resolve" the location of the record
on the disk drive in the mdb file
The record is then read from the mdb file. Note that ANY kind of read on the
mdb file has to go through the t1 line.
Virtually 100% of the processing of ALL DATA occurs ON THE CLIENT pc.
ZERO % of the data processing occurs on the server side (in fact, you never
did need to install ms-access or the JET engine on the server side...did
you?).
Now, contrast the above to a true client to server setup:
Ms-access -> JET engine
---------> t1 line------------> oracle database
server
To retrieve a record, jet has to:
Load and Process sql command (no t1 traffic)
send sql to Oracle (this request occurs across the t1 line)
at this point, ms-access is waiting.
Oracle at this point (or any data base server) can now load and read
the index file (no t1 activity occurs)
Oracle at this point can scan and read as much as the file data it
needs to grab that one record (no t1 activity occurs)
Oracle finishes loading the record, closes the table ...AND THEN
transmits the ONE record to ms-access/JET
You can see that the searching, indexing, and processing of data occurs on
the server side. In both cases, one record was sent down the wire, but as
you note, browsing, and using the file system across a t1 line is very slow.
With a true database server, the program that reads the hard disk and works
with the data occurs on the server side (this is simply a high speed machine
and all disk reads occur on the server /oracle side).
Thus, with a true database server, then ALL searching and processing usually
can occur on the server side.
Further, when you start involving sql joins, and relational data, then the
server has much more freedom to read data, create temp tables. grab huge
amounts of memory and disk space and have at the problem until the final
records are processed, loaded and setup ready to be transmitted to the
awaiting client (in our case ms-access).
Further, if you accidentally make a query on a field that is NOT indexed, in
a file share, the whole table much be sent down the wire to the client
computer IF THE index cannot be used (or there is no one present, or it
would be faster to NOT use a index). With a true database server, even when
a index can't be used, the disk drive and memory of the server might get a
real serous workout as it screams away at the disk drive to get the data,
but NO t1 activity occurs during this dance. That server can read, and
gobble data in anyway shape or form because it don't care or need a network
to read the data on ITS OWN disk drive. Finally, once the record is found,
then that is ALL that is trans mitted down the wire.
I mean, when you order a book on Amazon.com, a lot of disk drive activity
etc occurs..but it don't occur on YOUR pc. With a file share virtually 100%
of the processing MUST occur on your local pc, and often that will result in
additional traffic as the database engine reads information from the file.
If anything, I'd think
an Access front end to an Access back end would be faster
(our record are 10,000 max, so Oracle isn't going to
If you eliminate the network altogether, then your assuming is true. And, in
fact when no network is involved, the JET engine (the one that access uses)
is likely to be FASTER then oracle. However, as soon as you have a network
involved, then the true database server wins, as it is free to read and
munch and crunch the data to get the desired result...and THEN transmits
this result to the waiting client. The munching and crunching part does not
involve network (t1) activity...and it is this reduction in overhead as to
why a web based system (which is a server also), or server based database
system can function at such low bandwidth. I mean, a t1 line is PLENTY for a
web browser, and after all, most data you see on the web is driven by server
based database system (but all activry is hiddn from your client...in this
case the web browser).
So, in fact, the performance of using oracle will be MUCH better then a JET
to a simple file shared on the server.