EnterpriseDB (EDB) e' un'azienda che offre un supporto di livello Enterprise per la base dati PostgreSQL. EnterpriseDB fornisce inoltre tool specifici per la base dati ed una propria versione con il massimo livello di garanzia disponibile per questo diffuso Database Open Source. In questo documento vengono riportate informazioni sulle diverse funzionalita' offerte con un particolare enfasi sul porting delle applicazioni da altri database.
Da sito EnterpriseDB e' possibile scaricare tre differenti versioni di PostgreSQL, tutte con un'interfaccia grafica di installazione:
La procedura grafica di installazione e' molto semplice. Impostato il DISPLAY con l'indirizzo del proprio client X Server basta lanciare il file binario scaricato dal sito EnterpriseDB. Parte un semplice wizard di installazione:
Se si installa la versione Advanced Server la procedura di installazione e' molto simile. Cambiano sono un paio di videate: quella con l'elenco dei prodotti (alcuni sono disponibili sono con la versione Advanced) e quella per l'impostazione della configurazione di default (PostgreSQL o Oracle):
E' anche possibile utilizzare la procedura di installazione in modalita' testuale. In questo caso ovviamente non e' necessario disporre di un X Server... Ecco un esempio!
La versione PostgreSQL Plus Advanced Server (EPAS: EDB Postgres Advanced Server) offre alcune importanti funzionalita' aggiuntive tra cui la compatibilita' con Oracle.
Vediamo ora alcuni dei tool forniti con la versione PostgreSQL Advanced Server...
Infinite Cache consente aumentare la cache della base dati utilizzando la memoria di altri nodi connessi in rete. Sui nodi di cache viene eseguito il demone edb-icache. Sul database server va configurato il file postgresql.conf:
edb_enable_icache = on edb_icache_servers = 'xecache1:11211, xecache2' edb_icache_compression_level = 6Dyna-Tune effettua un'ottimizzazione automatica e dinamica dei parametri della base dati utilizzando il profilo fornito in fase di configurazione.
edb_dynatune = 100 # percentage of server resources dedicated (default 0 use static postgresql.conf parameters) edb_dynatune_profile = mixed # workload profile for tuning: 'oltp', 'reporting' or 'mixed'
La versione Advanced fornisce AUDIT molto completo configurabile a vari livelli. L'abilitazione e' effettuata con il parametro edb_audit. Maggiori dettagli in questa paginetta.
L'Advanced Server fornisce un completo tool per la migrazione delle basi dati a PostgreSQL. Con Migration Studio e' possibile migrare basi dati Oracle, Sybase, MySQL ed SQL Server. Migration Studio e' anche in grado di effettuare la migrazione di funzionalita' specifiche dei database di partenza; in particolare per Oracle la migrazione e' praticamente completa (eg. tabelle partizionate, procedures, roles, db link, ...).
Il PEM (Postgres Enterprise Manager) consente la gestione di database Postgres o EDB Postgres Advanced Server con un'interfaccia basata sul pgAdmin. Il PEM server fornisce un'interfaccia web agli utenti (default ULR: https://PEM_host:8443/pem) e si interfaccia verso le istanze controllate attraverso un Agent.
xDB Replication Server consente la replica di dati tra database eterogenei e la replica multimaster (MMR). xDB e' attualmente disponibile anche nella versione Standard.
Da ultimo, ma non ultimo come importanza, l'utilizzo della versione Advanced consente di minimizzare l'impatto sulle applicazioni nella migrazione dalla base dati proprietaria Oracle a PostgreSQL.
In questo capitolo vediamo in maggior dettaglio gli aspetti dell'implementazione della compatibilita' Oracle. Dal punto di vista tecnico la compatibilita' con la base dati Oracle consiste in diverse parti:
E' importante sottolineare che la compatibilita' Oracle di PostgreSQL Advanced Server e' realizzata come uno "strato superiore" alla base dati. Il motore relazionale, gli algoritmi utilizzati, le configurazioni, ... insomma l'architettura e le funzionalita' sono e restano quelle di PostgreSQL su cui possono girare applicazioni Oracle con poche e puntuali modifiche. Le immagini seguenti riportano le differenti architetture delle due basi dati:
I principali parametri per la configurazione della compatibilita' Oracle, contenuti nel file postgresql.conf, sono:
edb_redwood_date = on # translate DATE to TIMESTAMP(0) edb_redwood_strings = on # treat NULL as an empty string in string concatenation edb_stmt_level_tx = on # allow continuing on errors instead rolling back (NB SLOWER) db_dialect = 'redwood' # Sets the precedence of built-in namespaces. # 'redwood': sys, dbo, pg_catalog; 'postgres': pg_catalog, sys, dbo oracle_home = '/usr/lib/oracle/11.2/client64/lib' timed_statistics = on # record wait timings, defaults to on (NB prerequisite for DRITA)
Catalogo
Il Data Dictionary di Oracle e' molto ampio e completo.
Gli utenti Oracle sono abituali ad utilizzare le viste all_tables, all_tab_columns, all_indexes, all_source, ...
e le analoghe user_ e dba_. Sono tutte presenti nell'Advanced Server!
L'implementazione del data dictionary Oracle e' realizzata con il catalogo Redwood (sys) all'interno della base dati di default edb.
Lo schema e' visibile a PUBLIC ed inserito nel SEARCH_PATH.
Sono presenti una settantina di viste all/dba/user nel catalogo sys
che coprono la maggioranza delle esigenze di utenti ed applicazioni.
Per i DBA invece le differenze sono maggiori:
l'unica vista V$ presente con Advanced Server e' la V$VERSION.
Sono pero' presenti una decina di viste come
edb$stat_all_tables, edb$statio_all_tables, edb$system_waits, ...
molto interessanti ma, giustamente, anche molto diverse da quelle Oracle!
Ma c'e' qualcosa in piu'...
Il Dynamic Runtime Instrumentation Tools Architecture (DRITA) consente di eseguire sofisticate
analisi sulle performance della base dati PostgreSQL.
Con la clausola SELECT * FROM edbsnap() viene effettuato uno snapshot,
per avere l'elenco degli snapshot la funzione e' get_snaps()
e con una SELECT * FROM sys_rpt(begin_snap, end_snap, 8)
viene riportato un report dei primi otto eventi di wait occorsi tra i due snapshot indicati.
DRITA fornisce informazioni analoghe allo Statspack/AWR (Automatic Workload Repository) di Oracle
anche se le architetture sottostanti sono differenti.
Ecco un esempio di report (raccolto durante un benchmark OLTP e che indica chiaramente il bottleneck):
WAIT NAME COUNT WAIT TIME % WAIT --------------------------------------------------------------------------- wal flush 82556 61.912294 33.30 wal write 82569 61.732028 33.21 wal file sync 82561 58.972752 31.72 query plan 66271 3.279333 1.76 db file extend 187 0.014042 0.01 wal insert lock acquire 5 0.000172 0.00 xid gen lock acquire 0 0.000000 0.00
SQL
L'SQL di Oracle ha molte funzionalita' avanzate in aggiunta a quelle previste dagli standard SQL.
Advanced Server supporta:
query gerarchiche (CONNECT BY), outer join (+), MINUS, SELECT INTO FOR UPDATE, ...;
la tabella DUAL, le pseudo colonne ROWNUM, ROWID, ...;
molte funzioni Oracle: TO_CHAR(), TO_DATE(), ...
Sono inoltre gestiti le SEQUENCE, i [PUBBLIC] SYNONYM, i ROLE, ...
L'SQL di PostgreSQL Advanced Server e' esteso con le clausole e parole chiave tipiche di Oracle che possono essere
utilizzate direttamente in modo nativo:
$ psql psql (9.0.0.6) Type "help" for help. edb=# select sysdate from dual; sysdate -------------------- 01-APR-11 17:17:17 (1 row)
Tra le molte sintassi riconosciute c'e' anche quella degli HINT che, sebbene espressi con la sintassi Oracle /*+ HINT */, usano indicazioni relative all'ottimizzatore Postgres:
CHOOSE ALL_ROWS FIRST_ROWS FIRST_ROWS(n) FULL(t) ORDERED INDEX(t [i] [...]) NO_INDEX(t [i] [...]) USE_HASH(t [...]) NO_USE_HASH(t [...]) USE_MERGE(t [...]) NO_USE_MERGE(t [...]) USE_NL(t [...]) NO_USE_NL(t [...]) PARALLEL(t [...]) NO_PARALLEL(t [...])
[NdA gli HINT disponibili sono differenti a seconda delle versioni di EDB Advanced Server].
PL/SQL
Il PL/SQL e' il potente e diffuso linguaggio procedurale di Oracle.
Advanced Server include un compilatore SPL (Stored Procedure Language)
la cui sintassi e' identica a quella del PL/SQL.
Il PL/SQL viene cosi' compilato in modo nativo senza necessita' di precompilazioni o conversioni.
Sono forniti alcuni dei principali package sistema:
DBMS_OUTPUT DBMS_SQL DBMS_ALERT DBMS_PIPE DBMS_JOB DBMS_LOB DBMS_UTILITY DBMS_PROFILER
UTL_FILE UTL_MAIL UTL_SMTP.
Con l'Advanced Server e' possibile programmare le funzioni in PL/pgSQL oppure utilizzare direttamente
il codice PL/SQL di Oracle per realizzare Stored Procedure, Package, Funzioni, Trigger, ...
e naturalmente anche eseguire un blocco PL/SQL anonimo:
edb=# REM Script di esempio in PL-SQL lanciato da psql edb=# declare edb-# i number; edb$# begin edb$# for i in 1..3 loop edb$# DBMS_OUTPUT.PUT_LINE( 'Ti amo!'); edb$# end loop; edb$# end; Ti amo! Ti amo! Ti amo! EDB-SPL Procedure successfully completedL'esempio, serissimo, e' preso da Hello world... ditelo coi fiori!
Tools
Oracle fornisce diversi tool utilizzabili da linea di comando.
Nell'Advanced Server sono disponibili, oltre ad altri, edb*plus e edb*loader che corrispondono
ad sqlplus ed a sqlloader.
Per la compilazione di programmi in linguaggio C e' fornito l'analogo delle librerie OCI. L'Open Client Library fornisce un'API compatibile con l'Oracle Call Interface (OCI). La stessa applicazione, compilata con l'OCL, si connette via libpq a PostgreSQL in modo trasparente.
Database Link
Per configurare i DB LINK verso Oracle e' necessario qualche ulteriore passo
di configurazione poiche' sono implementati come applicazione OCI.
Dopo aver scaricato l'Instant Client dal sito Oracle...
ecco cosa bisogna fare:
# rpm -ilv oracle-instantclient11.2-basic-11.2.0.2.0.i386.rpm # rpm -qi --filesbypkg oracle-instantclient11.2-basic-11.2.0.2.0.i386 Name : oracle-instantclient11.2-basic Relocations: (not relocatable) Version : 11.2.0.2.0 Vendor: Oracle Corporation ... Summary : Instant Client for Oracle Database 11g Description : Instant Client allows you to run your applications without installing the standard Oracle client or having an ORACLE_HOME. OCI, OCCI, ODBC, and JDBC applications work without modification, while using significantly less disk space than before. No recompile, no hassle. This is the Basic package, supporting OCI, OCCI, and JDBC-OCI with all languages. oracle-instantclient11.2-basic /usr/lib/oracle/11.2/client/bin/adrci oracle-instantclient11.2-basic /usr/lib/oracle/11.2/client/bin/genezi oracle-instantclient11.2-basic /usr/lib/oracle/11.2/client/lib/libclntsh.so.11.1 oracle-instantclient11.2-basic /usr/lib/oracle/11.2/client/lib/libnnz11.so oracle-instantclient11.2-basic /usr/lib/oracle/11.2/client/lib/libocci.so.11.1 oracle-instantclient11.2-basic /usr/lib/oracle/11.2/client/lib/libociei.so oracle-instantclient11.2-basic /usr/lib/oracle/11.2/client/lib/libocijdbc11.so # cd /usr/lib/oracle/11.2/client/lib # ln libclntsh.so.11.1 libclntsh.so # ln libocci.so.11.1 libocci.so # cd /opt/PostgresPlus/9.0AS/lib # ln -s /usr/lib/oracle/11.2/client/lib/libnnz11.so libnnz11.soE' ora necessario impostare il parametro oracle_home = '/usr/lib/oracle/11.2/client/lib' nel file di configurazione postgresql.conf ed effettuare il restart di PostgreSQL. Ora e' possibile utilizzare i DB LINK da PostgreSQL verso una base dati Oracle! Da psql:
CREATE DATABASE LINK testora1 CONNECT TO scott IDENTIFIED BY 'tiger' USING oci '//xeniaOra1.xenialab.it/TESTDB'; SELECT * FROM emp7@testora1;
Una configurazione analoga va svolta se si utilizza la versione x86_64...
La versione di produzione attuale dell'Advanced Server e' la 8.4 ma e' gia' disponibile come Beta la versione 9.0. Nella versione 9.0 e' stato aggiunto il supporto per il package DBMS_PROFILER, il datatype XMLTYPE, la funzione SYS_EXTRACT_UTC, ...
La compatibilita' Oracle di EnterpriseDB e' stata rilasciata anche su DB2. Con DB2 v.9.7 e' possibile eseguire applicazioni Oracle in modo simile a quello che avviene con PostgreSQL Advanced Server. La compatibilita' a livello SQL e' disponibile per tutte le edizioni DB2, mentre il PL/SQL non e' disponibile nella edizione DB2 Express-C. Dal punto di vista di implementazione DB2 v.9.7 include un compilatore PL/SQL parallelo al proprio compilatore SQL PL. Il PL/SQL viene cosi' compilato in modo nativo senza necessita' di precompilazioni o conversioni. Una breve descrizione della configurazione si trova su questo documento. Mentre per una descrizione dettagliata sulle funzionalita' si puo' fare riferimento alla documentazione ufficiale [NdE link aggiornato alla versione v.11.1 di DB2].
Testo: EnterpriseDB
Data: 31 Aprile 2011
Versione: 1.0.2 - 1 Aprile 2024
Autore: mail@meo.bogliolo.name