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.





1 jun 2009

Database "SID" warm started.

Utilizando los scripts start y shutdown (dbstart y dbshut) de base de datos provenientes con la instalación. La instancia no se inicia cuando lo hace el SO, cuando ejecuto el script manualmente /etc/init.d/dbora me surge el siguiente mensaje:
  • Database "" warm started.
La instancia como también la base, se encuentran arriba y los logs no señalan ningún error/alerta.

Investigando un poco en Metalink llego al DocId:
  • 98418.1 WARNING: "dbstart" does not work with 8.1.6 Instances.
  • 50508.1 ALERT: "CONNECT INTERNAL" Syntax to be DeSupported
Mas allá de ser mi RDBMS 8.1.7.4, veo que las condiciones son similares. De los dos documentos y despues de ver esto:

Description 
~~~~~~~~~~~
"CONNECT INTERNAL" will no longer be supported AFTER Oracle8i Release 3 (8.1.7)
Server Manager will no longer be supported AFTER Oracle8i Release 3 (8.1.7)

As part of planning for future releases users are advised to convert
administrative scripts to use SQLPLUS in place of SVRMGRL and to use the
SYSDBA or SYSOPER privileges instead of CONNECT INTERNAL.
These privileges have been available and fully documented since Oracle 7.1

llego a la conclusión que lo mas saludable es cambiar el script dbora creado durante el proceso de instalación. Este es el encargado de subir y bajar la instancia cuando lo hace el sistema operativo.
Así que en el /etc/init.d/dbora cambio:

  • su - $ORA_OWNER -c $ORA_HOME/bin/dbstart &
Por :
  • su - $ORA_OWNER -c "
$ORACLE_HOME/bin/sqlplus -s /nolog << EOF
connect / as sysdba
startup
exit
EOF"

Y listo, desaparece el warning.