Anda di halaman 1dari 23

Proyecto Administracin Oracle

Migracin Postgre Oracle || Oracle Postgre

Mario Carrin Claro Alejandro Salguero Oviedo

INDICE: Ttulo
1 PostgresSQL ---------------------------------------------------------

Pg
3

Diferencias entre Oracle y PostgresSQL

---------------------------

Instalacin de postgres y pgadmin en Debian Squeeze

---------

Creacin de objetos en Postgres

---------------------------------

10

Instalacin de aplicacin de migracin de tablas

--------------

12

Migracin de tablespace y tablas: Postgres Oracle

----------

15

Scripts de migracin Postgres Oracle

-------------------------

17

Migracin de tablespace y tablas: Oracle - Postgres

----------

19

Scripts de migracin Oracle - Postgres

------------------------

22

1 PostgresSQL:
Aplicacin cliente: Esta es la aplicacin cliente que utiliza PostgreSQL como administrador de bases de datos. La conexin puede ocurrir via TCP/IP sockets locales.

Demonio postmaster: Este es el proceso principal de PostgreSQL. Es el encargado de escuchar por un puerto/socket por conexiones entrantes de clientes. Tambien es el encargado de crear los procesos hijos que se encargaran de autentificar estas peticiones, gestionar las consultas y mandar los resultados a las aplicaciones clientes Ficheros de configuracion: Los 3 ficheros principales de configuracin utilizados por PostgreSQL, postgresql.conf, pg_hba.conf y pg_ident.conf Procesos hijos postgres: Procesos hijos que se encargan de autentificar a los clientes, de gestionar las consultas y mandar los resultados a las aplicaciones clientes PostgreSQL share buffer cache: Memoria compartida usada por POstgreSQL para almacenar datos en cach. Write-Ahead Log (WAL): Componente del sistema encargado de asegurar la integridad de los datos (recuperacin de tipo REDO) Kernel disk buffer cache: Cach de disco del sistema operativo Disco: Disco fsico donde se almacenan los datos y toda la informacin necesaria para que PostgreSQL funcione

Caractersticas La ltima serie de produccin es la 9.0. Sus caractersticas tcnicas la hacen una de las bases de datos ms potentes y robustas del mercado. Su desarrollo comenz hace ms de 15 aos, y durante este tiempo, estabilidad, potencia, robustez, facilidad de administracin e implementacin de estndares han sido las caractersticas que ms se han tenido en cuenta durante su desarrollo. PostgreSQL funciona muy bien con grandes cantidades de datos y una alta concurrencia de usuarios accediendo a la vez a el sistema. A continuacin tenis algunas de las caractersticas ms importantes y soportadas por PostgreSQL: Generales Es una base de datos 100% ACID Integridad referencial Tablespaces Nested transactions (savepoints) Replicacin asincrona / Streaming replication - Hot Standby

Two-phase commit PITR - point in time recovery Copias de seguridad en caliente (Online/hot backups) Unicode Juegos de caracteres internacionales Multi-Version Concurrency Control (MVCC) Multiples mtodos de autentificacin Acceso encriptado via SSL Actualizacin in-situ integrada (pg_upgrade) Completa documentacin Licencia BSD Disponible para Linux y UNIX en todas sus variantes (AIX, BSD, HP-UX, SGI IRIX, Mac OS X, Solaris, Tru64) y Windows 32/64bit.

Programacin / Desarrollo Funciones/procedimientos almacenados (stored procedures) en numerosos lenguajes de programacion, entre otros PL/pgSQL (similar al PL/SQL de oracle), PL/Perl, PL/Python y PL/Tcl Bloques annimos de cdigo de procedimientos (sentencias DO) Numerosos tipos de datos y posibilidad de definir nuevos tipos. Adems de los tipos estndares en cualquier base de datos, tenemos disponibles, entre otros, tipos geomtricos, de direcciones de red, de cadenas binarias, UUID, XML, matrices, etc Soporta el almacenamiento de objetos binarios grandes (grficos, videos, sonido, ...) APIs para programar en C/C++, Java, .Net, Perl, Python, Ruby, Tcl, ODBC, PHP, Lisp, Scheme, Qt y muchos otros.

SQL

SQL92,SQL99,SQL2003,SQL2008 Llaves primarias (primary keys) y ajenas (foreign keys) Check, Unique y Not null constraints Restricciones de unicidad postergables (deferrable constraints) Columnas auto-incrementales Indices compuestos, nicos, parciales y funcionales en cualquiera de los metodos de almacenamiento disponibles, B-tree, R-tree, hash GiST Sub-selects Consultas recursivas Funciones 'Windows' Joins Vistas (views) Disparadores (triggers) comunes, por columna, condicionales. Reglas (Rules) Herencia de tablas (Inheritance) Eventos LISTEN/NOTIFY

Podeis consultar la lista completa en ingles de caractersticas disponibles en todas las versiones en la direccin http://www.postgresql.org/about/featurematrix Lmites Algunos de los limites de PostgreSQL son: Lmite Mximo tamao base de dato Mximo tamao de tabla Mximo tamao de fila Mximo tamao de campo Mximo numero de filas por tabla Mximo numero de columnas por tabla Mximo numero de indices por tabla 32 TB 1.6 TB 1 GB Ilimitado 250 - 1600 (dependiendo del tipo) Ilimitado Valor Ilimitado (Depende de tu sistema de almacenamiento)

2 Diferencias entre Oracle y PostgresSQL:


Antes de realizar las migraciones entre estos dos SGBD vamos a realizar una pequea comparativa entre ellos, en la que trataremos los siguientes puntos: Sintaxis. Elementos. Rendimiento.

SINTAXIS: En este primer punto veremos algunas diferencias que nos hemos encontrado entre la sintaxis de Postgres y Oracle. Tambin os dejamos link de las diapositivas del tema de Administracin de Oracle que hemos utilizado en clase, y otro link a una web en la que encontramos la sintaxis utilizada en Postgres para su administracin, por si quisiramos comparar las diferencias existentes. Un punto que caracteriza a Postgres, es que puede ser administrado desde el sistema operativo (mediante lnea de comandos al ms puro estilo Linux) o desde un cliente SQL, y existen diferencias en la sintaxis de las rdenes. Solo mostraremos la administracin a travs de un cliente SQL, pero podemos ver la administracin desde el sistema operativo (y muchsima ms informacin sobre PostgresSQL) aqu. 1- La primera diferencia que nos encontramos son algunos tipos de datos, en concreto nosotros hemos tratado los siguientes: ORACLE varchar2() number POSTGRES varchar() int(para enteros),float(para decimales)

2- En la creacin de usuarios, para especificar la contrasea del usuario tenemos que poner WITH PASSWORD en lugar de IDENTIFIED BY como hacamos en Oracle.

3- Nos encontramos con una caracterstica de Postgres, que no encontramos en Oracle, y es la posibilidad de crear reglas, las cuales sirven para poner condiciones a los updates, inserts o deletes en tablas o clases, y en Oracle tenemos que utilizar triggers para ello (en postgres tambin existen los triggers). Creacin de Reglas: CREATE RULE name AS ON event TO object [ WHERE condition ] DO [ INSTEAD ] [ action | NOTHING ]

4- En Postgres no existen los procedimientos, aunque existen AGGREGATE que son funciones de agregado de datos 5- En Postgres tenemos la posibilidad de realizar funciones y triggers en varios lenguajes de programacin, y tambin tenemos la posibilidad de definir el lenguaje que queramos, como por ejemplo Pl-sql, lo cual nos servira para migraciones, o para realizar funciones compatibles con Oracle. En general, no existen grandes diferencias entre la sintaxis de Postgres y Oracle en lo que respecta a la creacin de tablas, vistas, etc. aunque si algunos parmetros que se llaman de forma distinta o bien no existen en uno u otro. ELEMENTOS: La ausencia de comparativas (en internet) entre estos SGBD, ha dificultado la tarea de realizar este anlisis de similitudes y diferencias. Resulta curioso pero Oracle en su licencia prohbe las comparativas sin su consentimiento: - disclose results of any program benchmark tests without our prior consent; http://www.oracle.com/technetwork/testcontent/standard-license-088383.html

En las siguientes tablas podemos ver una informacin sobre Oracle y Postgres, adems de comparar las principales caractersticas de estos dos SGBD: Informacin general:

Soporte del sistema operativo

Caractersticas fundamentales Informacin acerca de que caractersticas fundamentales de las RDBMS son implementados nativamente.

Tablas y vistas Informacin acerca de que tablas y vistas (unas ms bsicos que otras) son soportados nativamente.

Nota (4): La vista materializada puede ser emulada con PL/PgSQL

ndices Informacin acerca de que ndices (otros como los ndices bsicos B-/B+) son soportados nativamente.

Otros objetos Informacin acerca de que otros objetos son soportados nativamente.

Particionamiento Informacin acerca de que mtodos de particionamiento son soportados nativamente.

RENDIMIENTO: En este link encontramos una comparativa de rendimiento entre distintos SGBD, en concreto SQL Server, Oracle y PostgreSQL, pero nosotros obviaremos el producto de Microsoft ya que nuestro proyecto se centra en los otros dos sistemas mencionados. El estudio se basa en la medicin del tiempo de ejecucin de consultas de distinta complejidad, las cuales tienen los siguientes elementos:

Para esta comparativa se usaron las versiones ORACLE 10g XE y PostgreSQL 8.2.5, que no son las ltimas versiones de ambos sistemas, por lo que los resultados pueden variar en la actualidad. Otro factor a tener en cuenta es el Pc en el que son llevadas a cabo las pruebas, el cual es bastante cortito por decirlo de algn modo:

Y bien es conocido Oracle por consumir bastantes recursos, con lo cual sale perjudicado, pero no obstante mostraremos los resultados para comprobar empricamente como se comportan en igualdad de condiciones estos dos sistemas.

Segn los resultados obtenidos en este anlisis de rendimiento en consultas de complejidad baja PostgreSQL es 1.6 veces ms rpido que Oracle, en consultas de complejidad media esta diferencia se reduce a 1.1, y en consultas de complejidad alta Oracle es 1.6 veces ms rpido que PostgreSQL.

3 Instalacin de postgres y pgadmin en Debian Squeeze:


Para instalar PostgresSQL solamente tenemos que hacer lo siguiente: # aptitude install postgresql Ya tenemos corriendo PostgresSQL, y para comprobarlo miramos los puertos que ha abierto el servidor: root@usuario:/home/usuario# netstat -putan | grep postgres tcp 0 0 127.0.0.1:5432 0.0.0.0:* LISTEN 18271/postgres tcp6 0 0 ::1:5432 :::* LISTEN 18271/postgres udp6 0 0 ::1:51681 ::1:51681 ESTABLISHED 18271/postgres Ahora instalaremos una aplicacin grfica que nos har ms sencillo el manejo de PostgresSQL: # aptitude install pgadmin3 Conexiones remotas: Por motivos de seguridad postgres no tiene activo el aceptar conexiones remotas. Para activar esta caracterstica realizaremos los siguientes pasos: 1- Editaremos el fichero /etc/postgresql/8.4/main/pg_hba.conf y permitiremos conexiones con autenticacin MD5. # nano /etc/postgresql/8.4/main/pg_hba.conf # TYPE DATABASE USER CIDR-ADDRESS METHOD # "local" is for Unix domain socket connections only local all all ident Cambiamos el mtodo ident por md5 para que sea este el mtodo de autenticacin: # TYPE DATABASE USER CIDR-ADDRESS METHOD # "local" is for Unix domain socket connections only local all all md5 2- Editamos el archivo /etc/postgresql/8.4/main/postgresql.conf: Buscamos la siguiente lnea: #listen_addresses = localhost La descomentamos y modificamos lo siguiente: listen_addresses = * Luego buscamos la siguiente lnea y la descomentamos: #password_encryption = on 3- Cambiaremos la contrasea que nos trae por defecto postgres, para ello: # passwd postgres Nos pide la nueva contrasea en este caso postgres (ya que se trata de un proyecto esa por sencillez). 4- Cambiaremos la contrasea al administrador de la BD postgres: #sudo su postgres -c psql Con el siguiente comando SQL cambiamos la contrasea del administrador. acadmico, elegimos remotas pero

postgres=#ALTER USER postgres WITH PASSWORD 'postgres'; Saldremos de la linea de comando de postgres con \q. Ya podemos acceder a administrar nuestro servidor PostgresSQL a travs de pgadmin, al cual accederemos a travs del men Aplicaciones Programacin pgAdmin III. Ahora debemos realizar una conexin de pgAdmin a nuestro sistema gestor de bases de datos, para ello tenemos que pulsar en el botn realizar una nueva conexin :

Nos aparecer la siguiente ventana, la cual rellenaremos indicndole el nombre de nuestra conexin, como Servidor localhost y lo dems lo dejamos por defecto.

Como podemos ver en la siguiente captura ya esta creada nuestra conexin con la BD.

*Observando el explorador de objetos de pgAdmin podemos ver una pestaa catalogo. En ella podemos encontrar las tablas que son el equivalente al diccionario de datos de Oracle, tambin podemos encontrar triggers, funciones...

4 Creacin de objetos en Postgres:


Para crear tablas en postgresSQL desplegaremos en el men el esquema public y pulsamos botn derecho del ratn encima del icono Tablas, y escogemos la opcin Nueva tabla en el men desplegable:

Nos aparecer una ventana en la que podemos crear la tabla mediante esta interfaz grfica, en la cual a travs de las diferentes pestaas que tenemos arriba podemos asignarle todas las propiedades de tabla:

O tambin podemos hacerlo utilizando un editor de SQL, que es el mtodo que vamos a utilizar. Para ello pulsaremos en el icono y se abrir un editor SQL en el que crearemos la tabla:

Ejecutamos la sentencia y comprobamos que se ha creado correctamente:

Antes de seguir aadiremos a Postgres el lenguaje plpgsql para procedimientos, ya que por defecto no viene activo. Para ello ejecutamos en el editor SQL la siguiente sentencia: CREATE TRUSTED PROCEDURAL LANGUAGE 'plpgsql' HANDLER plpgsql_call_handler VALIDATOR plpgsql_validator; Crearemos una serie de elementos que sern los que luego migremos. Esos elementos son los siguientes: Usuarios: CREATE USER administrador WITH PASSWORD 'administrador'; CREATE USER jefe WITH PASSWORD 'jefe'; CREATE USER pringui WITH PASSWORD 'pringui'; Tablas: CREATE TABLE DEPARTAMENTOS( deptno varchar(4) PRIMARY KEY, dname varchar(30) NOT NULL, loc varchar(20) ); CREATE TABLE EMPLEADOS( empno varchar(5) PRIMARY KEY, ename varchar(30) NOT NULL, sal float(7,2) CONSTRAINT sal_minimo CHECK( sal > 600), hiredate date, deptno varchar(4) REFERENCES DEPARTAMENTOS (deptno) ); Establecemos los permisos para que el usuario jefe pueda consultar las dos tablas y el usuariopringui solo la tabla EMPLEADOS: GRANT SELECT ON DEPARTAMENTOS TO jefe; GRANT SELECT ON EMPLEADOS TO jefe; GRANT SELECT ON EMPLEADOS TO pringui; Por ltimo introducimos datos en las tablas. Esto lo haremos del mismo modo que con Oracle: INSERT INTO nombre_tabla (campo1,campo2,campo3,...) VALUES(valor1,valor2,valor3,...);

5 Instalacin de aplicacin de migracin de tablas:


Navicat:
Nos descargamos Navicat, programa que sirve para la administracin de varios SGBD y permite la conexin a varios de ellos simultneamente. Lo hemos instalado en Windows, y no hay ningn paso a resaltar de la instalacin ya que es el tpico siguiente, siguiente. Nota*: Para poder realizar la conexin con Oracle necesitamos tener instalados unos paquetes, los cuales podemos descargar de la pgina de descargas de Oracle. Una vez all nos descargamos el paquete instantclient-basic-win3211.2.0.1.0.zip y instantclient-sqlplus-win32-11.2.0.1.0.zip. Para poder descargar el paquete debemos estar registrados. Una vez que los descarguemos los descomprimimos en un directorio cualquiera. Configuramos Navicat para poder realizar la conexin con Oracle, para ello nos vamos al men Tools Options y elegimos OCI del men de la izquierda, y veremos lo siguiente:

Seleccionamos los ficheros y pulsamos Ok. Crear conexiones con Oracle y Postgres

Pulsamos en el botn

y seleccionamos en primer lugar Oracle de la lista desplegable.

Introducimos los datos para crear la conexin:

Abrimos de nuevo el asistente para conexiones y esta vez elegimos Postgres:

Y ya tenemos creadas las conexiones con ambas bases de datos:

6 Migracion de tablespace y tablas: Postgres Oracle:


Una vez realizada la conexin con las bases de datos nos disponemos a realizar la migracin de tablas y datos: Hacemos click derecho sobre el icono de la conexin de Postgres, y seleccionamos Data Transfer en el men desplegable:

Veremos la siguiente pantalla:

En la izquierda nos encontramos el men Source, donde podremos especificar los elementos a migrar. - Elegimos la base de datos y el esquema en los que estn las tablas que queremos migrar. - Seleccionamos las tablas que queremos incluir en la migracin. En la derecha vemos el men Target en el que elegiremos el SGBD destino de las tablas. Pulsamos Start.

Como podemos ver ha finalizado con xito. *Nota: Al comprobar vemos que las tablas han sido migradas con todos sus registros, pero ni constraints ni de los ndices, por lo que habra que migrarlos a mano. rastro de las

7 Scripts de migracin Postgres Oracle:


Migracin de usuarios: La migracin de usuarios debemos hacerla mediante la utilizacin de scripts. Primero nos vamos al editor SQL de Postgres y ejecutamos el siguiente script: SELECT 'CREATE USER '||usename||' IDENTIFIED BY '||usename||' PASSWORD EXPIRE' FROM pg_shadow; Nos devolver como resultado el listado de todos los usuarios del sistema. Vamos al men Archivo Exportar y elegimos no entrecomillado y desmarcamos Nombres de columnas. Por ltimo seleccionamos el fichero al que queremos que vaya el resultado en nuestro caso script_usuarios.

El contenido del fichero es el siguiente:

Lo editamos para crear solo los usuarios que queramos: CREATE USER jefe IDENTIFIED BY jefe PASSWORD EXPIRE; CREATE USER pringui IDENTIFIED BY pringui PASSWORD EXPIRE; CREATE USER administrador IDENTIFIED BY administrador PASSWORD EXPIRE; Ahora nos vamos a un cliente SQL de Oracle, ejecutamos el script y obtenemos como resultado:

Haremos un script que tome los usuarios que tengan el permiso rolcanlogic en Postgres: SELECT 'GRANT CONNECT TO '||rolname||';' FROM pg_roles WHERE rolcanlogin='TRUE' AND rolname IN (SELECT usename FROM pg_user); Hacemos lo mismo que con el anterior script, lo ejecutamos en Postgres y de nuevo lo exportamos a un fichero y el resultado lo editamos para dejar los usuarios a los que migramos anteriormente: GRANT CONNECT TO jefe; GRANT CONNECT TO pringui; GRANT CONNECT TO administrador; Y por ltimo lo ejecutamos en SQL Plus de Oracle:

*Nota: El permisorolcanlogines el equivalente acreate sessionpero hemos decidido hacer el script con rolconnectpara que los usuarios puedan hacer consultas a los objetos de su esquema. Por ltimo asignaremos al usuario administrador como propietario de las tablas (ms tarde deberamos asignarle los permisos a jefe y pringui sobre las mismas):

8 Migracion de tablespace y tablas: Oracle - Postgres:


En este punto de nuevo utilizaremos Navicat, repitiendo los mismos pasos que en el punto 6 pero eligiendo esta vez como Source nuestro servidor Oracle y como Target nuestro servidor Postgres.

Para poder migrar las tablas debemos desmarcar la opcin del recuadro rojo:

Si no lo desmarcamos intentar borrar las tablas en el servidor Postgres antes de migrarlas, y como no existen nos arroja un fallo.

Comprobamos que se ha completado correctamente:

Con Navicat no podemos migrar vistas, procedimientos, triggers, etc, sin embargo podemos utilizar la opcin de exportar a un fichero esos objetos, y una vez tengamos ese fichero hacer las modificaciones de sintaxis para adaptarlos al otro SGBD y por ltimo ejecutarlos. Esto se puede hacer tanto en un sentido como en el otro. Por ejemplo, tenemos la vista NOMBRE_DEPTOS, la cual exportamos a un fichero llamado dname.sql:

El contenido de ese fichero es el siguiente: /* Navicat Oracle Data Transfer Oracle Client Version : 11.2.0.1.0 Source Server : ORACLE Source Server Version : 110200 Source Host : 192.168.1.100:1521 Source Schema : SCOTT Target Server Type : ORACLE Target Server Version : 110200 File Encoding : 65001 Date: 2011-02-27 18:40:33 */

-- ----------------------------- View structure for "NOMBRE_DEPTOS" -- ---------------------------CREATE VIEW "NOMBRE_DEPTOS" AS SELECT dname FROM dept; Nos vamos a Postgres y hacemos los cambios pertinentes en la sintaxis, en este caso solo tenemos que poner dname y dept en maysculas puesto que en Oracle todo se guarda en maysculas, y al pasar las tablas a Postgres se pasa todo en maysculas tambin. Ejecutamos en Postgres:

Y ya tenemos la vista migrada. Como dijimos anteriormente podemos hacer este mismo proceso para todos los objetos que no hemos conseguido migrar con Navicat o con scripts, tanto en un sentido como en otro.

9 Scripts de migracin Oracle - Postgres:


Migracin de usuarios: El script para migracin de usuarios de Oracle a Postgres es el siguiente: SELECT 'CREATE USER '||username||' WITH PASSWORD '''||username||';' FROM dba_users; Lo ejecutamos en SQL Developer y nos devuelve un listado con los usuarios del sistema, pero dejaremos solo dos para migrar: CREATE USER SCOTT WITH PASSWORD 'SCOTT'; CREATE USER MARIO WITH PASSWORD 'MARIO'; Por ltimo ejecutamos estas dos sentencias en Postgres. Nota*: Hemos intentado encontrar un parmetro para hacer que la contrasea expirara al iniciar sesin el usuario y encontramos el parmetroVALID UNTIL, este parmetro funciona con una fecha, y no al inicio de sesin. Por otra parte no hace falta asignarle permisos de crear sesin puesto que en Postgres los usuarios pueden conectarse por defecto.

CONCLUSIN: Este proyecto nos ha servido para darnos cuenta de la minuciosidad y de la dificultad para llevar a cabo una migracin completa y correcta entre estos SGBD, tanto en un sentido como en otro, ya que hay que salvar importantes diferencias en su arquitectura interna y su funcionamiento en general. Concretamente las mayores diferencias que nos hemos encontrado son el sistema de permisos, el cual se almacena de manera muy distinta en ambos SGBD, los distintos lenguajes de programacin utilizados para funciones, triggers, etc., que fuerzan a que se tengan que migrar a mano. As que podemos determinar que en caso de tenernos que enfrentar a una migracin debemos ser muy organizados y sobre todo armarnos de paciencia.

Anda mungkin juga menyukai