migración postgres-oracle sgbd 01-02-10...

49
Migración postgres-oracle SGBD 01-02-10 MIGRACIÓN DE POSTGRES A ORACLE 1 Josué Monge Corrales Ir al Índice

Upload: dinhxuyen

Post on 21-Oct-2018

241 views

Category:

Documents


1 download

TRANSCRIPT

Migración postgres-oracle SGBD 01-02-10

MIGRACIÓN DE

POSTGRESA ORACLE

1 Josué Monge Corrales Ir al Índice

Migración postgres-oracle SGBD 01-02-10

INDICE

1. INSTALACIÓN DE POSTGRESQL EN LINUX ……………….. pag. 3-4

2. EJEMPLOS SENTENCIAS POSTGRESQL …………………… pag. 5-10

3. INSTALACIÓN POSTGRESQL WINDOWS ………………… pag. 11-25

4. INSTALACIÓN ESF DATABASE MIGRATION TOOL ……. pag. 26-30

5. MIGRACIÓN DE POSTGRESQL A ORACLE ………………. pag. 31-43

6. DIFERENCIAS SENTENCIAS POSTGRES Y ORACLE …… pag. 43-45

7. COPIA DE SEGURIDAD POSTGRES ………………………… pag. 46-47

8. ERRORES DURANTE EL PROYECTO ……………………… Pag. 48-49

2 Josué Monge Corrales Ir al Índice

Migración postgres-oracle SGBD 01-02-10

1.- INSTALACIÓN POSTGRES LINUX

1. Instalamos el cliente postgres, el servidor y ademas una aplicación para trabajar con la base de datos llamado “pgadminIII”:

a. #aptitude install postgresql postgresql-client pgadmin3

2. Para ver la versión que nos ha instalado tendremos que introducir el siguiente comando:a. psql --versionb. Nos devolverá la siguiente información:

1. Aquí podemos observa- Vemos que nos devuelve la versión 8.3.93. Ahora cambiaremos la contraseña del usuario postgres que se nos crea en el sistema:

a. # passwd postgresb. introducimos la contraseña(en mi caso postgres) y listo.

4. Ahora cambiaremos la contraseña al usuario administrador de la base de datos postgres:a. # sudo su postgres -c psqlb. meteremos la siguiente sentencia para cambiar la contraseña del admin:

1. ALTER USER postgres WITH PASSWORD 'postgres';2. Donde lo señalado en rojo será nuestra nueva contraseña.

3 Josué Monge Corrales Ir al Índice

Migración postgres-oracle SGBD 01-02-10

c. Para salir del menú meteremos: \q5. Ahora tendremos que cambiar el esquema de autenticación que trae pgadmin por

defecto ya que de la manera que viene nos puede dar errores a la hora de ejecutar algunos comandos.a. Modificaremos el archivo: /etc/postgresql/8.3/main/pg_hba.conf

1. nano /etc/postgresql/8.3/main/pg_hba.conf2. Modificaremos este apartado:

1. por:

6. Para que nos permita conectarnos desde pgadmin3 tendremos que modificar en el archivo “/etc/postgresql/8.3/main/postgresql.conf” y cambiaremos lo siguiente:

a. Cambiaremos: 1. #listen_addresses = ‘localhost’

b. por:1. listen_addresses = ‘*’

c. Descomentaremos la línea: #password_encryption = on (osea borramos la #)d. Ahora solo faltaría reiniciar el demonio:

1. # /etc/init.d/postgresql-8.3 restart e. Ya tenemos nuestro postgres instalado y listo para usarse, lo encontraremos en

“aplicaciones” - “programacion” - “pgadminIII”

4 Josué Monge Corrales Ir al Índice

Migración postgres-oracle SGBD 01-02-10

2.- EJEMPLO POSTGRESQL

7. Realizaremos un ejemplo en el cual, nos conectaremos a nuestra bbdd, y crearemos una tabla, le insertaremos datos y listaremos su contenido.a. Empezaremos abriendo la aplicación “pgadminIII” que la encontraremos en

“aplicaciones” - “programacion” - “pgadminIII”

b. Se nos abrirá la siguiente pantalla:

1. Como podemos ver aún no tenemos ninguna conexión realizada con la base

de datos, por tanto crearemos una conexión.

5 Josué Monge Corrales Ir al Índice

Migración postgres-oracle SGBD 01-02-10

2. Pulsamos en el icono y nos saldrá el siguiente menú.

3. Este menú lo rellenaremos de la siguiente manera:

1. Nombre: Será el nombre que le queramos poner a la conexión.2. Servidor: Pondremos donde se encuentra el servidor postgres.3. Puerto: Dejamos el que trae por defecto, anoser que nos interese otro.4. BD de mantenimiento: Escogeremos a la BD que nos queremos

conectar o sobre la que vamos a realizar las operaciones.5. Nombre de Usuario: Introduciremos el nombre de usuario que le

pusimos en la instalación o uno existente en el servidor al cual nos vayamos a conectar.

6. Contraseña: Escribiremos la contraseña del usuario de la BBDD.

6 Josué Monge Corrales Ir al Índice

Migración postgres-oracle SGBD 01-02-10

4. Ya nos saldrá en el menú de la izquierda nuestra conexión con el nombre que le hayamos dado:

5. Pulsaremos sobre ella y la abriremos:

1. Podemos comprobar que por defecto ya vienen una serie de vistas , tablas y tablespaces creados los cuales son necesarios para su correcto funcionamiento.

2. Ahora pasaremos a crear una tabla de prueba donde meteremos usuarios.1. En primer lugar pulsaremos sobre el menú “postgres” (la bbdd), y

pulsaremos sobre el icono “sql” situado en el menú de arriba.

7 Josué Monge Corrales Ir al Índice

Migración postgres-oracle SGBD 01-02-10

2. Se nos abrirá una ventana en la cuál podremos escribir y ejecutar nuestras sentencias sql que vamos a lanzar a nuestra bbdd.

3. En primer lugar vamos a crear nuestra tabla llamada “usuarios”:

4. Para ejecutar las sentencias deberemos pulsar sobre el botón “ejecutar” . Como podemos ver en la imagen anterior abajo nos muestra si la consulta se ha realizado con éxito y en cuanto tiempo.

8 Josué Monge Corrales Ir al Índice

Migración postgres-oracle SGBD 01-02-10

5. Ahora pasaremos a introducir datos, como es de prueba introduciremos solo dos usuarios:

6. Ahora mostraremos el contenido de nuestra tabla “usuario”:

9 Josué Monge Corrales Ir al Índice

Migración postgres-oracle SGBD 01-02-10

7. Si nos fijamos en las tres imagenes anteriores podemos ver que al ejecutar una sentencia la cual no nos devuelve nada en el panel de salida nos enseña la pestaña de mensajes, en la cual podemos ver el mensaje generado por la sentencia. Pero sin embargo al realizar el “select” que si nos devuelve datos nos muestra la pestaña “Salida de datos”, si quisieramos ver el historial de todas las sentencias ejecutadas hasta el momento , pulsaremos sobre la pestaña “Historial” y esta nos mostrará todas las sentencias ejecutadas con sus correspondientes mensajes generados, aquí dejo una captura en la que podemos ver el principio del historial generado por estas tres consultas.

10 Josué Monge Corrales Ir al Índice

Migración postgres-oracle SGBD 01-02-10

3. INSTALACIÓN POSTGRESQL EN WINDOWS VISTA

1. Empezaremos descargándonos el ejecutable de instalación de la página oficial de postgreSQL, ya que esta SGBD es libre:1. http://www.postgresql.org/download/windows

2. En esta instalación ya nos dará la opción de instalar pgadminIII y phppgadmin, lo veremos más adelante.

3. Ahora nos aparecerá la siguiente pantalla, en la cuál pulsaremos ”Next”:

4. En el siguiente paso será donde le especifiquemos el lugar donde vamos a instalar el home de postgres, en mi caso lo dejaremos por defecto y pulsaremos “Next”:

11 Josué Monge Corrales Ir al Índice

Migración postgres-oracle SGBD 01-02-10

5. En este paso lo que nos pide es en el directorio donde vamos a almacenar los datos de nuestra bases de datos, al igual que antes lo dejamos por defecto:

6. Ahora introduciremos la contraseña para nuestra base de datos y la repetiremos abajo:

12 Josué Monge Corrales Ir al Índice

Migración postgres-oracle SGBD 01-02-10

7. Ahora nos pedirá el puerto sobre el que trabajará postgres, que también lo vamos a dejar el que viene por defecto, que es, 5432:

8. Ahora introduciremos nuestra localización, que en mi caso es España:

13 Josué Monge Corrales Ir al Índice

Migración postgres-oracle SGBD 01-02-10

9. En este paso le daremos a siguiente ya que lo único que hace esta pantalla es avisarnos de que se va a proceder a la instalación de postgreSQL.

10. Comienza a instalarse postgreSQL en nuestra máquina:

14 Josué Monge Corrales Ir al Índice

Migración postgres-oracle SGBD 01-02-10

11. Una vez terminado el proceso de instalación, nos saldrá una pantalla en la cual nos informa de que ya se ha instalado postgres en nuestra máquina y que podremos descargar herramientas adicionales:

12. Ahora nos pedirá que versión hemos instalado, para en función de la versión ofrecernos una lista con algunas herramientas disponibles:

15 Josué Monge Corrales Ir al Índice

Migración postgres-oracle SGBD 01-02-10

13. Acontinuación nos desplegará una lista con algunas aplicaciones y algunos drivers que nos pueden ser interesantes, de aquí será donde le diremos que nos instale, PhpPgAdmin, en el menú “web Development”:

14. Ahora tendremos que escoger desde el servidor ftp desde el cual nos vamos a descargar las aplicaciones escogidas en la pantalla anterior, en mi caso cogí una de los servidores situados en España:

16 Josué Monge Corrales Ir al Índice

Migración postgres-oracle SGBD 01-02-10

15. Ahora nos mostrará las aplicaciones que nos instalará, en mi caso me mostrará dos, PhpPgAdmin y ApachePhp, ya que este último es necesario para que funcione PhpPgAdmin. Además podremos indicar donde queremos que nos lo descarge:

16. Ahora se pondrá a descargar las aplicaciones:

17. En la siguiente pantalla nos dirá que las descargas se han realizado satisfactoriamente y que se procederá a la instalación de las mismas, pulsamos “Next”:

17 Josué Monge Corrales Ir al Índice

Migración postgres-oracle SGBD 01-02-10

18. Ahora empezará a instalarse apache:

19. En esta pantalla pulsaremos sobre “Next”, ya que solo nos informa de que se procederá a instalar ApachePhp:

20. Nos preguntará sobre cuál será el directorio de insalación para ApachePhp, en mi caso le he dejado el que viene por defecto:

18 Josué Monge Corrales Ir al Índice

Migración postgres-oracle SGBD 01-02-10

21. Le indicaremos sobre el puerto en el que trabajará, que será el 8080:

22. En esta parte nos informa de que se va a comenzar a instalar ApachePhp:

23. Se iniciará el proceso de instalación:

19 Josué Monge Corrales Ir al Índice

Migración postgres-oracle SGBD 01-02-10

24. Ahora nos informa de que la instalación ha sido correcta, pulsaremos sobre “Next”:

25. Ahora se iniciará el proceso de instalación para PhpPgAdmin:

20 Josué Monge Corrales Ir al Índice

Migración postgres-oracle SGBD 01-02-10

26. Ahora nos pregunta la dirección donde se encuentra nuestro servidor, el puerto por el cuál está corriendo y su directorio:

27. Ahora nos informa de que el proceso de instalación va a comenzar, pulsamos “Next”:

21 Josué Monge Corrales Ir al Índice

Migración postgres-oracle SGBD 01-02-10

28. Comienza el proceso de instalación:

29. Nos informa de que la instalación a finalizado correctamente, pulsamos “Finish”:

22 Josué Monge Corrales Ir al Índice

Migración postgres-oracle SGBD 01-02-10

30. Ahora para acceder a PgAdminIII, tendremos que pulsar, “Inicio” “Todos los programas” “PostgreSQL 8.3” “PgAdminIII”, se nos abrirá la siguiente ventana:

31. Pulsaremos sobre el botón para añadir una nueva conexión y nos saldrá el siguiente formulario, y lo rellenaremos de la siguiente manera:

23 Josué Monge Corrales Ir al Índice

Migración postgres-oracle SGBD 01-02-10

32. Pulsaremos en “ok ” y ya se nos conectará correctamente con nuestra base de datos que actualmente estará vacía y tendrá el siguiente aspecto:

33. Ahora probaremos a entrar en la aplicación PhpPgAdmin y lo haremos accediendo a, “Inicio” “Todos los programas” “PostgreSQL” “PhpPgAdmin”, se nos abrirá la siguiente ventana:

24 Josué Monge Corrales Ir al Índice

Migración postgres-oracle SGBD 01-02-10

34. Para conectarnos pulsaremos sobre , situado en el menú de la izquierda y ahora nos aparecerá un formulario de entrada en el cual debemos introducir el nombre de usuario y contraseña de nuestra base de datos:

35. Una vez nos logueemos, ya veremos la estructura de nuestra base de datos en la izquierda, muy parecida por no decir igual a la dibujada en PgAdminIII.

36. Una diferencia que si se ve a simple vista es que aquí no nos muestra el catalogo de postgres, que viene a ser donde se encuentra su diccionario de datos, osea solo nos muestra el esquema de nuestra base de datos.

37. Hasta aquí la instalación y las comprobaciones de que funcionan tanto de Postgres 8.3, como de PgAdminIII, y de PhpPgAdmin.

25 Josué Monge Corrales Ir al Índice

Migración postgres-oracle SGBD 01-02-10

4. INSTALACIÓN ESF DATABASE MIGRATIONS TOOL

1. ESF DATABASE MIGRATIONS TOOL , es una aplicación la cual nos permitirá migrar tanto datos como estructuras de tablas, índices, vistas, claves primarias, claves foráneas, etc… desde casi cualquier SGBD a otro, como por ejemplo pueden ser:1. oracle2. postgresql3. sql Server4. Microsoft access5. teradata6. ibm db27. etc…

2. Esta aplicación además de ser muy fácil de manejar, es muy efectiva y yo personalmente la veo una aplicación muy útil, ya que te puede pasar solo datos, solo estructura de tablas, ambas cosas, vistas, etc… según tus necesidades.

3. El proceso de instalación es el siguiente:

1. En la primera captura deberemos seleccionar el idioma, que en mi caso será español.

2. La siguiente pantalla nos informará sobre lo que vamos a instalar y algunas recomendaciones, cuando la leamos pulsaremos “siguiente”:

26 Josué Monge Corrales Ir al Índice

Migración postgres-oracle SGBD 01-02-10

3. En esta pantalla nos enseñaran los acuerdo de licencia, los cuales deberemos aceptar para seguir con la instalación, asi que activaremos la opción “acepto el acuerdo” y “siguiente”:

4. Ahora nos dirá que le digamos donde queremos que nos instale la carpeta raíz de ESF, la cuál yo dejaré por defecto:

27 Josué Monge Corrales Ir al Índice

Migración postgres-oracle SGBD 01-02-10

5. Ahora nos preguntará el nombre de la carpeta que el programa creará en el menú inicio, también dejaremos los nombres por defecto:

6. En esta pantalla nos preguntará si queremos que el programa nos cree un acceso directo en el escritorio, un acceso directo en el inicio rápido y si queremos agregar el directorio de la aplicación a la url del sistema, en mi caso dejaré los tres señalados:

28 Josué Monge Corrales Ir al Índice

Migración postgres-oracle SGBD 01-02-10

7. Ahora nos mostrará los parámetros de instalación que hemos escogidos anteriormente y si estamos de acuerdo daremos a “Instalar ” para que comience el proceso de instalación de ESF:

8. Empezará el proceso de instalación:

29 Josué Monge Corrales Ir al Índice

Migración postgres-oracle SGBD 01-02-10

9. Una vez finalizado el proceso nos saldrá una pantalla en la cuál nos dice que la instalación se ha realizado correctamente y nos da la opción de ejecutar automáticamente la aplicación al pulsar “Finalizar”, si queremos que nos la ejecute dejaremos la opción cogida y si no bastará con desactivarla:

10. Si dejamos la opción antes mencionada activada nos saltará la pagina de bienvenida de la aplicación:

11. Y llegado a este punto ya tenemos nuestra aplicación correctamente instalada, en el siguiente punto describiremos como utilizarla.

30 Josué Monge Corrales Ir al Índice

Migración postgres-oracle SGBD 01-02-10

5. MIGRACIÓN DE POSTGRES A ORACLE

1. Empezaremos utilizando El programa ESF, que como ya dijimos antes nos permitirá migrar datos, tablas(con claves primarias y foráneas), vistas, índices,etc…

2. Este programa es muy cómodo y eficaz, a continuación describiremos los pasos a seguir:1. Abrimos el programas en: inicio todos los programas EasyFrom inc ESF

database migration tools, y nos aparcerá la siguiente ventana:

2. Pulsaremos sobre siguiente, y nos aparecerá la ventana pidiéndonos los datos de conexión del SGBD origen, osea, del cuál vamos a migrar los datos, en nuestro caso será postgreSql, así que lo iremos rellenando de la siguiente manera:

a. Fuente: 1. Nos sacará una lista desplegable con todos los SGBD, escogeremos

postgreSQL Database.

b. Servidor: 1. En este apartado pondremos la dirección donde se encuentre nuestro servidor

postgreSQL, que en mi caso lo tengo montado en la máquina así que pondremos “localhost”.

c. Puerto: 1. Normalmente te lo pone por defecto, pero si por cualquier motivo no lo

cogiese le pondremos el mismo puerto que le dijimos en la instalación, en mi caso dejé el que venía por defecto, por tanto me pone automáticamente el “5432”.

31 Josué Monge Corrales Ir al Índice

Migración postgres-oracle SGBD 01-02-10

d. Nombre de: 1. Aquí nos pide que pongamos el nombre del usuario administrador de la base

de datos, que en mi caso es “postgres”. Además es el que viene por defecto, osea, que será el que utilicemos a no ser que hayamos creado otro usuario al que le hayamos dado privilegios de sys.

e. Clave: 1. En este punto pondremos la contraseña del usuario que hemos puesto

anteriormente, o en caso de haber puesto el usuario “postgres” la contraseña de este usuario es la que hemos insertado durante la instalación de postgreSQL.

f. Base de Datos:

1. En este apartado daremos a , y él irá automáticamente al servidor y nos traerá al menú desplegable los nombres de las base de datos que se encuentran allí, escogeremos de esa lista la que queremos migrar, en mi caso se llama “postgres”

g. Esquema:

1. Aquí nos pasará lo mismo que en el punto anterior, daremos a para que vaya a la base de datos antes escogida y nos traiga los esquemas de esa base de datos, y escogeremos el que deseamos migrar, que en mi caso es “public”.

h. Pulsaremos siguiente para ir a la siguiente pantalla.

3. En la siguiente ventana nos pedirá los datos del SGBD destino, osea donde van a ir los datos y lo rellenaremos de la siguiente manera:

a. Destino:1. Aquí escogeremos de la lista desplegable el SGBD al que vamos a migrar,

que en mi caso es “Oracle Database”.b. Servidor:

1. Se nos pone fijo por defecto con “localhost” y el puerto “1521”.

32 Josué Monge Corrales Ir al Índice

Migración postgres-oracle SGBD 01-02-10

c. Nombre de:1. Pondremos el nombre del “system”, que en mi caso es “josue”.

d. Clave:1. Pondremos la contraseña del usuario escogido como “system”.

e. Base de Datos:

1. Aquí pulsaremos sobre y nos actualizará la lista con los nombres de las base de datos que tengamos creadas, en mi caso cogeré la base de datos “ORCL” ,.

f. Esquema:

1. Aquí pulsaremos sobre el botón para que nos actualice la lista de nuestros esquemas,

33 Josué Monge Corrales Ir al Índice

Migración postgres-oracle SGBD 01-02-10

4. En el siguiente paso nos saldrán las tablas y vistas disponibles para el esquema de la base de datos que hayamos elegido, y escogeremos las tablas y vistas que deseemos migrar. Para añadir las tablas bastará con que las señalemos y se le pondrá un tick verde a la izquierda, a la derecha nos saldrá con el nombre que queremos que nos lo migre hacia la otra base de datos.

- Para hacer la primera prueba escogeremos por ejemplo la tabla “pg_am”, como podemos ver en la imagen de abajo, ya la tenemos señalada, y el nombre de destino en Mayúsculas(muy importante esto), el nombre debe ir en mayúsculas ya que oracle al almacenar la tabla las almacena en mayúsculas, si se la pasamos en minúsculas la migrará correctamente pero cuando la queramos ver, no la va a encontrar, aunque si la buscamos en la tabla “dba_tables” del diccionario de datos de oracle si nos la encontrará y nos dirá que pertenece al esquema al que la hemos migrado.

- Pulsaremos sobre los puntos suspensivos situados a la derecha del nombre de la tabla para que nos abra las opciones de la migración, si queremos que esa configuración afecte a esa tabla nada más, si lo que queremos es que la configuración afecte a todas las tablas que vayamos a migrar pulsaremos sobre el botón “configuraciones” situado en la parte de abajo, en ambos casos se nos abrirá la misma ventana teniendo solo la diferencia nombrada antes. Además de que si escogemos darle a los puntos suspensivos también podremos tocar el formato de esa tabla.

34 Josué Monge Corrales Ir al Índice

Migración postgres-oracle SGBD 01-02-10

5. En esta ventana veremos las opciones que tenemos para migrar nuestras tablas, la imagen que vamos a mostrar será la que se nos abrirá habiendo pulsado sobre el botón “configuraciones”, y nos permite configurar lo siguiente:

a. PESTAÑA “GENERAL”:

1. Si Existe tabla:1. Sobrescribir Tabla:

1. Si elegimos esta opción lo que hará será que si al migrar encuentra una tabla llamada igual la sustituirá.

2. Vaciar Datos:1. Esta opción lo que hará será que si encuentra una tabla llamada igual,

conservaría la estructura de la que ya existe pero solo almacenará los datos de la tabla que migramos.

3. Agregar Datos:1. Esta opción lo que hará será que si encuentra una tabla llamada igual

nos conservará la estructura y los datos , además añadiría los datos de la tabla que migramos.

4. Para esta opción elegiremos la que más nos convenga, podemos elegir aquí “Agregar datos” y si hay algunas tablas que preferimos que si las encuentra las sobrescriba pues lo diremos entrando en la configuración específica de la tabla, o viceversa, según más nos convenga.

2. Copiar Estructura So:1. Si mantenemos esta opción activada, solo nos migrará la estructura de la

tabla, no pasando los datos, o sea , nos quedaría una tabla vacía.2. Esta opción la escogeremos solo si queremos que no nos pase datos sino

que nada más pase las estructuras, nos puede convenir si vamos ha migrar datos a otra empresa la cuál va tener la misma estructura pero diferentes clientes o datos.

35 Josué Monge Corrales Ir al Índice

Migración postgres-oracle SGBD 01-02-10

3. Transferir campo Auto-incr:1. Si dejamos activada esta opción nos migrará también los campos auto-

incrementables.2. La dejaremos activada para que la migración sea más exacta.

4. Copiar Índices:1. Si activamos esta opción nos copiará también los índices pertenecientes a

esa tabla.2. La dejaremos activada para que la base de datos quede igual estructurada.

5. Copiar Claves Exterr:1. Con esta opción nos copiará también las claves foráneas.2. La dejaremos activada para que las tablas esten exactamente igual

enlazadas que en el origen.6. Traer:

1. Será el número de datos que queremos llevarnos a nuestro esquema.7. Introducir:

1. Será el número de datos a introducir por tabla.2. En estos dos pondremos números altos para no tener problemas a la hora

de pasarlos, según nos convenga.

8. Reemplazar Nombre de campos:1. Esta opción lo que hará será cambiarnos todos los caracteres que

añadamos al rectangulo “Desde:” por el carácter que pongamos en “A:”

36 Josué Monge Corrales Ir al Índice

Migración postgres-oracle SGBD 01-02-10

b. PESTAÑA “TIPO DE DATOS”:

1. Transferencia de nacionales:1. Si elegimos esta opción lo que hará será pasarnos el tipo de datos de char

a nchar o según es que escojamos.2. En mi caso la dejaré desactivada.

2. Tranferencia de no nacionales:1. Nos hará la misma operación de la opción de arriba pero al revés.2. También la dejaremos desactivada ya que nuestro objetivo es que el tipo

de datos sea igual que el de la base de datos origen.3. Doble Tamaño:

1. Nos permitirá doblar el tamaño del tipo de dato.2. Lo dejaremos desactivado ya que no queremos eso.

c. PESTAÑA “ORACLE”:

1. Aquí se nos abrirá un menú desplegable donde tendremo tres opciones:1. A mayúsculas:

1. Nos pasará los nombre de las tablas todos a mayúsculas.2. A minúsculas:

1. Nos pasará los nombres de las tablas todos a minúsculas.3. No cambiar:

1. Nos dejará los nombres de las tablas tal y como se lo hemos indicado en el apartado “Destino”.

37 Josué Monge Corrales Ir al Índice

Migración postgres-oracle SGBD 01-02-10

4. En pasos anteriores dije que era muy importante cuando migremos a oracle ponerle los nombres en mayúsculas para que este nos lo detecte al buscarlo en la base de datos, pues bien, aquí será donde le indiquemos que nos pase todos los nombres a mayúsculas para no tener ese problema, y no tener que cambiarle el nombre uno a uno a todas nuestras tablas. Ya que cuando es solo una tabla la que vamos a migrar no nos importa, pero cuando sean más de 100…

d. PESTAÑAS “POSTGRESQL e IBM DB2”

1. Esta pantalla son exactamente igual a la de oracle , lo único que las opciones que vamos a dejar aquí serán para postgres “A minúsculas” y para IBM “A mayúsculas”.

38 Josué Monge Corrales Ir al Índice

Migración postgres-oracle SGBD 01-02-10

e. PESTAÑA “CSV/TEXTO”

1. Esta pestaña la dejaremos por defecto ya que aquí lo que nos permite configurar es si decidimos pasar la migración a un archivo, el formato que va a tener y como va a ir el texto, separaciones, símbolos, formato, etc… Pulsaremos en guardar y después a siguiente:

39 Josué Monge Corrales Ir al Índice

Migración postgres-oracle SGBD 01-02-10

6. En el siguiente paso ya solo nos faltará darle a “Enviar” para que nos migre la estructura y los datos de la tabla “pg_am” que es la que hemos escogido para esta prueba.

7. Ahora solo nos quedará irnos a oracle y comprobar que la tabla se ha pasado correctamente y con todos los tipos de datos correctos, para ello abriremos sql plus y nos identificaremos como “josue” y haremos un “Desc pg_am” y nos deberá mostrar descripción de la tabla, con todas las columnas y el tipo que es cada una.

40 Josué Monge Corrales Ir al Índice

Migración postgres-oracle SGBD 01-02-10

8. Ahora generaremos script para pasar tanto usuarios como para cambiar de propietario a las tablas y darle el propietario que le correspondía en nuestra base de datos postgres. Para generar estos scripts nos meteremos en pgadminIII, pulsaremos sobre nuestra base de datos (“postgres”), y pulsaremos para escribir sentencias sql, una vez hayamos escrito la sentencia deseada para que nos genere el script, osea para que nos mande el resultado de la select a un fichero, pulsaremos , nos pedirá que le digamos donde queremos guardar el fichero generado, le diremos la url deseada, y además desactivaremos la opción “Nombres de columnas” para que no nos escriba los nombres de las columnas , y activaremos la opción “no entrecomillado” para que no nos ponga ningún tipo de comillas al principio y al final de cada sentencia.

a. Ya tenemos las tablas, vistas, índices y todas las claves tanto foráneas como primarias creadas, ahora nos crearemos los usuarios, nos meteremos para escribir sentencias sql y utilizaremos la siguiente sentencia:

- SELECT 'create user '|| usename || ' identified by '|| usename||' password expire quota 100k on users;' FROM pg_shadow;

o Con este script lo que conseguimos es todos los nombres de todos los usuarios de la base de datos, a los cuales le ponemos de contraseña su mismo nombre de usuario y le ponemos “password expire” para que al iniciar la seción por primera vez tenga que cambiar la contraseña. Le tenemos que poner este parámetro porque nos es imposible recuperar las contraseñas de la base de datos postgres ya que este las almacena encriptadas en md5.

o Le he puesto una cuota de 100M sobre users porque ese va a ser su tablespace por defecto que le asignará oracle.

o El script que nos genera tiene el siguiente aspecto:

41 Josué Monge Corrales Ir al Índice

Migración postgres-oracle SGBD 01-02-10

b. Ahora le pasaremos dos scripts más, uno que pasará las tablas a cada uno de sus propietarios, y el otro que las borrará del esquema al que las hemos migrado que en este caso era el de “josue”.

c. El primer scripts que lo que hará será pasar las tablas a cada uno de sus propietarios, este scripts lo debemos pasar como “sys”:1. La sentencia que utilizamos para generarlo será:

1. select 'create table ' ||tableowner||'.'||tablename ||' as select * from josue.'||tablename||';' from pg_tables;

2. Esta sentencia nos generará un script el cuál cogerá el nombre de la tabla y el nombre del propietario.

3. La sentencia sql para oracle que nos generará tendrán el siguiente aspecto:1. create table postgres.PICHICHI as select * from josue.PICHICHI;2. Lo que hará sera crearnos una tabla llamada “pichichi” en el esquema del

usuario “postgres” y nos la creará igual que la tabla “pichichi”, del esquema del usuario “josue” que es al esquema que migramos las tablas.

3. El scripts generado tiene el siguiente aspecto:

d. El segundo script lo que hará será borrar todas las tablas del esquema del usuario “josue”, así cada tabla pertenecerá solo al usuario que le corresponda.1. La sentencia utilizada para generarlo a sido la siguiente:

1. select 'drop table josue.'||tablename||' cascade;' from pg_tables;2. Lo que nos hace esta sentencia es selecionarnos el nombre de todas las

tablas de la tabla pg_tables que es donde se encuentran almacenados los datos de todas las tablas.

2. La sentencia que nos genera para sql oracle será la siguiente:1. drop table josue.PICHICHI cascade;2. Lo que nos borrará la tabla pichichi del esquema de usuario de “josue” en

cascada para que no deje rastro en este esquema.

42 Josué Monge Corrales Ir al Índice

Migración postgres-oracle SGBD 01-02-10

3. Así lo que conseguimos es que se quedaría nuestra base de datos como si la tabla no hubiese sido propiedad de “josue” nunca, y siendo su único propietario quien verdaderamente debe ser.

4. Nos generará un script como este:

6. DIFERENCIAS ENTRE LAS SENTENCIAS Y TIPO DE DATOS SQL DE ORACLE Y POSTGRES:

1. Para este apartado pondré la sentencia como sería para postgres y comentaré la diferencia que tiene con respecto a oracle.

2. Nombraremos solo las sentencias más utilizadas o más importantes, ya que todas las sentencias son imposible de abarcar en este proyecto por falta de tiempo.

3. Datos:POSTGRES ORACLE

Bool booleandate Date

decimal decimal(n,m)int2 Smallintint4 int,integer

Money decimal(9,2)numeric numeric(n,m)

Time timevarchar(n) Varchar2(n)

< >(operador distinto) ¡=!!= Not in

- Los demás operadores y datos son iguales, he puesto algunos que son iguales pero porque son mas “utilizados”.

43 Josué Monge Corrales Ir al Índice

Migración postgres-oracle SGBD 01-02-10

4. Sentencias:

1. Empezaremos con la sentencia de crear database:1. create database prueba;2. Esta sentencia es igual para los dos tanto para oracle como para postgres.

2. Ahora vamos con los índices:a. CREATE UNIQUE INDEX índice_título ON prueba(columnaprueba);

1. Donde “unique” sería para que no se puedan introducir datos duplicados.2. Esta sentencia también es igual que en oracle.

3. Ahora crearemos una regla:a. CREATE RULE example_2 AS ON SELECT TO EMP.salary

WHERE current.name="Bill" DO INSTEAD SELECT(emp.salary)From empWHERE emp.name="Joe";

b. Aquí lo que hacemos es hacer que Bill obtenga el salario de Joe cuando es accedido.

c. Tengo entendido que oracle no puedes crear reglas aunque se me asemeja mucho a un trigger ya que sirve para que se ejecute una opción alternativa en los insert, updates y deletes.

4. Secuencias:a. CREATE SEQUENCE nombreseq

[INCREMENT increment][MINVALUE minvalue] [MAXVALUE maxvalue][START start][CACHE cache][CYCLE]

b. Las secuencias son iguales que en oracle también.5. Tablas:

a. CREATE TABLE films(Code CHARACTER(5) CONSTRAINT firstkey PRIMARYKEY, name CHARACTER VARYING(40) NOT NULL , did DECIMAL(3) NOT NULL, date_prod DATE,kind CHAR(10),len INTERVALHOUR TO MINUTE CONSTRAINT production UNIQUE(date_prod),CONSTRAINT con1 CHECK(did >100 AND name >”));

b. La creación de tabla también se hace igual, con la única diferencia de los tipos de datos correspondientes

44 Josué Monge Corrales Ir al Índice

Migración postgres-oracle SGBD 01-02-10

6. Triggers:a. CREATE TRIGGER if_dist_exists

BEFORE INSERT OR UPDATE ON films FOR EACH ROW EXECUTE PROCEDURE check_primary_key(’did’,’distributors’,’did’);

b. La estrucutura es igual lo único que cambia de cómo lo hemos visto es que aquí se ejecuta un procedimiento y no utiliza la estructura declaration, begin, exceptions.

7. Usuarios:a. create user josue password 'josue';b. Esta sentencia tiene la diferencia de que oracle para crear un usuario a la hora de

hacer referencia a la contraseña no utiliza “password” sino que utiliza “identified by” de manera que esta misma sentencia para oracle sería:1. create user josue identified by ‘josue’;

8. Vistas:a. CREATE VIEW vista_ejem

ASselect p.nombre, p.dni, t.puesto from persona p, trabajo t;

b. Las vistas también se crean igual que en oracle.9. Para borrar datos (DELETE) y para borrar tablas, usuarios, etc…(DROP), son las

sentencias iguales. 10. Como conclusión de estas comparaciones hemos visto que casi todo son iguales

excepto los tipos de caracteres y la sentencia para crear usuarios.

45 Josué Monge Corrales Ir al Índice

Migración postgres-oracle SGBD 01-02-10

7. COPIAS DE SEGURIDAD EN POSTGRESQL:

1. Para crear copias de seguridad de nuestra base de datos postgres tiene una aplicación llamada “pg_dump” que lo que nos permite hacer tanto copias totales como copias de un solo esquema o copias de una tabla… osea es muy complejo.

2. Para crear una copia de seguridad de nuestra base de datos abriremos el “cmd” y nos iremos desplazando con “cd” hasta llegar a la carpeta que se encuentra en : 1. Si estamos en vista la ruta es:

a. C:/Archivos de programa/PostgreSQL/8.3/bin2. Si estamos en Windows 7:

a. C:/Program Files/PostgreSQL/8.3/bin3. Una vez estamos ahí vamos a poner el siguiente comando:

a. Donde “-U” será el usuario y “-W” la contraseña y lo redirigimos a un archivo que no tiene porque existir ya que él nos lo crea.

b. Nos pedirá la contraseña de nuevo la introducimos y ya nos hace la copia de seguridad, en el archivo que le hemos indicado.

46 Josué Monge Corrales Ir al Índice

Migración postgres-oracle SGBD 01-02-10

c. Si queremos ver que parámetros más podemos incluirle solo deberemos introducir el siguiente comando:1. “pg_dump - -help” y estos son todos los parámetros que nos dará:

d. Para restaurarla solo tendremos que ejecutar el siguiente comando:- pg_restore -f “C:\Users\josue\Documents\backup.sql”

47 Josué Monge Corrales Ir al Índice

Migración postgres-oracle SGBD 01-02-10

8. ERRORES OCURRIDOS DURANTE ALGUNO DE LOS PROCESOS.

1. Migración de datos:

1. Uno de los errores que es fácil que pase y tardé un poco en averiguar, debido mas que nada a la poca información en Internet fue la poner los nombres de las tablas en mayúsculas a la hora de pasar las tablas, ya que pasaba las tablas pero no las podia ejecutar, sin embargo en “dba_tables” si que salía reflejada y como propietario “Josue” pero ni la describía ni la ejecutaba, todo debido a que pasaba mal el nombre, y oracle internamente guarda todos los datos en mayúsculas, entonces esto provocaba que no lo encontrara. a. La primera solución que hice fue poner en mayúsculas los nombres de las tablas

a mano en el proceso de migración, pero me dí cuenta de que eso estaba bien cuando tenias como mucho 10 tablas, pero que pasaba cuando tenías 100… ¿le cambiabas los nombres uno a uno ?, por tanto seguí mirando y llegue a la siguiente pantalla:

1. Aquí podemos observar que da la opción a poner el nombre para oracle en

mayúsculas, y yo lo tenía puesto en la opción “No cambiar” , lo cambié probé y ya funcionaba perfectamente.

2. Creo que es un error tonto pero que de pasar puede marearte buscándolo si no sabes donde viene el error.

2. Otro error tonto que me llevo su tiempo también fue que solo se me pasaba la estructura de las tablas y no me pasaba los datos, entonces fue cuando me dí cuenta de la opción que viene activada por defecto que lo que hace es que solo te pasaba las estructuras de datos, y la opción es esta:

a. Tendremos que desactivarlo para que nos pase también los datos, una vez que lo desactive ya funcionaba perfectamente.

48 Josué Monge Corrales Ir al Índice

Migración postgres-oracle SGBD 01-02-10

2. Copia de Seguridad:

1. El fallo que me ocurrió fue que ejecutaba pg_dump sin estar dentro de su directorio “bin”, por tanto cada vez que lo ejecutaba me decía que no existía, de esto a diferencia de los otros dos errores anteriores si habia más información en foros y demás y estuve leiendo hasta que ha alguien le dio por decir que habia que ejecutarlo desde ese directorio, una vez lo hice, me fallaba que no encontraba el fichero al cuál lo mandaba con el parámetro “-f” de pg_dump y lo que hice fue quitarle ese parámetro y redirigirlo a un archivo con “>”, y me funcionó perfectamente tal y como se puede ver en las capturas de arriba.

49 Josué Monge Corrales Ir al Índice