jueves, 17 de agosto de 2017

Exports e Imports en BD Oracle 11g utilizando Datapump

 Exports/Imports de Tablas

El parámetro tables es usado para especificar que solo se exportaran tablas desde la base de datos de origen. La siguiente es la sintaxis para realizar este proceso de exportación:

expdp scott/tiger@db10g tables=EMP,DEPT directory=TEST_DIR dumpfile=EMP_DEPT.dmp logfile=expdpEMP_DEPT.log

impdp scott/tiger@db10g tables=EMP,DEPT directory=TEST_DIR dumpfile=EMP_DEPT.dmp logfile=impdpEMP_DEPT.log

El parámetro TABLE_EXISTS_ACTION=APPEND permite anexar información en tablas ya existentes en la base de datos destino.

 Exports/Imports de Esquemas

El parametro OWNER ha sido reemplazado por el parámetro SCHEMAS para asi indicar los esquemas que requieren ser exportados. La siguiente es la sintaxis para realizar este proceso de exportación:

expdp scott/tiger@db10g schemas=SCOTT directory=TEST_DIR dumpfile=SCOTT.dmp logfile=expdpSCOTT.log

impdp scott/tiger@db10g schemas=SCOTT directory=TEST_DIR dumpfile=SCOTT.dmp logfile=impdpSCOTT.log

 Exports/Imports de Base de datos

El parámetro FULL se indica cuando se quiere exportar la base de datos en su totalidad. La siguiente es la sintaxis para realizar este proceso de exportación:

expdp system/password@db10g full=Y directory=TEST_DIR dumpfile=DB10G.dmp logfile=expdpDB10G.log

impdp system/password@db10g full=Y directory=TEST_DIR dumpfile=DB10G.dmp logfile=impdpDB10G.log

INCLUDE y EXCLUDE

Los parámetros EXCLUDE e INCLUDE son utilizados cuando se requiere limitar a objectos especificos la exportación o importación segun sea lo necesario. Al especificar INCLUDE solo esos objetos especificos seran exportados.  Al usar EXCLUDE solo esos objectos seran excluidos en el proceso de exportación .  La siguiente es la sintaxis para realizar este proceso de exportación:

INCLUDE=object_type[:name_clause] [, ...]
EXCLUDE=object_type[:name_clause] [, ...]
 

expdp scott/tiger@db10g schemas=SCOTT include=TABLE:"IN ('EMP', 'DEPT')" directory=TEST_DIR dumpfile=SCOTT.dmp logfile=expdpSCOTT.log

expdp scott/tiger@db10g schemas=SCOTT exclude=TABLE:"= 'BONUS'" directory=TEST_DIR dumpfile=SCOTT.dmp logfile=expdpSCOTT.log

Si estos por parametros son usados desde linea de comandos dependiendo del Sistema operativo, los caracteres especiales deben ser omitidos.

include=TABLE:\"IN (\'EMP\', \'DEPT\')\"
 
Un export/import puede tener referencias a parametros multiples del siguiente modo:

INCLUDE=TABLE,VIEW,PACKAGE:"LIKE '%API'"

or

INCLUDE=TABLE
INCLUDE=VIEW
INCLUDE=PACKAGE:"LIKE '%API'"
 
Se pueden indicar multiples objetos usando los operadores LIKE e IN .

EXCLUDE=SCHEMA:"LIKE 'SYS%'"

EXCLUDE=SCHEMA:"IN ('OUTLN','SYSTEM','SYSMAN','FLOWS_FILES','APEX_030200','APEX_PUBLIC_USER','ANONYMOUS')"

ORA-01034: ORACLE Not Available Tips

Caso: Se me esta presentando el error ORA-01034: ORACLE not available ORA-27101: shared memory realm does not exist.

Respuesta:  El error ORA-01034 es un error simple que indica que la base de datos está abajo.
ORA-01034: ORACLE not available
Causa: La instancia de BD no ha sido iniciada. Entre las psoibles causas están:
- La SGA (Area global de sistema) posee menos memoria de la necesaria.
- Las variables del sistema operativo estan apuntanto a una instancia errónea.
Acción: Se debe revisar los valores seteados para la SGA, las variables de entorno de la BD (ORACLE_HOME, ORACLE_SID) y el estado del listener.

Instalación de Oracle 11g en Linux


Como es sabido la instalación de Oracle en Linux suele ser algo complicada. Para facilitar este proceso  a continuación se explican las fases para llevar a cabo, sin ningún problema, el proceso de instalación de Oracle 11g en Linux.

Antes de proceder a la instalación de Oracle Database 11g se deben tener en cuenta los siguientes requisitos de Hardware:
  • Requisitos de memoria
  • Requisitos de espacio en disco
  • Creación directorios necesarios
Requisitos de memoria
Para un funcionamiento óptimo de nuestro sistema será necesario disponer de un equipo con, al menos, 1GB de memoria RAM. Aunque podemos trabajar con sistemas que no cumplan con este requisito, si nuestro sistema crece y, con él, el número de transacciones realizadas por la base de datos, podemos obtener un deterioro drástico del rendimiento de nuestro servidor.
Directamente relacionado con el tamaño de nuestra memoria RAM, tendremos nuestra partición de swap o intercambio, la cual deberá tener, en la mayoría de los casos, una capacidad el doble de grande que nuestra memoria principal. Para ser más exactos, y según las recomendaciones facilitadas por Oracle, podemos fijarnos en la siguiente tabla para conocer la relación RAM/Swap óptima para diferentes situaciones.
RAM Disponible
Espacio Swap Requerido
Entre 257 MB y 512 MB
El doble de memoria RAM
Entre 513 MB y 2048 MB
1.5 veces el tamaño de nuestra RAM
Entre 2049 MB y 8192 MB
El mismo tamaño que RAM
Más de 8192 MB
0.75 veces el tamaño de la RAM
Requisitos de espacio en disco
Para instalar Oracle Database 11g debemos tener disponibles por lo menos entre 150 y 200MB en el directorio /tmp. Dependiendo del tipo de instalación necesitaremos, además, entre 1.5GB y 3.5GB de espacio en nuestro disco para instalar todo el software Oracle. Este tamaño podrá variar ampliamente según el tipo de instalación y elementos seleccionados. Además, si escogemos la utilidad de autobackup necesitaremos espacio extra a medida que trabajemos normalmente con nuestro sistema. Según el tipo de instalación necesitaremos:
Tipo de Instalación Espacio Requerido (GB)
Enterprise Edition 3.47
Standard Edition 3.22
Custom (espacio máximo)
3.37

Creación directorios necesarios
Antes de proceder a la instalación de Oracle, debemos crear ciertos directorios y concederles los permisos necesarios. Crearemos el directorio base de Oracle y, opcionalmente, un directorio para datos.
Para crear dichos directorios usaremos:
Comando
Acción
mkdir -p /mount_point/app/
Creación del directorio app en /mount_point
chown -R oracle:oinstall /mount_point/app/
Cambiando propietario
chmod -R 775 /mount_point/app/
Concesión de permisos
En nuestro caso /mount_point es una partición a parte montada en raíz con el nombre u01.

Requisitos de Software

Dependiendo de los productos que queramos instalar y el sistema utilizado como base, deberemos tener en cuenta ciertos puntos:
  • Requisitos de Sistema Operativo
  • Requisitos de Kernel
  • Paquetes necesarios
  • Usuarios y grupos
Requisitos de Sistema Operativo
Los siguientes sistemas operativos son soportados por la versión 11g de la Base de Datos Oracle:
Distribuciones Linux Soportadas
Asianux 2.0
Asianux 3.0
Oracle Enterprise Linux 4.0
Oracle Enterprise Linux 5.0
Red Hat Enterprise Linux 4.0
Red Hat Enterprise Linux 5.0
SUSE Enterprise Linux 10.0
Aunque solo las distribuciones que aparecen en la lista anterior son las soportadas oficialmente por Oracle, otras distribuciones tales como Fedora o Ubuntu funcionan correctamente.
Requisitos de Kernel
Las distribuciones anteriores deben utilizar las siguientes versiones de Kernel:
Distribución Versión de Kernel
Asianux 2, Oracle EL 4.0 y Red Hat EL 4.0 2.6.9
Asianux 3, Oracle EL 5.0 y Red Hat EL 5.0 2.6.18
SUSE 10 2.6.16.21
Parámetros de kernel
Hay numerosos parámetros de nuestro kernel que deberemos modificar para el uso de Oracle en nuestro equipo. La siguiente tabla muestra los valores mínimos recomendados para esos parámetros y el archivo donde aparecen.
Parámetro Valor Archivo
semmsl 250 /proc/sys/kernel/sem
semmns 32000 /proc/sys/kernel/sem
semopm 100 /proc/sys/kernel/sem
semmni 128 /proc/sys/kernel/sem
shmall 2097152 /proc/sys/kernel/shmall
shmmax La mitad del tamaño total de RAM /proc/sys/kernel/shmmax
shmmni 4096 /proc/sys/kernel/shmmni
file-max 512 * PROCESSES /proc/sys/fs/file-max
ip_local_port_range Mínimo: 1024 / Máximo: 65000 /proc/sys/net/ipv4/ip_local_port_range
rmem_default 4194304 /proc/sys/net/core/rmem_default
wmem_default 262144 /proc/sys/net/core/wmem_default
rmem_max 4194304 /proc/sys/net/core/rmem_max
wmem_max 262144 /proc/sys/net/core/wmem_max
Si en un determinado parámetro tenemos un valor igual o superior, no es necesaria su modificación, es decir, únicamente debemos modificar los parámetros que posean un valor inferior al dado. Todos los archivos mostrados en la tabla anterior contienen parámetros del kernel con lo cual puede resultar complicado y delicado su modificación directa. Una posible solución elegante y efectiva consiste en modificar el archivo /etc/sysctl.conf añadiéndole, de las líneas mostradas a continuación, únicamente las que necesitemos modificar:
kernel.shmall = 2097152 
kernel.shmmax = 2147483648 
kernel.shmmni = 4096 
kernel.sem = 250 32000 100 128 
fs.file-max = 65536 
net.ipv4.ip_local_port_range = 1024 65000 
net.core.rmem_default = 4194304 
net.core.rmem_max = 4194304 
net.core.wmem_default = 262144 
net.core.wmem_max = 262144
Paquetes necesarios
La distribución que hemos utilizado en la realización del presente proyecto ha sido Oracle Enterprise Linux 5.0 y Ubuntu 8.04 LTS. Oracle recomienda realizar una instalación típica sea cual sea la versión de nuestra distribución Linux para facilitar así todo el proceso de instalación y eliminar gran parte de los problemas de dependencias. De igual forma, es posible el uso de apt-get (previa instalación y configuración) aunque no ha sido la alternativa utilizada en nuestro caso. Los usuarios más avanzados pueden escoger una instalación mínima (con soporte para x-window ya que es necesaria para realizar la instalación de nuestra base de datos) optimizando así el uso de disco e instalar, posteriormente, los paquetes necesarios y que se añaden en el CD-ROM adjunto. Los paquetes requeridos para nuestra distribución junto a sus versiones mínimas se muestran a continuación:
binutils-2.17.50.0.6-2.el5 
compat-libstdc++-33-3.2.3-61 
elfutils-libelf-0.125-3.el5 
elfutils-libelf-devel-0.125 
glibc-2.5-12 
glibc-common-2.5-12 
glibc-devel-2.5-12 
glibc-headers-2.5-12 
gcc-4.1.1-52 
gcc-c++-4.1.1-52 
libaio-0.3.106 
libaio-devel-0.3.106 
libgcc-4.1.1-52 
libstdc++-4.1.1 
libstdc++-devel-4.1.1-52.e15 
make-3.81-1.1 
sysstat-7.0.0 
unixODBC-2.2.11 
unixODBC-devel-2.2.11
Usuarios y grupos
Los siguientes usuarios y grupos serán necesarios para la instalación y el uso de Oracle:
Nombre Tipo Rol
oinstall Grupo Grupo de inventario de Oracle
dba Grupo Grupo de OSDBA
oracle Usuario El propietario del software Oracle
nobody Usuario Usuario sin privilegios en el sistema
El usuario oracle deberá pertenecer al grupo oinstall (grupo primario) y también al grupo dba (grupo secundario).
Para mejorar el rendimiento de nuestra base de datos podemos incrementar las limitaciones de shell para el usuario oracle. En concreto, modificaremos el número máximo de descriptores abiertos y el número máximo de procesos disponibles para este usuario. Podemos establecer también ciertas variables de entorno en el archivo .bash_profile en el home del usuario oracle para tenerlas siempre disponibles cuando éste acceda al sistema. El conjunto de modificaciones que añadiremos en este paso se resumen en la siguiente tabla.
Fichero Parámetros
/etc/security/limits.conf oracle soft nproc 2047
oracle hard nproc 16384
oracle soft nofile 1024
oracle hard nofile 65536
/etc/pam.d/login session required /lib/security/pam_limits.so
session required pam_limits.so
/etc/profile if [ $USER = “oracle” ]; then
if [ $SHELL = “/bin/ksh” ]; then
ulimit -p 16384
ulimit -n 65536
else
ulimit -u 16384 -n 65536
fi
fi
Para finalizar estableceremos variables de entorno ORACLE_BASE y ORACLE_SID.
Nota:
Para establecer las variables de entorno:
ORACLE_BASE=/mount_point/app/oracle 
ORACLE_SID=sid 
export ORACLE_BASE ORACLE_SID
Una vez hechas estas modificaciones ya estamos listos para iniciar el proceso de instalación de Oracle 11g.

Bloqueo de acceso a Base de Datos Oracle por IP o nombre de host

Se puede bloquear el acceso a la base de datos a clientes basandose en su nombre de host o dirección IP. Solo es necesario agregar unas lineas en el archivo sqlnet.ora ($TNS_ADMIN/sqlnet.ora file)
   Para esto es necesario configurar el siguiente parámetro:

tcp.validnode_checking = yes

Esto habilita la revisión de IP's y host del listener de la base de datos.
Se puede habilitar o bloquear una lista de nodos de acuerdo a lo que se requiera
quedando del siguiente modo:


tcp.invited_nodes = (hostA, hostB, hostC) o tcp.excluded_nodes = (192.168.10.3)

Nota: Si se especifica el parámetro invited_nodes solo esos nodos podrán acceder a la BD.
Al indicar el parámetro excluded_nodes solo se excluyen esos y el resto podrá acceder sin problemas.