Recuperar espacio en tablas e índices con Segment Shrink

Anuncio
Newsletter – Mayo 2012
Recuperar espacio en tablas e índices con
Segment Shrink
Contenido
Página:
1
Recuperar
Espacio
Por: Ing. Juan Luis Rodríguez
[email protected]
Segment Shrink
9 Nuevas Características
Reports 11gr2
11
Configuración de
valores
copia
de
seguridad Grid Control
Con el tiempo, frecuentes operaciones de INSERT, UPDATE y DELETE en
registros de una tabla pueden dejar el espacio libre fragmentado. Para ello, Oracle
puede realizar compactación de segmentos (segment shrink) en la tabla o índice
para reducir esta fragmentación. Aplicar Shrink al segmento vuelve disponible el
espacio libre en el segmento del tablespace con lo que se puede lograr una futura
mejora en operaciones DML que se realicen sobre el segmento (tabla o índice).
Segment shrink es muy parecido a la redefinición online de una tabla en la que el
espacio es reclamado. Sin embargo, segment shrink puede ser realizado sin la
5a. Ave. 5-55 Zona14,Edificio Euro Plaza Torre II, Nivel 12
necesidad del espacio adicional que requiere la redefinición online de una tabla.
Teléfono:
(502)2364-5300Fax:
(502)2364-5311 Para determinar cuáles segmentos serán beneficiados con el uso de segment
Daniel
Cacía
[email protected]
shrink, se puede consultar el Segment Advisor para realizar el análisis
de tendencia
Pagina
1/10
Gerber Bautista
de crecimiento en los segmentos especificados.
Editores Generales
Debbie Moran
Francisco Barrundia
Autores
Contribuyentes
Entendiendo la funcionalidad de Segment Shrink
Para recuperar espacio sin usar en un segmento, Segment Shrink realiza dos
tareas diferentes: 1) Compactar los registros de datos, y 2) mover el high water
mark (HWM). La siguiente figura muestra el segmento de una tabla antes y
después de una operación de compactación:
Juan Luis Rodríguez
Segmento de tabla antes de aplicar Segment Shrink
Ivan Garcia
Francisco Barrundia
5a. Ave. 5-55 Zona14, Edificio Euro Plaza Torre II, Nivel 12
Teléfono: (502)2364-5300Fax: (502)2364-5311
Email:[email protected]
Página 1
Segmento de tabla después de aplicar Segment Shrink
La primera fase del segment shrink es la compactación, la cual mueve los registros de datos hacia
la izquierda hasta donde sea posible con la finalidad de maximizar el número de filas a obtener por
bloque. Un full scan table lee todos los bloques hasta el HWM por lo que mover el HWM hacia
zquierda, hasta donde sea posible, mejorará el desempeño del full scan table. La razón por la que
Oracle divide en dos partes la operación segment shrink es que mover el HWM puede
potencialmente bloquear las operaciones DML que el usuario final esté realizando, pero la sola
operación de compactación no. Como resultado, se puede realizar compactación durante el día
con un mínimo impacto en el tiempo de respuesta para el usuario que realiza DMLs.
Existen otros beneficios al realizar la operación segment shrink. Cuando se compacta un índice,
se requieren menos operaciones de I/O para obtener un ROWID en el índice. No todos los índices
de tabla se pueden compactar. Se debe tomar en cuenta también que los índices que se
compactan no necesitan ser reconstruidos después de una operación de compactación.
Adicionalmente, al recolocar el HWM después de una operación de compactación, más espacio
libre estará disponible en el tablespace para otros objetos.
Los siguientes objetos son candidatos para aplicar segment shrink:
Tablas.
Indices normales e índices de tablas organizadas por índice.
Tablas particionadas y sub-particionadas.
Vistas materializadas y materialized view logs.
Por otro lado, existen algunas restricciones para realizar operaciones de compactación. Primero, el
tablespace que contiene los objetos a compactarse debe ser administrado con Automatic Segment
Space Management (ASSM). Asimismo, existen algunos objetos que no pueden ser compactados:
Tablas en cluster.
Tablas con columnas de tipo LONG.
Tablas con vistas materializadas con on-commit o basadas en ROWID.
Tablas que contienen índices basados en funciones.
Tablas organizadas por índice de tipo IOT (mapping tables).
5a. Ave. 5-55 Zona14, Edificio Euro Plaza Torre II, Nivel 12
Teléfono: (502)2364-5300Fax: (502)2364-5311
[email protected]
Página 2
Estas restricciones deberían tener un impacto mínimo en su ambiente. Por ejemplo, las columnas
de tipo LONG deberían haber sido convertidas a columnas CLOB o BLOB desde hace tiempo.
Automatizando con Segment Advisor
El Segment Advisor de Oracle puede identificar segmentos candidatos a compactar y puede ser
ejecutado manualmente o calendarizado como parte del Automatic Segment Advisor job. Sea la
ejecución manual o automática, la primera fase del análisis usa estadísticas de crecimiento y datos
de muestreo almacenados en el Automatic Workload Repository para determinar cuáles objetos
necesitan análisis. Adicionalmente, el Automatic Segment Advisor se enfoca en tablespaces que
han excedido un límite crítico o de advertencia a partir del último análisis.
Después de realizar el análisis en los objetos candidatos identificados en la primera fase, el
Automatic Segment Advisor puede recomendar segmentos (tablas o índices) que son cantidatos a
compactar. Una vez hechas estas recomentadciones, se puede ejecutar el segment shrink para
una tabla o para un tablespace completo.
El Automatic Segment Advisor se ejecuta como un job calendarizado en la ventana default de
mantenimiento. El tiempo total calendarizado en la ventana de mantenimiento es de cuatro horas
cada noche entre semana y en fines de semana hasta por 20 horas en un día. Aunque no se
puede especificar cuáles objetos y tablespaces son analizados por el Automatic Segment Advisor,
se puede cambiar cuándo y cuántos recursos puede consumir cuando se ejecuta. La siguiente
figura muestra la página de configuración para el Automatic Segment Advisor, obtención de
estadísticas, y jobs automáticos de tuneo de SQL.
5a. Ave. 5-55 Zona14, Edificio Euro Plaza Torre II, Nivel 12
Teléfono: (502)2364-5300Fax: (502)2364-5311
[email protected]
Página 3
Compactando Segmentos
Para compactar segmentos se pueden utilizar comandos de SQL en un segmento, o
alternativamente, usar la interfaz del Enterprise Manager para realizar la misma tarea. Se puede
elegir un objeto seleccionado, o un objeto puede estar identificado por el Automatic Segment
Advisor.
Utilizando SQL para Compactar Segmentos
Antes de compactar un segmento, se debe tener habilitado el row movement en la tabla o en el
índice. Algunas aplicaciones u operaciones, como en los índices de una tabla, se confía en el valor
ROWID para accesar los registros de la tabla. El row movement se habilita de la siguiente manera:
SQL> alter table employees enable row movement;
Para compactar el segmento, la instrucción a ejecutar es:
SQL> alter table employees shrink space compact;
La claúsula COMPACT es opcional. Si se especifica COMPACT, solo la fase de compactación se
lleva cabo, y el HWM se mantiene en su lugar hasta que se ejecuta el mismo comando sin la
claúsula COMPACT:
SQL> alter table employees shrink space;
Para inicializar el Segment Advisor en una tabla específica o en un tablespace completo, se debe
utilizar el paquete DBMS_ADVISOR. Este paquete también es usado por otros advisors comol SQL
Access Avisor y Undo Advisor. A continuación se describen los procedimientos incluidos en el
paquete DBMS_ADVISOR que se pueden usar para realizar un análisis:
CREATE_TASK  Crea una nueva tarea en el repositorio.
CREATE_OBJECT  Especifica un objeto de la base de datos para analizar.
SET_TASK_PARAMETER -> Asigna el parómetro para el análisis.
EXECUTE_TASK  Realiza el análisis.
El resultado del análisis produce una o varias recomendaciones, las cuales no pueden ser
implementadas automáticamente. Después de que el Segment Advisor ha sido invocado para dar
recomendaciones, éstas están disponibles en la vista del diccionario de datos
DBA_ADVISOR_FINDINGS. Para mostrar los beneficios potenciales de compactar segmentos
cuando el Segment Advisor recomienda una operación de compactación, la vista
DBA_ADVISOR_RECOMENDATIONS provee la operación de compactación recomendada junto
con los ahorros potenciales expresados en bytes.
Por ejempo, usando un bloque anónimo de PL/SQL se configura e inicia un Segment Advisor job,
se ejecuta y se obtiene el identificador de la tarea en la variable TASK_ID:
5a. Ave. 5-55 Zona14, Edificio Euro Plaza Torre II, Nivel 12
Teléfono: (502)2364-5300Fax: (502)2364-5311
[email protected]
Página 4
declare
name varchar2(100);
descr varchar2(500);
obj_id number;
begin
name := ''; -- unique name generated from create_task
descr := 'Check HR.EMPLOYEE table';
dbms_advisor.create_task
('Segment Advisor', :task_id, name, descr, NULL);
dbms_advisor.create_object
(name, 'TABLE', 'HR', 'EMPLOYEES', NULL, NULL, obj_id);
dbms_advisor.set_task_parameter(name, 'RECOMMEND_ALL', 'TRUE');
dbms_advisor.execute_task(name);
end;
PL/SQL procedure successfully completed.
SQL> print task_id
TASK_ID
---------384
SQL>
Una vez ejecutado el código, se despliega el identificador de la tarea (variable TASK_ID) y con ello
se consulta los resultados en la vista del diccionario de datos apropiada:
SQL> select owner, task_id, task_name, type,
2
message, more_info from dba_advisor_findings
3
where task_id = 384;
OWNER
TASK_ID TASK_NAME TYPE
---------- ------- --------- -----------RJB
384 TASK_00003 INFORMATION
MESSAGE
-------------------------------------------------Perform shrink, estimated savings is 107602 bytes.
MORE_INFO
--------------------------------------------------------------------Allocated Space:262144: Used Space:153011: Reclaimable Space :107602:
5a. Ave. 5-55 Zona14, Edificio Euro Plaza Torre II, Nivel 12
Teléfono: (502)2364-5300Fax: (502)2364-5311
[email protected]
Página 5
Usando Enterprise Manager para Compactar Segmentos
Para ejectuar el Segment Advisor desde Enterprise Manager, en la parte inferior de la página
principal dar clic en link Advisor Central. En el tab Advisors, clic en el link Segment Advisor. En la
figura siguiente, se selecciona el radio button Schema Objects ya que se procederá a analizar la
tabla HR.EMPLOYEES:
Luego clic en el botón Next. Se especifica la tabla HR.EMPLOYEES y click en el botón Submit
inicia la tarea de análisis.
En la página Advisor Central, se puede monitorear el avance del job. Cuando el job se completa,
clic en el nombre del job mostrará los resultados del análisis.
5a. Ave. 5-55 Zona14, Edificio Euro Plaza Torre II, Nivel 12
Teléfono: (502)2364-5300Fax: (502)2364-5311
[email protected]
Página 6
Como es de esperarse, Segment Advisor recomienda que se debe compactar la tabla. Clic en el
botón Shrink realizará la compactación.
Como se mencionó anteriormente, Segment Advisor generará recomendaciones para la tabla
analizada. Para este ejemplo, se provee una recomendación. Clic en el link Recomendations
muestra las recomendaciones de manera individual para el tablespace EXAMPLE que incluye
compactación de la tabla EMPLOYEES debido a que tiene un monto significativo de espacio a
recuperar.
5a. Ave. 5-55 Zona14, Edificio Euro Plaza Torre II, Nivel 12
Teléfono: (502)2364-5300Fax: (502)2364-5311
[email protected]
Página 7
Clic en el botón Implement lleva a cabo la ejecución de un job para realizar la compactación de los
segmentos en la tabla HR.EMPLOYEES. En la firgura siguiente se muestra el resultado de la
ejecución del job, y el comando PL/SQL aplicado.
Importante: Al realizar operaciones de segment shrink para liberar segmentos de espacio libre en
tablas e índices, se debe tomar en cuenta el impacto en las operaciones DML que esté realizando
el usuario final (bloqueo, demora en tiempo de ejecución, etc.). Con el tiempo, la ejecución del job
para el Automatic Segment Advisor en la ventana default de mantenimiento, actualizará el
diccionario de datos con lo que el DBA visualizará recomendaciones en la página principal de
Enterprise Manager:
5a. Ave. 5-55 Zona14, Edificio Euro Plaza Torre II, Nivel 12
Teléfono: (502)2364-5300Fax: (502)2364-5311
[email protected]
Página 8
Nuevas Características Oracle Reports 11gR2
(11.1.2.0.0)
Por: Ing. Iván García
[email protected]|
La información que almacenamos cada día crece a un
ritmo vertiginoso, sin embargo, todos estos datos no son
útiles sin la posibilidad de presentarlos de una forma
coherente y resumida. Por medio de Oracle Reports
11gR2 tenemos las herramientas necesarias para
generar reportes sofisticados, que permiten obtener la
información de varias fuentes de datos y presentarla en distintos formatos; además, implementa
mecanismo de seguridad y distribución que facilitan la entrega de información hacía todo los
niveles de una organización.
Oracle Reports es parte de Oracle Fusion Middleware (OFM). El middleware de Oracle (OFM) es el
conjunto de productos disponibles para que las organizaciones ejecuten su aplicaciones y presten
servicios en el Web. Dentro de estos productos se encuentra el subconjunto que antes se conocía
como Oracle Application Server 10g, compuesto de Forms, Reports, Portal y Discoverer. Ahora
bien, todos estos productos se encuentran en el OFM en su versión 11g y a continuación se
presentan las mejoras más significativas de Oracle Reports.
Desde la instalación del software se pueden apreciar las mejoras latentes en la nueva versión de
Reports, por ejemplo:
Instalación Modular: Todos los componentes del OFM vienen débilmente acoplados, esto
permite que en la instalación se pueda seleccionar solo los servicios necesarios,
permitiendo reducir la huella en memoria que se deja al subir los servicios instalados. Si
solo se va a utilizar Reports, simplemente se instala solo Reports.
Mejor estructuración de los archivos instalados: La instalación de un producto 11g crea
dos directorios principales: ORACLE_HOME, directorio que almacena todos los binarios y
librerías de la instalación; ORACLE_INSTANCE, directorio que almacena los archivos de
configuración de la instancia que ejecuta los servicios instalados. De esta forma el
ORACLE_HOME puede ser compartido por varias instancias, reduciendo el espacio
necesario para la instalación y facilitando la generación de respaldos y la recuperación de
los mismos.
Respecto a la administración de Oracle Reports se presentan bastantes mejoras debido al cambio
en la herramienta del Enterprise Manager (EM). Gracias a la ejecución de las aplicaciones sobre
WebLogic el Enterprise Manager se ha visto renovado y presenta las siguientes mejoras respecto a
Reports:
Una interfaz más rica y personalizable permite apreciar de forma global todos los demás
servicios involucrados con Reports
Se presentan páginas que permiten hacer tareas de administración, configuración, tuning,
diagnóstico y auditoría sobre Reports directamente desde el EM
5a. Ave. 5-55 Zona14, Edificio Euro Plaza Torre II, Nivel 12
Teléfono: (502)2364-5300Fax: (502)2364-5311
[email protected]
Página 9
Obtención de métricas de desempeño en tiempo real e histórico, gráficas de tendencias y
estadísticas claves que permiten analizar cambios necesarios en las configuraciones de
Reports para mantener tiempos de respuesta óptimos
Se presenta una serie de comandos más avanzados para el manejo de las solicitudes de
reportes a ejecutar (jobs), se puede realizar búsquedas, filtros, volver a ejecutar un reporte
y ver los fallos, además de las opciones básicas de cancelar, eliminar, etc.
Existe una interfaz gráfica para realizar la calendarización de los reportes, facilitando al
administrador dicha tarea y evitando los posibles errores de calendarizar por medio de
línea de comandos
Siguiendo con la administración, ahora en materia de seguridad, las siguientes características
ofrecen más control sobre el acceso y ejecución de comandos:
Se pueden definir permisos de acceso (lectura/escritura) a directorios a nivel de Reports,
de tal manera que se restringe de cuales directorios se puede leer los reportes y a que
directorios se puede escribir la salida, evitando así vulnerabilidades en la seguridad.
Existen verificaciones de seguridad para destinos distribuidos, por ejemplo: ciertos reportes
no pueden ser enviados por correo o ciertos reportes solo pueden ser generados a PDF
Ahora existe la implementación de Proxy Users para Reports, agregando una capa más de
seguridad en la conexión hacia la base de datos
Integración con Oracle Access Manager para la implementación de Single Sign-On 11g
5a. Ave. 5-55 Zona14, Edificio Euro Plaza Torre II, Nivel 12
Teléfono: (502)2364-5300Fax: (502)2364-5311
[email protected]
Página 10
La generación de reportes presenta nuevos formatos de salida:
ENHANCEDSPREADSHEET: Formato de salida que permite una utilización más natural
como hoja de datos en aplicaciones como Microsoft Excel, soporta hasta 75,000 filas y no
está limitado por los tamaños de una página
PDF con seguridad (PDFSECURITY, PDFOWNER, PDFUSER): Aunque el formato de
salida tipo PDF existe en versiones anteriores, Reports 11g ofrece la utilización de
restricciones de seguridad de forma nativa. Con los parámetros PDFxxx se puede
establecer una contraseña para la visualización del PDF, no autorizar la modificación de
contenido, deshabilitar impresión, restringir la copia de texto, etc.
También se presentan varias mejoras en las gráficas disponibles en los reportes: dos nuevos tipos
de gráficas, soporte de imágenes SVG (Scalable Vector Graphic) y cambios en los formatos del
Graph Wizard.
Las características anteriormente descritas son solo algunas de las más importantes en lo que se
refiere a Oracle Reports 11gR2, fueron mencionadas de forma general ya que solo se pretendía
dar a conocer dichas cualidades del producto sin entrar a detalle con cada una. Espero haber
despertado la curiosidad sobre las nuevas versiones de Reports e impulsar con mayor razón la
necesidad de migrar hacia el futuro en aplicaciones Web que nos ofrece Oracle.
Configuración de valores de copia de seguridad en
Grid Control / EM 11G
Por Lic. Francisco Barrundia
[email protected]
OBJETIVO
Configurar los valores de copia de seguridad RMAN a través de la interfaz que nos proporciona EM.
VALORES QUE SE PUEDEN CONFIGURAR DESDE GRID
CONTROL
El Grid Control / EM nos facilita la tarea de configurar los valores básicos para realizar un backup de RMAN sin
necesidad de conocer el comando configure de RMAN. La interfaz que GC/EM nos facilita la tarea de
configuración de parámetros. Podemos acceder a esa interfaz a través de la pestaña disponibilidad de
nuestra base de datos y hacemos clic sobre valores de copia de seguridad.
5a. Ave. 5-55 Zona14, Edificio Euro Plaza Torre II, Nivel 12
Teléfono: (502)2364-5300Fax: (502)2364-5311
[email protected]
Página 11
Una vez que accedemos al esta pantalla el Grid Control nos muestra tres pestañas con tres apartados
diferentes para configurar nuestros valores de backup RMAN ( Dispositivo, Juego de copias de Seguridad,
Política ).
DISPOSITIVO
Valores de disco
Ubicación de Copia de Seguridad en Disco: nos permite configurar dónde se van a guardar nuestras
copias
de
seguridad.
Si configuramos esta opción y queremos ver cómo se refleja el cambio en nuestra configuración
de RMAN podremos hacerlo con el comando show channel en nuestra consola de RMAN.
RMAN>
show
RMAN configuration parameters for
CONFIGURE
CHANNEL
DEVICE
database with
TYPE
DISK
db_unique_name
FORMAT
channel;
PRUEBA are:
'+BACKUP/%U'
RMAN>
Donde format sería el encargado de indicarnos nuestra ubicación con el formato específico.
Tipo de Copia de Seguridad en Disco: Grid Control nos permite seleccionar la opción del tipo de copia se
seguridad que queremos. Una de las opciones que se nos permite seleccionar directamente es realizar las
copias
de
seguridad
comprimidas
para
reducir
espacio.
Si marcamos la opción de la opción de comprimido podremos ver este cambio reflejado en nuestra
configuración de RMAN con la siguiente sentencia.
CONFIGURE DEVICE TYPE DISK BACKUP TYPE TO COMPRESSED BACKUPSET PARALLELISM 1
A continuación mostramos la imagen de la interfaz que nos permitiría configurar estos valores.
5a. Ave. 5-55 Zona14, Edificio Euro Plaza Torre II, Nivel 12
Teléfono: (502)2364-5300Fax: (502)2364-5311
[email protected]
Página 12
Valores de Cinta
En caso de que queramos enviar nuestro backup a una cinta. La interfaz también permite configurar estos
valores pudiendo indicar, así como el tipo de copia de seguridad que queremos realizar.
Juego de copias de seguridad
En este apartado podemos configurar valores que tienen que ver con el tamaño de las “partes” de las
copias así como especificar el algoritmo de compresión que usaremos y especificar las credenciales
para que RMAN pueda conectarse al host.
5a. Ave. 5-55 Zona14, Edificio Euro Plaza Torre II, Nivel 12
Teléfono: (502)2364-5300Fax: (502)2364-5311
[email protected]
Página 13
Política de backup
En la pestaña política podremos configurar algunas de las políticas importantes para RMAN.
En este apartado podremos configurar si en cada copia de seguridad queremos que se almacene de forma
automática el archivo
de
control
y
el
archivospfile.(
recomendable
Este cambio lo podemos ver reflejado de la siguiente forma en la configuración de RMAN.
).
CONFIGURE CONTROLFILE AUTOBACKUP ON
5a. Ave. 5-55 Zona14, Edificio Euro Plaza Torre II, Nivel 12
Teléfono: (502)2364-5300Fax: (502)2364-5311
[email protected]
Página 14
También podremos marcar la opción de activar la copia de seguridad saltando los archivos sin cambios
(archivos de sólo lectura), así como determinar si quermos que no se haga backup de algún tablespace
concreto.
También nos da la opción de activar el tracking file para realizar copias de seguridad más rápidas en la base
de datos.
Tracking file es un archivo que lleva el registro de los bloques que van cambiado desde el último backup. Se
recomienda habilitarlo para que las copias se seguridad incrementales sean más óptimas porque si no, de lo
contrario, RMAN tendría que leer todos los bloques de la base de datos para determinar cuáles son los que
han
cambiado
y
el
backup
se
realizaría
más
lento.
Activar esta opción correspondería a lanzar esta sentencia en base de datos.
SQL> ALTER DATABASE ENABLE BLOCK CHANGE TRACKING USING FILE <ubicacion>
POLÍTICAS DE RETENCIÓN
En este apartado podremos decidir cuánto tiempo queremos mantener nuestras copias de seguridad,
así como especificar la política de retención de nuestros archivelogs en la base de datos.
Si elegimos mantener todas las copias de seguridad, tendremos que tener en cuenta que nuestras copias
deberán
ser
borradas
manualmente.
Si elegimos la opción “Mantener las copias de seguridad que sean necesarias para la recuperación…”
especificaremos el número de días que queremos que se mantenga nuestras copias de seguridad. Las otras
quedarán obsoletas.
5a. Ave. 5-55 Zona14, Edificio Euro Plaza Torre II, Nivel 12
Teléfono: (502)2364-5300Fax: (502)2364-5311
[email protected]
Página 15
También podemos elegir mantener un número específico de copias de seguridad
Al igual que en los anteriores apartados podemos ver cómo se realizan estos cambios en la configuración de
RMAN con el comando show all y podremos ver,depende de lo que hayamos configurado, sentencias del tipo:
Si Mantenemos todos los backups podremos ver la siguiente sentencia de configuración.
CONFIGURE RETENTION POLICY TO NONE;
Si especificamos algortimo de compresión podremos ver algo similar a
CONFIGURE COMPRESSION ALGORITHM 'BASIC' AS OF RELEASE '11.2.0.0.0' OPTIMIZE FOR
LOAD TRUE;
Si decidimos mantener sólo los backups 5 días en nuestra configuración veremos
CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 5 DAYS;
Si nuestra política de borrado de archivelog es borrar los archivos tras dos backups de éstos podremos ver
CONFIGURE ARCHIVELOG DELETION POLICY TO BACKED UP 2 TIMES TO 'SBT_TAPE';
Tip técnico del día:
Como ver los Cursores Abiertos Por Usuario?
select b.sid, a.username, b.value Cursores_Abiertos
from v$session a,
v$sesstat b,
v$statname c
where c.name in ('opened cursors current')
and b.statistic# = c.statistic#
and a.sid = b.sid
and a.username is not null
and b.value >0
order by 3
Por Lic. Francisco Barrundia
[email protected]
5a. Ave. 5-55 Zona14, Edificio Euro Plaza Torre II, Nivel 12
Teléfono: (502)2364-5300Fax: (502)2364-5311
[email protected]
Página 16
5a. Ave. 5-55 Zona14, Edificio Euro Plaza Torre II, Nivel 12
Teléfono: (502)2364-5300Fax: (502)2364-5311
[email protected]
Página 17
Descargar