10 jun 2009

Chequeo de compatibilidades de SOURCE y TARGE Data Base

Estoy en la fase de acomodar la base de datos TARGET o destino, para
poder migrar los datos de otra db SOURCE o fuente. Esto lo voy a
realizar a través de las herramientas import / export de oracle 8i.


Siguiendo el documento
286775.1 voy realizando los siguiente chequeo entre las dos base de datos
  1. RDBMS 8.1.7.0 source databsae (produccion)
  2. RDBMS 8.1.7.4 target database ( a donde quiero migrar)

Source Database
---------------

3. In the source database, check which options were installed:
- Oracle Text - schema: CTXSYS
- Oracle OLAP - schema: OLAPSYS
- Oracle Spatial - schema: MDSYS
- Oracle Data Mining - schema: DMSYS
- Oracle Ultra Search - schema: WKSYS
- Oracle Label Security - schema: LBACSYS
- Oracle JVM ? - object_types: 'JAVA CLASS',
'JAVA DATA', 'JAVA RESOURCE'
- Oracle interMedia - schema: ORDSYS
- Oracle XML DB - schema: XDB


- run queries:

SELECT username FROM dba_users
WHERE username IN ('CTXSYS', 'OLAPSYS','MDSYS', 'DMSYS', 'WKSYS', 'LBACSYS', 'ORDSYS', 'XDB');

no rows selected

SELECT object_type, COUNT(*) FROM dba_objects
WHERE object_type LIKE 'JAVA%' GROUP BY object_type;

no rows selected

A simple vista observo que no existen tales properties mencionados anteriormente en la base de
datos fuente.

4. In the source database, check the characterset of the database:

SELECT * FROM nls_database_parameters
WHERE parameter LIKE '%SET' ORDER BY 1;

+--------+
| SOURCE |
+--------+

PARAMETER VALUE
------------------------------ ----------------------------------------
NLS_CHARACTERSET WE8ISO8859P1
NLS_NCHAR_CHARACTERSET WE8ISO8859P1

+--------+
| TARGET |
+--------+


PARAMETER VALUE
------------------------------ ----------------------------------------
NLS_CHARACTERSET WE8ISO8859P1
NLS_NCHAR_CHARACTERSET US7ASCII


Primer diferencia entre los dos RDBMS, siguiendo el documento llego al docId
77441.1
en donde uno de sus apartados dice:

"El character set es especificado durante la sesión de instalación o con la clasula CHARACTER
SET en la declaracion CREATE DATABASE. Para crear una nueva base de datos con un nuevo CHARACTER
SET, necesitas indicar el character set en el CREATE DATABASE script.
Este es el unico lugar,
por que el CHARACTER SET no puede ser indicado en el init.ora, este no es un parametro valido
del init.ora
"

NOTE: In Oracle 8.x.x there is a new NLS parameter called
NLS_NCHAR_CHARACTERSET. NLS_NCHAR_CHARACTERSET is National Character Set.
It specifies what languages can be used to name database objects. If you
already have a line for NLS_NCHAR_CHARACTERSET in your create database script,
you either need to indicate a character set value on that line in double
quotes as well, or take this line out because if NLS_NCHAR_CHARACTERSET is
not indicated in Create Database Script, it will just default to
NLS_CHARACTERSET value.

Estas es la nota al crear nuevamente la base de datos con este character set. Por lo que llamo al dbassist y
elimino la base de datos previamente creada en el TARGET database. Y la creo con este character set. Y
solucionado el problema.

Ya habiendo eliminado la base de datos, se me da por investigar un poco, y buscar una alternativa para no
eliminar la base de datos y setear nuevamente el character set. En el DocId
66320.1, las posibles
alternativas para realizar el cambio, este no realiza el cambio para los datos ya
existentes con distinto character set.
Sigo un poco mas, y en esta pagina encuentro la referencia a como cambiar el
NL_NCHAR_CHARACTERSET sin eliminar la base de datos en un ambiente de
migración, tal cual es mi caso. Por lo que concluyo que esta es la mejor opción
para mi ambiente.