|
oracle |
In the databases field, our core competence lies in the area of Oracle
products. Our experience encompasses the Oracle versions 7, 8i, 9i, 10g, and 11g - each with
its own characteristics: new features, obsolete features, improvements, bugs, differences
in the optimizers, etc.
Several years' experience in Oracle projects of all kinds and coming from various areas have
enabled us to build a comprehensive know how, define best practices, and apply and refine
them in new projects. Apart from the classic principles of data modeling and database
implementation, we employ Oracle-specific techniques and constructs,
such as:
- Using PL/SQL. PL/SQL is a powerful procedural extension of an SQL
database which has two main advantages: the seamless integration on syntactic and
execution level, and the fast context switch from/to SQL (especially in Oracle 9i
and later). This is why implementing the program logic in PL/SQL is in many cases
more advantageous than doing it outside of the database. However, there are cases
- such as number crunching applications - in which an external program, e.g., a C
program is the more efficient alternative. The decision regarding the appropriate
implementation for a problem should be made on a per-case basis.
- Employing the utilities provided by Oracle, which cover in many
cases the needed functionality - such as Export/Import, Loader, Profiler, Recovery
Manager, Enterprise Manager, Data Guard, etc. - as well as using third-party tools
- like TOAD, SQL Navigator, and ERwin - which offer additional functionalities and
comfortable user interfaces.
- Taking advantage of the Oracle built-in database object types:
packages, types, directories, as well as object-relational constructs, etc. The usage
of these constructs should nonetheless be adequate to the problem - most problems can
be still solved best by classic relational techniques and standard PL/SQL.
- Structuring the PL/SQL packages. Packages and abstract data types enable a sort of
object-oriented programming with type hierarchies, overloading,
information hiding (public and private constants, types, cursors, procedures), etc.
We make intensive use of this construct, because it allows structuring and therefore
improving applications.
- Autonomous procedures are helpful in several situations (e.g., in
logging and error procedures, in triggers, which must commit locally, etc.)
- Bulk operations represent a useful compromise between the efficiency
of an "Insert-from-Select" statement and the error handling capability of an Insert
statement inside a cursor loop. (This advantage becomes relative starting with version
10g.)
- Performance optimization is an active process during database
development in Oracle, which starts with writing SQL statements, continues with
analysis and improvement of execution plans, and can lead to using optimizer hints,
or even going down to the level of histograms. This requires an in-depth understanding
of the Oracle optimizers (CBO/RBO), as well as correct gathering of statistics, and
handling of special cases (skewed data, buckets), etc.
- Using special constructs for data warehouses, such as partitioned
tables, materialized views, bitmap indexes, etc.
- Using the Oracle built-in functionalities for OLAP (Rollup, Cube,
analytic functions, etc.)
- Taking advantage of the Delete Cascade/Set Null options of relations
(foreign keys)
- Enhancing the built-in constraint cascade functionality using triggers and packages
(e.g., to Insert Cascade or to Update Cascade)
- Intensive usage of the data dictionary, for example to generate
objects dynamically, in generic functions, etc.
- . . .
|
|
|