universidad de guayaquil -...
Post on 25-Aug-2020
21 Views
Preview:
TRANSCRIPT
UNIVERSIDAD DE GUAYAQUILFacultad de Ciencias Matemáticas y Físicas
Carrera de Ingeniería en SistemasComputacionales
Sistema de Administración de Infraestructura Tecnológica “DBMS - FOX”
TESIS DE GRADOPrevio a la Obtención del Título de:
INGENIERO EN SISTEMAS COMPUTACIONALES
Autores:
Briones Ávila Gissela ElizabethDel Rosario González Willy José
Jiménez Matías Boris Rafael
GUAYAQUIL-ECUADOR
Año: 2008
II
AGRADECIMIENTO
Mi agradecimiento infinito a Dios por las múltiples
bendiciones que me a dado, entre ellas darme la
fuerza y la sabiduría para poder terminar mi carrera.
A mi mami Sra. Cecilia Ávila por su amor, apoyo y
confianza incondicional, una mujer que siempre con
su sabiduría y paciencia me han guiado durante
toda mi vida. A mis hermanos Cristian y Andrés por
su apoyo y aliento, al Sr. Vicente Alvarado por su
preocupación y ayuda. A la persona que lleno de
alegría y Amor a mi corazón Washington que con
sus consejos y apoyo me ha ayudado a tener
fuerzas en los momentos más difíciles. A mi querido
Padre Sr. William Briones que a pesar de que no
vivimos juntos siempre ha estado pendiente de mí.
Gissela Briones Avila
III
AGRADECIMIENTO
Agradezco a mi Dios Todopoderoso por darme, la
vida, su amor y las fuerzas necesarias para poder
seguir adelante cada día. A mi madre Sra. Patricia
González por su comprensión y compañía en todo
momento. A mi padre Sr. Ernesto Del Rosario que a
pesar de la distancia siempre ha estado pendiente
de mí, de mis necesidades, de cada paso de mi vida
y de mi carrera y que ha sido siempre mi ejemplo de
superación.
Willy Del Rosario G.
IV
AGRADECIMIENTO
A mi familia que me ha sabido apoyar en todos los
momentos buenos y malos, sobre todo a mi madre
la Sra. Nelly Matías Panchana que con su sacrificio
y abnegación supo inculcar valores importantes que
han sido un buen ejemplo en el transcurso de mi
vida. A Dios por las múltiples bendiciones que me a
dado, entre ellas permitirme terminar mi carrera. A
mis hermanos el Arq. Carlos Jiménez Matías y Erick
Jiménez Matías. A mi tía Bepcy Matías que me
apoyaron en estos últimos momentos para sacar
adelante este proyecto.
Boris Jiménez Matías.
V
DEDICATORIA
El esfuerzo y perseverancia de este trabajo es
dedicado a Dios por haberme dado la fuerza
para terminar este proyecto y a mi madre que
han sido ejemplo de superación y siempre me ha
brindado su apoyo incondicional.
Gissela Briones Avila
VI
DEDICATORIA
El esfuerzo que dio como resultado el término de
una etapa más de mi vida se lo dedico a Mi Dios
por su Amor y su Fidelidad.
A mi ser especial Ing. Laura Mazzini Martínez
que estuvo a mi lado incondicionalmente, con
fuerza, amor y comprensión de una etapa grande
en mi vida.
Willy Del Rosario G.
VII
DEDICATORIA
A todo el esfuerzo de una gran persona como mi
Madre que a pesar de su enfermedad me apoyo
para que realizara este sacrificio y que le de el
privilegio de verme convertido en un profesional
y que con la ayuda de Dios nos permita salir
adelante en todo
Boris Jiménez Matías
VIII
TRIBUNAL DE GRADUACIÓN
Presidente Tribunal Primer Vocal
Segundo Vocal Secretario
IX
DECLARACIÓN EXPRESA
“La autoría de la tesis de grado corresponde exclusivamente al los suscritos,
perteneciendo a la Universidad de Guayaquil los derechos que generen la
aplicación de la misma”
(Reglamento de Graduación de la Carrera de Ingeniería en sistemas
Computacionales, Art. 26)
Gissela Elizabeth Briones Ávila Willy Del Rosario González
0921924668 0915267876
Boris Jiménez Matías
0919976050
X
RESUMEN
Toda organización en la actualidad desea establecer los controles necesarios
de su Infraestructura de Tecnología de Información, centradose en el punto
clave de todos los sistemas que llegaran a utilizar, como lo es la
administración de la Base de Datos, actividades de los datos, manipulación de
los datos, establecer diccionario de datos, confiabilidad de la base de datos y la
seguridad de la base de datos.
En vista de esto hemos desarrollado una herramienta que sirva de
complemento a los diversos usuarios que puedan administrar las Bases de
Datos que posea la empresa.
El Sistema de Administración de Infraestructura Tecnológica “DBMS - FOX” les
va a permitir administrar de una manera eficiente y eficaz todas las
necesidades de la Empresa desde la creación de un usuario hasta la
generación de copias de seguridad.
El Sistema DBMS – FOX es de fácil compresión no solo para los
administradores de base de datos que han usado las herramientas Oracle sino
para los que no las hayan utilizado todavía.
XI
Da gran dinamismo a las diversas aplicaciones que desee realizar el
administrador, contando con los diversos métodos de notificación de las alertas
vía mail y sms al celular.
El sistema es de gran ayuda al administrador ya que integra diversos aspectos
como la simulación de una consola de comandos SQL y características del
comando RMAN.
DBMS – FOX integra todas estas funcionalidades que le permitirán al
administrador tener una gran ayuda al momento de supervisar el
funcionamiento de la Base de Datos.
XII
SUMMARY
All organization at the present time wants to establish the necessary controls of
their Technology Infrastructure of Information, being centered in the key point of
all the systems that they ended up using, as it is the Database administration,
data activities, manipulation of the data, establishing a data dictionary,
dependability of the database and the database security.
In view of this we have developed a tool that serves as complement to the
diverse users that can administer the Databases that the company possesses .
The Administration System of Technological Infrastructure "DBMS - FOX" will
allow them to administer in an efficient and effective way all the necessities of
the Company from the creation of an user, until the generation of security
copies.
The System DBMS - FOX is of non alone easy compression for the database
administrators that have used the tools Oracle but for those that have not still
used them.
It gives a great dynamism to the diverse applications that administrator wants
to carry out, having diverse methods of alerts notification as via mail and sms
to the cellular one.
XIII
The system is very helpful to the administrator, it integrates diverse aspects like
the simulation of a console of commands SQL and characteristic of the
command RMAN.
DBMS - FOX integrates all these functionalities that will allow the administrator
to have a great help to the moment to supervise the operation of the Database.
XIV
INDICE GENERAL
AGRADECIMIENTO II
DEDICATORIA V
TRIBUNAL DE GRADUACION VIII
DECLARACION EXPRESA IX
RESUMEN X
INDICE GENERAL XIV
CAPITULO 1
INTRODUCCION 1
1.1 Antecedentes 1
1.2 Solución 2
1.3 Visión 3
1.4 Misión 3
1.5 Objetivos Generales 4
1.6 Objetivos Específicos 4
1.7 Alcances 5
1.7.1 Modulo de Seguridades 6
1.7.2 Modulo de Biblioteca de Servicios 6
1.7.3 Modulo de Métricas de Rendimiento 7
1.7.4 Modulo Definición de Políticas 7
1.7.5 Modulo de Administración de Almacenamiento 7
1.7.6 Modulo de Administración de Recursos 8
1.7.7 Modulo de Eventos, Errores y Notificaciones 9
XV
1.7.8 Modulo Terminal 10
1.8 Recursos 10
1.8.1 Recurso Humano 10
1.8.2 Recurso Hardware 12
1.8.3 Recurso Software 13
1.9 Metodología 13
1.10 Arquitectura 14
1.10.1 Capa de Presentación 15
1.10.2 Capa de Datos 18
1.11 Cronograma de Actividades 18
1.12 Costos 19
1.12.1 Recurso Humano 19
1.12.2 Recurso Tecnológico 19
1.12.3 Costo de Servicio Básico 19
1.12.4 Costo Total del Proyecto 20
1.13 Riesgos del Proyecto 20
1.14 Foda 21
1.14.1 Fortaleza 21
1.14.2 Oportunidades 22
1.14.3 Debilidades 22
1.14.4 Amenazas 22
CAPITULO 2
ANALISIS 24
2.1 Ingeniería de la Información 24
2.1.1 Modulo de Seguridades 25
2.1.2 Modulo de Biblioteca de Servicios 25
2.1.3 Modulo de Métricas de Rendimiento 26
2.1.4 Modulo Definición de Políticas 26
XVI
2.1.5 Modulo de Administración de Almacenamiento 26
2.1.6 Modulo de Administración de Recursos 27
2.1.7 Modulo de Eventos, Errores y Notificaciones 27
2.1.8 Modulo Terminal 28
2.2 Desarrollo del Análisis 29
2.2.1 Diagramas de Caso de Uso 29
2.2.1.1 Caso de Uso de Seguridades 30
2.2.1.1.1 Requerimiento 31
2.2.1.1.2 Descripción 32
2.2.1.2 Caso de Uso de Biblioteca de Servicios 37
2.2.1.2.1 Requerimientos 37
2.2.1.2.2 Descripción 38
2.2.1.3 Caso de Uso Métricas de Rendimiento 39
2.2.1.3.1 Requerimiento 39
2.2.1.3.2 Descripción 40
2.2.1.4 Caso de Uso Definición de Políticas 41
2.2.1.4.1 Requerimiento 42
2.2.1.4.2 Descripción 43
2.2.1.5 Caso de Uso Administración de almacenamiento 44
2.2.1.5.1 Requerimiento 45
2.2.1.5.2 Descripción 45
2.2.1.6 Caso de Uso Administración de Recursos 50
2.2.1.6.1 Requerimiento 51
2.2.1.6.2 Descripción 51
2.2.1.7 Caso de Uso Eventos, Errores y Notificaciones 53
2.2.1.7.1 Requerimiento 54
2.2.1.7.1 Descripción 54
2.2.1.8 Caso de Uso Terminal 55
2.2.1.8.1 Requerimiento 56
XVII
2.2.1.8.2 Descripción 57
2.2.2 Modelo de Entidad de Relación 58
2.2.2.1 Descripción del Modelo de Entidad de Relación 59
2.2.3 Diagrama de Secuencia 68
2.2.4 Diagrama de Flujo de Datos 77
CAPITULO 3
DISEÑO 86
3.1. Introducción 86
3.1.1 Diseño de Clases 87
3.1.2 Diseño Arquitectónico 88
3.1.3 Diseño de Interfaz 90
3.1.3.1 Acceso al Sistema 93
3.1.3.2 Modulo de Seguridades 94
3.1.3.3 Modulo de biblioteca de Servicios 103
3.1.3.4 Modulo de Métricas de Rendimiento 106
3.1.3.5 Modulo Definición de Políticas 108
3.1.3.6 Modulo de Almacenamiento 108
3.1.3.7 Modulo de Recursos 120
3.1.3.8 Modulo Eventos, Errores y Notificaciones 123
3.1.3.9 Modulo Terminal 132
CAPITULO 4
DESARROLLO 135
4.1 Base de Datos 135
4.1.1 Modulo de Biblioteca de Servicios 136
4.1.2 Modulo de Métricas de Rendimiento 137
4.1.3 Modulo de Definición de Políticas 138
4.1.4 Modulo Eventos, Errores y Notificaciones 139
XVIII
4.2 Directorios de Sistema 140
4.3 Detalle del Subdirectorio 144
4.4 Detalle de Procesos Principales 146
4.4.1 Modulo de Seguridades 146
4.4.2 Modulo de Biblioteca de Servicios 147
4.4.3 Modulo de Métricas de Rendimiento 148
4.4.4 Modulo Definición de Política 149
4.4.5 Modulo de Administración de Almacenamiento 149
4.4.6 Modulo de Administración de Recursos 153
4.4.7 Modulo Eventos, Errores y Notificaciones 154
4.4.8 Modulo Terminal 155
CAPITULO 5
CONCLUSIONES Y RECOMENDACIONES 156
XIX
INDICE DE FIGURAS
Figura 1.1 Modelo Desarrollo Cliente – Servidor 14
Figura 2.1 Caso de Uso General 30
Figura 2.2 Caso de Uso de Seguridades 31
Figura 2.3 Caso de Uso Biblioteca de Servicios 37
Figura 2.4 Caso de Uso Métricas de Rendimiento 39
Figura 2.5 Caso de Uso Definición de Políticas 42
Figura 2.6 Caso de Uso Administ. de Almacenamiento 44
Figura 2.7 Caso de Uso Administración de Recursos 50
Figura 2.8 Caso de Uso Eventos, Errores y Notf. 53
Figura 2.9 Caso de Uso Terminal 56
Figura 2.10 Modelo de Entidad de Relación 59
Figura 2.11 Diagrama de Secuencia de Seguridades 69
Figura 2.12 Diagrama de Sec. Biblioteca de Servicios 70
Figura 2.13 Diagrama de Sec. Métricas de Rendimiento 71
Figura 2.14 Diagrama de Sec. Definición de Políticas 72Figura 2.15 Diagrama de Sec. Administración deAlmacenamiento
73
Figura 2.16 Diagrama de Sec. Administración Recursos 74Figura 2.17 Diagrama de Sec. Eventos, Errores yNotificaciones 75
Figura 2.18 Diagrama de Sec. Terminal 76
Figura 2.19 DFD Seguridades (Nivel 0) 77
Figura 2.20 DFD Seguridades (Nivel 2) 78
Figura 2.21 DFD Biblioteca de Servicios (Nivel 0) 78
Figura 2.22 DFD Biblioteca de Servicios (Nivel 2) 79
Figura 2.23 DFD Métricas de Rendimiento (Nivel 0) 79
XX
Figura 2.24 DFD Métricas de Rendimiento (Nivel 2) 79
Figura 2.25 DFD Definición de Políticas (Nivel 0) 80
Figura 2.26 DFD Definición de Políticas (Nivel 2) 80
Figura 2.27 DFD Almacenamiento(Nivel 0) 81
Figura 2.28 DFD Almacenamiento (Nivel 2) 82
Figura 2.29 DFD Administración de Recursos (Nivel 0) 83
Figura 2.30 DFD Administración de Recursos (Nivel 2) 83
Figura 2.31 DFD Eventos, Errores y Notificac. (Nivel 0) 84
Figura 2.32 DFD Eventos, Errores y Notificac. (Nivel 2) 84
Figura 2.33 DFD Terminal (Nivel 0) 85
Figura 2.34 DFD Terminal (Nivel 2) 85
Figura 3.1 Diagrama de Clases 88
Figura 3.2 Diseño arquitectónico 89
Figura 3.3 Pantalla Principal 92
Figura 3.4 Formulario de Acceso al sistema 93
Figura 3.5 Formulario Principal - Usuarios 94
Figura 3.6 Formulario General - Usuarios 95
Figura 3.7 Formulario Roles - Usuarios 95
Figura 3.8 Formulario Privilegios de Sistema – Usuarios 96
Figura 3.9 Formulario Privilegios de Objeto - Usuarios 96
Figura 3.10 Formulario Cuotas - Usuario 97
Figura 3.11 Formulario Grupo de Consumidores-Usuarios 97
Figura 3.12 Formulario Principal - Roles 98
Figura 3.13 Formulario General - Roles 99
Figura 3.14 Formulario Privilegios de Roles - Roles 99
Figura 3.15 Formulario Privilegios de Sistema – Roles 100
Figura 3.16 Formulario Privilegios de Objetos – Roles 100
Figura 3.17 Formulario Grupo de Consumidores – Roles 101
Figura 3.18 Formulario Principal – Perfiles 102
XXI
Figura 3.19 Formulario General – Perfiles 102
Figura 3.20 Formulario Contraseña – Perfiles 103
Figura 3.21 Formulario Programar Inspección - Listener 104
Figura 3.22 Formulario Estado - Listener 104
Figura 3.23 Formulario Disponibilidad - Listener 105
Figura 3.24 Formulario Parámetros Ubicación - Listener 105
Figura 3.25 Formulario Parámetros General – Listener 106
Figura 3.26 Formulario Principal - Métricas 107
Figura – 3.27 Formulario de Creación - Métricas 107
Figura 3.28 Formulario principal – Políticas 108
Figura 3.29– Formulario General – Archivo de Control 109
Figura 3.30 Formulario Avanzado – Archivo de Control 110Figura 3.31 Formulario Sección de Registros - Archivo deControl 110
Figura 3.32 Formulario Principal - Tablespace 111
Figura 3.33 Formulario General - Tablespace 112
Figura3.34 Formulario Almacenamiento - Tablespace 113
Figura 3.35 Pantalla Principal – Archivo de Datos 114
Figura 3.36 Formulario General – Archivo de Datos 114
Figura 3.37 Pantalla Principal – Segmentos de Rollback 115
Figura 3.38 Formulario General - Segmentos Rollback 116
Figura 3.39 Pantalla Principal – Grupo de Redo Logs 117
Figura 3.40 Formulario General – Grupo de Redo Logs 118
Figura 3.41 Pantalla Principal Archive Logs 119
FIGURA 3.42 Formulario General – Archive Logs 119
Figura 3.43 Formulario General del Host - Recursos 120
Figura 3.44 Formulario General Instancia- Recursos 121
Figura 3.45 Formulario Memoria - Recursos 121
Figura 3.46 Formulario Recuperación – Recursos 122
XXII
Figura 3.47 Formulario Informe de Sesiones - Recursos 123Figura 3.48 Formulario Configurar Parámetros–Notificaciones 124Figura 3.49Formulario Transacciones del Sistema –Eventos 125
Figura 3.50 Reporte Transacciones del Sistema – Eventos 125Figura 3.51 Reporte en Excel Transacciones del Sistema– Eventos 126
Figura 3.52 Formulario Ejecución de Métricas – Eventos 127
Figura 3.53 Formulario Historial de Métricas – Eventos. 127
Figura 3.54– Reporte Historial de Métricas – Eventos 128Figura 3.55– Formulario Transacciones del Sistema –Errores 129
Figura 3.56 Reporte Transacciones del Sistema – Errores 129Figura 3.57 Reporte en Excel Transacciones del Sistema– Errores 130
Figura 3.58 Formulario Contenido de Alerta – Errores 131
Figura 3.59 Formulario Historial – Políticas Violadas 131
Figura 3.60 Formulario de la Consola – Terminal 132
Figura 3.61 Formulario Schema RMAN– Terminal 133
Figura 3.62 Formulario List Backup– Terminal 133
Figura 3.63– Formulario Report Need Backup– Terminal 134
Figura 3.64– Formulario Rman Backup– Terminal 134
Figura 4.1 - Registro.bat 141
XXIII
INDICE DE TABLAS
Tabla 1.1 Cronograma General 18
Tabla 1.2 Costo – Recurso Humano 19
Tabla 1.3 Costo – Recurso Tecnológico 19
Tabla 1.4 Costo – Servicios Básicos 19
Tabla 1.5 Costo – Total del Proyecto 20
Tabla 2.1 Requerimientos Casos de uso de Seguridades 32Tabla 2.2 Descripción Sub_caso de Seguridad: CrearUsuario 32Tabla 2.3 Descripción Sub_caso de Seguridad: ModificarUsuario 33Tabla 2.4 Descripción Sub_caso de Seguridad: EliminarUsuario 33
Tabla 2.5 Descripción Sub_caso de Seguridad: Crear Roles 34Tabla 2.6 Descripción Sub_caso de Seguridad: ModificarRoles 34Tabla 2.7 Descripción Sub_caso de Seguridad: EliminarRoles 35Tabla 2.8 Descripción Sub_caso de Seguridad: CrearPerfiles 35Tabla 2.9 Descripción Sub_caso de Seguridades: ModificarPerfiles 36Tabla 2.10 Descripción Sub_caso de Seguridades: EliminarPerfiles 36Tabla 2.11 Requerimiento Caso de Uso de Bibliotecas deServicios 37
Tabla 2.12 Descripción Sub_caso Rendimiento del Listener 38
XXIV
Tabla 2.13 Descripción Sub_caso Parámetro del Listener 38Tabla 2.14 Requerimiento Caso de Uso de Métricas deRendimiento 40
Tabla 2.15 Descripción Sub_caso Gestionar Métricas Crear 40Tabla 2.16 Descripción Sub_caso Gestionar MétricasEliminar 41Tabla 2.17 Descripción Sub_caso Gestionar Definir valoresy acción 41Tabla 2.18 Requerimiento Caso de Uso Definición dePolíticas 42Tabla 2.19 Descripción Sub_caso Administración dePolíticas Activadas 43Tabla 2.20 Descripción Sub_caso Administración dePolíticas Desactivadas 43Tabla 2.21 Requerimiento Caso de Uso de Administraciónde Almacenamiento 45
Tabla 2.22 Descripción Sub_caso Archivos de Datos Crear46
Tabla 2.23 Descripción Sub_caso Archivos de Datos Editar 46Tabla 2.24 Descripción Sub_caso Archivos de DatosEliminar 46
Tabla 2.25 Descripción Sub_caso Redo Log Crear 47
Tabla 2.26 Descripción Sub_caso Redo Log Editar 47
Tabla 2.27 Descripción Sub_caso Redo Log Eliminar 47Tabla 2.28 Descripción Sub_caso Control File Directorio deControl File 48Tabla 2.29 Descripción Sub_caso Control File SecciónRegistros 48
Tabla 2.30 Descripción Sub_caso Control File Copias Seg. 48
XXV
Tabla 2.31 Descripción Sub_caso Tablespace Crear 49
Tabla 2.32 Descripción Sub_caso Tablespace Editar 49
Tabla 2.33 Descripción Sub_caso Tablespace Eliminar 49
Tabla 2.34 Descripción Sub_caso Tablespace Reportes 50Tabla 2.35 Requerimiento Caso de Uso de Administraciónde Recursos 51
Tabla 2.36 Descripción Sub_caso Informe CPU 51Tabla 2.37 Descripción Sub_caso Informe Instancia y Basede Datos 52
Tabla 2.38 Descripción Sub_caso Informe de Memoria 52
Tabla 2.39 Descripción Sub_caso Informe de Sesiones 53Tabla 2.40 Requerimiento Caso de Uso de Eventos yErrores 54
Tabla 2.40 Descripción Sub_caso Reporte Alertas 54
Tabla 2.41 Descripción Sub_caso Detalle de Alertas 55Tabla 2.42 Descripción Sub_caso Configurar Parámetros deNotificación 55
Tabla 2.43 Requerimiento Caso de Uso Terminal 56
Tabla 2.44 Descripción Sub_caso Consola 57
Tabla 2.45 Descripción Sub_caso Esquema Rman 57
Tabla 2.46 Descripción Sub_caso Listado Rman 58
Tabla 2.47 Descripción Sub_caso Backup Rman 58
Tabla 2.48 Entidad Menú 60
Tabla 2.49 Entidad LOGDBMS 61
Tabla 2.50 Entidad Partarea 62
Tabla 2.51 Entidad Hist_list 62
Tabla 2.52 Entidad Parámetros 63
Tabla 2.53 Entidad Políticas 64
Tabla 2.54 Entidad Poli_violadas 65
XXVI
Tabla 2.55 Entidad Métrica 66
Tabla 2.56 Entidad Detalle Métrica 67
Tabla 4.1 Tabla del Menú Principal 136
Tabla 4.2 Tabla de Tareas programadas 136Tabla 4.3 Tabla de Almacenamiento de las tareasprogramadas 137
Tabla 4.4 Tabla de Ingreso de Métricas 137
Tabla 4.5 Tabla de detalle de Métricas 138
Tabla 4.6 Tabla de Ingreso de Políticas 138
Tabla 4.7 Tabla de Políticas Violadas 139
Tabla 4.8 Tabla de sucesos en el sistema 139
Tabla 4.9 Tabla de Notificación 140
CAPITULO 1
1. INTRODUCCION
1.1 Antecedentes
Toda organización en la actualidad desea establecer controles de su
Infraestructura de Tecnología de Información, centradose en el punto
clave de todos los sistemas que llegaran a utilizar, como lo es la
administración de la Base de Datos, actividades de los datos,
manipulación de los datos, establecer diccionario de datos, confiabilidad
de la base de datos y la seguridad de la base de datos.
El problema en nuestro medio es que muchas Empresas para obtener
una completa administración de su infraestructura utilizan la herramienta
de Oracle que es el Enterprise Manager, la cual es muy efectiva en la
integración total de la Base de Datos, pero no es muy autodidáctica en su
navegación y no brinda una interfaz amigable para el administrador.
- 2 -
Además las organizaciones para obtener toda la información que
proporciona esta herramienta deben tener una persona especializada en
su manipulación para obtener un buen análisis de la administración de la
Infraestructura Tecnológica.
Unos de los inconvenientes encontrado en una de las versiones del
Oracle Enterprise Manager como lo es la versión 10G es que administra
las bases de datos en consolas independientes.
Las Empresas están acostumbradas a usar esta herramienta porque es
de uso mundial y no existe otra herramienta en Oracle que haga su
misma función y que sea de fácil manejo.
1.2 Solución
DBMS - FOX es la herramienta que nos va a brindar las opciones
necesarias para que el DBA pueda tener un completo control y
optimización de la infraestructura de tecnología de la información.
Esta herramienta va a hacer una nueva alternativa a la hora de
Administrar la base de datos de Oracle, la cual va a proporcionar las
partes fundamentales de la Administración con una interfaz amigable y de
- 3 -
fácil compresión en la cual va a ser manejada desde un Administrador de
primer nivel hasta el más experto en donde se encontraran respuestas
concretas brindando todas las funciones de una consola Administrativa.
El aplicativo va a integrar los diferentes componentes que intervienen en
la Organización (Hardware, Software y Usuarios).
1.3 Misión
Proveer a los administradores de base de datos de Oracle un aplicativo
que cubra todas las necesidades en cuanto al manejo de la
infraestructura de tecnología de Información de la organización.
1.4 Visión
Ser un aplicativo a nivel nacional en el mercado de las Tecnologías de
Información de las herramientas Oracle con un objetivo común de
convertir como socio estratégico a los DBA, para su mejor
administración, entregando soluciones y servicios de calidad certificada,
conservando nuestros valores organizacionales.
- 4 -
1.5 Objetivos Generales
Nuestro aplicativo DBMS-FOX nos va a permitir llevar una administración
de la Infraestructura Tecnológica facilitando a los actores que intervienen
en el proceso para avalar la redistribución, renovación y reposición de
dichos recursos, así como gestionar la adquisición de Recursos
Tecnológicos nuevos en base a las necesidades de la organización.
1.6 Objetivos Específicos
Tener reportes que nos permitan supervisar los servicios que se
esta ejecutando en los diferentes componentes del servidor.
Mostrar de manera porcentual y grafica el uso de cada recurso de
la Base de Datos.
Contar con informes que nos ayuden a prevenir posibles
eventualidades en el uso de todos los recursos de la Base de
Datos.
Mejorar los tiempos de respuesta ante cualquier proceso que se
este realizando en la Base de datos.
- 5 -
1.7 Alcances
Los alcances que detallaremos a continuación están orientados y
pensados para ofrecer un mayor soporte a los DBA al momento de
administrar la Base de Datos de una manera funcional permitiéndoles
participar en el desarrollo de procedimientos y controles para asegurar la
calidad y la alta integridad de la BD.
Módulos a tratar en los alcances son:
Modulo de Seguridades
Modulo de Biblioteca de Servicios
Modulo de Métricas de Rendimiento
Modulo de Definición de Políticas
Modulo de Administración de Servicios
Modulo de Administración de Recursos
Modulo de Eventos, Errores y Notificaciones
Modulo Terminal
Dentro de estos módulos se van a detallar los diferentes aspectos a cubrir
en la creación del sistema automatizado DBMS - FOX.
- 6 -
1.7.1 Módulo de Seguridades
Pantalla de autentificación donde los usuarios que deseen
ingresar a la base de datos deben ingresar su usuario y
contraseña.
Mantenimiento de usuario: se creara una pantalla que
permitirá crear usuario con sus respectivas contraseñas,
además podremos asignarles tablespace, roles, privilegios
de sistemas, privilegios de Objetos y Grupo de
Consumidores.
Mantenimiento de roles: se creara una pantalla donde
podremos visualizar todos los roles que exista así mismo
podremos otorgarle privilegios sistemas, objetos y grupo de
consumidores.
Mantenimiento de Perfiles: se creara opciones para dar
limitantes en lo mismos
1.7.2 Módulo de Biblioteca de Servicios
Mantenimiento de los Parámetros del Listener.
Creación del servicio en donde verificaremos la
disponibilidad del listener.
Reporte que nos permita tener el historial de 14 días
agrupando el historial por inactividad y disponibilidad los
- 7 -
cuales no indicaran los tiempos de estado inactivo,
interrumpido y estados pendientes.
1.7.3 Módulo de Métricas de Rendimiento
Creación de un gestor de métricas en el cual se podrá crear,
eliminar y definir los diferentes umbrales para cada una de
las métricas.
1.7.4 Módulo Definición de Políticas
Creación de las políticas de tipo almacenamiento,
configuración y seguridad, como por ejemplo el tamaño
insuficiente del archivo redo log.
Creación de una opción en el cual nos permita gestionar las
diferentes políticas establecida para que el usuario
administrador pueda activar o desactivar las diversas
políticas.
Reporte que mostrara un historial de los diversos cambios
en la activación y desactivación de las políticas.
1.7.5 Módulo de Administración de Almacenamiento
Controlar el crecimiento de los datos generando repositorios
para una mejor administración de los objetos físicos y
- 8 -
lógicos de almacenamiento.
Visualizar los tipos de archivos de control y realizar su
respectiva copia de seguridad en repositorios.
Opciones que permitan crear, modificar, eliminar los
tablespaces.
Opciones de modificar, eliminar y visualizar los archivos de
datos.
Opciones de crear, modificar, eliminar los segmentos de
rollback de los archivos de datos especificando el tamaño
del rollback.
Opciones de crear, modificar, eliminar Redo logs.
Opción que muestre un informe de los Archive Logs
Informes que nos permita mostrar la ubicación de los
archivos que permiten el funcionamiento de la base de
datos, información sobre la ubicación de los archivos, su
tamaño y el porcentaje de utilización de los mismos.
1.7.6 Módulo de Administración de Recursos
Monitorear el estado y mostrar la información general del
CPU y del sistema operativo.
Monitorear la información general de la instancia y de la
Base de datos.
- 9 -
Monitorear el estado de la Instancia, bajar y subir la base de
datos.
Revisar los tamaños de la SGA y de la PGA.
Monitorear el tiempo de recuperación de fallo de la Instancia
Controlar el estado en Archivelog de la Base de Datos
Revisar las estadísticas de las sesiones activas e inactivas
1.7.7 Módulo de Manejo de Eventos, Errores y Notificaciones
Configuración del método de notificación para enviar los
correo de alertas en este caso por Servidor de Correo
Saliente (smtp) y vía sms.
Reporte que nos permita revisar los diferentes cambios en
las métricas establecidas.
Reportes que nos permita visualizar las diferentes
violaciones a las políticas establecidas y los errores en los
limites de las métricas.
Reporte del Log de errores.
Reporte de todas las transacciones del sistema que se han
ejecutado.
- 10 -
1.7.8 Modulo Terminal
Crear una consola que me permita correr sentencias SQL.
Opción la cual permitirá guardar todas las sentencias
ejecutadas en la consola.
Opciones en la cual mostrara el estado de los esquemas de
los tablespace.
Opción la cual mostrara la información de los tablespace que
han sido respaldados y los que necesitan ser respaldados.
Opción la cual va a permitir sacar un respaldo de la Base de
Datos en RMAN.
1.8 Recursos
Los recursos que se necesitan para el desarrollo de nuestra aplicación,
son los siguientes:
1.8.1 Recurso Humano
Para la implementación del aplicativo necesitaremos de la
colaboración de tres desarrolladores y/o analistas como:
Srta. Gissela Briones Avila.
Conocimientos Básicos de Visual FoxPro 9.0
Manejo básico de Base de datos Sql Server 2000 y
- 11 -
Oracle.
Conocimientos de soporte técnico a Usuario.
Sr. Boris Jiménez Matías
Programador de Visual FoxPro 9.0
Conocimientos básicos en la herramienta de
programación .net
Manejo de Base de Datos como Sql Server 2000
Implementación de Dispositivos Móviles integrando la
tecnología del Pocket Pc con sql Server 2000 ce.
Sr. Willy Del Rosario González
Conocimientos básicos de Visual FoxPro 9.0
Manejo básico de Oracle y MySql
Configuración de Redes Inalámbricas.
Conocimientos de Visual Basic 6.0 y .net
Soporte técnico a usuarios al aplicativo de vigilancia
electrónica.
Configuración de lectores y paneles electrónicos de
alarma.
- 12 -
1.8.2 Recurso Hardware
Una maquina que hará la función de Servidor de la Base de
Datos, programas fuentes y ejecutables en cual tendrá la
siguientes características:
o Procesador Dual Core 2.0
o Mainboard Intel
o Disco Duro de 120 GB con 7200 rpm con tecnología
SATA.
o Unidad DVD-RW con tecnología SATA
o Memoria RAM de 2 GB PC 667
2 maquinas que harán de estación de Trabajo para el
desarrollo del aplicativo que tendrán las siguientes
características:
o Procesador P4 de 3 GHZ
o Memoria RAM de 512 MB
o Disco Duro de 80 GB
o Mainboard BioStar
o Unidad de CD-R
1 Impresora multifunción HP de Inyección de Tinta
1 Switch de 8 puertos
5 Patch Cord
3 Pen Drive Kingston (2 Gb, 1Gb, 512 Mb)
- 13 -
1.8.3 Recurso Software
Sistema Operativo Windows Xp con Service Pack 2
Microsoft office 2003
Microsoft Project
Erwim 6.0
Microsoft Visual FoxPro 9.0
Oracle 9i
Oracle 10 G release 2 (Enterprise Manager)
Sistema Operativo Windows Vista Ultimate
1.9 Metodología
Para el desarrollo de nuestro aplicativo vamos a utilizar un modelo de
programación Orientado a Objeto como el Espiral.
Seleccionamos este modelo porque esta conformado de las siguientes
etapas como:
Análisis
Diseño
Implementación
Pruebas
Estas etapas nos ayudaran a tener un proceso iterativo el cual nos
permitirá dar mejoras a nuestro aplicativo.
El objetivo principal de este método es que nos va ayudar a administrar
- 14 -
CAPA DE PRESENTACION
SERVIDOR DE BASE DE DATOS
LOGICA DE NEGOCIOS
una base de datos sólida de forma evolutiva, modificando procesos paso
a paso e ir mejorando la administración.
1.10 Arquitectura
Revisando los diferentes tipos de Arquitectura de los Sistemas
Informáticos Orientados a Objetos, hemos llegado a la conclusión que
para una buena aplicación de nuestro aplicativo nos basaremos en una
Arquitectura de Cliente – Servidor de dos capas. A continuación se detalla
un grafico con dicha Arquitectura.
Figura No 1.1 - MODELO DE DESARROLLO CLIENTE-SERVIDOR
ARQUITECTURA DOS CAPAS
- 15 -
La idea de programar en dos capas, consiste en utilizar un método de
desarrollo para nuestro sistema DBMS-FOX que nos va a permitir separar
esto en distintas capas.
Estas aplicaciones son más conocidas como aplicaciones
Cliente/Servidor y lo más característico es que dividen una aplicación
entre un cliente y un servidor que controla las comunicaciones entre
ambos.
En la raíz de las aplicaciones cliente/servidor está la separación de la
aplicación en componentes encapsulados u objetos. La ventaja de romper
una aplicación en trozos es que cualquier cambio de uno de esos
componentes no tiene un impacto directo sobre los otros o en el resto de
la aplicación.
En las arquitecturas de dos capas, la aplicación se divide en dos
entidades separadas como se muestra en la figura 1.1.
1.10.1 Capa de Presentación
Para nuestro sistema DBMS-FOX, la capa de presentación le
permitirá al DBA interactuar con la capa de Base de datos junto
con la lógica de negocios a través de los diferentes formularios
creados en Visual FoxPro 9.0.
- 16 -
Para ello nuestro proyecto va a constar los diferentes módulos
a desarrollar para que el usuario pueda tener una correcta
administración de la Base de Datos.
Algunos de los módulos que tendrán la capa de presentación de
nuestro aplicativo DBMS-FOX son:
Módulo de seguridades.
Módulo de biblioteca de servicios
Módulo de métricas de rendimiento
Módulo de definiciones de políticas
Módulo de administración de almacenamiento
Módulos de administración de recursos
Módulo de eventos, errores y notificaciones
Modulo Terminal
Todos estos módulos las implementaremos en formularios
creados bajo la herramienta de programación Visual FoxPro
9.0.
- 17 -
La primera interacción con el usuario será a través de un
formulario en el cual el usuario deberá proporcionar los
siguientes datos como: Usuario, Clave y el Nombre del
Servicio al cual desea administrar, en este caso será la Base
de Datos Oracle la cual internamente tiene sus propias reglas
del negocio.
Una vez ingresado al servicio que desea administrar, esta capa
será encargada de:
Enviar la información del usuario a la capa del Servidor de
Base de datos para su procesamiento en la consultas y en
todas las actividades relacionadas con las mismas.
Recibir los diferentes resultados del procesamiento de la
Base de Datos
Mostrar dichos resultados al usuario.
Permitir la funcionalidad o la manipulación de las diferentes
opciones disponibles para cada usuario.
- 18 -
1.10.2 Capa de datos (Servidor de Base de Datos)
En la parte de Datos es de donde se va a utilizar el Motor de
Base de Datos Oracle, el cual maneja sus propias reglas de
negocio las cuales nos encargaremos de administrar para poder
brindar los siguientes servicios a nuestro aplicativo:
Repositorio de datos
Manejar la integración de los datos
Recuperación de datos
1.11 Cronograma de Actividades
1.11.1 Cronograma General
A continuación detallaremos de manera general el cronograma
de actividades en el cual nos hemos basado en el tiempo entre
el rango que se nos ha expuesto, para ver mas detalles en el
Anexo 1.
Actividad Tiempo(días) Fecha Inicio Fecha FinPlanificación 42 15/12/2007 26/01/2008Análisis y Diseño 33 27/01/2008 29/02/2008Codificación 91 01/03/2008 31/05/2008Prueba 10 01/06/2008 11/06/2008Implementación 15 12/06/2008 27/06/2008
Tabla 1.1 – Cronograma General
- 19 -
1.12 Costos
A continuación detallaremos los diversos costos para nuestro aplicativo.
1.12.1 Recurso Humano
Personas Función Sueldo Mensual Tiempo meses Total3 Programadores Junior 350.00 5 17501 Asesor DBA 500.00 3 1500
Total 3250
Tabla 1.2 – Costo – Recurso Humano
1.12.2 Recurso Tecnológico
Cant. Descripción Valor unitario Totales1 PC Servidor 800.00 800.002 PC Desarrollo 650.00 1300.00
Servicio de Internet x 5meses 50.00 250.00Configuración de Red por 3 maquinas 80.00 240.00
Total 2590.00Tabla 1.3 – Costo – Recurso Tecnológico
1.12.3 Costos de Servicios Básicos
Descripción Tiempo en mes Valor TotalEnergía Eléctrica 5 20.00 100.00Agua 5 10.00 50.00Telefonía celular 5 30.00 150.00Telefonía convencional 5 15.00 75.00
Total 375.00Tabla 1.4 – Costo – Servicios Básicos
- 20 -
1.12.4 Costo Total del proyecto
El costo del aplicativo va a estar basado en estos aspectos.
Tabla 1.5 – Costo – Total del Proyecto
1.13 Riesgo del Proyecto
Hemos identificado diversos riesgos que podrían afectar en el normal
cumplimiento del tiempo para la entrega del proyecto, los cuales
detallaremos a continuación:
Daño en al aplicativo de la Base de Datos por mala Operación,
implicando retraso en el la continuación del proyecto.
No tener el completo abastecimiento del proveedor (Servicio de
Internet).
No tener suficiente dominio sobre la herramienta de programación.
Daños imprevistos en el hardware y software por factores externos e
internos.
No abarcar las necesidades básicas del proyecto.
Abandono imprevisto de algún integrante del grupo del curso de
graduación, sea este por factores externos e internos.
Diversidad de criterios de los integrantes del grupo que no permitan
Descripción de Costos ValorRecurso Humano 3250.00Recurso Tecnológico 2590.00Servicios Básicos 375.00
Total del Aplicativo 6215.00
- 21 -
tomar decisiones de manera rápida y eficaz.
No tener una buena comunicación con los integrantes del proyecto,
ocasionando división en el grupo y alterando las funciones ya
establecidas para cada uno.
Tener inconveniente al momento de elegir al asesor.
No haber realizado una buena planeación en los costos operativos.
Mala estimación en la planeación del tiempo de entrega del Proyecto.
Para mas detalle de los riesgos, se realizo una matriz de riesgo (Ver
Anexo 2).
1.14 FODA
Para una mejor compresión de nuestro aplicativo hacia el mercado,
hemos decidido analizar las fortalezas, oportunidades, debilidades y
amenazas que nos pueden afectar en el normal cumplimiento del
proyecto.
1.14.1 Fortalezas
Las diversas fortalezas con las que va a contar el aplicativo son las
siguientes:
Aplicativo evolutivo en sus versiones.
De fácil uso con una interfaz amigable.
- 22 -
Mantenimiento periódico del Sistema.
Aceptación del las pequeñas y medianas empresas.
1.14.2 Oportunidades
Las diversas oportunidades con las que va a contar el aplicativo son
las siguientes:
Tener cobertura a nivel Nacional.
Contacto directo con el DBA.
Poder ser adquirido el sistema por grandes industrias.
1.14.3 Debilidades
Las diversas debilidades con las que va a contar el aplicativo son las
siguientes:
Miedo al cambio con respecto a aplicativos ya establecidos en
el mercado.
No cumplir las expectativas del mercado.
1.14.4 Amenazas
Las diversas amenazas con las que va a contar el aplicativo son las
siguientes:
Susceptibilidad a la copia por parte de los competidores.
Fallas técnicas incontrolables.
- 23 -
Que el motor de base de datos cambie el esquema como se ha
venido manejando en los últimos tiempos.
Competencia internacional.
CAPITULO 2
2. ANALISIS
2.1 Ingeniería de la Información
Realizando un profundo análisis de las funciones que están involucradas
a un DBA de Oracle, hemos llegado a la conclusión de que el aplicativo a
desarrollar debe cubrir con ciertos aspectos fundamentales, que van a
permitir al DBA realizar un correcto análisis de toda la infraestructura
tecnológica de la Empresa.
Para cubrir esos aspectos se ha dividido el desarrollo del aplicativo en los
siguientes módulos:
Seguridades
Biblioteca de Servicios
Métricas de Rendimiento
Definición de Política
- 25 -
Administración de Almacenamiento
Administración de Recursos
Eventos, Errores y Notificaciones
Terminal
2.1.1 Módulo de Seguridad
El DBA mediante este módulo podrá gestionar todos los acceso a los
usuarios administradores, el cual le va a permitir llevar un control en la
seguridad de cada uno de los servicios, Además se dará un
mantenimiento a los parámetros de seguridad (usuarios, roles y
perfiles), en la cual se podrá crear, editar o eliminar cada uno de ellos,
todo esto se hará a través de pantallas las cuales nos permitan
otorgar o revocar diferentes tipos de permisos y propiedades a cada
uno de lo usuarios, roles y perfiles
2.1.2 Módulo de Biblioteca de Servicios
La biblioteca de servicios es muy importante ya que a través de ella
vamos a realizar el análisis y el monitoreo del listener el cual es el
encargado de establecer la conexión de la Base de Datos con todas
las estaciones. En este módulo se podrá visualizar y modificar los
- 26 -
parámetros de configuración del listener, además veremos su estado
y un historial de 14 días de la disponibilidad.
2.1.3 Módulo de Métricas de Rendimiento
A través de este módulo el DBA tendrá una opción el cual le permitirá
gestionar las diferentes métricas y establecer sus respectivos
umbrales, generando en estos procesos las debidas alertas que
permitan tomar acciones adecuadas por parte del DBA.
2.1.4 Módulo de Definición de Políticas
Se definirán políticas siguiendo los estándares que debe mantener un
DBA para la administración de servicios, usuarios y configuraciones de
la base de datos, mostrando a manera de informes dichas políticas y
el estado que se encuentra activa o inactiva.
2.1.5 Módulo de Administración de Almacenamiento
Este modulo va a permitir al DBA realizar tareas administrativas
asociada a la gestión de almacenamiento de la base de datos. Estas
tareas se realizaran a través de un mantenimiento a los Tablespace,
Archivo de Datos, Segmentos de Rollback, y Grupos de Redo Logs.
Además podremos Gestionar la visualización de información referente
- 27 -
a los Archive Logs y a los Archivos de control y permitirá hacer las
respectivas copias de seguridad a los Control File
2.1.6 Módulo de Administración de Recursos
Este modulo va a brindar la herramienta necesaria para que el DBA
tenga un control sobre el estado y la información general del CPU, de
la Instancia, Base de Datos, de la utilización de memoria SGA, PGA y
de la recuperación de la instancia de control. A través de este control
podremos realizar tareas como bajar y subir la base de datos y poner
la base de datos en estado Archive Logs.
También va a permitir tener referencia sobre las diferentes sesiones
que se encuentra en estado activo e inactivas.
2.1.7 Módulo de Eventos, Errores y Notificaciones
Modulo encargado de mostrar al DBA mediante reportes las diferentes
violaciones a las políticas, cambios realizados a las diferentes
métricas de rendimiento, transacciones ejecutadas de cada usuario en
los diferentes módulos.
Además este módulo le permitirá configurar los parámetros de
notificación en el cual se definirá a que personas se les va a emitir
notificaciones tanto vía email o sms.
- 28 -
2.1.8 Módulo Terminal
En este módulo se va a acceder a cuatro opciones:
Tendremos una consola el cual va a permitir correr sentencia SQL
y mostrara la información que la sentencia traiga. Además nos
dará opciones para guardar todas las sentencias ejecutadas en la
consola en la cual se definirá la ruta en donde se guardara y el
nombre.
Opción en la cual nos mostrara información acerca del estado del
esquema de los tablespace. Además podremos guardar esta
información
Opción en la cual nos mostrara información acerca de que
tablespace han sido respaldos y cuales necesitan respaldo. Esta
información también podremos guardarlo en una ruta.
Opción la cual permitirá hacer un respaldo de la base de datos en
Rman y se podrá guardar esta información en una ruta.
- 29 -
2.2 Desarrollo del análisis
Para dicho análisis nos basaremos en las técnicas del Lenguaje de
Modelado Unificado (UML), debido a que dispone de diferentes
diagramas que permiten al momento de desarrollar el aplicativo tener una
vista estática y dinámica de los diferentes procesos que involucran.
Para el análisis de nuestro aplicativo utilizaremos los siguientes
diagramas:
Diagramas de caso de uso
Modelo Entidad Relación
Diagrama de secuencia
Diagrama de Flujo de Datos
2.2.1 Diagrama de Casos de Uso
Este tipo de diagrama va a representar como un actor opera con un
sistema de desarrollo, además de la forma, tipo y orden en que los
elementos interactúan. En resumen un diagrama de caso de uso se
emplea para visualizar el comportamiento y los procesos que se
- 30 -
ejecutan en una parte del sistema.
Figura 2.1 - Caso de Uso General
2.2.1.1 Caso de uso de Seguridades
Se analizo todas las operaciones que tendrán que realizar el
módulo de Seguridades y Notificaciones, en el cual el actor
principal es el DBA.
- 31 -
En la siguiente figura No. 2 se muestra el caso de uso de
Seguridades y Notificaciones
Figura 2.2 – Caso de Uso Seguridades
2.2.1.1.1 Requerimientos
Clasificación de los requerimientos del proyecto, los cuales
se identifican con el usuario, clave y servicios al que desea
ingresar.
- 32 -
Se detalla los requerimientos para este caso de uso.
No Requerimientos DescripciónConsultas/Informes
R1 Inicia SesiónAlmacenamiento
R2Guarda los ingresos y los cambios dedatos
ProcesamientoR3 Crear UsuariosR4 Modificar UsuariosR5 Eliminar UsuariosR6 Crear RolesR7 Modificar RolesR8 Eliminar RolesR9 Crear Perfil
R10 Modificar PerfilesR11 Eliminar Perfile
Tabla 2.1 – Requerimientos Casos de uso deSeguridades
2.2.1.1.2 DescripciónA continuación se detalla la descripción de cada caso de
uso dentro de este módulo.
Modulo SeguridadesSub_caso Seguridad Crear Usuarios
Nombre Crear UsuariosAliasActores Grupo de Administradores
FunciónPermitir registrar lo diferentes usuariosadministradores
Descripción
El Administrador va a Iniciar Sesión para queingrese al Sistema con el Nombre, Clave yServicios, luego puede coger la opción Crearusuario
Referencias R1,R2,R3
Tabla 2.2 – Descripción Sub_caso de Seguridad: CrearUsuario
- 33 -
Tabla 2.3 – Descripción Sub_caso de Seguridad:Modificar Usuario
Tabla 2.4 – Descripción Sub_caso de Seguridad:Eliminar Usuario
Modulo SeguridadesSub_caso Seguridad Modificar Usuarios
Nombre Modifica Usuarios
Alias
Actores Grupo de Administradores
FunciónPermitir modificar lo diferentes usuariosadministradores
Descripción
El Administrador va a Iniciar Sesión para queingrese al Sistema con el Nombre, Clave yServicios, luego escoge el usuario, y elige laopción editar.
Referencias R1,R2,R4
Modulo Seguridades
Sub_caso Seguridad Eliminar Usuarios
Nombre Eliminar Usuarios
Alias
Actores Grupo de Administradores
FunciónPermitir eliminar lo diferentes usuariosadministradores
Descripción
El Administrador va a Iniciar Sesión para queingrese al Sistema con el Nombre, Clave yServicios luego escoge el usuario, y elige laopción eliminar
Referencias R1,R2,R5
- 34 -
Tabla 2.5 – Descripción Sub_caso de Seguridad: CrearRoles
Tabla 2.6 – Descripción Sub_caso de Seguridad:Modificar Roles
Modulo Seguridades
Sub_caso Seguridad Crear Roles
Nombre Crear Roles
Alias
Actores Grupo de Administradores
Función Permitir registrar lo diferentes Roles
Descripción
El Administrador va a Iniciar Sesión para queingrese al Sistema con el Nombre, Clave yServicios luego escoge Roles, y elige la opcióncrear
Referencias R1,R2,R6
Modulo Seguridades
Sub_caso Seguridad Modificar Roles
Nombre Modificar Roles
Alias
Actores Grupo de Administradores
Función Permitir modificar los diferentes Roles
Descripción
El Administrador va a Iniciar Sesión para queingrese al Sistema con el Nombre, Clave yServicios luego escoge Roles, y elige la opcióneditar
Referencias R1,R2,R7
- 35 -
Tabla 2.7 – Descripción Sub_caso de Seguridad:Eliminar Roles
Tabla 2.8 – Descripción Sub_caso de Seguridad: CrearPerfiles
Modulo Seguridades
Sub_caso Seguridad Eliminar Roles
Nombre Eliminar Roles
Alias
Actores Grupo de Administradores
Función Permitir eliminar los diferentes Roles
Descripción
El Administrador va a Iniciar Sesión para queingrese al Sistema con el Nombre, Clave yServicios luego escoge Roles, y elige la opcióneliminar
Referencias R1,R2,R8
Modulo Seguridades
Sub_caso Seguridad Crear Perfiles
Nombre Crear Perfiles
Alias
Actores Grupo de Administradores
Función Permitir registrar los diferentes Perfiles
Descripción
El Administrador va a Iniciar Sesión para queingrese al Sistema con el Nombre, Clave yServicios luego escoge Perfiles, y elige laopción crear
Referencias R1,R2,R9
- 36 -
Tabla 2.9 – Descripción Sub_caso de Seguridades:Modificar Perfiles
Tabla 2.10 – Descripción Sub_caso de Seguridades:Eliminar Perfiles
Modulo Seguridades
Sub_caso Seguridad Modificar Perfiles
Nombre Modificar Perfiles
Alias
Actores Grupo de Administradores
Función Permitir modificar los diferentes Perfiles
Descripción
El Administrador va a Iniciar Sesión para queingrese al Sistema con el Nombre, Clave yServicios luego escoge Perfiles, y elige laopción modificar
Referencias R1,R2,R10
Modulo Seguridades
Sub_caso Seguridad Eliminar Perfiles
Nombre Eliminar Perfiles
Alias
Actores Grupo de Administradores
Función Permitir Eliminar los diferentes Perfiles
Descripción
El Administrador va a Iniciar Sesión para queingrese al Sistema con el Nombre, Clave yServicios luego escoge Perfiles, y elige laopción eliminar
Referencias R1,R2,R11
- 37 -
REPORTE DDISPONIBILIDAD
LISTENER
DBA
INICIOSESIÓN
RENDIMIENTODEL LISTENER
PARAMETROSDEL LISTENER
ENVIÓ DEINFORMACION
ORACLE SERVER
2.2.1.2 Caso de uso de Biblioteca de Servicios
La clasificación de los requerimientos del proyecto, Las cuales
tienen que iniciar sesión para ingresar el aplicativo.
Se detalla los requerimientos para este caso de uso.
Figura 2.3 – Caso de Uso Biblioteca de Servicios
2.2.1.2.1 Requerimientos.
A continuación se detalla la descripción de lo cada caso de
uso dentro de este módulo.
No Requerimientos DescripciónConsultas/Informes
R1 Inicia SesiónAlmacenamiento
R2Guarda parámetros para poder visualizarlos reportes de rendimientos
ProcesamientoR3 Rendimiento del ListenerR4 Parámetros del ListenerR5 Envió de Información
Tabla 2.11 – Requerimiento Caso de Uso deBibliotecas de Servicios
- 38 -
2.2.1.2.2 Descripción
A continuación se detalla la descripción de lo cada caso de
uso dentro de este módulo.
Modulo Biblioteca de ServiciosSub_caso Rendimiento del Listener
Nombre Rendimiento del ListenerAliasActores Grupo de Administradores
FunciónPermitir Visualizar el reporte de rendimientodel listener
Descripción El Administrador inicia Sesión y ingresaReferencias R1,R2,R3,R5
Tabla 2.12 – Descripción Sub_caso Rendimiento del
Listener
Tabla 2.13 – Descripción Sub_caso Parámetro del
Listener
Modulo Biblioteca de ServiciosSub_caso Parámetros del Listener
Nombre Parámetros del Listener
Alias
Actores Grupo de Administradores
Función Configurar parámetros del Listener
Descripción Permite configurar los parámetros del Listener
Referencias R1,R2,R4,R5
- 39 -
GESTIONARMETRICAS
INICIOSESIÓN
CREAR ELIMINARDEFINIR
VALORES YACCIÓNDBA
2.2.1.3 Caso de uso de Métricas de Rendimientos
Clasificación de los requerimientos del proyecto, los cuales se
identifican con el usuario, clave y servicios al que desea
ingresar.
Se detalla los requerimientos para este caso de uso.
Figura 2.4 – Caso de uso Métricas de Rendimiento
2.2.1.3.1 Requerimientos.
A continuación se detalla la descripción de lo cada caso de
uso dentro de este módulo.
- 40 -
No Requerimientos DescripciónConsultas/Informes
R1 Inicia SesiónAlmacenamiento
R2Almacenar los umbrales de las Métricasde Rendimiento
ProcesamientoR3 Crear MétricasR4 Eliminar MétricasR5 Definir los valores de acción
Tabla 2.14 – Requerimiento Caso de Uso de Métricasde Rendimiento
2.2.1.3.2 Descripción
A continuación se detalla la descripción de cada caso de
uso dentro de este módulo.
Modulo Métricas de RendimientoSub_caso Gestionar Métricas Crear
Nombre Crear MétricasAliasActores Grupo de Administradores
FunciónPermite crear Métricas para los diferentesmódulos
DescripciónEl Administrador crea un umbral de acuerdo aestándares definidos por los otros módulos
Referencias R1,R2,R3
Tabla 2.15 – Descripción Sub_caso Gestionar MétricasCrear
- 41 -
Tabla 2.16 – Descripción Sub_caso Gestionar MétricasEliminar
Tabla 2.17 – Descripción Sub_caso Gestionar Definirvalores y acción
2.2.1.4 Caso de uso de Definición de Políticas
Clasificación de los requerimientos del proyecto, los cuales se
identifican con el usuario, clave y servicios al que desea
ingresar.
Modulo Biblioteca de ServiciosGestionar Métricas Eliminar
Nombre Eliminar Métricas
Alias
Actores Grupo de Administradores
Función Permite eliminar métricas
DescripciónSe elige métricas para poder eliminar odesactivar
Referencias R1,R2,R4
Modulo Biblioteca de ServiciosGestionar Definir valores y Acción
Nombre Eliminar Métricas
Alias
Actores Grupo de Administradores
FunciónDefine Valores de las métricas y asigna laacción
DescripciónSe define las métricas con la respectiva accióna seguir generando alertas.
Referencias R1,R2,R5
- 42 -
ADMINISTRACIÓNDE POLÍTICAS
DBA
INICIOSESIÓN
ACTIVAR DESACTIVAR
ENVIARINFORMACIÓN
ORACLE SERVER
Se detalla los requerimientos para este caso de uso.
Figura 2.5 – Caso de uso Definición de Políticas
2.2.1.4.1 Requerimientos.
A continuación se detalla la descripción de lo cada caso de
uso dentro de este módulo.
No Requerimientos DescripciónConsultas/Informes
R1 Inicia SesiónAlmacenamiento
R2Almacenar políticas creadas,modificadas y eliminadas
ProcesamientoR3 ActivadasR4 Desactivadas
Tabla 2.18 – Requerimiento Caso de Uso Definición dePolíticas
- 43 -
2.2.1.4.2 Descripción
A continuación se detalla la descripción de cada caso de
uso dentro de este módulo.
Modulo Definición de PolíticasSub_caso Administración Políticas Activadas
Nombre Políticas ActivadasAliasActores Grupo de Administradores
Función Permite visualizar y activas políticas
DescripciónVisualiza las políticas Activadas para cadausuario
Referencias R1,R2,R3
Tabla 2.19 – Descripción Sub_caso Administración dePolíticas Activadas
Modulo Definición de PolíticasSub_caso Administración Políticas Desactivadas
Nombre Políticas ActivadasAliasActores Grupo de Administradores
Función Permite visualizar y desactivar políticas
DescripciónVisualiza las políticas Desactivadas para cadausuario
Referencias R1,R2,R4
Tabla 2.20 – Descripción Sub_caso Administración dePolíticas Desactivadas
- 44 -
DBA
INICIOSESIÓN
GESTIÓNREDO LOG
GESTIÓNTABLESPACE
CREAR
EDITAR
ELIMINAR
CREAR
EDITAR
ELIMINAR
REPORTE
ENVIARINFORMACIÓN
GESTIÓNARCHIVO DE
DATOS
CREAR
EDITAR
ELIMINAR
GESTIÓNCONTROL FILE
DIRECTORIOCONTROL FILE
COPIA DESEGURIDAD
SECCIONREGISTROS
ORACLE SERVER
2.2.1.5 Caso de uso de Administración de almacenamiento
Clasificación de los requerimientos del proyecto, los cuales se
identifican con el usuario, clave y servicios al que desea
ingresar.
Se detalla los requerimientos para este caso de uso.
Figura 2.6 – Caso de uso Administración deAlmacenamiento
- 45 -
2.2.1.5.1 Requerimientos.
A continuación se detalla la descripción de lo cada caso de
uso dentro de este módulo.
No Requerimientos DescripciónConsultas/Informes
R1 Inicia SesiónAlmacenamiento
R2 Gestión de Archivos de datosR3 Gestión de Redo logR4 Gestión Control fileR5 Gestión tablespace
ProcesamientoR6 Crear Archivos de DatosR7 Editar Archivos de DatosR8 Eliminar Archivos de DatosR9 Crear Redo log
R10 Editar Redo logR11 Eliminar Redo logR12 Direccionamiento de Control fileR13 Sección de RegistrosR14 Copias de SeguridadR15 Crear TablespaceR16 Editar TablespaceR17 Eliminar TablespaceR18 Reportes de tablespace
Tabla 2.21 – Requerimiento Caso de Uso deAdministración de Almacenamiento
2.2.1.5.2 Descripción
A continuación se detalla la descripción de cada caso de
uso dentro de este módulo.
- 46 -
Modulo Administración de AlmacenamientoSub_caso Archivos de Datos Crear
Nombre Crear Archivos de datosAliasActores Grupo de Administradores, Base de DatosFunción Permite Crear Archivos de Datos
DescripciónSon creados para almacenar la creación decada archivo de dato generado
Referencias R1,R2,R6
Tabla 2.22 – Descripción Sub_caso Archivos de DatosCrear
Modulo Administración de AlmacenamientoSub_caso Archivos de Batos Editar
Nombre Editar Archivos de datosAliasActores Grupo de Administradores, Base de Datos
Función Permite Editar archivos de datos
DescripciónCreados los archivos de datos puede editararchivos de datos
Referencias R1,R2,R7
Tabla 2.23 – Descripción Sub_caso Archivos de DatosEditar
Modulo Administración de AlmacenamientoArchivos de Batos Eliminar
Nombre Eliminar r Archivos de datosAliasActores Grupo de Administradores, Base de Datos
Función Permite Eliminar Archivos de Datos
DescripciónPodremos Eliminar Archivos de Datos sitenemos los privilegios necesarios
Referencias R1,R2,R8
Tabla 2.24 – Descripción Sub_caso Archivos de DatosEliminar
- 47 -
Modulo Administración de AlmacenamientoSub_caso Redo Log Crear
Nombre Crear Redo LogAliasActores Grupo de Administradores, Base de DatosFunción Permite Crear Redo Log
DescripciónCreados los archivos de datos pueden editarRedo log
Referencias R1,R3,R9
Tabla 2.25 – Descripción Sub_caso Redo Log Crear
Modulo Administración de Almacenamiento
Sub_caso Redo Log Editar
Nombre Editar Redo Log
Alias
Actores Grupo de Administradores, Base de Datos
Función Permite Editar Redo Log
DescripciónCreados los Redo Log puede editar archivosde datos
Referencias R1,R3,R10
Tabla 2.26 – Descripción Sub_caso Redo Log Editar
Modulo Administración de AlmacenamientoSub_caso Redo Log Eliminar
Nombre Eliminar Redo LogAliasActores Grupo de Administradores, Base de Datos
Función Permite Eliminar Redo Log
DescripciónPodremos Eliminar redo Log según losprivilegios que tengan el administrador
Referencias R1,R3,R11
Tabla 2.27 – Descripción Sub_caso Redo Log Eliminar
- 48 -
Modulo Administración de AlmacenamientoSub_caso Control File Directorio de Control File
Nombre Direccionar los Control FileAliasActores Grupo de Administradores, Base de Datos
Función Ofrece la parte direccional de los Control File
DescripciónSe busca la ruta donde se va a generar losarchivos
Referencias R1,R4,R12
Tabla 2.28 – Descripción Sub_caso Control FileDirectorio de Control File
Modulo Administración de AlmacenamientoSub_caso Control File Sección Registros
Nombre Sección de RegistrosAliasActores Grupo de Administradores, Base de Datos
Función Información de los Archivos de Control
Descripción
Podremos ver la información de los archivosde control, como tamaño del registro, total deregistros y Registros Utilizados
Referencias R1,R4,R13
Tabla 2.29 – Descripción Sub_caso Control FileSección Registros
Modulo Administración de AlmacenamientoSub_caso Control File Copias de Seguridad
Nombre Copias de seguridadAliasActores Grupo de Administradores, Base de Datos
FunciónPermite realizar copias de seguridad de losarchivos de control
DescripciónSon copias creadas en otro repositorio con elobjetivo de realizar un backup
Referencias R1,R4,R14
Tabla 2.30 – Descripción Sub_caso Control FileCopias de Seguridad
- 49 -
Modulo Administración de AlmacenamientoSub_caso Tablespace Crear
Nombre Crear TablespaceAliasActores Grupo de Administradores, Base de DatosFunción Permite Crear Tablespace
DescripciónNos va a permitir crear tablespace en la basede datos
Referencias R1,R5,R15
Tabla 2.31 – Descripción Sub_caso Tablespace Crear
Modulo Administración de AlmacenamientoSub_caso Tablespace Editar
Nombre Editar TablespaceAliasActores Grupo de Administradores, Base de Datos
Función Permite Editar Tablespace
DescripciónSe escoge el tablespace para modificar eltamaño del mismo
Referencias R1,R5,R16
Tabla 2.32 – Descripción Sub_caso TablespaceEditar
Modulo Administración de AlmacenamientoSub_caso Tablespace Eliminar
Nombre Eliminar TablespaceAliasActores Grupo de Administradores, Base de Datos
Función Permite Eliminar Tablespace
DescripciónSe escoge un tablespace para eliminarsiempre y cuando tenga los privilegios
Referencias R1,R5,R17
Tabla 2.33 – Descripción Sub_caso TablespaceEliminar
- 50 -
Modulo Administración de AlmacenamientoSub_caso Tablespace Reportes
Nombre Reportes TablespaceAliasActores Grupo de Administradores, Base de Datos
Función Visualizar Tablespace
Descripción Se visualizaReferencias R1,R5,R17
Tabla 2.34 – Descripción Sub_caso TablespaceReportes
2.2.1.6 Caso de uso de Administración de Recursos
Clasificación de los requerimientos del proyecto, los cuales se
identifican con el usuario, clave y servicios al que desea
ingresar.
Se detalla los requerimientos para este caso de uso.
Figura 2.7 – Caso de uso Administración de Recursos
- 51 -
2.2.1.6.1 Requerimientos.
A continuación se detalla la descripción de lo cada caso de
uso dentro de este módulo.
No Requerimientos DescripciónConsultas/Informes
R1 Inicia SesiónProcesamiento
R2 Informe de CPUR3 Informe de Instancia, Base de DatosR4 Informe de MemoriasR5 Informe de Sesiones
Tabla 2.35 – Requerimiento Caso de Uso deAdministración de Recursos
2.2.1.6.2 Descripción
A continuación se detalla la descripción de cada caso de
uso dentro de este módulo.
Modulo Administración de RecursosSub_caso Informe CPU
Nombre Informe CPUAliasActores Grupo de Administradores
Función Visualiza Informe de CPU
DescripciónVisualiza la información de manera general delCPU y del Sistema Operativo
Referencias R1,R2
Tabla 2.36 – Descripción Sub_caso Informe CPU
- 52 -
Modulo Administración de RecursosSub_caso Informe de la Instancia y de la Base de Datos
Nombre Informe de la Instancia y de la Base de DatosAliasActores Grupo de Administradores
FunciónVisualiza Informe de la Instancia y Base deDatos
DescripciónVisualiza la información general acerca delestado de la Instancia y de la Base de Datos
Referencias R1,R3
Tabla 2.37 – Descripción Sub_caso Informe Instanciay Base de Datos
Tabla 2.38 – Descripción Sub_caso Informe deMemoria
Modulo Administración de RecursosSub_caso Informe Memoria
Nombre Informe MemoriaAliasActores Grupo de Administradores
FunciónVisualizar los recursos de memoria de la SGAy de la PGA
DescripciónPresenta un detalle del tamaño de memoria dela SGA y de la PGA
Referencias R1,R4
- 53 -
GESTIÓN DEEVENTOS YERRORES
INICIOSESIÓN
REPORTESDE ALERTAS
DETALLE DEALERTAS
ENVÍAINFORMACIÓN
ORACLE SERVER
DBA CONFIGURARPARAMETROS DE
NOTIFICACION
Tabla 2.39 – Descripción Sub_caso Informe deSesiones
2.2.1.7 Caso de uso de Eventos, Errores y Notificaciones
Clasificación de los requerimientos del proyecto, los cuales se
identifican con el usuario, clave y servicios al que desea
ingresar.
Se detalla los requerimientos para este caso de uso.
Figura 2.8 – Caso de uso Eventos, Errores y Notificaciones
Modulo Administración de RecursosSub_caso Informe Sesiones
Nombre Informe SesionesAliasActores Grupo de Administradores
Función Visualizar Informe de Sesiones
DescripciónVisualiza de forma detalla las estadísticas desesiones y verifican si están activas o inactiva
Referencias R1,R5
- 54 -
2.2.1.7.1 Requerimientos.A continuación se detalla la descripción de lo cada caso de
uso dentro de este módulo.
Tabla 2.40 – Requerimiento Caso de Uso de Eventos yErrores
2.2.1.7.2 Descripción
A continuación se detalla la descripción de cada caso de
uso dentro de este módulo.
Modulo Administración de Eventos, Errores yNotificaciones
Sub_caso Reporte AlertasNombre Reportes alertasAliasActores Grupo de Administradores
Función Reporte Alertas
Descripción
Visualizamos las Alertas creado por losdiferentes administradores en los eventos,metricas y politicas
Referencias R1,R2
Tabla 2.40 – Descripción Sub_caso Reporte Alertas
No Requerimientos Descripción
Consultas/Informes
R1 Inicia Sesión
Procesamiento
R2 Reporte de Alertas
R3 Detalle de Alertas
R4Configuración de Parámetros deNotificación
- 55 -
Modulo Administración de Evetos, Errores y NotificacionesSub_caso Detalle de Alertas
Nombre Detalle de AlertasAliasActores Grupo de Administradores
Función Detalle de las Alertas
DescripciónVisualiza el detalle de las alertas en loseventos, metricas y politicas
Referencias R1,R3
Tabla 2.41 – Descripción Sub_caso Detalle deAlertas
Modulo Administración de Eventos, Errores yNotificaciones
Sub_caso Configurar Parámetros de NotificaciónNombre Configurar Parámetros de NotificaciónAliasActores Grupo de Administradores
Función Configurar Parámetros de Notificación
Descripción
Permite configurar los parámetros deNotificación para determinar a que usuarios seles envia las alertas ya sea via email o sms
Referencias R1,R4
Tabla 2.42 – Descripción Sub_caso ConfigurarParámetros de Notificación
2.2.1.8 Caso de uso de Terminal
Clasificación de los requerimientos del proyecto, los cuales se
identifican con el usuario, clave y servicios al que desea
ingresar.
- 56 -
GESTIONTERMINAL
INICIOSESIÓN
CONSOLA ESQUEMARMAN
ENVÍAINFORMACIÓN
ORACLE SERVER
LISTADORMAN
BACKUPRMAN
Se detalla los requerimientos para este caso de uso.
Figura 2.9 – Caso de uso Terminal
2.2.1.8.1 Requerimientos.A continuación se detalla la descripción de lo cada caso de
uso dentro de este módulo.
Tabla 2.43 – Requerimiento Caso de Uso Terminal
No Requerimientos Descripción
Consultas/Informes
R1 Inicia Sesión
Procesamiento
R2 Consola
R3 Esquema RMAN
R4 Listado RMAN
R5 Backup RMAN
- 57 -
2.2.1.8.2 Descripción
A continuación se detalla la descripción de cada caso de
uso dentro de este módulo.
Modulo TerminalSub_caso Consola
Nombre ConsolaAliasActores Grupo de Administradores
Función Consola
Descripción Permite correr sentencias SQLReferencias R1,R2
Tabla 2.44 – Descripción Sub_caso Consola
Modulo TerminalSub_caso Esquema Rman
Nombre Esquema RmanAliasActores Grupo de Administradores
Función Información del Esquema de Tablespace
DescripciónPermite visualizar información con respect alEsquema de tablespace
Referencias R1,R3
Tabla 2.45 – Descripción Sub_caso Esquema Rman
- 58 -
Modulo TerminalSub_caso Listado Rman
Nombre Listado RmanAliasActores Grupo de Administradores
Función Información de los respaldos de Tablespace
Descripción
Permite visualizar cuales son los tablespaceque se han respaldado y los que necesitanrespaldo
Referencias R1,R4
Tabla 2.46 – Descripción Sub_caso Listado Rman
Modulo TerminalSub_caso Backup Respaldo
Nombre Backup RespaldoAliasActores Grupo de Administradores
FunciónRealizar el backup de la Base de Datos enRman
DescripciónPermite realizar el backup de la Base de datosen Rman.
Referencias R1,R5
Tabla 2.47 – Descripción Sub_caso Backup Rman
2.2.2 Modelo Entidad Relación
Estos diagramas son los más comunes en los sistemas orientados a
Objetos, un diagrama de clases muestra un conjunto de clases,
interfaces, colaboraciones y relaciones entre ellas.
- 59 -
En base al análisis del aplicativo para administrar la base de datos, se
definió el siguiente diagrama de clase, algunas tablas no están
descritas debido a que se usaran las vistas de Oracle
.
Figura 2.10 - Modelo Entidad Relación
2.2.2.1 Descripción del Modelo Entidad Relación
A continuación se detallara la descripción de cada una de las
clases dentro del diagrama entidad relación.
- 60 -
Tabla 2.48 - Entidad Menú
ENTIDAD – MENU
Descripción Almacenara los diferentes opciones de los módulos del Sistema
Constraint código clave Primaria
Campo Tipo_Dato Longitud Nulo Descripción
codigo char 5 NVa a detallar el código la opcióndel Modulo
nombre varchar2 50 NContendrá el Nombre la opcióndel modulo
opcion char 1 N
Es una bandera en la cual va atener un (si) es una opción y lallama, y si es (no) no llamara anada
nomb_fte varchar2 50 NEs el nombre de la carpeta dondese encuentra el ejecutable
nom_ejec varchar2 50 NEs el nombre del ejecutable al dela opción
Titulo Varchar2 80 NGuardara el titulo de la opción delmodulos
icono integer 2 N
Es el numero identificador delicono que s e le va a poner a laopción
apertura Varchar2 2 N
Es el número de la bandera en elcual se indica si la base de datosesta abierta o cerrada
- 61 -
Tabla 2.49- Entidad LOGDBMS
ENTIDAD – LOGDBMS
DescripciónAlmacenara un registros de todas las transacciones que sehan hecho en cada uno de los módulos del Sistema
Constraint sid clave primaria
Campo Tipo_Dato Longitud Nulo Descripción
sid varchar2 20 NVa a detallar el nombrede la Base de Datos
maquina varchar2 30 NAlmacenara el nombrede la maquina en dondese hizo la transacción
fecha datetime N Detalla la fecha en quese hizo la transacción
operador varchar2 20 NGuardara el nombre delusuario que ejecuta latransacción
modulo varcha2 200 NGuardara el nombre delmodulo en donde seejecuto la transacción
sentencia varchar2 1000 NDetalla la sentencia SQLque se ejecuto para larealizar la transacción
Error varchar2 1000 NDetalla el error que seproduce en unasentencia
Tipo char 1 N
Es una bandera en laque guarda 1 si se haejecutado bien latransacción, y 2 si hay unerror al ejecutar latransacción
- 62 -
Tabla 2.50- Entidad Partarea
Tabla 2.51- Entidad Hist_list
ENTIDAD – PARTAREA
Descripción Almacenara los parámetros que se configuran para lascensadas del listener
Constraint sid clave primaria
Campo Tipo_Dato Longitud Nulo Descripción
sid varchar2 25 N Almacena el nombre de aBase de Datos
ruta varchar2 80 N Es la ruta donde esta elsistema
tipo char 1 NIdentificador en donde seindica si esta en minutos oen horas
frecuencia integer 3 SSe guardara cada cuantotiempo estará censando ellistener
ENTIDAD – HIST_LIST
Descripción Almacenara la información de las censadas que se han hechoen el Listener.
Constraint No tiene clave primaria
Campo Tipo_Dato Longitud Nulo Descripción
fecha datetime N Almacena la fecha en quese hizo la censada dellistener
hora char 10 N Detalla la hora en que seejecuto la censada
censo integer 1 N Es el valor que toma cadauna de las censadas
sid char 20 S Se guardara el nombre dela Base de Datos
- 63 -
Tabla 2.52- Entidad Parámetros
ENTIDAD – PARAMETROS
Descripción Almacenara la información de los parámetros de notificaciónde alertas que se les envía a los usuarios
Constraint No tiene clave primaria
Campo Tipo_Dato Longitud Nulo Descripción
nombremitente varchar2 50 N Almacena el nombre de dela persona que remite lanotificación
dirremitente varchar2 200 N Detalla la dirección decorreo de donde se va aenviar las notificaciones
password varchar2 50 N Se almacena la clave de ladirección de correo delremitente
smtp varchar2 60 N Se guardara la direccióndel servidor de correo
puerto integer 4 NSe registra el numero depuerto del servidor decorreo.
dirsaliente varchar2 1000 N
Se detalla las direcciones olos numero de teléfonos delos usuarios a los cueles seles envían las alertas.
enviar char 1 N
Es una bandera en la queindica que si es (S) seenviara las alertasautomáticamente si es (N)no se enviaranautomáticamente.
ENTIDAD – POLITICAS
- 64 -
Tabla 2.53- Entidad Políticas
DescripciónSe almacenaran todas las políticas que se aplicaran ennuestro sistema
Constraint num clave primaria
Campo Tipo_Dato Longitud Nulo Descripción
num integer 4 N Es un numerosecuencial
nombre_poltica varchar2 128 N Se almacena el nombrede la política
id_categoria integer 4 N Detalla el id de lacategoría de la política
descripción varchar2 1000 N Contendré unadescripción General dela política
fecha_creacion datetime S
usuario_modifica varchar2 50 N Usuario por defectoDBMS-FOX
fecha_modifica datetime N
estado char 1 NEs donde se detalla siesta o no activa lapolítica
procedimiento varchar2 100 N
Se almacena el nombredel procedimiento quese ejecutara en esapolítica
- 65 -
Tabla 2.54- Entidad Poli_violadas
ENTIDAD – POLI_VIOLADAS
DescripciónSe almacenaran toda la información de las políticas quehan sido violadas
Constraint num clave primaria
Campo Tipo_Dato Longitud Nulo Descripción
num integer 4 N
Es un numerosecuencial que secunado corre elproceso para verificarpolíticas violadas
Id_politica Integer 4 N Es el id de la política
Fecha Datetime N
Detalla la fecha en quese ejecuto el proceso yse genero una políticaviolada
Comentario varchar2 100 N Describe un comentariode porque se violo lapolítica
Fecha_modifica datetime N Indica la fecha decuando se dejo deviolar la política
Estado Char 1 N Indica el estado activoo inactivo de la Política
Enviado char 1 N Indica si la alerta de lapolítica violada ha sidoenviada al usuario
Fec_envio Datetime NEs donde se detalla lafecha de envió de laalerta
- 66 -
Tabla 2.55- Entidad Métrica
ENTIDAD – METRICA
DescripciónSe almacenaran toda la información de las métricas quehan sido creadas
Constraint índice clave primaria
Campo Tipo_Dato Longitud Nulo Descripción
índice integer 5 N Es un valor secuencialde las métricas
métrica varchar2 250 N Detalla la descripciónde la Métrica
operador varchar2 20 N Detalla el nombre delusuario
mínimo varchar2 50 NEspecifica el valormínimo limitante de lamétrica
máximo varchar2 50 N Especifica el valormáximo limitante de lamétrica
sentencia varchar2 4000 N Detalla la sentenciaejecutarse para esamétrica
tipo char 1 N Indica (S) la sentenciaes un Query y (N) si esun procedimiento.
comparador char 15 N Indica el operadorlimitante con el que seevalúa la métrica
ejecuta char 1 N
Es una bandera (S) sise ha ejecutado lamétrica y (N) si o se haejecutado
ult_ejec datetimeIndica la fecha de laultima ejecución de lamétrica
- 67 -
Tabla 2.56- Entidad Detalle Métrica
ENTIDAD – DETALLE_METRICA
DescripciónSe almacenaran toda la información de las métricas quehan sido creadas
Constraint Índice_met clave primaria ; secuenciaclave primaria
Campo Tipo_Dato Longitud Nulo Descripción
indice_met integer 5 N Es el id de la Métrica
secuencia integer 5 N Es un numerosecuencial
fecha datetime NDetalla la fecha en quese esta ejecutando lamétrica
valor integer 5 N Especifica el valor queobtuvo la métricacuando se ejecuto
tipo_umbral char 1 N
Indica a través de unaBandera si es ( C )Critico, si es (A)Advertencia
operador varchar2 15 N Especifica el operadorde comparaciónlimitante
limitante varchar2 20 N Detalle los valoreslimitantes de la métrica
comentario varchar2 3000 NDetalla un comentarioen el cual especificaporque la métrica seejecuto
notificado char 1 NEs una bandera (S) sise ha notificado métricay (N) si o se hanotificado
fec_notifica datetime NDetalla la fecha en lacual se envía lasnotificaciones
- 68 -
2.2.3 Diagrama de Secuencias
Estos diagramas son aquellas que nos muestran las diversas
interacciones de un usuario con el sistema. La interacción es una
cadena de mensajes enviados entre los objetos en respuesta a un
evento que a sido generado por el usuario a de la aplicación.
En base al análisis de los siete módulos para la administración e la
Base de datos hemos detallado los siguientes diagramas de
secuencia.
- 69 -
Ses
ion
Val
ida
Ses
ion
Cre
arU
suar
ioM
odifi
car
Usu
ario
Elim
inar
Usu
ario
Cre
arR
oles
Mod
ifica
rR
oles
Elim
inar
Rol
esC
rear
Per
files
Mod
ifica
rP
erfil
esE
limin
arP
erfil
es
Ret
orna
r
Dat
osM
inim
os
Esc
oger
usua
rio
Dat
osM
ínim
os
Esco
geru
suar
io
Esco
gerR
oles Es
coge
rRol
es
Dat
osm
inim
os
Esc
oger
Per
files
Esco
gerP
erfil
es
FIG
UR
A2.
11–
DIA
GR
AM
AD
ESE
CU
ENC
IAD
ESE
GU
RID
AD
ES
Inic
iaS
esio
n
- 70 -
Sesi
onVa
lida
Sesi
onR
endi
mie
nto
del
List
ener
Ret
orna
r
Ver
ifica
elR
endi
mie
nto
del
List
ener
Con
figur
arP
arám
etro
sde
lLis
tene
r
Par
ámet
ros
del
List
ener
Inic
iaSe
sion
FIG
UR
A2.
12–
DIA
GR
AM
AD
ESE
CU
ENC
IAB
IBLI
OTE
CA
DE
SER
VIC
IOS
- 71 -
Sesi
onV
alid
aSe
sion
Cre
ar
Ret
orna
r
Ver
ifica
elR
endi
mie
nto
del
List
ener
Esc
oge
laM
etric
aa
Mod
ifica
r
Def
inir
Val
ores
De
Acc
ión
Info
rmac
ion
dela
acci
ona
aplic
ar
Inic
iaSe
sion
FIG
UR
A2.
13–
DIA
GR
AM
AD
ESE
CU
ENC
IAD
EM
ÉTR
ICA
SD
ER
END
IMIE
NTO
- 72 -
Ses
ion
Val
ida
Ses
ion
Act
ivar
Ret
orna
r
Esc
oge
una
polit
icas
Esco
geun
aP
oliti
ca
Des
activ
ar
Info
rmac
ion
dela
acci
ona
aplic
ar
Inic
iaS
esio
n
Env
íaIn
form
ació
n
Usu
ario
Adm
inis
trado
r
Ora
cle
Serv
er
FIG
UR
A2.
14–
DIA
GR
AM
AD
ESE
CU
ENC
IAD
EFIN
ICIÓ
ND
EPO
LITI
CA
S
- 73 -
- 74 -
Ora
cle
Serv
er
Enví
aIn
form
ació
nIn
icia
Sesi
on
Usu
ario
Adm
inis
trado
r
Ses
ion
Val
ida
Ses
ion
Info
rme
CP
U
Ret
orna
r
visu
aliz
acio
n
Info
rme
deIn
stan
cia,
Bas
ede
Dat
os
Info
rme
Mem
oria
visu
aliz
acio
n
visu
aliz
acio
n
FIG
UR
A2.
16–
DIA
GR
AM
AD
ESE
CU
ENC
IAA
DM
INIS
TRA
CIÓ
ND
ER
ECU
RSO
S
Info
rme
Ses
ione
s
visu
aliz
acio
n
- 75 -
Ses
ion
Val
ida
Ses
ion
Rep
orte
deA
lerta
s
Ret
orna
r
Det
alle
aA
lerta
s
Inic
iaSe
sion
Enví
aIn
form
ació
n
Usu
ario
Adm
inis
trado
r
Ora
cle
Ser
ver
visu
aliz
acio
n
Vis
ualiz
amos
lade
finic
ion
deA
lerta
s
FIG
UR
A2.
17–
DIA
GR
AM
AD
ESE
CU
ENC
IAD
EEV
ENTO
S,ER
RO
RES
YN
OTI
FIC
AC
ION
ES
Con
figur
arP
arám
etro
sde
Not
ifica
ción
Con
figur
ació
nde
Pará
met
ros
deN
otifi
caci
ónpa
raen
víos
deal
erta
s
- 76 -
- 77 -
2.2.4 Diagrama de Flujo de Datos
Mediante este diagrama representaremos el funcionamiento de los
diversos módulos del sistema, para el respectivo análisis se usaran el
diagrama de contexto (nivel 0) y el diagrama de detalle o expansión
(nivel 2).
Diagrama de Flujo de Datos Seguridades
Figura 2.19 – DFD Seguridades (Nivel 0)
- 78 -
Solicitud De Estado delListener
DBA Oracle
Solicita Rendimiento y Estado de Base
Envia Información
Envía Solicitud
Figura 2.20 – DFD Seguridades (Nivel 2)
Diagrama de Flujo de Datos Biblioteca de Servicios
Figura 2.21– DFD Biblioteca de Servicios (Nivel 0)
- 79 -
DBA Gestión deMétricas
Solicita
Vistas de OracleCrear
Eliminar
Definir Valores
Figura 2.22– DFD Biblioteca de Servicios (Nivel 2)
Diagrama de Flujo de Datos Métricas de Rendimiento
Figura 2.23– DFD Métricas de Rendimiento (Nivel 0)
Figura 2.24– DFD Métricas de Rendimiento (Nivel 2)
- 80 -
Diagrama de Flujo de Datos Políticas
Figura 2.25– DFD Definición de Políticas (Nivel 0)
Figura 2.26– DFD Definición de Políticas (Nivel 2)
- 81 -
Diagrama de Flujo de Datos Almacenamiento
Figura 2.27– DFD Almacenamiento (Nivel 0)
- 82 -
Figura 2.28– DFD Almacenamiento (Nivel 2)
- 83 -
Diagrama de Flujo de Datos Administración de Recursos
Figura 2.29– DFD Administración de Recursos (Nivel 0)
Figura 2.30– DFD Administración de Recursos (Nivel 2)
- 84 -
DBA Solicita
Reporte deAlertas
Detalle deAlertas
Vistas Oracle
EnvíaRequerimiento
EnvíaRequerimiento
EnvíaInformación
Parametros deNotifcación Alertas
Configura Envio
EnvíaInformación
Diagrama de Flujo de Datos Eventos, Errores y
Notificaciones
Figura 2.31– DFD Eventos, Errores y Notificaciones (Nivel 0)
Figura 2.32– DFD Eventos, Errores y Notificaciones (Nivel 2)
- 85 -
Diagrama de Flujo de Datos Terminal
Figura 2.33– DFD Terminal (Nivel 0)
Figura 2.34– DFD Terminal (Nivel 2)
CAPITULO 3
3. DISEÑO
3.1 Introducción
En la actualidad encontramos muchos aplicativos para poder administrar
una Infraestructura tecnológica las cuales son muy eficientes en sus
funciones pero su interfaz no es muy amigable
Un administrador de Base de Datos, siempre busca un aplicativo el cual le
proporcione todas las funciones necesarias para llevar un buen control en
la administración a través de una interfaz que sea amigable, fácil de
manejar y sobre todo dinámico en el acceso a diferentes pantallas para
poder visualizar diferentes tipos de información al mismo tiempo, esto va
a ayudar mucho al administrador a llevar un control de todos los módulos.
- 87 -
Para la elaboración de Diseño de nuestro aplicativo nos basaremos en
tres aspectos fundamentales los cuales se detallan a continuación.
Diseño de Clases
Diseño Arquitectónico
Diseño de Interfaz
3.1.1 Diseño de Clases
Es un diagrama de estructura estática que describe la estructura de un
sistema mostrando sus clases, atributos y las relaciones entre ellas.
Estos diagramas los utilizaremos durante el proceso de análisis y
diseño del aplicativo, donde se crea el diseño conceptual de la
información que se manejara en el sistema, y de los componentes que
se encargaran del funcionamiento y la relación entre uno y otro.
- 88 -
3.1.2 Diseño Arquitectónico
En la siguiente figura se muestra la estructura arquitectónica en que se
encuentra basado nuestro aplicativo.
- 89 -
DB
MS-
FOX
AD
MIN
ISTR
AC
IÓN
DE
ALM
AC
EN
AM
IEN
TO
DEF
INIC
IÓN
DE
PO
LITI
CA
SM
ETR
ICA
SD
ER
EN
DIM
IEN
TOB
IBLI
OTE
CA
DE
SE
RV
ICIO
SEG
UR
IDA
DE
SA
DM
INIS
TRAC
IÓN
DE
RE
CU
RS
OS
EVE
NTO
S,E
RR
OR
ES
YN
OTI
FIC
AC
ION
ES
TER
MIN
AL
DE
SC
ON
EC
TAR
CO
NE
CTA
R
Adm
inis
traci
ónde
Seg
urid
ades
Man
teni
mie
nto
Adm
inis
traci
ónde
Segu
ridad
es
Par
ámet
ros
del
List
ener
Ren
dim
ient
ode
lLis
tene
r
Ges
tiona
rm
etric
asG
estio
nar
Pol
ítica
sC
ontro
lFile
Tabl
espa
ce
Man
teni
mie
nto
Arc
hivo
deD
atos
Seg
men
tos
deR
ollb
ack
Dire
ctor
ioC
ontro
lFile
Cop
iade
Seg
urid
ad
Sec
ción
Reg
istro
s
Man
teni
mie
nto
Man
teni
mie
nto
Ges
tión
deR
ecur
sos M
onito
reo
del
CPU
Mon
itore
ode
laIn
stan
cia
yla
BD
Mon
itore
oM
emor
ia
Ges
tión
Rep
orte
deE
vent
os
Rep
orte
deE
rrore
s
Con
sulta
s
Con
sola
FIG
UR
A3.
2–
DIS
EÑO
AR
QU
ITEC
TÓN
ICO
Usu
ario
Rol
es
Per
files
Con
figur
ació
nde
Par
ámet
ros
Pla
nific
ació
nde
Not
ifica
cion
es
Rep
orte
deP
olíti
cas
Vio
lada
s
Mon
itore
oR
ecup
erac
ión
defa
llode
BD
Gru
pode
Red
oLo
gs
Man
teni
mie
nto
Arc
hive
Logs
Info
rme
Ses
ione
s
Con
figur
ació
n
Sch
ema
Rm
an
List
ado
Rm
an
Rm
anB
acku
p
- 90 -
3.1.3 Diseño de Interfaz
Para realizar las interfaces nos basaremos en el diseño arquitectónico
en la cual se detalla toda la estructura del aplicativo. Se mostrara de
manera detallada las interfaces principales que tendrá cada uno de los
módulos del aplicativo del DBMS-FOX.
Pantalla Principal
La siguiente interfaz contendrá el diseño de la página principal del
aplicativo en la cual consta de 3 regiones como son:
Barra de Titulo (1)
Explorador de Módulos (2)
Área de Presentación (3)
Barra de Titulo.- Es donde se muestra el titulo de nuestro sistema,
además de esto a lado del mismo, se muestra el nombre de la Base
de datos a la cual estamos conectados.
Explorador de Módulos.- En esta sección se muestra a nivel de
explorador, todas las opciones (módulos) del sistema a las cuales el
DBA tiene acceso para poder administrar la base de Datos. Cada una
de estas opciones contiene subdivisiones en las cuales se especifica
las diferentes aplicaciones de cada uno de ellos.
- 91 -
Área de Presentación.- En esta sección se muestra todas las
pantallas, a las cuales accedemos a través del explorador de módulos.
Aquí podremos presentar desde una hasta muchas pantallas al mismo
tiempo, ya que esta área tiene la característica de ser una interfaz
multiventanas, la cual va a facilitar a la administración del DBA en la
observación de diferente tipo de información
- 92 -
FIG
UR
A 3
.3–
PAN
TALL
APR
INC
IPA
L
(1)
(2)
(3)
- 93 -
La siguientes interfaces contendrá el diseño de acceso a la base de
datos así como también el diseño de los diferentes módulos que
forman parte del sistema.
3.1.3.1 Acceso al Sistema
El Administrador accederá al Sistema a través de una pequeña
pantalla en la cual tendrá que especificar los siguientes campos:
Servidor : IP del servidor
Usuario: Nombre del Usuario
Clave: Clave del usuario
SID: Nombre de la Base de Datos
Conectar como: Privilegio de Conexión
El sistema validará el ingreso de los datos, al momento de digitarlos
correctamente iniciara la sesión.
Figura 3.4 – Formulario de Acceso al sistema
- 94 -
3.1.3.2 Modulo de Seguridades
A través de este modulo se podrán visualizar tres tipos de pantalla en
la cual se llevara un control a través de mantenimientos a los
usuarios, roles y perfiles. Este mantenimiento permitirá crear, editar y
eliminar información.
Usuario.- En esta opción tendremos una pantalla principal,
donde se mostraran todos los usuarios que existen en la Base de
Datos con su respectivo resumen de información además también
permitirá crearlos o eliminarlos. A través de esta pantalla
tendremos acceso a cada uno de los formularios de los mismos.
Este formulario contara con seis pestañas, cada una tendrá
diferente tipo de información asociada a un usuario. en el cual se
podrá realizar tareas de visualización o edición, a través del cual
nos permitirá llevar un óptimo mantenimiento.
FIGURA 3.5 – Formulario Principal - Usuarios
- 95 -
En esta pantalla podremos visualizar, editar toda la información
general del usuario, o crear uno nuevo si se ha seleccionado el
botón de crear que se encuentra en la Figura 3.5.
Figura 3.6 – Formulario General - Usuarios
Permite visualizar, agregar y quitar los distintos roles a los
usuarios.
Figura 3.7 – Formulario Roles - Usuarios
- 96 -
Permite visualizar, agregar y quitar privilegio de sistemas a los
usuarios
Figura 3.8 – Formulario Privilegios de Sistema – Usuarios
Permite visualizar los privilegios de objetos que tiene el usuario,
así mismo agregar y quitar dichos privilegios.
Figura 3.9 – Formulario Privilegios de Objeto - Usuarios
- 97 -
Permite agregarle valores a las cuotas que tienen asignados el
usuario.
Figura 3.10 – Formulario Cuotas - Usuario
Permite visualizar, agregar y quitar los grupos de consumidores
a los usuarios
Figura 3.11 – Formulario Grupo de Consumidores-Usuarios
- 98 -
Roles.- En esta opción tendremos una pantalla principal, donde
se mostraran todos los roles que existen en la Base de Datos con
su respectivo resumen de información además también permitirá
crearlos o eliminarlos. A través de esta pantalla tendremos acceso
a cada uno de los formularios de cada uno de los roles. Este
formulario contara con cinco pestañas, cada una tendrá diferente
tipo de información asociada a un rol en el cual se podrá realizar
tareas de visualización o edición, a través del cual nos permitirá
llevar un óptimo mantenimiento.
Figura 3.12 – Formulario Principal - Roles
- 99 -
En esta pantalla podremos visualizar, editar toda la información
general de un rol, o crear uno nuevo si se ha seleccionado el botón
de crear que se encuentra en la figura Figura 3.12.
Figura 3.13 – Formulario General - Roles
Permite visualizar, agregar y quitar los distintos privilegios de roles
a los roles.
Figura 3.14 – Formulario Privilegios de Roles - Roles
- 100 -
Permite visualizar, agregar y quitar privilegio de sistemas a los
roles.
Figura 3.15 – Formulario Privilegios de Sistema – Roles
Permite visualizar los privilegios de objetos que tiene el rol, así
mismo agregar y quitar dichos privilegios.
Figura 3.16 – Formulario Privilegios de Objetos – Roles
- 101 -
Permite visualizar, agregar y quitar los grupos de consumidores a
los Roles.
Figura 3.17 – Formulario Grupo de Consumidores – Roles
Perfiles.- En esta opción tendremos una pantalla principal, donde
se mostraran todos los perfiles que existen en la Base de Datos
con su respectivo resumen de información, además también
permitirá crearlos o eliminarlos. A través de esta pantalla
tendremos acceso a cada uno de los formularios de los mismos.
Este formulario contara con dos pestañas, cada una tendrá
diferente tipo de información asociada a un perfil en el cual se
podrá realizar tareas de visualización o edición a cada una de sus
propiedades, a través del cual nos permitirá llevar un óptimo
mantenimiento.
- 102 -
Figura 3.18 – Formulario Principal – Perfiles
En esta pantalla podremos visualizar o editar toda la información
general de un perfil, o crear uno nuevo si se ha seleccionado el
botón de crear que se encuentra en la Figura 3.18. En esta pantalla
podremos saber cuales son los límites que tiene un perfil sobre los
recursos de la Base de Datos.
Figura 3.19 – Formulario General – Perfiles
- 103 -
Permite visualizar y gestionar los límites de la contraseña del perfil
Figura 3.20 – Formulario Contraseña – Perfiles
3.1.3.3 Modulo Biblioteca de Servicios
Este modulo esta conformado por dos opciones. Las cuales permitirán
llevar un control del Listener.
Programar Inspección del Listener.- Permite tener una
programación en minutos o en horas de cada cuanto se va a
censar el estado del listener.
- 104 -
Figura 3.21 – Formulario Programar Inspección - Listener
Listener.- Esta opción muestra un formulario con dos pestañas, en
el cual se detalla información general del listener, como su estado,
la disponibilidad, además permite levantar, bajar y darle un
mantenimiento a los parámetros del listener.
Figura 3.22 Formulario Estado - Listener
- 105 -
Muestra la disponibilidad del listener gráficamente dependiendo de
la programación que se le haya hecho en la cesada del estado del
listener. Ver figura 3.21
Figura 3.23 Formulario Disponibilidad - Listener
En este formulario se puede configurar los parámetros de
ubicación del listener, se tiene acceso a este formulario dando clic
en el botón Parámetros que se encuentra en la Figura 3.23.
Figura 3.24 Formulario Parámetros Ubicación - Listener
- 106 -
Permite con figurar los parámetros generales del listener como
activar o desactivar la clave para el listener, el registro de
Archivelog y el Archivo de rastreo.
Figura 3.25 Formulario Parámetros General – Listener
3.1.3.4 Modulo de Métricas de Rendimiento
A través de este modulo se podrán visualizar todas las métricas que
se han creado con sus respectivo operador, umbral de advertencia y
umbral critico. Además nos permite crear una métrica a través del
botón crear.
- 107 -
Figura 3.26 Formulario Principal - Métricas
El siguiente formulario podemos crear una métrica en el cual se debe
de especificar los umbrales limites y la sentencia a ejecutarse para el
funcionamiento de la métrica. Para tener acceso a esta pantalla se
debe dar un clic en el botón de crear de la Figura 3.26
Figura – 3.27 Formulario de Creación - Métricas
- 108 -
3.1.3.5 Modulo Definición de Políticas
Este modulo permite visualizar todas las políticas creadas para
nuestro sistema, el DBA podrá activar o desactivar políticas para
especificar que políticas quiere que se analice a la hora de obtener un
reporte de políticas violadas. Para visualizar el reporte Ver figura 3.59
Figura 3.28 Formulario principal – Políticas
3.1.3.6 Modulo de Almacenamiento
A través de este modulo se podrán visualizar seis tipos de opciones en
la cual se realizaran tareas administrativas asociadas a la gestión de
almacenamiento de la base de datos, esto se llevara a cabo a través
de mantenimientos a los Archivos de Control, Tablespace, Archivos
de Datos, Segmentos de Rollbak, Grupos de Redo Logs y Archive
- 109 -
Log. Estos mantenimientos permitirán crear, editar y eliminar
información.
Archivo de Control.- En esta opción nos mostrara un formulario
el cual contara con tres pestañas, cada una tendrá diferente tipo de
información asociado al archivo de datos, además tendrá un botón
el cual nos permitirá realizar una copia de seguridad al Archivo de
Control.
En la siguiente pantalla se muestra los nombres de los controlfiles
y el directorio en donde esta ubicado cada uno.
Figura 3.29– Formulario General – Archivo de Control
- 110 -
Muestra información avanzada referente a los Archivos de Control
Figura 3.30 Formulario Avanzado – Archivo de Control
Permite visualizar la información general sobre la sección de
registros del Archivo de control
Figura 3.31 Formulario Sección de Registros – Archivo de
Control
- 111 -
Tablespace.- En esta opción nos mostrara una pantalla en el cual
se detalla todos los tablespace creados en la base de datos con su
respectivo resumen de información, también se podrá eliminar y
crear tablespace. A través de esta pantalla tendremos acceso a
cada uno de los formularios de los mismos. Este formulario contara
con dos pestañas, cada una tendrá diferente tipo de información
asociada al tablespace en el cual se podrá realizar tareas de
visualización o edición, a través del cual nos permitirá llevar un
óptimo mantenimiento.
Figura 3.32 – Formulario Principal - Tablespace
- 112 -
En esta pantalla podremos visualizar o editar toda la información
general del tablespace existentes o crear uno nuevo si se
selecciona el botón de Crear que se encuentra en la Figura 3.32.
Se podrá observar información del mismo, como el nombre del
archivo, directorio de archivo, tamaño, el almacenamiento y el
tamaño máximo.
Figura – 3.33 Formulario General - Tablespace
Muestra información acerca de los métodos de gestión de espacio
que están asignados al tablespace. Esta información se la puede
manipular a la hora de crear un nuevo tablespace
- 113 -
Figura–3.34 Formulario Almacenamiento - Tablespace
Archivo de Datos.- En esta opción nos mostrara una pantalla en
el cual se detalla todos los Archivos de datos creados en la base
de datos con su respectivo resumen de información, además
también permitirá crearlos. A través de esta pantalla tendremos
acceso a cada uno de los formularios de los mismos que tendrá
información general y de almacenamiento asociado al Archivo de
datos, en el cual se podrá realizar tareas de visualización o
edición que nos permitirá llevar un óptimo mantenimiento.
- 114 -
Figura 3.35 – Pantalla Principal – Archivo de Datos
En la siguiente pantalla podremos visualizar o editar los
parámetros de los archivos de datos existentes, o crear un nuevo
si esta seleccionado el botón de crear que se encuentra en la
figura 3.35. La información que muestra en esta pantalla es de tipo
general y de almacenamiento en donde se puede ver el nombre del
archivo de datos, el tablespace donde esta creado, el estado, el
tamaño y la opción de almacenamiento.
Figura 3.36 – Formulario General – Archivo de Datos
- 115 -
Segmentos de Rollbak.- En esta opción nos mostrara una
pantalla en el cual se detalla todos los Segmentos Rollbak creados
en la base de datos con su respectivo resumen de información,
además también permitirá crearlos y eliminarlos . A través de esta
pantalla tendremos acceso a cada uno de los formularios de los
mismos que tendrá información general y de almacenamiento
asociado al Segmento Rollbak, en el cual se podrá realizar tareas
de visualización o edición que nos permitirá llevar un óptimo
mantenimiento.
Figura 3.37 – Pantalla Principal – Segmentos de Rollback
- 116 -
En esta pantalla podremos visualizar o editar la información de los
Segmentos Rollback existentes, o crear un nuevo si esta
seleccionado el botón de crear que se encuentra en la figura 3.37.
La información que muestra en esta pantalla es de tipo general y
de almacenamiento en donde se puede ver el nombre del
Segmento Rollback, el tablespace donde esta creado, el estado, y
las características de almacenamiento donde se detalla diferente
tipos de tamaños.
Figura 3.38 – Formulario General - Segmentos Rollback
Grupo de Redo Logs.- En esta opción nos mostrara una pantalla
en el cual se detalla todos los Grupos de Redo Logs creados en la
base de datos con su respectivo resumen de información, además
- 117 -
también permitirá crearlos y eliminarlos. A través de esta pantalla
tendremos acceso a cada uno de los formularios de los mismos
que tendrá información general asociado al Grupo de Redo Logs
en el cual se podrá realizar tareas de visualización o edición que
nos permitirá llevar un óptimo mantenimiento.
Figura 3.39 – Pantalla Principal – Grupo de Redo Logs
En la siguiente pantalla podremos visualizar o editar los
parámetros de los Grupos de Redo Logs existentes, o crear un
nuevo si esta seleccionado el botón de crear que se encuentra en
la figura 3.39. La información que muestra en esta pantalla es de
tipo general en donde se puede ver el número de Grupo de Redo
Logs, el tamaño, los nombres de los miembros actuales que
pertenecen al grupo y el directorio de ubicación. Además este
formulario permite agregar mas miembros al grupo de Redo Log a
través del botón Agregar.
- 118 -
Figura 3.40 – Formulario General – Grupo de Redo Logs
Archive Logs.- En esta opción nos mostrara una pantalla en el
cual se detalla la secuencia de los Archive Logs que se han hecho
a la base de datos con su respectivo resumen de información. A
través de esta pantalla tendremos acceso a cada uno de los
formularios de los mismos en donde se podrá visualizar
información general asociado al Archive Logs.
- 119 -
Figura 3.41 – Pantalla Principal Archive Logs
La información que muestra en esta pantalla es de tipo general en
donde se puede ver el directorio del archive Logs, nombre,
secuencia, tamaño, hora de archivado, primer cambio y segundo
cambio.
FIGURA 3.42 – Formulario General – Archive Logs
- 120 -
3.1.3.7 Modulo de Recursos
En este modulo se podrán visualizar dos tipos de opciones en la cual
no permitirá monitorear información referente al CPU, Instancia,
Base de Datos, memoria y sesiones.
Configuración.- En esta opción nos mostrara un formulario el
cual contara con cuatro pestañas, cada una tendrá diferente tipo de
información asociado al monitoreo de recursos.
La siguiente pantalla muestra información general correspondiente
al HOST, como es su estado, nombre del equipo, sistema
operativo, dirección IP, número de cpu, tamaño de la memoria,
capacidad de disco y espacio en disco.
Figura 3.43– Formulario General del Host - Recursos
- 121 -
Muestra información referente al estado de la Instancia, los
parámetros de inicialización, información general de la instancia y
la base de Datos. Además esta pantalla nos permite bajar y subir
la base de datos.
Figura 3.44 Formulario General Instancia- Recursos
En la siguiente pantalla nos permite tener un monitoreo de todos
los parámetros de la memoria tanto de la SGA y de la PGA.
Figura 3.45 Formulario Memoria - Recursos
- 122 -
La siguiente pantalla nos permite tener un monitoreo del Tiempo de
recuperación de fallo de la Instancia, Recuperación de medio físico
donde se muestra el estado actual del archivado de Redo Log,
especifica el destino en el que se deben crear los archivos archive
Log, además esta pantalla nos permite poner en estado Archive
Log a la Base de Datos
Figura – 3.46 Formulario Recuperación – Recursos
Sesiones.- En esta opción nos mostrara una pantalla en la cual
se detalla un informe de todas las secciones principales activas e
inactivas que hay en la base de datos ayudando al DBA a tener
una visión general por medio de la estadística de la actividad de
cada sesión y así poder identificar los cuellos de botella de
rendimiento de la base de datos.
- 123 -
Figura 3.47– Formulario Informe de Sesiones - Recursos
3.1.3.8 Modulo de Eventos, Errores y Notificaciones
A través de este modulo se podrán visualizar cuatro tipos de opciones
en la cual se realizaran tareas de configuración de notificaciones para
que el DBA reciba notificaciones de alerta por medio del correo, se
mostrara reportes de todos los eventos ocurridos, errores de métricas
y políticas violadas.
Configurar Parámetros- Esta opción nos va a mostrar una
pantalla en la cual se definen los métodos de notificación para ellos
se especifica la dirección del servidor de Correo, del remitente y de
los destinatarios. Los destinatarios van a hacer a las personas a
quienes les va a llegar la notificación
- 124 -
Figura 3.48 – Formulario Configurar Parámetros –
Notificaciones
Reporte de Eventos.- Esta opción nos va a mostrar una pantalla
la cual esta conformada por dos pestañas.
En la primera pestaña se mostrara todas las transacciones que se
han hecho en cada uno de los módulos del sistema, se especificara
la fecha, la hora, la maquina desde donde se hizo la transacción, el
módulos en que se realizo la transacción y el tipo de sentencia que
se ejecuto. Además en esta pantalla se podrán tener una
búsqueda de eventos por usuario y sacar reportes tipo Pantalla y
Excel.
.
- 125 -
Figura 3.49– Formulario Transacciones del Sistema – Eventos
Al dar un clic en el botón Pantalla que se muestra en la figura 3.49
nos mostrara el siguiente reporte.
Figura 3.50– Reporte Transacciones del Sistema – Eventos
- 126 -
Al dar un clic en el botón Excel que se muestra en la figura 3.49
nos mostrara el siguiente reporte.
Figura 3.51– Reporte en Excel Transacciones del Sistema –
Eventos
En la segunda pestaña se mostrara el listado de las métricas
donde se especifica los criterios con los cuales fueron creadas,
además se muestra la fecha y la hora de la ultima evaluación de la
métrica, fecha de la alerta, tipo de advertencia, el campo de
notificación donde indica si se ha enviado la alerta y la fecha de
cuando se envió la notificación..
- 127 -
Figura 3.52– Formulario Ejecución de Métricas – Eventos
Al dar doble clic en cada una de las métricas que se muestra en la
Figura 3.52 se mostrara un formulario en donde se detalla un
historial de todas las veces en que la métrica ha pasado sus
limitantes.
Figura 3.53– Formulario Historial de Métricas – Eventos.
- 128 -
Al hacer clic en el botón que dice Excel que se muestra en la
Figura 3.53 se mostrara el informe del historial en un
documentos.exe como se puede apreciar en la Figura 3.54
Figura 3.54– Reporte Historial de Métricas – Eventos
Reporte de Errores.- Esta opción nos va a mostrar una pantalla la
cual esta conformada por dos pestañas.
En la primera pestaña muestra el detalle de todos los errores que
han ocurridos en las transacciones que se han hecho en cada
modulo, se especificara la fecha, la hora, la maquina desde donde
se hizo la transacción, el módulos en que se realizo la transacción
y el tipo de sentencia que se ejecuto. Además en esta pantalla se
- 129 -
podrán tener una búsqueda de errores por usuario y sacar reportes
tipo Pantalla y Excel.
Figura 3.55– Formulario Transacciones del Sistema – Errores
Al dar un clic en el botón Pantalla que se muestra en la figura 3.55
nos mostrara un reporte de los errores de las transacciones.
Figura 3.56– Reporte Transacciones del Sistema – Errores
- 130 -
Al dar un clic en el botón Excel que se muestra en la figura 3.55
nos mostrara un reporte de los errores de las transacciones en un
documento en Excel.
Figura 3.57– Reporte en Excel Transacciones del Sistema –
Errores
En la segunda pestaña se mostrara el contenido del archivo de la
alerta. Esta pantalla también ofrece una opción para guardar el
archivo en la cual se debe especificar la ruta de la ubicación y el
nombre.
- 131 -
Figura 3.58– Formulario Contenido de Alerta – Errores
Políticas Violadas.- Esta opción nos mostrara un formulario en la
cual se detallan todas las políticas que han sido violadas, el estado,
la hora y fecha en que ocurrió, y la fecha de modificación que es la
fecha en que se corrigió la política.
Figura 3.59– Formulario Historial – Políticas Violadas
- 132 -
3.1.3.9 Modulo Terminal
A través de este modulo se podrá acceder a cuatro opciones que se
detallan continuación:
Consola.- Se podrá visualizar una consola en la cual se podrá
ejecutar comando SQL, también se podrá especificar una ruta para
guardar todos los script que ejecutemos en la consola
Figura 3.60– Formulario de la Consola – Terminal
Schema RMAN.- En la siguiente opción se visualiza la
información acerca del estado, lugar y tamaño de los tablespace.
También se podrá especificar una ruta para guardar esta
información
- 133 -
Figura 3.61– Formulario Schema RMAN– Terminal
Listados RMAN.- En la siguiente opción se visualiza un formulario
el cual estará conformado por dos pestañas.
En la primera pestaña se visualizar una lista de todos los
tablespace que han sido respaldados. También se podrá
especificar una ruta para guardar esta información
Figura 3.62– Formulario List Backup– Terminal
- 134 -
En la segunda pestaña se visualizar una lista de todos los
tablespace que no han sido respaldados. También se podrá
especificar una ruta para guardar esta información.
Figura 3.63– Formulario Report Need Backup– Terminal
RMAN Backup.- Esta opción nos permitirá hacer un respaldo de
la Base de Datos en Rman. También se podrá especificar una ruta
para guardar la información que se genera en pantalla al hacer el
respaldo.
Figura 3.64– Formulario Rman Backup– Terminal
CAPITULO 4
4. Desarrollo
Este capitulo trata sobre estándares de programación que se mantienen en el
sistema DBMS-FOX, tomando en cuenta la administración que demanda la
herramienta de programación Visual Fox 9.0.
4.1 Base de datos
El motor de base de datos utilizado es Oracle9i, y para su
administración utilizaremos las vistas que ofrece la base de datos.
En la base de datos se crearán 7 tablas internas y 2 tablas externas,
que mencionamos a continuación:
Internas
Menú, Detalle _ métricas, Métrica, Parámetros, Logdbms, Políticas,
Poli _ violadas
Externas
Partarea, HistList
-136-
A continuación indicaremos, a quien pertenece cada tabla creada.
Menú principal del Sistema DBMS-FOX
Tabla Menú.- Creada para una mejor administración del menú
Tabla 4.1–Tabla del Menú Principal
4.1.1 Modulo de Biblioteca de Servicio
Tabla Partarea.- Creada para las tareas programadas del listener
Tabla 4.2–Tabla de Tareas programadas
-137-
Tabla Histlist.- Creada para almacenar el resultado de las tareas
programadas de la tabla Partarea
Tabla 4.3–Tabla de Almacenamiento de las tareas programadas
4.1.2 Modulo de Métricas de Rendimiento
Tabla Métrica.- Creada para ingresar las métricas importantes del
DBA.
Tabla 4.4–Tabla de Ingreso de Métricas
-138-
Tabla Detalle _ métricas.- Creada para mostrar el detalle de las
métricas con sus respectivos Umbrales
Tabla 4.5–Tabla de detalle de Métricas
4.1.3 Modulo Definición de Políticas
Tabla Políticas.- Creada para ingresar las políticas definidas por el
DBA
Tabla 4.6–Tabla de Ingreso de Políticas
-139-
Tabla Poli _ Violadas.- Creada para ingresar las políticas Violadas
por el Operador
Tabla 4.7–Tabla de Políticas Violadas
4.1.4 Modulo de Eventos, Errores y Notificaciones
Tabla Logdbms.- Creada para ingresar todo lo que sucede en elSistema DBMS-FOX.
Tabla 4.8–Tabla de sucesos en el sistema
-140-
Tabla Parámetros.- Creada para detallar las especificaciones delCorreo de notificación
Tabla 4.9–Tabla de Notificación
4.2 Directorios del sistema
El contenido del directorio DBMS-FOX, son los subdirectorios que
utilizaremos para el desarrollo de este sistema, donde se detallara
el contenido de las mismas con el fin, de mantener una buena
administración
SCRIPTS RMAN CLASES DBF FTE
DBMS-FOX
-141-
En este directorio se encuentran los scripts que se ejecutan al
inicio del aplicativo, ya que el mismo lo valida, como pueden ser
la extensión ini y los esquemas de la base, que son los
procedimientos, las tablas y paquetes etc. Se crea y se ejecuta
un archivo bat, llamado Registro.bat donde realiza la ejecución
de los scripts internos en la carpeta Scripts
Los Scripts son: usuario, Principal, Insert, Q$politicas.spc,
Q$politicas.bdy y procedure.
Figura 4.1 - Registro.bat
@echo offSet ORACLE_SID=orcl10echo set echo on > %0.tmpecho connect / as sysdba; >> %0.tmpecho spool D:\dbms-fox\txt\registro.txt; >> %0.tmpecho Drop User DBMSFOX cascade; >> %0.tmpecho start D:\dbms-fox\scripts\usuario.sql; >> %0.tmpecho start D:\dbms-fox\scripts\principal.sql; >> %0.tmpecho start D:\dbms-fox\scripts\insert.sql; >> %0.tmpecho start D:\dbms-fox\scripts\Q$politicas.spc; >> %0.tmpecho start D:\dbms-fox\scripts\Q$politicas.bdy; >> %0.tmpecho start D:\dbms-fox\scripts\procedure.sql; >> %0.tmpecho SPOOL OFF; >>%0.tmpecho exit; >>%0.tmpsqlplus /nolog @%0.tmpdel %0.tmp
EXE PRG TXT
SCRIPTS
ICO
-142-
En este directorio se encuentran cuatros archivos que se
generan en el sistema para el uso de backup del sistema,
presentar reportes etc.
Los archivos generados y eliminados son: Rbackup, RlistB,
Rschema y RneedB.
En este directorio vse alojan dos clases, estándar y frmbase las
que representan las funciones básicas con sus variables
generales y la forma general del sistema respectivamente.
En este directorio se alojan dos clases, estándar y frmbase las
que representan las funciones básicas con sus variables
generales y la forma general del sistema respectivamente
RMAN
CLASES
DBF
-143-
En este directorio se sitúan otros subdirectorios que contienen
los módulos separados por proyectos respectivamente.
En este directorio se sitúan los ejecutables de los proyectos
pertenecientes a cada modulo.
En este directorio se sitúan un proyecto donde se codifica para
generar tareas programadas en Windows
En esta carpeta se crean y generar archivos txt para el uso de
presentación y obtención de datos de los módulos
FTE
EXE
PRG
TXT
-144-
4.3 Detalle del subdirectorio
En el detalle de los subdirectorios presentamos los proyectos que
corresponden a cada modulo que contiene el directorio FTE.
Modulo de Seguridades
Modulo de Bibliotecas deServicios
Modulo de Métricas deRendimiento
FTE
manusuarios
manroles
manperfiles
manbibliotecas
maninslist
manmetricas
-145-
Modulo de Políticas
Modulo de Almacenamiento
Modulo de Recursos
manpoliticas
Infctrfile
mantablespace
manarchdatos
mansegrol
manredlog
infarchlogs
manrecursos
mansesiones
-146-
Modulo Eventos, Errores yNotificaciones
Terminal
4.4 Detalle de Procesos Principales de cada modulo:
4.4.1 Modulo de seguridades
manusuarios
En la carpeta manusuarios, encontraremos dos formularios en el cual
presentaremos a los usuarios con sus respectivas características.
manmetnot
infalert
inferror
manpoliticasvioladas
manconsola
Rmanbackup
-147-
Formulario manusuario
Muestra datos.- Presenta información general de los datos de los
usuarios.
Formulario dtosusuarios
llena_privobj.- Este método realiza el proceso de llenar los
privilegios de objetos disponibles de la base
Llena_trwobjeto.- Este método realiza el proceso de llenar los
objetos disponibles de la base
Llena_cuotas.- Este método realiza el proceso de llenar las cuotas
disponibles del sistema
Llena_grupos.- Este método realiza el proceso de llenar los
grupos de consumidores
Cambios_totales.- Este método realiza los cambios que se
hicieron en el formulario, llamando a otros métodos, que realizan
los cambios respectivos del estado del usuario.
4.4.2 Modulo de bibliotecas de Servicios
manbibliotecas
En la carpeta manbibliotecas, encontraremos dos formularios en el
cual presentaremos el estado del listener, historial gráfico y los
parámetros del listener
-148-
Formulario frmparametros
CargaUbicacion.- Presenta información general de los datos del
listener.
CargaGenerales.- Presenta información general de los parámetros
del listener donde son cambiados.
Cmd_listenerguardar.- Este proceso realiza los cambios de los
parámetros del listener
4.4.3 Modulo de Métricas de Rendimiento
manmetricas
En la carpeta manmetricas, encontraremos dos formularios donde
presenta, crear y modifica métricas del base de datos
Formulario manmétricas
Cmd_crear.- Sirve para crear una métrica según las
consideraciones del administrador de datos.
Formulario manmetricas
Cmdguardar.- Sirve para guardar cambios que se realicen en los
umbrales de la métrica, y almacenarla en las tablas respectivas.
-149-
4.4.4 Modulo Definición de Políticas
manpoliticas
En la carpeta manpoliticas, encontraremos un formulario donde las
políticas las presenta.
Formulario manpoliticas
Cmd_aplicar.- Este proceso guarda los cambios realizados en las
políticas, en la activación y desactivación de las mismas
4.4.5 Modulo de Administración de Almacenamiento
mantablespace
En la carpeta mantablespace, encontraremos 3 formulario donde
presenta, edita y elimina tablespace respectivamente
Formulario mantablespace
Cmd_crear.- Este proceso levanta un formulario llamado edittable,
donde ingresa los parámetros del tablespace, como nombre,
tamaño, archivo de datos entre otros.
-150-
Método muestra.- Este proceso carga los tablespace creados,
donde podemos editarlos y guardar los cambios
Formulario edittable
Cmd_aceptar.-.Este proceso guardo los parámetros del
tablespace.
Infctrfile
En esta carpeta encontramos un formulario donde presenta
información general de los control files de la base de datos.
Formulario Infctrfile
Cmd_copiaSegr.- Realiza la copia de los controlfiles de la base de
datos
manarchdatos
En esta carpeta encontramos dos formularios donde presenta
información general y modifica los archivos de datos de la base de
datos.
-151-
Formulario manarchdatos
Cmd_crear.- Este proceso levanta un formulario llamado editarch
donde carga la información de los archivos de datos.
Formulario manarchdatos
Cmd_aceptar.- Este proceso guarda la información de los archivos
datos cambiados en el formulario
mansegrol
En esta carpeta encontramos dos formularios donde presenta
información general y modifica segmentos del rollback de la base de
datos.
Formulario mansegrol
Cmd_crear.- Este proceso levanta un formulario llamado editsegrol
donde carga la información de los segmentos de rollback
Formulario editsegrol
Cmd_aceptar.- Este proceso guarda la información de segmentos
del rollback cambiados en el formulario
-152-
manredlog
En esta carpeta encontramos dos formularios donde presenta
información general y modifica segmentos del rollback de la base de
datos.
Formulario mansegrol
Cmd_crear.- Este proceso levanta un formulario llamado
editredolog donde carga la información del grupo de redo logs
Formulario editredolog
Cmd_aceptar.- Este proceso guarda la información de los grupos
de redo logs cambiados en el formulario
infarchlog
En esta carpeta encontramos dos formularios donde presenta
información general de los archivos log de la base de datos con sus
respectivos parámetros
-153-
Formulario infarchlog
Muestra.- Este proceso presenta los archivo log que se encuentra
en la base de datos y al ves podemos levantar un formulario
llamado editarchlog donde carga los parámetros del los archivos
log.
4.4.6 Modulo de Administración de Recursos
manrecursos
En la carpeta manrecursos, encontraremos dos formularios donde
muestra información del host, la instancia, la memoria interna y
tiempos de fallo de recuperación
Formulario manrecursos
Cmd_aceptar.- Este proceso dispone de dos parámetros del
formularios, que son de abrir o cerrar la base, como también
activar y desactivar el modo de archivo log de la misma
-154-
4.4.7 Modulo de Eventos, Errores y Notificaciones
manmetnot
En la carpeta manmetnot, encontraremos un formulario donde se
ingresa los datos para el envió de correo de las alertas del sistema,
cuando se presente un inconveniente en los módulos de métricas y
políticas de la base de datos.
Formulario manmetnot
Cmd_probar.- Este proceso guarda los datos para el envió del
correo, estos datos son: el servidor de correo (smtp), dirección del
remitente, puerto de salida, clave y los correos o celulares de los
destinatarios
Cmd_grabar.- Guarda los datos para el envio de correos, como
también los correos o celulares de los destinatarios
-155-
4.4.8 Modulo Terminal
manconsola
Formulario manconsola
Cmd_ejecutar.- Este proceso ejecuta cualquier sentencia sql en la
consola del sistema que simula la consola de Windows, donde la
misma la guarda en un archivo para su presentación.
Cmd_mostrar.- Este proceso lee un archivo ejecutado por el
proceso cmd_ejecutar y lo presenta en la consola.
Rmanbackup
Formulario Rmanbackup
Cmd_ejecutar.- Este proceso ejecuta la copia de la base de datos
y la presenta en el formulario.
Cmd_Guardar.- Podemos guardar el resultado de la copia de la
base de datos en un archivo txt en cualquier ruta de su ordenador.
CAPITULO 5
5. CONCLUSIONES Y RECOMENDACIONES
El Sistema de Infraestructura tecnológica DBMS-FOX es un software que ha
sido creado para ofrecer a los DBA una nueva herramienta de fácil uso la
permite tener un completo control sobre la Base de Datos a través de 8
módulos en el cual se reparten las principales tareas que se deben de
ejecutar a la hora de administrar los datos.
Estos módulos son:
Modulo de Seguridades
Modulo de Biblioteca de Servicios
Modulo de Métricas de Rendimiento
Modulo de Definición de Políticas
Modulo de Administración de Servicios
Modulo de Administración de Recursos
Modulo de Eventos, Errores y Notificaciones
Modulo Terminal
-157-
En cumplimento con los objetivos planteados al inicio de este proyecto se ha
logrado implementar lo siguiente:
1. Ofrecer una herramienta autodidáctica de fácil comprensión para el
DBA el cual ofrece información confiable.
2. Tener un aplicativo donde se manejen interfaces dinámicas en el cual
se tendrá acceso a diferentes pantallas para poder visualizar
diferentes tipos de información al mismo tiempo.
3. Las Interfaces del software permiten gestionar la información en la
Base de Datos a través de mantenimientos (crear, modificar y
eliminar).
4. Tener reportes que nos permitan supervisar la información que se
esta ejecutando en los diferentes componentes del aplicativo.
Por otro lado se recomienda, seguir en la actualización del software creando
nuevas versiones en la cual se incluya nuevos módulos para que el DBA
tenga más opciones a la hora de manipular los datos teniendo una óptima
Administración de la Base de Datos.
INDICE GENERAL
AGRADECIMIENTO II
DEDICATORIA V
TRIBUNAL DE GRADUACION VIII
DECLARACION EXPRESA IX
RESUMEN X
INDICE GENERAL XIV
MANUAL TECNICO
1. Codificación 1
1.1 Menu Principal 1
1.2 Programa principal 18
1.3 Programa Envia mail 191.4 Método de Conexión a la Base de Datos - ClaseEstandar 23
1.5 Metodo path_archivo - Clase Estandar 25
1.6 Modulo de Seguridades 26
1.6.1 Usuarios – método muestra Datos 26
1.6.2 Roles 35
1.6.3 Perfiles 44
1.7 Método Bibliotecas de Servicios 56
1.7.1 Listener 56
1.8 Módulo de Politicas 70
1.8.1 Definición de politicas 70
1.9 Módulo de Métricas de Rendimiento 72
XV
XV
1.9.1 Definición de métricas 72
1.10 Modulo de Almacenamiento 75
1.10.1 Archivo de Control 75
1.10.2 Tablespaces 77
1.10.3 Archivos de Datos 96
1.10.4 Segmentos de Rollback 104
1.10.5 Redo Logs 110
1.11 Modulo de Recursos 116
1.11.1 Mantenimiento de Recursos 116
1.11.2 Informe de Sesiones 132
1.12 Modulo de eventos, errores y notificaciones 135
1.12.1 Configuración de Parámetros y Notificaciones 135
1.12.2 Reporte de Eventos 142
1.12.3 Informe de Errores 147
1.12.4 Políticas violadas 151
1.13 Módulo Terminal 153
1.13.1 Consola Sqlplus 153
1.13.2 Schema Rman 155
1.13.3 Listado de Backup 156
1.13.4 Rman Backup 158
MANUAL DE USUARIO
2.1 Introducción 160
2.2 Especificaciones del sistema DBMS-FOX 161
2.2.1 Pantalla Principal 161
2.2.2 Acceso al Sistema 163
2.2.3 Modulo de Seguridades 164
2.2.3.1 Usuario 164
2.2.3.2 Roles 173
XVI
XVI
2.2.3.3 Perfiles 180
2.2.4 Modulo Biblioteca de Servicios 184
2.2.4.1 Programar Inspección del Listener 184
2.2.4.2 Listener 185
2.2.5 Modulo de Métricas de Rendimiento 188
2.2.6 Modulo Definición de Políticas 189
2.2.7 Modulo de Almacenamiento 190
2.2.7.1 Archivo de Control 190
2.2.7.2 Tablespace 192
2.2.7.3 Archivo de Datos 195
2.2.7.4 Segmentos de Rollbak 196
2.2.7.5 Grupo de Redo Logs 198
2.2.7.6 Archive Logs 200
2.2.8 Modulo de Recursos 202
2.2.8.1 Configuración 202
2.2.8.2 Sesiones 204
2.2.9 Modulo de Eventos, Errores y Notificaciones 205
2.2.9.1 Configurar Parámetros 205
2.2.9.2 Reporte de Eventos 206
2.2.9.3 Reporte de Errores 210
2.2.9.4 Políticas Violadas 213
2.2.10 Modulo Terminal 213
2.2.10.1 Consola Plus 213
2.2.10.2 Schema Rman 214
2.2.10.3 Listado Rman 215
2.2.10.4 Backup Database 217
XVII
XVII
INDICE DE FIGURAS
FIGURA 2.1 PANTALLA PRINCIPAL 162
Figura 2.2 Formulario de Acceso al sistema 164
FIGURA 2.3 Pantalla Principal – Usuarios 165
FIGURA 2.4 Pantalla de Creación y edición de usuario 166
FIGURA 2.5 Muestra los cambios en sentencias sql 167
Figura 2.6 Pantalla Roles – Usuarios 168
Figura 2.7 Pantalla de Privilegios – Usuarios 169
Figura 2.8 Pantalla de Objetos del Usuarios 170
Figura 2.9 Pantalla de Cuota – Usuarios 171Figura 2.10 Pantalla de Grupos de Consumidores –Usuarios 172
Figura 2.11 Pantalla General – Roles 174
Figura 2.12 Pantalla Rol – Roles 175
Figura 2.13 Pantalla Sistema – Roles 176
Figura 2.14 Pantalla Objeto – Roles 178
Figura 2.15 Pantalla Grupo de Consumidores – Roles 179
Figura 2.16 Pantalla Administración de Perfiles – General 181Figura 2.17 Pantalla Administración de Perfiles –Contraseña 182
Figura 2.18 Pantalla Programar Inspección – Listener 184
Figura 2.19 Formulario Estado – Listener 185
Figura 2.20 Formulario Disponibilidad – Listener 186
Figura 2.21 Formulario Parámetros Ubicación – Listener 186
XVIII
XVIII
Figura 2.22 Formulario Parámetros Contraseña – Listener 187
Figura 2.23 Formulario Principal – Métricas 188
Figura – 2.24 Formulario de Creación – Métricas
189
Figura 2.25 Formulario principal – Políticas 190
Figura 2.26– Formulario General – Archivo de Control 191
Figura 2.27 Formulario Avanzado – Archivo de Control 191Figura 2.28 Formulario Sección de Registros – Archivode Control 192
Figura 2.29 – Formulario Principal – Tablespace 193
Figura – 2.30 Formulario General - Tablespace 194
Figura–2.31 Formulario Almacenamiento – Tablespace 194
Figura 2.32 – Pantalla Principal – Archivo de Datos 195
Figura 2.33 – Formulario General – Archivo de Datos 196
Figura 2.34 – Pantalla Principal – Segmentos de Rollback 197
Figura 2.35 – Formulario General - Segmentos Rollback 198
Figura 2.36 – Pantalla Principal – Grupo de Redo Logs 199
Figura 2.37 – Formulario General – Grupo de Redo Logs 200
Figura 2.38 – Pantalla Principal Archive Logs 201
Figura 2.39 – Formulario General – Archive Logs 201
Figura 2.40 – Formulario General del Host - Recursos 202
Figura 2.41 Formulario General Instancia- Recursos 203
Figura 2.42 Formulario Memoria - Recursos 203
Figura – 2.43 Formulario Recuperación – Recursos 204
Figura 2.44– Formulario Informe de Sesiones – Recursos 205Figura 2.45 – Formulario Configurar Parámetros –Notificaciones 206
Figura 2.46– Formulario Transacciones del Sistema – 207
XIX
XIX
Eventos
Figura 2.47– Reporte Transacciones del Sistema –Eventos 207Figura 2.48– Reporte en Excel Transacciones del Sistema– Eventos 208
Figura 2.49– Formulario Ejecución de Métricas – Eventos 208
Figura 2.50 – Formulario Historial de Métricas – Eventos 209
Figura 2.51– Reporte Historial de Métricas – Eventos 210Figura 2.52 – Formulario Transacciones del Sistema –Errores 211Figura 2.53 – Reporte Transacciones del Sistema –Errores 211Figura 2.54 – Reporte en Excel Transacciones delSistema – Errores 212
Figura 2.55 – Formulario Contenido de Alerta – Errores 212
Figura 2.56– Formulario Historial – Políticas Violadas 213
Figura 2.57– Formulario de la Consola – Terminal 214
Figura 2.58 – Formulario Report Schema – Terminal 215
Figura 2.59– Formulario List backup – Terminal 216
Figura 2.60 – Formulario de la Consola – Terminal 217
Figura 2.61 – Formulario de la Consola – Terminal 218
CAPITULO 1
MANUAL TECNICO
En este manual detallaremos los procesos mas importantes que se
desarrollaron para el funcionamiento de nuestro Sistema.
1. Codificación
A continuación se detalla la codificación de los principales procesos
para la elaboración del sitio.
1.1 Menu Principal
Bat de Creación del Usuario y Tablas a Utilizar
ºcarchivobat = SYS(5) + "\dbms-fox\txt\registro.bat"lcarchivo = SYS(5) + "\dbms-fox\txt\registro.txt"IF FILE("&lcarchivobat")
DELETE FILE ("&lcarchivobat")ENDIFIF FILE("&lcarchivo")
DELETE FILE ("&lcarchivo")ENDIFlcsql1 = "" arch = fcreate("&lcarchivobat")FPUTS(arch,"@echo off") FPUTS(arch,"Set ORACLE_SID=" + ALLTRIM(thisform.tsid.Value))FPUTS(arch,"echo set echo on > %0.tmp") FPUTS(arch,"echo set echo on > %0.tmp")FPUTS(arch,"echo connect / as sysdba; >> %0.tmp") FPUTS(arch,"echo spool " + lcarchivo + "; >>%0.tmp") FPUTS(arch,"echo Drop User DBMSFOX cascade; >> %0.tmp")FPUTS(arch,"echo start " + SYS(5) + "\dbms-fox\scripts\usuario.sql; >> %0.tmp")FPUTS(arch,"echo start " + SYS(5) + "\dbms-fox\scripts\principal.sql; >> %0.tmp")FPUTS(arch,"echo start " + SYS(5) + "\dbms-fox\scripts\insert.sql; >> %0.tmp")FPUTS(arch,"echo start " + SYS(5) + "\dbms-fox\scripts\Q$politicas.spc; >> %0.tmp")FPUTS(arch,"echo start " + SYS(5) + "\dbms-fox\scripts\Q$politicas.bdy; >> %0.tmp")FPUTS(arch,"echo start " + SYS(5) + "\dbms-fox\scripts\procedure.sql; >> %0.tmp")
- 2 -
FPUTS(arch,"echo SPOOL OFF; >>%0.tmp")FPUTS(arch,"echo exit; >>%0.tmp")FPUTS(arch,"sqlplus /nolog @%0.tmp")FPUTS(arch,"del %0.tmp")FCLOSE(arch)
WAIT WINDOW "Ejecutando Script de Creacion.... espere por favor" NOWAITRUN &lcarchivobat
WAIT CLEAR
Script deUsuario
--Creacion del UsuarioCREATE USER "DBMSFOX" IDENTIFIED BY "DBMSFOX"DEFAULT TABLESPACE EXAMPLEQUOTA UNLIMITED ON EXAMPLE;
--Asignando PrivilegiosGRANT "CONNECT" TO "DBMSFOX";GRANT "DBA" TO "DBMSFOX";GRANT "RESOURCE" TO "DBMSFOX";ALTER USER "DBMSFOX" DEFAULT ROLE "CONNECT", "DBA", "RESOURCE";grant select any dictionary to DBMSFOX;
--Conectarc con el Usuarioconnect DBMSFOX/DBMSFOX;
alter session set current_schema=DBMSFOX;
Script Principal
-- Creando las SecuenciasCREATE SEQUENCE SEC_AUDITORIA_01
START WITH 207MAXVALUE 10000MINVALUE 0NOCYCLENOCACHENOORDER;
- 3 -
CREATE SEQUENCE SEC_POLI_VIOLADASTART WITH 100MAXVALUE 10000MINVALUE 0NOCYCLENOCACH; NOORDER;
CREATE TABLE CATEGORIA(
ID NUMBER,CATEGORIA VARCHAR2(100 BYTE),DESCRIPCION VARCHAR2(100 BYTE)
);
CREATE TABLE POLITICAS(
NUM NUMBER NOT NULL,NOMBRE_POLITICA VARCHAR2(128 BYTE),ID_CATEGORIA NUMBER,DESCRIPCION VARCHAR2(1000 BYTE),FECHA_CREACION DATE,USUARIO_MODIFICA VARCHAR2(50 BYTE),FECHA_MODIFICA DATE,ESTADO CHAR(1 BYTE),PROCEDIMIENTO VARCHAR2(100 BYTE)
);
CREATE TABLE POLI_VIOLADAS(
NUM NUMBER,ID_POLITICA NUMBER,FECHA DATE,COMENTARIO VARCHAR2(100 BYTE),FECHA_MODIFICA DATE,ESTADO CHAR(1 BYTE),ENVIADO CHAR(1 BYTE) DEFAULT 'N',FEC_ENVIO DATE
);
create table menu(codigo char(5),nombre varchar(50),opcion char(1),nom_fte varchar(50),nom_ejec varchar(50),titulo varchar(80),icono number,
- 4 -
apertura number);alter table menu
add primary key(codigo);
--CReación de las Metricascreate table metrica(indice number(5),metrica varchar(250),operador varchar(20),minimo varchar(50),maximo varchar(50),sentencia varchar(4000),tipo char(1), -- S= Query; P=Procedurecomparador char(15), -- >,>=,<,<=ejecuta char(1), -- Estatus de si se ejecuta la instruccion o Parámetro
ult_ejec date);
alter table metricaadd primary key(indice);
create sequence metrica_idincrement by 1start with 1;
create sequence metrica_seqincrement by 1start with 1;
create table detalle_metrica(indice_met number(5),secuencia number(5),fecha date,valor number(5),tipo_umbral char(1),operador varchar(15),limitante varchar(20),comentario varchar2(3000),notificado char(1),fec_notifica date);
CREATE TABLE LOGDBMS(SID VARCHAR2(20),MAQUINA VARCHAR2(30),
- 5 -
FECHA DATE,OPERADOR VARCHAR2(20),MODULO VARCHAR2(200),SENTENCIA VARCHAR2(1000),ERROR VARCHAR2(1000),TIPO CHAR(1) -- 1=TRANSACCION, 2=ERROR);
Create table parametros(nombremitente varchar(150),dirremitente varchar(200),password varchar(50),smtp varchar(60),puerto number,dirsaliente varchar(1000),tipo char(1),envia char(1)
);alter table menu
add primary key(codigo);
--CReación de las Metricascreate table metrica(indice number(5),metrica varchar(250),operador varchar(20),minimo varchar(50),
maximo varchar(50),sentencia varchar(4000),tipo char(1), -- S= Query; P=Procedurecomparador char(15), -- >,>=,<,<=ejecuta char(1), -- Estatus de si se ejecuta la instruccion o Parametroult_ejec date
);
alter table metricaadd primary key(indice);
create sequence metrica_idincrement by 1start with 1;
create sequence metrica_seqincrement by 1start with 1;
- 6 -
create table detalle_metrica(indice_met number(5),secuencia number(5),fecha date,valor number(5),tipo_umbral char(1),operador varchar(15),limitante varchar(20),comentario varchar2(3000),notificado char(1),fec_notifica date);
CREATE TABLE LOGDBMS(SID VARCHAR2(20),MAQUINA VARCHAR2(30),FECHA DATE,OPERADOR VARCHAR2(20),MODULO VARCHAR2(200),SENTENCIA VARCHAR2(1000),ERROR VARCHAR2(1000),TIPO CHAR(1) -- 1=TRANSACCION, 2=ERROR);
Create table parametros(nombremitente varchar(150),dirremitente varchar(200),password varchar(50),smtp varchar(60),puerto number,dirsaliente varchar(1000),tipo char(1),envia char(1)
);
Script Insert.sql
-- Datos del MenuInsert into menu(codigo,nombre,opcion,nom_fte,nom_ejec,titulo,icono,apertura)values('A','ADMINISTRACION DE:','N',' ',' ',' ',1,0);
Insert into menu(codigo,nombre,opcion,nom_fte,nom_ejec,titulo,icono,apertura)values('A1','Seguridades','N',' ',' ',' ',4,0);
- 7 -
Insert into menu(codigo,nombre,opcion,nom_fte,nom_ejec,titulo,icono,apertura)values('A2','Biblioteca de Servicios','N',' ',' ',' ',5,0);
Insert into menu(codigo,nombre,opcion,nom_fte,nom_ejec,titulo,icono,apertura)values('A3','Metricas de Rendimiento','N',' ',' ',' ',6,0);
Insert into menu(codigo,nombre,opcion,nom_fte,nom_ejec,titulo,icono,apertura)values('A4','Politicas','N',' ',' ',' ',7,0);
Insert into menu(codigo,nombre,opcion,nom_fte,nom_ejec,titulo,icono,apertura)values('A5','Almacenamiento','N',' ',' ',' ',8,0);
Insert into menu(codigo,nombre,opcion,nom_fte,nom_ejec,titulo,icono,apertura)values('A6','Recursos','N',' ',' ',' ',9,0);
Insert into menu(codigo,nombre,opcion,nom_fte,nom_ejec,titulo,icono,apertura)values('A7','Eventos y Errores','N',' ',' ',' ',10,0);
Insert into menu(codigo,nombre,opcion,nom_fte,nom_ejec,titulo,icono,apertura)values('A8','Terminal','N',' ',' ',' ',12,0);
Insert into menu(codigo,nombre,opcion,nom_fte,nom_ejec,titulo,icono,apertura)values('A9','Salir','N','Salir','Salir.exe',' ',11,0);
Insert into menu(codigo,nombre,opcion,nom_fte,nom_ejec,titulo,icono,apertura)values('A11','Usuarios','S','manusuario\manusuario.scx','manusuario.exe','[ Seguridad ] - Administración deUsuarios',2,0);
Insert into menu(codigo,nombre,opcion,nom_fte,nom_ejec,titulo,icono,apertura)values('A12','Roles','S','manroles\frmroles.scx','manroles.exe','[ Seguridad ] - Administración de Roles',2,0);
Insert into menu(codigo,nombre,opcion,nom_fte,nom_ejec,titulo,icono,apertura)values('A13','Perfiles','S','manperfiles\frmperfiles.scx','manperfiles.exe','[ Seguridad ] - Administración dePerfiles',2,0);
Insert into menu(codigo,nombre,opcion,nom_fte,nom_ejec,titulo,icono,apertura)values('A21','Programar Inspección','S','maninslist\maninslist.scx','maninslist.exe','[ Servicios ] ProgramarInspección',2,0);
Insert into menu(codigo,nombre,opcion,nom_fte,nom_ejec,titulo,icono,apertura)values('A22','Listener','S','manbibliotecas\frmlistener.scx','manbibliotecas.exe','[ Servicios ] Bibliotecas deServicios',2,1);
Insert into menu(codigo,nombre,opcion,nom_fte,nom_ejec,titulo,icono,apertura)values('A31','Definición de Métricas','S','manmetricas\manmetricas.scx','manmetricas.exe','[ Métricas deRendimiento ] - Definición de Métricas',2,0);
Insert into menu(codigo,nombre,opcion,nom_fte,nom_ejec,titulo,icono,apertura)values('A41','Definicion de Politicas','S','manpoliticas\manpoliticas.scx','manpoliticas.exe','[ Politicas ] - Biblioteca dePoliticas',2,0);
Insert into menu(codigo,nombre,opcion,nom_fte,nom_ejec,titulo,icono,apertura)values('A51','Archivo de Control','S','infctrlfile\infctrlfile.scx','infctrlfile.exe','[ Almacenamiento ] - Administración deArchivos de Control',2,0);
- 8 -
Insert into menu(codigo,nombre,opcion,nom_fte,nom_ejec,titulo,icono,apertura)values('A52','Tablespaces','S','mantablespace\mantablesapce.scx','mantablespace.exe','[ Almacenamiento ] -Administración de Archivos de Tablespace',2,0);
Script Q$politicas.spc
CREATE OR REPLACE PACKAGE Q$politicas ASPROCEDURE P$EJECUTA;PROCEDURE P$POLITICA_01;PROCEDURE P$POLITICA_02;PROCEDURE P$POLITICA_03;PROCEDURE P$POLITICA_04;PROCEDURE P$POLITICA_05;PROCEDURE P$POLITICA_06;PROCEDURE P$POLITICA_07;PROCEDURE P$POLITICA_08;PROCEDURE P$POLITICA_09;PROCEDURE P$POLITICA_10;
END;/
Script Q$politicas.bdy
CREATE OR REPLACE PACKAGE BODY Q$politicas ASPROCEDURE P$EJECUTA ASlcEje varchar2(100);BEGIN
/*P$POLITICA_01;P$POLITICA_02;P$POLITICA_03;P$POLITICA_04;P$POLITICA_05;P$POLITICA_06;P$POLITICA_07;P$POLITICA_08;P$POLITICA_09;P$POLITICA_10;*/for V in (select * from politicas)loop
if v.estado='A' thenlcEje:='begin Q$politicas.P$POLITICA_'||trim(to_char(v.num,'00'))||'; end;';execute immediate lcEje;
elseupdate poli_violadas set estado='I' where num=v.num and estado='A';
- 9 -
end if;end loop;
END;
PROCEDURE P$POLITICA_01 ASESTADO VARCHAR(50);lccomentario varchar(200);valor_politica varchar(100);BEGINSELECT VALUE INTO valor_politica FROM v$parameter WHERE NAME='spfile';SELECT DECODE(trim(valor_politica),NULL,'VIOLADA','CUMPLIDA') INTO valor_politica FROM dual;SELECT NVL((SELECT ESTADO FROM POLI_VIOLADAS WHERE ID_POLITICA=1 AND ESTADO='A'),'N')INTO
ESTADO FROM DUAL;dbms_output.put_line(valor_politica);IF valor_politica='CUMPLIDA' THEN
UPDATE POLI_VIOLADAS SET FECHA_MODIFICA=SYSDATE, ESTADO='I' WHERE ID_POLITICA=1 ANDESTADO='A';END IF;IF ESTADO='N' AND valor_politica='VIOLADA' THEN
lccomentario:='Base de datos empieza con:'|| valor_politica; INSERT INTO POLI_VIOLADAS(ID_POLITICA,FECHA, ESTADO,COMENTARIO) Values (1, SYSDATE,'A',lccomentario);END IF;IF ESTADO='A' AND valor_politica='VIOLADA' THEN
lccomentario:='Base de datos empieza con:'|| valor_politica;UPDATE POLI_VIOLADAS SET COMENTARIO=LCCOMENTARIO,enviado='N' WHERE ID_POLITICA=1 and
estado='A';END IF;
END;
PROCEDURE P$POLITICA_02 ASlnredologs VARCHAR(50);valor_politica VARCHAR(50);ESTADO VARCHAR(50);lccomentario varchar (200);BEGINSELECT SUM(DECODE(SIGN(TRUNC(bytes/1024/1024)),1,0,1)) INTO lnredologs FROM v$log;SELECT DECODE(lnredologs,0,'CUMPLIDA','VIOLADA') INTO valor_politica FROM dual;DBMS_OUTPUT.PUT_LINE(VALOR_POLITICA);SELECT NVL((SELECT ESTADO FROM POLI_VIOLADAS WHERE ID_POLITICA=2 AND ESTADO='A'),'N')INTO
ESTADO FROM DUAL;dbms_output.put_line(valor_politica);IF valor_politica='CUMPLIDA' THEN
UPDATE POLI_VIOLADAS SET FECHA_MODIFICA=SYSDATE, ESTADO='I' WHERE ID_POLITICA=2 ANDESTADO='A';END IF;IF ESTADO='N' AND valor_politica='VIOLADA' THEN
lccomentario:='Numero de Redologs:'|| lnredologs;INSERT INTO POLI_VIOLADAS(ID_POLITICA, FECHA, ESTADO,COMENTARIO) Values (2,
SYSDATE,'A',lccomentario);END IF;IF ESTADO='A' AND valor_politica='VIOLADA' THEN
- 10 -
lccomentario:='Redologs:'|| lnredologs;UPDATE POLI_VIOLADAS SET COMENTARIO=LCCOMENTARIO,enviado='N' WHERE ID_POLITICA=2 and
estado='A';END IF;
END;
PROCEDURE P$POLITICA_02 ASlnredologs VARCHAR(50);valor_politica VARCHAR(50);ESTADO VARCHAR(50);lccomentario varchar (200);BEGINSELECT SUM(DECODE(SIGN(TRUNC(bytes/1024/1024)),1,0,1)) INTO lnredologs FROM v$log;SELECT DECODE(lnredologs,0,'CUMPLIDA','VIOLADA') INTO valor_politica FROM dual;DBMS_OUTPUT.PUT_LINE(VALOR_POLITICA);SELECT NVL((SELECT ESTADO FROM POLI_VIOLADAS WHERE ID_POLITICA=2 AND ESTADO='A'),'N')INTO
ESTADO FROM DUAL;dbms_output.put_line(valor_politica);IF valor_politica='CUMPLIDA' THEN
UPDATE POLI_VIOLADAS SET FECHA_MODIFICA=SYSDATE, ESTADO='I' WHERE ID_POLITICA=2 ANDESTADO='A';END IF;IF ESTADO='N' AND valor_politica='VIOLADA' THEN
lccomentario:='Numero de Redologs:'|| lnredologs;INSERT INTO POLI_VIOLADAS(ID_POLITICA, FECHA, ESTADO,COMENTARIO) Values (2,
SYSDATE,'A',lccomentario);END IF;IF ESTADO='A' AND valor_politica='VIOLADA' THEN
lccomentario:='Redologs:'|| lnredologs;UPDATE POLI_VIOLADAS SET COMENTARIO=LCCOMENTARIO,enviado='N' WHERE ID_POLITICA=2 and
estado='A';END IF;
END;PROCEDURE P$POLITICA_03 ASlcpga VARCHAR(50);lnvalor1 VARCHAR(50);lcworkarea VARCHAR(50);lnvalor2 VARCHAR(50);valor_politica VARCHAR(50);ESTADO VARCHAR(50);lccomentario varchar (200);BEGINSELECT SUBSTR(NAME, 1, 250), SUBSTR(VALUE,1, 250) INTO lcpga,lnvalor1 FROM v$parameter WHERE
NAME ='pga_aggregate_target';SELECT SUBSTR(NAME, 1, 250), SUBSTR(VALUE,1, 250) INTO lcworkarea,lnvalor2 FROM v$parameter
WHERE NAME ='workarea_size_policy';DBMS_OUTPUT.PUT_LINE(lcpga||' '||lnvalor1);DBMS_OUTPUT.PUT_LINE(lcworkarea||' '||lnvalor2);IF lnvalor1=0 OR lnvalor2='MANUAL'THEN
valor_politica:=1;
- 11 -
ELSEvalor_politica:=0;
END IF;SELECT NVL((SELECT ESTADO FROM POLI_VIOLADAS WHERE ID_POLITICA=3 AND ESTADO='A'),'N')INTO
ESTADO FROM DUAL;SELECT DECODE(valor_politica,1,'CUMPLIDA','VIOLADA') INTO valor_politica FROM dual;DBMS_OUTPUT.PUT_LINE(valor_politica);IF valor_politica='CUMPLIDA' THEN
UPDATE POLI_VIOLADAS SET FECHA_MODIFICA=SYSDATE, ESTADO='I' WHERE ID_POLITICA=3 ANDESTADO='A';END IF;IF ESTADO='N' AND valor_politica='VIOLADA' THEN
lccomentario:='Gestión Automática de PGA:'|| valor_politica;INSERT INTO POLI_VIOLADAS(ID_POLITICA, FECHA, ESTADO,COMENTARIO) Values (3,
SYSDATE,'A',lccomentario);END IF;IF ESTADO='A' AND valor_politica='VIOLADA' THEN
lccomentario:='Gestión Automática de PGA:'|| valor_politica;UPDATE POLI_VIOLADAS SET COMENTARIO=LCCOMENTARIO,enviado='N' WHERE ID_POLITICA=3 and
estado='A';END IF;
END;
PROCEDURE P$POLITICA_04 ASvalor_politica VARCHAR(50);estado varchar(50);lccomentario varchar (200);BEGINSELECT DECODE(TRUNC(COUNT(*)/3),0,'VIOLADA','CUMPLIDA') INTO valor_politica FROM v$controlfile;DBMS_OUTPUT.PUT_LINE(valor_politica);SELECT NVL((SELECT ESTADO FROM POLI_VIOLADAS WHERE ID_POLITICA=4 AND ESTADO='A'),'N')INTO
ESTADO FROM DUAL;IF valor_politica='CUMPLIDA' THEN
UPDATE POLI_VIOLADAS SET FECHA_MODIFICA=SYSDATE, ESTADO='I' WHERE ID_POLITICA=4 ANDESTADO='A';
END IF;IF ESTADO='N' AND valor_politica='VIOLADA' THEN
lccomentario:='Numero de controlfiles:'|| valor_politica;INSERT INTO POLI_VIOLADAS(ID_POLITICA, FECHA, ESTADO,COMENTARIO) Values (4,
SYSDATE,'A',lccomentario);END IF;IF ESTADO='A' AND valor_politica='VIOLADA' THEN
lccomentario:='Numero de controlfiles:'|| valor_politica;UPDATE POLI_VIOLADAS SET COMENTARIO=LCCOMENTARIO,enviado='N' WHERE ID_POLITICA=4 and
estado='A';END IF;
END;PROCEDURE P$POLITICA_05 ASlclogmode VARCHAR(50);valor_politica VARCHAR(50);estado varchar(50);
- 12 -
lccomentario varchar (200);BEGINSELECT log_mode INTO lclogmode FROM v$database;SELECT DECODE(lclogmode,'ARCHIVELOG','CUMPLIDA','VIOLADA') INTO valor_politica FROM dual;SELECT NVL((SELECT ESTADO FROM POLI_VIOLADAS WHERE ID_POLITICA=5 AND ESTADO='A'),'N')INTO
ESTADO FROM DUAL;dbms_output.put_line(valor_politica);IF valor_politica='CUMPLIDA' THEN
UPDATE POLI_VIOLADAS SET FECHA_MODIFICA=SYSDATE, ESTADO='I' WHERE ID_POLITICA=5 ANDESTADO='A';END IF;IF ESTADO='N' AND valor_politica='VIOLADA' THEN
lccomentario:='Base de Datos en Modo: '|| lclogmode;INSERT INTO POLI_VIOLADAS(ID_POLITICA, FECHA, ESTADO,COMENTARIO) Values (5, SYSDATE,'A',
lccomentario);END IF;IF ESTADO='A' AND valor_politica='VIOLADA' THEN
lccomentario:='Base de Datos en Modo: '|| lclogmode;UPDATE POLI_VIOLADAS SET COMENTARIO=LCCOMENTARIO,enviado='N' WHERE ID_POLITICA=5 and
estado='A';END IF;
END;PROCEDURE P$POLITICA_06 ASlccomentario varchar (200);lctable varchar (50);valor_politica varchar(50);estado varchar(50);begin
select count(*) status into lctable from dba_tablespaces where status='OFFLINE';select(decode(lctable,0,'CUMPLIDA','VIOLADA')) INTO valor_politica from dual;SELECT NVL((SELECT ESTADO FROM POLI_VIOLADAS WHERE ID_POLITICA=6 AND ESTADO='A'),'N')INTO
ESTADO FROM DUAL;dbms_output.put_line(valor_politica);IF valor_politica='CUMPLIDA' THEN
UPDATE POLI_VIOLADAS SET FECHA_MODIFICA=SYSDATE, ESTADO='I' WHERE ID_POLITICA=6 ANDESTADO='A';END IF;IF ESTADO='N' AND valor_politica='VIOLADA' THEN
lccomentario:='Tablespaces fuera de linea '|| lctable;INSERT INTO POLI_VIOLADAS(ID_POLITICA, FECHA, ESTADO,COMENTARIO) Values (6,
SYSDATE,'A',lccomentario);END IF;IF ESTADO='A' AND valor_politica='VIOLADA' THEN
lccomentario:='Tablespaces fuera de linea '|| lctable;UPDATE POLI_VIOLADAS SET COMENTARIO=LCCOMENTARIO,enviado='N' WHERE ID_POLITICA=6 and
estado='A';END IF;
end;
PROCEDURE P$POLITICA_07 ASlcobjetos varchar (50);valor_politica varchar(50);estado varchar(50);lccomentario varchar (200);
- 13 -
beginselect count(*) status into lcobjetos from dba_objects where status='INVALID';select(decode(lcobjetos,0,'CUMPLIDA','VIOLADA')) INTO valor_politica from dual;SELECT NVL((SELECT ESTADO FROM POLI_VIOLADAS WHERE ID_POLITICA=7 AND ESTADO='A'),'N')INTO
ESTADO FROM DUAL;dbms_output.put_line(valor_politica);IF valor_politica='CUMPLIDA' THEN
UPDATE POLI_VIOLADAS SET FECHA_MODIFICA=SYSDATE, ESTADO='I' WHERE ID_POLITICA=7 ANDESTADO='A';END IF;IF ESTADO='N' AND valor_politica='VIOLADA' THEN
lccomentario:='Objetos Invalidos:'|| lcobjetos;INSERT INTO POLI_VIOLADAS(ID_POLITICA, FECHA, ESTADO,COMENTARIO) Values (7, SYSDATE,'A',
lccomentario);END IF;IF ESTADO='A' AND valor_politica='VIOLADA' THEN
lccomentario:='Objetos Invalidos:'|| lcobjetos;UPDATE POLI_VIOLADAS SET COMENTARIO=LCCOMENTARIO,enviado='N' WHERE ID_POLITICA=7 and
estado='A';END IF;
end;PROCEDURE P$POLITICA_08 ASlcfile1 varchar (50);valor_politica varchar(50);estado varchar(50);lccomentario varchar (200);beginselect value into lcfile1 from v$parameter where name='utl_file_dir';select(decode(lcfile1,'*','VIOLADA','CUMPLIDA')) INTO valor_politica from dual;SELECT NVL((SELECT ESTADO FROM POLI_VIOLADAS WHERE ID_POLITICA=8 AND ESTADO='A'),'N')INTO
ESTADO FROM DUAL;dbms_output.put_line(valor_politica);IF valor_politica='CUMPLIDA' THEN
UPDATE POLI_VIOLADAS SET FECHA_MODIFICA=SYSDATE, ESTADO='I' WHERE ID_POLITICA=8 ANDESTADO='A';END IF;IF ESTADO='N' AND valor_politica='VIOLADA' THEN
lccomentario:='Parametro utl_file_dir esta accesado a cualquier directorio:'|| lcfile1;INSERT INTO POLI_VIOLADAS(ID_POLITICA, FECHA, ESTADO,COMENTARIO) Values (8,
SYSDATE,'A',lccomentario);END IF;IF ESTADO='A' AND valor_politica='VIOLADA' THEN
lccomentario:='Parametro utl_file_dir esta accesado a cualquier directorio:'|| lcfile1;UPDATE POLI_VIOLADAS SET COMENTARIO=LCCOMENTARIO,enviado='N' WHERE ID_POLITICA=8 and
estado='A';END IF;
END; PROCEDURE P$POLITICA_09 ASlcUSRTABLE VARCHAR(50);valor_politica VARCHAR(50);estado varchar(50);lccomentario varchar (200);BEGINSELECT COUNT(*) INTO lcUSRTABLE FROM DBA_USERS WHERE USERNAME NOT IN
('SYS','SYSTEM','OUTLN','WMSYS','ORDSYS','ORDPLUGINS','MDSYS','DBSNMP') and
- 14 -
default_tablespace='SYSTEM' ORDER BY USERNAME;SELECT DECODE(lcUSRTABLE,0,'CUMPLIDA','VIOLADA')INTO valor_politica FROM dual;DBMS_OUTPUT.PUT_LINE(valor_politica);SELECT NVL((SELECT ESTADO FROM POLI_VIOLADAS WHERE ID_POLITICA=9 AND ESTADO='A'),'N')INTO
ESTADO FROM DUAL;dbms_output.put_line(valor_politica);
IF valor_politica='CUMPLIDA' THENUPDATE POLI_VIOLADAS SET FECHA_MODIFICA=SYSDATE, ESTADO='I' WHERE ID_POLITICA=9 AND
ESTADO='A';END IF;IF ESTADO='N' AND valor_politica='VIOLADA' THEN
lccomentario:='Numero de Usuarios que no debe de tener el default_tablespace: '|| lcUSRTABLE;INSERT INTO POLI_VIOLADAS(ID_POLITICA, FECHA, ESTADO,COMENTARIO) Values (9,
SYSDATE,'A',lccomentario);END IF;IF ESTADO='A' AND valor_politica='VIOLADA' THEN
lccomentario:='Numero de Usuarios que no debe de tener el default_tablespace: '|| lcUSRTABLE;UPDATE POLI_VIOLADAS SET COMENTARIO=LCCOMENTARIO,enviado='N' WHERE ID_POLITICA=9 and
estado='A';END IF;
END;
PROCEDURE P$POLITICA_10 ASlcsegmentos varchar (50);valor_politica varchar(50);estado varchar(50);lccomentario varchar (200);beginselect count(*) tablespace_name into lcsegmentos from dba_segments where owner not in
('SYS','SYSTEM','OUTLN','WMSYS','ORDSYS','ORDPLUGINS','MDSYS','DBSNMP') andtablespace_name='SYSTEM';select(decode(lcsegmentos,0,'CUMPLIDA','VIOLADA')) INTO valor_politica from dual;SELECT NVL((SELECT ESTADO FROM POLI_VIOLADAS WHERE ID_POLITICA=10 AND
ESTADO='A'),'N')INTO ESTADO FROM DUAL;dbms_output.put_line(valor_politica);IF valor_politica='CUMPLIDA' THEN
UPDATE POLI_VIOLADAS SET FECHA_MODIFICA=SYSDATE, ESTADO='I' WHERE ID_POLITICA=10 ANDESTADO='A';END IF;IF ESTADO='N' AND valor_politica='VIOLADA' THEN
lccomentario:='Numero de objetos que no pertenecen al SYSTEM:'|| lcsegmentos;INSERT INTO POLI_VIOLADAS(ID_POLITICA, FECHA, ESTADO,COMENTARIO) Values (10,
SYSDATE,'A',lccomentario);END IF;IF ESTADO='A' AND valor_politica='VIOLADA' THEN
lccomentario:='Numero de objetos que no pertenecen al SYSTEM:'|| lcsegmentos;UPDATE POLI_VIOLADAS SET COMENTARIO=LCCOMENTARIO,enviado='N' WHERE ID_POLITICA=10 and
estado='A';END IF;
END;
- 15 -
END;/
Scrip Procedure.sql
--Procedimientos
Create or replace procedure INSERTA_DET_METRICAS(LINDICE IN NUMBER,FECHA IN DATE,VALOR INNUMBER,UMBRAL IN VARCHAR,OPERADOR IN VARCHAR,LIMITANTE IN VARCHAR,COMENTARIO INVARCHAR) isbegin
insert into detalle_metrica(indice_met,fecha,valor,tipo_umbral,operador,limitante,Comentario,secuencia)values (Lindice,fecha,valor,umbral,operador,limitante,Comentario,metrica_seq.nextval);
UPDATE METRICA SET EJECUTA='S' WHERE INDICE=LINDICE;COMMIT;
end INSERTA_DET_METRICAS;/CREATE OR REPLACE Procedure inspeccion_metrica as
-- devuelve 1= solo si da un resultado-- tipodev 1=el resultado es numerico-- TIPO S es un querycursor metrica is select * from metrica where TIPO='S';
lnValor number;lcUmbral char(1) ;lcSql varchar2(4000);
lbentro boolean;lclimitante varchar2(15);liindice number(5);
Beginupdate metrica set ejecuta='N' where indice=liindice;commit;For x in metrica loop
lcSQl:=trim(x.sentencia);liindice:= x.indice;
execute immediate lcSql into lnValor;--lnValor:= lcSQl;lbentro:=false;lcUmbral:='X';
if lbentro=false thenIf trim(x.comparador) = '>' then
If lnValor > x.maximo thenlcUmbral:='C';
lbentro:=true;lclimitante:=x.maximo;
elsif lnValor > x.minimo then
- 16 -
lcUmbral:='A';lbentro:=true;lclimitante:=x.minimo;
end if ;end if;
end if;if lbentro=false thenIf trim(x.comparador) = '>=' then
If lnValor >= x.maximo thenlcUmbral:='C';
lbentro:=true;lclimitante:=x.maximo;
elsif lnValor >= x.minimo thenlcUmbral:='A';
lbentro:=true;lclimitante:=x.minimo;
end if ;end if;
end if;
if lbentro=false thenIf trim(x.comparador) = '<' then
If lnValor < x.maximo thenlcUmbral:='C';
lbentro:=true;lclimitante:=x.maximo;
elsif lnValor < x.minimo thenlcUmbral:='A';
lbentro:=true;lclimitante:=x.minimo;
end if ;end if;
end if;
if lbentro=false thenIf trim(x.comparador) = '<=' then
If lnValor <= x.maximo thenlcUmbral:='C';
lbentro:=true;lclimitante:=x.maximo;
elsif lnValor <= x.minimo thenlcUmbral:='A';
lbentro:=true;lclimitante:=x.minimo;
end if ;end if;
end if;
if lbentro=true theninsert into detalle_metrica(indice_met,fecha,valor,tipo_umbral,operador,limitante,secuencia)values (x.indice,sysdate,lnvalor,lcumbral,x.comparador,lclimitante,metrica_SEQ.Nextval);
- 17 -
commit;end if;
update metrica set ejecuta='S',ult_ejec=sysdate where indice=liindice;commit;
End loop;End;
/
create or replace procedure PRC_ESPERA_SESION isCURSOR TMP ISSELECT NVL(s.username, '(oracle)') AS username,s.sid,s.serial#,sw.event,sw.wait_time,sw.seconds_in_wait,sw.state FROM v$session_wait sw,v$session s
WHERE s.sid = sw.sidORDER BY sw.seconds_in_wait DESC;LIVALOR NUMBER;LIINDICE NUMBER;
begin-- VALIDA EL MAXIMO DE SEGUNDOS DE UNA SESION EN ESPERALIVALOR:=10000;SELECT INDICE INTO LIINDICE FROM METRICA WHERE TRIM(SENTENCIA)='PRC_ESPERA_SESION';
FOR X IN TMP LOOPIF X.SECONDS_IN_WAIT>=LIVALOR THEN
INSERTA_DET_METRICAS(LIINDICE,SYSDATE,X.SECONDS_IN_WAIT,'C','>=',TO_CHAR(LIVALOR),'SESIONESEN ESPERA ' || TRIM(X.EVENT));
COMMIT;END IF;
END LOOP;UPDATE METRICA SET EJECUTA='S',ult_ejec=sysdate WHERE INDICE=LIINDICE;COMMIT;
end PRC_ESPERA_SESION;/create or replace procedure PRC_FREE_TABLESPACE is
CURSOR TMP ISSELECT Total.name,nvl(Free_space, 0) Free_space,nvl(total_space-Free_space, 0) Used_space,total_space,round(((nvl(Free_space, 0)*100)/total_space),2) Porc_libre FROM (select tablespace_name,
sum(bytes/1024/1024) Free_Spacefrom sys.dba_free_space group by tablespace_name) Free, (select b.name, sum(bytes/1024/1024)
TOTAL_SPACE from sys.v_$datafile a,sys.v_$tablespace B where a.ts# = b.ts# group by b.name) Total WHERE Free.Tablespace_name(+) =
Total.name ORDER by Porc_Libre desc;LIINDICE NUMBER;
BeginSELECT INDICE INTO LIINDICE FROM METRICA WHERE TRIM(SENTENCIA)='PRC_FREE_TABLESPACE';
FOR X IN TMP LOOPIF X.PORC_LIBRE>=10 AND X.PORC_LIBRE<30 THEN
INSERTA_DET_METRICAS(LIINDICE,SYSDATE,X.PORC_LIBRE,'A','>=','10% - 30%','ESPACIO LIBREDEL TABLESPACE ' || TRIM(X.NAME));
COMMIT;END IF;
- 18 -
IF X.PORC_LIBRE<10 THENINSERTA_DET_METRICAS(LIINDICE,SYSDATE,X.PORC_LIBRE,'C','>=','<10%','ESPACIO LIBRE DEL
TABLESPACE ' || TRIM(X.NAME));COMMIT;
END IF;END LOOP;UPDATE METRICA SET EJECUTA='S',ult_ejec=sysdate WHERE INDICE=LIINDICE;COMMIT;
end PRC_FREE_TABLESPACE;/create or replace procedure PRC_USO_TABLESPACE is
CURSOR TMP ISSELECT Total.name ,nvl(Free_space, 0) Free_space,nvl(total_space-Free_space, 0) Used_space,total_space,round(((nvl(total_space-Free_space, 0)*100)/total_space),2) Porc_UsadoFROM (select tablespace_name, sum(bytes/1024/1024) Free_Space from sys.dba_free_space group by
tablespace_name) Free,(select b.name, sum(bytes/1024/1024) TOTAL_SPACE from sys.v_$datafile a, sys.v_$tablespace B where
a.ts# = b.ts# group by b.name) TotalWHERE Free.Tablespace_name(+) = Total.name ORDER by Porc_usado desc;LIINDICE NUMBER;
beginSELECT INDICE INTO LIINDICE FROM METRICA WHERE TRIM(SENTENCIA)='PRC_USO_TABLESPACE';
FOR X IN TMP LOOPIF X.PORC_USADO>=80 AND X.PORC_USADO<90 THEN
INSERTA_DET_METRICAS(LIINDICE,SYSDATE,X.PORC_USADO,'A','>=','80% - 90%','ESPACIOUSADO DEL TABLESPACE ' || TRIM(X.NAME));
COMMIT;END IF;
IF X.PORC_USADO>=90 THENINSERTA_DET_METRICAS(LIINDICE,SYSDATE,X.PORC_USADO,'C','>=','90%','ESPACIO USADO DEL
TABLESPACE ' || TRIM(X.NAME));COMMIT;
END IF;END LOOP;
UPDATE METRICA SET EJECUTA='S',ult_ejec=sysdate WHERE INDICE=LIINDICE;COMMIT;
end PRC_USO_TABLESPACE;/DECLARE
X NUMBER;BEGIN
SYS.DBMS_JOB.SUBMIT( job => X,what => 'Q$POLITICAS.P$EJECUTA;',next_date => to_date('08/07/2008 21:43:27','dd/mm/yyyy hh24:mi:ss'),interval => 'SYSDATE+5/1440 ',no_parse => FALSE);
END;/
- 19 -
DECLAREX NUMBER;
BEGINSYS.DBMS_JOB.SUBMIT( job => X,what => 'prc_uso_tablespace;',next_date => to_date('08/07/2008 21:43:27','dd/mm/yyyy hh24:mi:ss'),interval => 'SYSDATE+5/1440 ',no_parse => FALSE);
END;/DECLARE
X NUMBER;BEGIN
SYS.DBMS_JOB.SUBMIT( job => X,what => 'prc_uso_tablespace;',next_date => to_date('08/07/2008 21:43:27','dd/mm/yyyy hh24:mi:ss'),interval => 'SYSDATE+5/1440 ',no_parse => FALSE);
END;/
DECLAREX NUMBER;
BEGINSYS.DBMS_JOB.SUBMIT( job => X,what => 'prc_free_tablespace;',next_date => to_date('08/07/2008 21:43:27','dd/mm/yyyy hh24:mi:ss'),interval => 'SYSDATE+5/1440 ',no_parse => FALSE);
END;/
DECLAREX NUMBER;
BEGINSYS.DBMS_JOB.SUBMIT( job => X,what => 'prc_espera_sesion;',next_date => to_date('08/07/2008 21:43:27','dd/mm/yyyy hh24:mi:ss'),interval => 'SYSDATE+5/1440 ',no_parse => FALSE);
END;/
DECLAREX NUMBER;
- 20 -
BEGINSYS.DBMS_JOB.SUBMIT( job => X,what => 'inspeccion_metrica;',next_date => to_date('08/07/2008 21:43:27','dd/mm/yyyy hh24:mi:ss'),interval => 'SYSDATE+5/1440 ',no_parse => FALSE);
END;/CREATE OR REPLACE TRIGGER TRG_POLI_VIOLADASBEFORE INSERT
ON GUISELA.POLI_VIOLADASREFERENCING NEW AS New OLD AS OldFOR EACH ROWDECLAREtmpVar NUMBER;BEGINSELECT SEC_POLI_VIOLADA.NEXTVAL INTO tmpVar FROM dual;:NEW.NUM:=tmpVar;END TRG_POLI_VIOLADAS;/disconnect;
Scrip que crea el archive DBMSFOX.ini
WAIT WINDOW "Guardando la Información..... espere por favor" NOWAITlcarc = GETENV("SystemRoot") + '\system32\DbmsFox.ini'IF FILE("&lcarc")
DELETE FILE ("&lcarc")ENDIFarch = fcreate("&lcarc")IF arch > 0
FPUTS(arch,'*********************************************************')FFLUSH(arch)FPUTS(arch,'* *')FFLUSH(arch)FPUTS(arch,'* Archivo de Configuración del Sitema Dbms-Fox *')FFLUSH(arch)FPUTS(arch,'* *')FFLUSH(arch)FPUTS(arch,'*********************************************************')FFLUSH(arch)FPUTS(arch,'')FFLUSH(arch)FPUTS(arch,'')FFLUSH(arch)FPUTS(arch,'--------------------------------------------------------------')FFLUSH(arch)FPUTS(arch,'* No modificar el archivo de Inicio del Sistema,')
- 21 -
FFLUSH(arch)FPUTS(arch,'* debido a que puede causar error en el Funcionamiento')FFLUSH(arch)FPUTS(arch,'--------------------------------------------------------------')FFLUSH(arch)FPUTS(arch,'')FFLUSH(arch)FPUTS(arch,'')FFLUSH(arch)FPUTS(arch,'* Conexión a Oracle Server *')FFLUSH(arch)FPUTS(arch,'[Conexion]')FFLUSH(arch)FPUTS(arch,'Driver=' + ALLTRIM(thisform.tdriver.Value))FFLUSH(arch)FFLUSH(arch)FPUTS(arch,'')FFLUSH(arch)FPUTS(arch,'** Tipo de Ambiente')FFLUSH(arch)FPUTS(arch,'[Ambiente]')FFLUSH(arch)FPUTS(arch,'Sesion = E')FFLUSH(arch)FPUTS(arch,'')FFLUSH(arch)FPUTS(arch,'[Rutas]'FFLUSH(arch)FPUTS(arch,'Fte=\DBMS-FOX\FTE\')
FFLUSH(arch,’Exe=\DBMS-FOX\EXE\’FFLUSH(arch)FPUTS(arch,'Txt=\DBMS-FOX\TXT\')FFLUSH(arch)FPUTS(arch,'Dbf=\DBMS-FOX\DBF\')FFLUSH(arch)FPUTS(arch,'')FFLUSH(arch)FPUTS(arch,'** Servidor de Conexión')FFLUSH(arch)FPUTS(arch,'[Servidor]')FFLUSH(arch)FPUTS(arch,'Server=' + ALLTRIM(thisform.tipserv.Value))FFLUSH(arch)FPUTS(arch,'')FFLUSH(arch)FPUTS(arch,'[UsuarioBd]')FFLUSH(arch)FPUTS(arch,'nombre=DBMSFOX')FFLUSH(arch)FPUTS(arch,'')
- 22 -
FFLUSH(arch)
thisform.cmdregistro.Enabled = .F.MESSAGEBOX("Creacion correcta...",64,"Sistema DBMS - FOX")thisform.Release
ELSEMESSAGEBOX("Error al Crear el archivo...",16,"Sistema DBMS - FOX")
ENDIFFCLOSE(arch)
WAIT CLEAR
1.2 Programa Principal
************************************************ Programa de Inicio al Sistema DBMS-FOX ************************************************** Definición de Variables de Ambiente
SET DELETED ONSET CENTURY ONSET DATE DMYSET TALK OFFSET ESCAPE OFFSET SYSMENU TOSET EXCLUSIVE OFFSET NOTIFY OFFSET CONFIRM ONSET CONSOLE OFFSET MULTILOCKS ONSET SAFETY OFFSET CLOCK STATUSSET EXACT ON
** Desactivas VentanasDEACTIVATE WINDOW "Estándar"DEACTIVATE WINDOW "Standard"DEACTIVATE WINDOW "Controles de formularios"DEACTIVATE WINDOW "Diseñador de formularios"
** Dar forma a la Pantalla PrincipalSET SYSMENU TO_screen.AutoCenter = .T._screen.WindowState = 2_screen.Visible = .T._screen.MDIForm = .T._screen.Closable = .F._screen.Caption = " DBMS - FOX Sistema de Administración de Infraestructura Tecnológica "_screen.Icon = '\DBMS-FOX\Ico\DBMS-FOX.ico'
** Añado las Librerias al Screen de FoxproSet Classlib TO '\DBMS-FOX\Clases\Estandar' ADDITIVEIF type('_screen.estandar')!='O'
- 23 -
_screen.AddObject("estandar","estandar")ENDIFIF _screen.estandar.Bexistefile
DO FORM \dbms-fox\frmLoginIF _screen.estandar.ctipoSesion = 'E'
READ EVENTSENDIF
ELSEDO FORM \Dbms-Fox\registramaquinaCLOSE ALLQUIT
ENDIFON SHUTDOWN do \DBMS-FOX\salir_sistema
1.3 Programa Envia mail
set confirm onset console offset century onset date to dmyset multilocks onset safety offset clock statusSET EXACT ON
SELECT 0CREATE CURSOR tmpmail(;tipo c(25),;numero n(10),;secuencia n(10),;nombre c(80),;comentario c(254),;fecha c(25))ln = SQLSETPROP(0,"DispLogin",3)liconex = SQLSTRINGCONNECT(_screen.esTANDAR.cstringconnect)IF liconex > 0
lcsql = "select a.num,a.nombre_politica,a.descripcion,to_char(b.fecha,'dd/mm/yyyy hh:mi:ss')fecha,b.comentario "
lcsql = lcsql + " From " + _screen.esTANDAR.cusubd + ".politicas a, " + _screen.esTANDAR.cusubd +".poli_violadas b "
lcsql = lcsql + " Where a.num=b.id_politica and b.enviado<>'S' and b.estado='A' "liresult = SQLEXEC(liconex,lcsql,"tmppoli")IF liresult > 0
SELECT tmppoliSCAN
SELECT tmpmailAPPEND BLANKreplace tmpmail.tipo WITH 'Políticas',;
tmpmail.numero WITH tmppoli.num,;tmpmail.secuencia WITH 0,;
- 24 -
tmpmail.nombre WITHALLTRIM(tmppoli.nombre_politica),;
tmpmail.comentario WITH ALLTRIM(tmppoli.comentario),;tmpmail.fecha WITH tmppoli.fecha
ENDSCANENDIF
lcsql = "Select x.indice,x.metrica,NVL(y.comentario,'') comentario,to_char(y.fecha,'dd/mm/yyyy hh:mi:ss')fecha,y.secuencia "
lcsql = lcsql + " from " + _screen.esTANDAR.cusubd + ".metrica x," + _screen.esTANDAR.cusubd +".detalle_metrica y "
lcsql = lcsql + " where x.indice=y.indice_met and NVL(y.notificado,'N')<>'S' order by y.fecha "liresult = SQLEXEC(liconex,lcsql,"tmpmet")IF liresult > 0
SELECT tmpmetSCAN
SELECT tmpmailAPPEND BLANKreplace tmpmail.tipo WITH 'Métricas',;
tmpmail.numero WITH tmpmet.indice,;tmpmail.secuencia WITH tmpmet.secuencia,;tmpmail.nombre WITH ALLTRIM(tmpmet.metrica),;tmpmail.comentario WITH
IIF(ISNULL(ALLTRIM(tmpmet.comentario)),'',ALLTRIM(tmpmet.comentario)),;tmpmail.fecha WITH tmpmet.fecha
ENDSCANENDIF
lcdetalle = ''licnt = 0SELECT tmpmaillinum = RECCOUNT()IF linum > 0
SELECT tmpmailSCAN FOR ALLTRIM(tmpmail.tipo)=='Políticas'
IF licnt = 0lcdetalle = 'Alerta de Políticas ' + CHR(13) + CHR(13)
ENDIFlcdetalle = lcdetalle + ALLTRIM(tmpmail.fecha) + ' - ' + ALLTRIM(tmpmail.nombre) + '
- ' + ALLTRIM(tmpmail.comentario) + CHR(13)licnt = licnt + 1
ENDSCAN
IF LEN(lcdetalle)>0lcdetalle = lcdetalle + CHR(13)lcdetalle = lcdetalle + CHR(13)
ENDIF
licnt = 0SELECT tmpmailSCAN FOR ALLTRIM(tmpmail.tipo)=='Métricas'
IF licnt = 0
- 25 -
lcDetalle = lcDetalle + CHR(13) + "Alerta de Métricas " + CHR(13) +CHR(13)
ENDIFlcdetalle = lcdetalle + ALLTRIM(tmpmail.fecha) + ' - ' + ALLTRIM(tmpmail.nombre) + '
- ' + ALLTRIM(tmpmail.comentario) + CHR(13)licnt = licnt + 1
ENDSCAN
IF LEN(lcdetalle)>0lcdetalle = lcdetalle + CHR(13)
ENDIF**Envia maillcsql = "Select * from " + _screen.esTANDAR.cusubd + ".parametros where tipo='E' and
dirsaliente is not null and envia='S' "liresult = SQLEXEC(liconex,lcsql,"tpar")IF liresult > 0
SELECT tparlinum = RECCOUNT()IF linum > 0
TRYsmtp = ALLTRIM(tpar.smtp)puerto = INT(tpar.puerto)lcfrom = ALLTRIM(tpar.dirremitente)clave = _screen.esTANDAR.desencriptador(ALLTRIM(tpar.password))LOCAL lcSchema, loConfig, loMsg, loError, lcErrlcErr = ""lcSchema = "http://schemas.microsoft.com/cdo/configuration/"loConfig = CREATEOBJECT("CDO.Configuration")WITH loConfig.FIELDS
.ITEM(lcSchema + "smtpserver") = "&smtp"
.ITEM(lcSchema + "smtpserverport") = puerto
.ITEM(lcSchema + "sendusing") = 2
.ITEM(lcSchema + "smtpauthenticate") = .T.
.ITEM(lcSchema + "smtpusessl") = .T.
.ITEM(lcSchema + "sendusername") = "&lcfrom"
.ITEM(lcSchema + "sendpassword") = "&clave"
.UPDATEENDWITHlcmail = ALLTRIM(tpar.dirsaliente)lcmail = SUBSTR(lcmail,1,LEN(ALLTRIM(lcmail))-1)loMsg = CREATEOBJECT ("CDO.Message")WITH loMsg
.Configuration = loConfig
.FROM = "&lcfrom"
.TO = "&lcmail"
.Subject = " Alertas de la Base " + _screen.esTANDAR.cdatabase
.TextBody = lcdetalle
.Send()ENDWITH
CATCH TO loError
lcErr = [Error: ] + STR(loError.ERRORNO) + CHR(13) + ;[Linea: ] + STR(loError.LINENO) + CHR(13) + ;
- 26 -
[Mensaje: ] + loError.MESSAGEFINALLY
SELECT tmpmailSCAN
IF ALLTRIM(tmpmail.tipo)=='Métricas'lcsql = "Update " +
_screen.esTANDAR.cusubd + ".detalle_metrica "lcsql = lcsql + " set notificado='S',
fec_notifica=sysdate "lcsql = lcsql + " where
indice_met=?tmpmail.numero and secuencia=?tmpmail.secuencia "ELSE
lcsql = "Update " +_screen.esTANDAR.cusubd + ".poli_violadas "
lcsql = lcsql + " setenviado='S',fec_envio=sysdate "
lcsql = lcsql + " Whereid_politica=?tmpmail.numero "
ENDIFliresult = SQLEXEC(liconex,lcsql)IF liresult < 0
men = MESSAGE()MESSAGEBOX(men)
ENDIFENDSCAN
ENDTRYENDIF
**Envia SMSlcsql = "Select * from " + _screen.esTANDAR.cusubd + ".parametros where tipo='C' and
dirsaliente is not null and envia='S' "liresult = SQLEXEC(liconex,lcsql,"tpar")IF liresult > 0
SELECT tparlinum = RECCOUNT()IF linum > 0
TRYsmtp = ALLTRIM(tpar.smtp)puerto = INT(tpar.puerto)lcfrom = ALLTRIM(tpar.dirremitente)clave = _screen.esTANDAR.desencriptador(ALLTRIM(tpar.password))lccel = ''lcmail = ''
FOR i=0 TO LEN(tpar.dirsaliente)IF SUBSTR(tpar.dirsaliente,i,1) = ";"DO CASE
CASE ALLTRIM(SUBSTR(lccel,1,1))=='P'IF LEN(SUBSTR(lccel,2,len(lccel))) > 0
IF SUBSTR(lccel,2,3)='090'lcdato = ALLTRIM(SUBSTR(lccel,3,LEN(lccel)))lccel = lcdato + IIF(LEN(ALLTRIM(lcdato))>0,'@portafree.com;','')
ELSE
- 27 -
lcdato = ALLTRIM(SUBSTR(lccel,4,LEN(lccel)))lccel = lcdato + IIF(LEN(ALLTRIM(lcdato))>0,'@portafree.com;','')
ENDIfENDIF
CASE ALLTRIM(SUBSTR(lccel,1,1))=='M'IF LEN(SUBSTR(lccel,2,len(lccel))) > 0lcdato = ALLTRIM(SUBSTR(lccel,3,LEN(lccel)))lccel = lcdato + IIF(LEN(ALLTRIM(lcdato))>0,'@im.movistar.com.ec;','')ENDIF
ENDCASElcmail = lcmail + IIF(LEN(ALLTRIM(lccel))>1,lccel,'')lccel = ''
ELSElccel = lccel + SUBSTR(tpar.dirsaliente,i,1)
ENDIFENDFOR
LOCAL lcSchema, loConfig, loMsg, loError, lcErrlcErr = ""lcSchema = "http://schemas.microsoft.com/cdo/configuration/"loConfig = CREATEOBJECT("CDO.Configuration")WITH loConfig.FIELDS
.ITEM(lcSchema + "smtpserver") = "&smtp"
.ITEM(lcSchema + "smtpserverport") = puerto
.ITEM(lcSchema + "sendusing") = 2
.ITEM(lcSchema + "smtpauthenticate") = .T.
.ITEM(lcSchema + "smtpusessl") = .T.
.ITEM(lcSchema + "sendusername") = "&lcfrom"
.ITEM(lcSchema + "sendpassword") = "&clave"
.UPDATEENDWITHlcmail = SUBSTR(lcmail,1,LEN(ALLTRIM(lcmail))-1)loMsg = CREATEOBJECT ("CDO.Message")WITH loMsg
.Configuration = loConfig.FROM = "&lcfrom".TO = "&lcmail".Subject = " Alertas de la Base " + _screen.esTANDAR.cdatabase.TextBody = "Revise el mail se generaron nuevas alertas".Send()
ENDWITH
CATCH TO loErrorlcErr = [Error: ] + STR(loError.ERRORNO) + CHR(13) + ;
[Linea: ] + STR(loError.LINENO) + CHR(13) + ;[Mensaje: ] + loError.MESSAGE
FINALLYRELEASE loConfig, loMsgSTORE .NULL. TO loConfig, loMsg
ENDTRYENDIF
- 28 -
ENDIFENDIF
ENDIF
TRYSQLDISCONNECT(liconex)
CATCH TO lerror**Pasa de largo
ENDTRY
1.4 Método de Conexión a la Base de Datos - Clase Estandar
LPARAMETERS cServidor,cUsuario,cClave,cSid,cPrivilegio*** Busco Driver Oracle
ln = SQLSETPROP(0,"DispLogin",3)this.cdriveroracle = this.busca_datos("Conexion","Driver")this.cstringconnect = "Driver=" + this.cdriveroracle + ";server=" + cServidor + ";DBQ=" + cSid + ";uid=" +
cUsuario + ";pwd=" + cClave + ";DBA privilege=" + cPrivilegiolinum = SQLSTRINGCONNECT(this.cstringconnect)IF linum < 0
men = MESSAGE()_screen.estandar.iconectada = 0DO CASE
CASE LIKE('*ORA-01034*',men) OR LIKE('*ORA-12514*',men)MESSAGEBOX("No se encuentra conectado a
Oracle",16,_screen.estandar.cmensistema)vb = MESSAGEBOX("Desea Subir la Base de
Datos",32+4,_screen.estandar.cmensistema)IF vb = 6
lcarch = SYS(5) + '\' + _screen.esTANDAR.crutatxt + 'sube.bat'IF FILE("&lcarch")
DELETE FILE ("&lcarch")ENDIF
cnprivilegio = ''IF ALLTRIM(cprivilegio)=='Normal'
cnprivilegio = ' 'ELSE
cnprivilegio = ' as ' + cprivilegioENDIF
arch = fcreate("&lcarch")FPUTS(arch,"@echo off")FPUTS(arch,"set oracle_sid="+ csid)FPUTS(arch,"echo set echo on > %0.tmp")FPUTS(arch,"echo connect " + cusuario + '/' + cclave +
cnprivilegio + "; >> %0.tmp")FPUTS(arch,"echo startup; >> %0.tmp")FPUTS(arch,"echo exit; >> %0.tmp")FPUTS(arch,"sqlplus /nolog @%0.tmp")FPUTS(arch,"del %0.tmp")fclose(arch)
- 29 -
WAIT WINDOW "Levantando el Servicio de la Base de Datos....espere por favor" NOWAIT
RUN "&lcarch"WAIT CLEAR
_screen.esTANDAR.iconectada = 1ELSE
QUITENDIF
CASE LIKE('*ORA-12541*',men)MESSAGEBOX("No se encuentra levantado el listener - " +
MESSAGE(),16,_screen.estandar.cmensistema)vb = MESSAGEBOX("Desea levantar el Servicio del
Listener",32+4,_screen.estandar.cmensistema)IF vb = 6
WAIT WINDOW "Subiendo el Servicio del Listener... espere por
favor" NOWAIT
RUN lsnrctl start
WAIT WINDOW "Esperando Respuestas delServicio.... espere por favor" TIMEOUT 60
WAIT CLEARWAIT CLEAR
ELSEQUIT
ENDIF_screen.esTANDAR.iconectada = 1
OTHERWISEMESSAGEBOX(men,16,this.cmensistema)
ENDCASE
RETURN .f.ENDIF
lcsql = "Select * from " + _screen.esTANDAR.cusubd + ".menu order by codigo"liresult = SQLEXEC(linum,lcsql,"tmp")IF liresult < 0
men = MESSAGE()IF !LIKE('*ORA-00942*',men)
MESSAGEBOX(men,16,_screen.estandar.cmensistema)RETURN .f.
ENDIFENDIF
_screen.estandar.iconectada = 1this.cdatabase = cSid
RETURN .t.
- 30 -
1.5 Metodo path_archivo - Clase Estandar
LPARAMETERS cArchivoLOCAL loFiler AS 'Filer.FileUtil'**Datos de BUsqueda*-- Creo el objetoloFiler = CREATEOBJECT('Filer.FileUtil')*-- Indico el archivo o mascara (Ej: *.dbf)loFiler.FileExpression = cArchivo*-- Indico que busque en subcarpetasloFiler.SubFolder = 1
**Datos de los Discos LocalesobjWMI = Getobject("winmgmts:\\")cCadWMI = "Select * from Win32_LogicalDisk"oSistema = objWMI.ExecQuery(cCadWMI)lcruta = ''For Each Disco In oSistema
IF! ISNULL(Disco.size)*-- Indico la rutaloFiler.SearchPath = Disco.name + '\Oracle\'*-- Busco...loFiler.Find(0)IF loFiler.Files.Count > 0
FOR lnCant = 1 TO loFiler.Files.CountWITH loFiler.Files.Item(lnCant)
lcruta = lcruta + ALLTRIM(.Path) + ALLTRIM(.name) + ';'ENDWITH
ENDFORENDIF
ENDIFNEXTloFiler = NULLDisco = null
RETURN lcruta
1.5 Método Init - Clase Estándar
PUBLIC patron_busqueda,Patron_encripta&& Variables de Encriptaciónpatron_busqueda ="aRñGJry8Tiw0FQqv9ÑbKgk4PlBD1xZMsm5ehW3cUYfEj7NISntuz2pLAd6XOVoCH./\{}$%&=?¿"Patron_encripta = "n¿y8Tit&g3SkehUd6XOVo{aRqv9Ñ}$ñGJr\fEK%4?CHjFQ=bcY/PlBDz2pLA1xZMs7NI.w0mu5W"
this.cmensistema = " Sistema DBMS - FOX "*** Busco Si existe archivo de Inicio
this.crutafile = GETENV("SystemRoot") + "\system32\DbmsFox.ini"
- 31 -
IF .not. FILE(this.crutafile)MESSAGEBOX("No se encuentra el archivo de Configuración, por favor revise", 16, this.cmensistema )this.bexistefile = .f.ELSEthis.bexistefile = .T.ENDIFthis.ctiposesion = this.busca_datos("Ambiente","Sesion")this.crutaexe = this.busca_datos("Rutas","Exe")this.crutafte = this.busca_datos("Rutas","Fte")THIS.CRUtatxt = this.busca_datos("Rutas","Txt")this.crutadbf = this.busca_datos("Rutas","DBF")this.cusubd = this.busca_datos("UsuarioBd","nombre")
- 32 -
1.6 Modulo de Seguridades
1.6.1 Usuarios – método muestra Datos
lcsql = "Select username,account_status,NVL(to_char(expiry_date,'dd- mon -yyyy'),' ')expiry_date,NVL(default_tablespace,' ') default_tablespace, "lcsql = lcsql + " NVL(temporary_tablespace,' ') temporary_tablespace, profile, NVL(to_char(created,'dd- mon -yyyy'),'') created from DBA_users order by username"liresult = thisform.sqlexec(lcsql,"tmpCreaUsers")IF liresult < 0
men = "Error al actualizar los Usuarios - " + MESSAGE()thisform.log_error(lcsql)MESSAGEBOX(men,16,_screen.esTANDAR.cmensistema)thisform.Release
ENDIF
SELECT TmpUsersDELETE ALL
SELECT tmpCreaUsersSCAN
SELECT TmpUsersAPPEND BLANKreplace TmpUsers.username WITH TmpCreaUsers.username,;
TmpUsers.account_status WITHTmpCreaUsers.account_status,;
TmpUsers.expiry_date WITH TmpCreaUsers.expiry_date,;TmpUsers.default_tablespace WITH TmpCreaUsers.default_tablespace,;TmpUsers.temporary_tablespace WITH
TmpCreaUsers.temporary_tablespace,;TmpUsers.profile WITH TmpCreaUsers.profile,;TmpUsers.created WITH TmpCreaUsers.created
ENDSCAN
SELECT TmpUsersCOUNT TO linumthisform.lblcuenta.Caption = ALLTRIM(STR(linum,10)) + " Usuarios"
SELECT TmpUsersGO TOPthisform.grid1.Refresh
Frmbase1 – método init
- 33 -
LPARAMETERS lcuserlcusuario = lcuser
IF LEN(ALLTRIM(lcuser)) > 0thisform.Caption = "Editar Usuario: &lcusuario"thisform.lblglosa.Caption = lcusuariothisform.pguser.pggeneral.tnom.Value = ALLTRIM(lcuser)thisform.pguser.pggeneral.tnom.Enabled = .F.
ELSEthisform.Caption = "Crear Usuario: &lcusuario"thisform.lblglosa.Caption = lcusuariothisform.pguser.pggeneral.tnom.Value = ALLTRIM(lcuser)thisform.pguser.pggeneral.tnom.Enabled = .T.
ENDIF
lcsql = "select * from dba_users where RTRIM(username)=RTRIM(?lcusuario)"liresult = thisform.sqlexec(lcsql,"tmpresul")IF liresult < 0
men = MESSAGE()thisform.log_error(lcsql)MESSAGEBOX(men,16,_screen.esTANDAR.cmensistema)RETURN
ENDIF
SELECT tmpresulGO TOPDO CASE
CASE ALLTRIM(tmpresul.password)=="GLOBAL"thisform.pguser.pggeneral.cautentica.ListIndex = 3
CASE ALLTRIM(tmpresul.password)=="EXTERNAL"thisform.pguser.pggeneral.cautentica.ListIndex = 2
OTHERWISEthisform.pguser.pggeneral.cautentica.ListIndex = 1thisform.pguser.pggeneral.tintrocontra.Value = ALLTRIM(tmpresul.password)thisform.pguser.pggeneral.ticonfcontra.Value = ALLTRIM(tmpresul.password)IF LIKE('*EXPIRED*',ALLTRIM(tmpresul.account_status))
thisform.pguser.pggeneral.chkvence.Value = 1thisform.pguser.pggeneral.chkvence.Caption = "Vencido"thisform.pguser.pggeneral.chkvence.Enabled = .f.
ELSEthisform.pguser.pggeneral.chkvence.Value = 0thisform.pguser.pggeneral.chkvence.Caption = "Forzar Vencimiento de
Contraseña Ahora"thisform.pguser.pggeneral.chkvence.Enabled = .T.
ENDIFENDCASElcdato = thisform.pguser.pggeneral.cautentica.ValueDO CASE
CASE ALLTRIM(lcdato) = "Externo"thisform.pguser.pggeneral.lblcon1.Visible = .F.thisform.pguser.pggeneral.lblcon2.Visible = .F.thisform.pguser.pggeneral.ticonfcontra.Visible = .F.thisform.pguser.pggeneral.tintrocontra.Visible = .F.
- 34 -
thisform.pguser.pggeneral.chkvence.Visible = .F.thisform.pguser.pggeneral.lblexterno.Visible = .T.thisform.pguser.pggeneral.lblglobal.Visible = .F.
CASE ALLTRIM(lcdato) = "Global"thisform.pguser.pggeneral.lblcon1.Visible = .F.thisform.pguser.pggeneral.lblcon2.Visible = .F.thisform.pguser.pggeneral.ticonfcontra.Visible = .F.thisform.pguser.pggeneral.tintrocontra.Visible = .F.thisform.pguser.pggeneral.chkvence.Visible = .F.thisform.pguser.pggeneral.lblexterno.Visible = .F.thisform.pguser.pggeneral.lblglobal.Visible = .T.
OTHERWISEthisform.pguser.pggeneral.lblcon1.Visible = .t.thisform.pguser.pggeneral.lblcon2.Visible = .t.thisform.pguser.pggeneral.ticonfcontra.Visible = .t.thisform.pguser.pggeneral.tintrocontra.Visible = .t.thisform.pguser.pggeneral.chkvence.Visible = .t.thisform.pguser.pggeneral.lblexterno.Visible = .f.thisform.pguser.pggeneral.lblglobal.Visible = .f.
ENDCASE
SELECT tmpresulGO TOPFOR i=1 TO thisform.pguser.Pggeneral.cperfil.ListCount
IF ALLTRIM(thisform.pguser.Pggeneral.cperfil.List(i,1))==ALLTRIM(tmpresul.profile)thisform.pguser.Pggeneral.cperfil.ListIndex = iEXIT
ENDIFENDFOR
IF thisform.pguser.pggeneral.tnom.Enabled = .F.SELECT tmpresulGO TOPFOR i=1 TO thisform.pguser.Pggeneral.cdefecto.ListCount
IFALLTRIM(thisform.pguser.Pggeneral.cdefecto.List(i,1))==ALLTRIM(tmpresul.default_tablespace)
thisform.pguser.Pggeneral.cdefecto.ListIndex = iEXIT
ENDIFENDFOR
IF ALLTRIM(tmpresul.account_status)=='OPEN'thisform.pguser.pggeneral.optestado.optdesbloq.Value = 1thisform.pguser.pggeneral.optestado.optbloq.Value = 0
ELSEthisform.pguser.pggeneral.optestado.optdesbloq.Value = 0thisform.pguser.pggeneral.optestado.optbloq.Value = 1
ENDIFELSE
SELECT tmpresulGO TOP
- 35 -
FOR i=1 TO thisform.pguser.Pggeneral.cdefecto.ListCountIF ALLTRIM(thisform.pguser.Pggeneral.cdefecto.List(i,1))=="USERS"
thisform.pguser.Pggeneral.cdefecto.ListIndex = iEXIT
ENDIFENDFOR
thisform.pguser.pggeneral.optestado.optdesbloq.Value = 1thisform.pguser.pggeneral.optestado.optbloq.Value = 0
ENDIF
SELECT tmpresulGO TOPFOR i=1 TO thisform.pguser.Pggeneral.ctemporal.ListCount
IFALLTRIM(thisform.pguser.Pggeneral.ctemporal.List(i,1))==ALLTRIM(tmpresul.temporary_tablespace)
thisform.pguser.Pggeneral.ctemporal.ListIndex = iEXIT
ENDIFENDFOR
**Mostrar los Roles asignadoslcsql = "select granted_role,case admin_option when 'NO' then 0 else 1 end admin_option,case
default_role when 'NO' then 0 else 1 end default_role "lcsql = lcsql + "from dba_role_privs where rtrim(grantee)=RTRIM(?lcusuario) order by granted_role "liresult = thisform.sqlexec(lcsql,"tmprolasig")IF liresult < 0
men = "Error al buscar los Roles Asignados - " + MESSAGE()thisform.log_error(lcsql)MESSAGEBOX(men,16,_screen.esTANDAR.cmensistema)RETURN
ENDIF
SELECT TmpRolAsigINDEX on ALLTRIM(TmpRolAsig.granted_role) TAG rol
IF USED("Tmprolasig")with thisform.pguser.pgrol.grid1
.Recordsource = ""
.Column1.Controlsource = ""
.Column2.Controlsource = ""
.Column3.Controlsource = ""SELECT TmpRolAsigGO TOP.Recordsource = "TmpRolAsig".Column1.Controlsource = "TmpRolAsig.granted_role".Column2.Controlsource = "TmpRolAsig.admin_option".Column3.Controlsource = "TmpRolAsig.default_role"
.refreshENDWITH
ENDIF
- 36 -
SELECT TmpRolAsigSEEK "RESOURCE"IF FOUND()
thisform.inactiva()ENDIF
IF thisform.pguser.pggeneral.tnom.Enabled = .T.SELECT TmpRolAsigAPPEND BLANKreplace TmpRolAsig.granted_role WITH "CONNECT",;
TmpRolAsig.admin_option WITH 0,;TmpRolAsig.default_role WITH 1
ELSESELECT TmpRolAsigSCAN
SELECT TmpRolPriObjAPPEND BLANKreplace TmpRolPriObj.categoria WITH 'ROL',;
TmpRolPriObj.tipo WITHALLTRIM(TmpRolAsig.granted_role),;
TmpRolPriObj.admin WITHTmpRolAsig.admin_option,;
TmpRolPriObj.defecto WITH TmpRolAsig.default_roleENDSCAN
ENDIF
SELECT TmpRolAsigGO TOPthisform.pguser.pgrol.grid1.Refresh
**Mostrar los Privilegios del Sistema Asignadoslcsql = "select privilege,case admin_option when 'NO' then 0 else 1 end admin_option from dba_sys_privs
where RTRIM(grantee)=RTRIM(?lcusuario) order by privilege"liresult = thisform.sqlexec(lcsql,"TmpPrivSis")IF liresult < 0
men = "Error al buscar los Privilegios del Sistema Asignados - " + MESSAGE()thisform.log_error(lcsql)MESSAGEBOX(men,16,_screen.esTANDAR.cmensistema)RETURN
ENDIF
SELECT TmpPrivSisINDEX on ALLTRIM(TmpPrivSis.privilege) TAG rol
IF USED("TmpPrivSis")with thisform.pguser.pgsis.grid1
.Recordsource = ""
.Column1.Controlsource = ""
.Column2.Controlsource = ""SELECT TmpPrivSisGO TOP.Recordsource = "TmpPrivSis".Column1.Controlsource = "TmpPrivSis.privilege"
- 37 -
.Column2.Controlsource = "TmpPrivSis.admin_option".refresh
ENDWITHENDIF
SELECT TmpPrivSisGO TOPSCAN
SELECT TmpRolPriObjAPPEND BLANKreplace TmpRolPriObj.categoria WITH 'SIS',;
TmpRolPriObj.tipo WITH ALLTRIM(TmpPrivSis.privilege),;TmpRolPriObj.admin WITH TmpPrivSis.admin_option
ENDSCAN
SELECT TmpPrivSisGO TOPthisform.pguser.pgsis.grid1.Refresh
**Llenar Privilegios de Objetos** 1. Llenar el treeview de Objetosthisform.llena_trwobjeto()
** 2. Llenar privilegios de objetosthisform.llena_privobj(lcusuario)
** Llenar las cuotasthisform.llena_cuotas(lcusuario)
** Llenar los Grupos de Consumidoresthisform.llena_grupos(lcusuario)
IF thisform.pguser.pggeneral.tnom.Enabled = .T.thisform.cambiostotales()
ENDIF
thisform.pguser.pggeneral.tnom.SetFocus()
Llena_trwObetos
lcsql = "select distinct owner from dba_objects order by owner "liresult = thisform.sqlexec(lcsql,"tmpEsquema")IF liresult< 0
men = "Error al buscar los datos de los esquemas - " + MESSAGE()thisform.log_error(lcsql)MESSAGEBOX(men,16,_screen.esTANDAR.cmensistema)RETURN
ENDIF
- 38 -
DIMENSION m_tipo(13)m_tipo(1) = "Tipos"m_tipo(2) = "Secuencias"m_tipo(3) = "Instantáneas"m_tipo(4) = "Sinónimos"m_tipo(5) = "Tablas"m_tipo(6) = "Vistas"m_tipo(7) = "Funciones"m_tipo(8) = "Paquetes"m_tipo(9) = "Cuerpo de Paquete"m_tipo(10) = "Procedimientos"m_tipo(11) = "Colas"m_tipo(12) = "Clases java"m_tipo(13) = "Origenes Java"
likey = 0SELECT tmpEsquemaSCAN
likey = likey + 1linivelkey1 = ALLTRIM(STR(likey)) + '_'thisform.pguser.pgobjeto.trwObjeto.Nodes.Add(,1, ALLTRIM(STR(likey))+'_',
ALLTRIM(TmpEsquema.owner),1,1)
FOR i=1 TO 13likey = likey + 1linivelkey2 = ALLTRIM(STR(likey)) + '_'thisform.pguser.pgobjeto.trwObjeto.Nodes.Add(linivelkey1, 4,
ALLTRIM(STR(likey))+'_', m_tipo(i),2,2)NEXT
ENDSCAN
Llena_privobj
LPARAMETERS cdatolcuser = cdatolcsql = "Select privilege,owner,table_name, case grantable when 'NO' then 0 else 1 end grantable "lcsql = lcsql + " from dba_tab_privs where RTRIM(grantee)=RTRIM(?lcuser) "liresult = thisform.sqlexec(lcsql,"TmpPrivObj")IF liresult < 0
men = "Error al buscar los Privilegios de Objetos Otorgados - " + MESSAGE()thisform.log_error(lcsql)MESSAGEBOX(men,16,_screen.esTANDAR.cmensistema)RETURN
ENDIFSELECT TmpPrivObjINDEX on ALLTRIM(TmpPrivObj.privilege) TAG rol
IF USED("TmpPrivObj")WITH thisform.pguser.pgobjeto.grid1
.Recordsource = ""
- 39 -
.Column1.Controlsource = ""
.Column2.Controlsource = ""
.Column3.Controlsource = ""
.Column4.Controlsource = ""
SELECT TmpPrivObjGO TOP.Recordsource = "TmpPrivObj".Column1.Controlsource = "TmpPrivObj.privilege".Column2.Controlsource = "TmpPrivObj.grantable".Column3.Controlsource = "TmpPrivObj.owner".Column4.Controlsource = "TmpPrivObj.table_name"
.refreshENDWITH
ENDIF
SELECT TmpPrivSisSEEK "UNLIMITED TABLESPACE"IF FOUND()
thisform.inactiva()ENDIF
SELECT TmpPrivObjGO TOPSCAN
SELECT TmpRolPriObjAPPEND BLANKreplace TmpRolPriObj.categoria WITH 'OBJ',;
TmpRolPriObj.tipo WITH ALLTRIM(TmpPrivObj.privilege),;TmpRolPriObj.objeto WITH
ALLTRIM(TmpPrivObj.table_name),;TmpRolPriObj.esquema WITH ALLTRIM(TmpPrivObj.owner),;TmpRolPriObj.admin WITH TmpPrivObj.grantable
ENDSCAN
SELECT TmpPrivObjGO TOPthisform.pguser.pgobjeto.grid1.Refresh
Llena_listadogrupo
LPARAMETERS cuserlcuser = cuser
lcsql = "select consumer_group "lcsql = lcsql + " from dba_rsrc_consumer_groups "lcsql = lcsql + " where consumer_group not in (Select granted_group fromDBA_RSRC_CONSUMER_GROUP_PRIVS where rtrim(grantee)=RTRIM(?lcuser)) "lcsql = lcsql + " and rtrim(consumer_group)<>'OTHER_GROUPS'"
- 40 -
liresult = thisform.sqlexec(lcsql,"tmpconsu")SELECT tmpconsuSCAN
thisform.pguser.pggrupo.lstconsumer.AddItem(tmpconsu.consumer_group)ENDSCAN
Llena_grupos
LPARAMETERS cdatolcuser = cdatolcsql = "SELECT granted_group,case grant_option when 'NO' then 0 else 1 end grant_option, "lcsql = lcsql + " case initial_group when 'NO' then 0 else 1 end initial_group "lcsql = lcsql + " FROM DBA_RSRC_CONSUMER_GROUP_PRIVS "lcsql = lcsql + " where RTRIM(grantee)=RTRIM(?lcuser) "liresult = thisform.sqlexec(lcsql,"TmpGruAsig")IF liresult < 0
men = "Error al buscar los grupos de consumidores Otorgados - " + MESSAGE()thisform.log_error(lcsql)MESSAGEBOX(men,16,_screen.esTANDAR.cmensistema)RETURN
ENDIF
SELECT TmpGruAsigINDEX on ALLTRIM(TmpGruAsig.granted_group) TAG grupo
IF USED("TmpGruAsig")WITH thisform.pguser.pggrupo.grid1
.Recordsource = ""
.Column1.Controlsource = ""
.Column2.Controlsource = ""
.Column3.Controlsource = ""SELECT TmpGruAsigGO TOP.Recordsource = "TmpGruAsig".Column1.Controlsource = "TmpGruAsig.granted_group".Column2.Controlsource = "TmpGruAsig.grant_option".Column3.Controlsource = "TmpGruAsig.initial_group"
.refreshENDWITH
ENDIF
SELECT TmpGruAsigGO TOPSCAN
SELECT TmpRolPriObjAPPEND BLANKreplace TmpRolPriObj.categoria WITH 'GRP',;
TmpRolPriObj.tipo WITH ALLTRIM(TmpGruAsig.granted_group),;TmpRolPriObj.admin WITH TmpGruAsig.grant_option,;TmpRolPriObj.defecto WITH TmpGruAsig.initial_group
- 41 -
ENDSCAN
SELECT TmpGruAsigGO TOPthisform.pguser.pggrupo.Refresh
thisform.llena_listadogrupo(lcuser)
Llena_cuotas
LPARAMETERS lcuserlcdato = lcuser
lcsql = "select tablespace_name,tablespace_name tamanio from dba_tablespaces order bytablespace_name"
liresult = thisform.sqlexec(lcsql,"tmptabcuo")IF liresult < 0 THEN
men='Error al momento de extraer los datos de los tablespaces en cuotas - ' +MESSAGE()
thisform.log_error(lcsql)MESSAGEBOX(men,64,_screen.esTANDAR.cmensistema)RETURN
ENDIF
SELECT tmptabcuoreplace ALL tmptabcuo.tamanio WITH '<ninguno>'
SELECT TmpTabCuoINDEX on ALLTRIM(TmpTabCuo.tablespace_name) TAG llave
IF USED("TmpTabCuo")with thisform.pguser.pgcuota.grid1
.Recordsource = ""
.Column1.Controlsource = ""
.Column2.Controlsource = ""SELECT TmpTabCuoGO TOP.Recordsource = "TmpTabCuo".Column1.Controlsource = "TmpTabCuo.tablespace_name".Column2.Controlsource = "TmpTabCuo.tamanio"
.refreshENDWITH
ENDIF
lcsql = "Select * from dba_ts_quotas where RTRIM(username)=RTRIM(?lcdato) ORDER BYTABLESPACE_NAME"
liresult = thisform.sqlexec(lcsql,"TmpCuotas")IF liresult < 0
men = "Error al consultar las Cuotas del Usuario - " + MESSAGE()thisform.log_error(lcsql)
- 42 -
MESSAGEBOX(men,16,_screen.esTANDAR.cmensistema)RETURN
ENDIF
SELECT TmpCuotasSCAN
SELECT TmpTabCuoGO TOPSEEK ALLTRIM(TmpCuotas.tablespace_name)IF FOUND()
SELECT TmpTabCuoreplace TmpTabCuo.tamanio WITH
ALLTRIM(STR((TmpCuotas.max_bytes/1024),10)) + ' K'ENDIF
ENDSCAN
SELECT TmpTabCuoSCAN
SELECT TmpRolPriObjAPPEND BLANKreplace TmpRolPriObj.categoria WITH 'QTA',;
TmpRolPriObj.tipo WITHALLTRIM(TmpTabCuo.tablespace_name),;
TmpRolPriObj.objeto WITHALLTRIM(TmpTabCuo.tamanio)
ENDSCAN
SELECT TmpTabCuoGO TOPthisform.pguser.pgcuota.grid1.Refreshthisform.pguser.pgcuota.opt.Enabled = .F.thisform.pguser.pgcuota.cmbescala.ListIndex = 1
SELECT TmpRolAsigSEEK 'RESOURCE'IF !FOUND()
SELECT TmpPrivSisSEEK 'UNLIMITED TABLESPACE'IF !FOUND()
thisform.activa()ELSE
thisform.inactiva()ENDIF
ELSEthisform.inactiva()
ENDIF
- 43 -
Cmdaceptar.click
IF !EMPTY(thisform.editsql.Value)lcsql = ALLTRIM(thisform.editsql.Value)lcsqlT = ""lcsqlG = ""lcsqlC = ""libandera = 0FOR i=0 TO LEN(lcsql)
lcsqlT = lcsqlT + SUBSTR(lcsql,i,1)lcsqlG = lcsqlG + SUBSTR(lcsql,i,5)IF lcsqlG = "BEGIN" OR libandera = 1
libandera = 1lcsqlC = lcsqlC + SUBSTR(lcsql,i,1)IF LIKE('*END;*',lcsqlC)
liresult = thisform.sqlexec(lcsqlC,"")IF liresult < 0
men = MESSAGE()thisform.log_error(lcsqlC)MESSAGEBOX(men,16,_screen.esTANDAR.cmensistema)RETURN
ENDIFlcsqlC = ""lcsqlG = ""
ENDIFELSE
IF libandera = 0IF SUBSTR(lcsql,i,1) = ";"
liresult = thisform.sqlexec(lcsqlT,"")IF liresult < 0
men = MESSAGE()thisform.log_error(lcsqlT)
MESSAGEBOX(men,16,_screen.esTANDAR.cmensistema)RETURN
ENDIFlcsqlT = ""
ENDIFENDIF
ENDIFlcsqlG = ""
ENDFORENDIF
thisform.editsql.Value = ""thisform.Release
1.6.2 Roles
- 44 -
Muestra_datos
lcsql = "Select role, password_required from dba_roles order by role"liresult = thisform.sqlexec(lcsql,"tmpr")IF liresult < 0
men = "Error al buscar los Roles - " + MESSAGE()thisform.log_error(lcsql)MESSAGEBOX(men,16,_screen.esTANDAR.cmensistema)thisform.Release
ENDIF
SELECT tmprolesZAP
SELECT tmprSCAN
SELECT tmprolesAPPEND BLANKreplace tmproles.role WITH Tmpr.role,;
tmproles.password_required WITH Tmpr.password_required
ENDSCAN
SELECT TmprolesCOUNT TO linumthisform.lblroles.Caption = ALLTRIM(STR(linum,10)) + " Roles"
SELECT TmprolesGO TOPthisform.grid1.Refresh
frmbase.init()
LPARAMETERS lcrollcroles = lcrol
IF LEN(ALLTRIM(lcrol)) > 0thisform.Caption = "Editar Rol: &lcroles"thisform.lblglosarol.Caption = lcrolesthisform.pgroles.pggeneral.tnom.Value = ALLTRIM(lcrol)thisform.pgroles.pggeneral.tnom.Enabled = .F.
ELSEthisform.Caption = "Crear Rol: &lcroles"thisform.lblglosarol.Caption = lcrolesthisform.pgroles.pggeneral.tnom.Value = ALLTRIM(lcrol)thisform.pgroles.pggeneral.tnom.Enabled = .T.
ENDIF
- 45 -
lcsql = "select * from dba_roles where RTRIM(role)=RTRIM(?lcroles)"liresult = thisform.sqlexec(lcsql,"tmpresul")IF liresult < 0
men = MESSAGE()thisform.log_error(lcsql)MESSAGEBOX(men,16,_screen.esTANDAR.cmensistema)RETURN
ENDIF
SELECT tmpresulGO TOPDO CASE
CASE ALLTRIM(tmpresul.password_required)=="GLOBAL"thisform.pgroles.pggeneral.cautentica.ListIndex = 4CASE ALLTRIM(tmpresul.password_required)=="EXTERNAL"
thisform.pgroles.pggeneral.cautentica.ListIndex = 3CASE ALLTRIM(tmpresul.password_required)=="NO"
thisform.pgroles.pggeneral.cautentica.ListIndex = 1
OTHERWISEIF thisform.pgroles.pggeneral.tnom.Value = ""
thisform.pgroles.pggeneral.cautentica.ListIndex = 1else
thisform.pgroles.pggeneral.cautentica.ListIndex = 2thisform.pgroles.pggeneral.tintrocontra.Value =
ALLTRIM(tmpresul.password_required)+ "*****"thisform.pgroles.pggeneral.ticonfcontra.Value =
ALLTRIM(tmpresul.password_required) + "*****"endif
ENDCASElcdato = thisform.Pgroles.pggeneral.Cautentica.Value
DO CASECASE ALLTRIM(lcdato) = "Ninguno"
thisform.pgroles.pggeneral.label4.Visible = .F.thisform.pgroles.pggeneral.label5.Visible = .F.thisform.pgroles.pggeneral.tintrocontra.Visible = .F.thisform.pgroles.pggeneral.ticonfcontra.Visible = .F.thisform.pgroles.pggeneral.lblexternorol.Visible = .F.thisform.pgroles.pggeneral.lblglobalrol.Visible = .F.thisform.pgroles.pggeneral.lblningunorol.Visible = .T.
CASE ALLTRIM(lcdato) = "Global"thisform.pgroles.pggeneral.label4.Visible = .F.thisform.pgroles.pggeneral.label5.Visible = .F.thisform.pgroles.pggeneral.tintrocontra.Visible = .F.thisform.pgroles.pggeneral.ticonfcontra.Visible = .F.thisform.pgroles.pggeneral.lblexternorol.Visible = .F.thisform.pgroles.pggeneral.Lblningunorol.Visible = .F.thisform.pgroles.pggeneral.lblglobalrol.Visible = .T.
CASE ALLTRIM(lcdato) = "Externo"thisform.pgroles.pggeneral.label4.Visible = .F.thisform.pgroles.pggeneral.label5.Visible = .F.
- 46 -
thisform.pgroles.pggeneral.tintrocontra.Visible = .F.thisform.pgroles.pggeneral.ticonfcontra.Visible = .F.thisform.pgroles.pggeneral.Lblningunorol.Visible = .F.thisform.pgroles.pggeneral.lblglobalrol.Visible = .F.thisform.pgroles.pggeneral.lblexternorol.Visible = .T.
OTHERWISEthisform.pgroles.pggeneral.label4.Visible = .T.thisform.pgroles.pggeneral.label5.Visible = .T.thisform.pgroles.pggeneral.tintrocontra.Visible = .T.thisform.pgroles.pggeneral.ticonfcontra.Visible = .T.thisform.pgroles.pggeneral.Lblningunorol.Visible = .F.thisform.pgroles.pggeneral.lblglobalrol.Visible = .F.thisform.pgroles.pggeneral.lblexternorol.Visible = .F.
ENDCASE
**Mostrar los Roles asignadoslcsql = "select granted_role,case admin_option when 'NO' then 0 else 1 end admin_option "lcsql = lcsql + "from dba_role_privs where rtrim(grantee)=RTRIM(?lcroles) order by granted_role "liresult = thisform.sqlexec(lcsql,"tmprolasig")IF liresult < 0
men = "Error al buscar los Roles Asignados - " + MESSAGE()thisform.log_error(lcsql)MESSAGEBOX(men,16,_screen.esTANDAR.cmensistema)RETURN
ENDIF
SELECT TmpRolAsigINDEX on ALLTRIM(TmpRolAsig.granted_role) TAG rol
IF USED("Tmprolasig")with thisform.pgroles.pgrol.grid1
.Recordsource = ""
.Column1.Controlsource = ""
.Column2.Controlsource = ""SELECT TmpRolAsigGO TOP.Recordsource = "TmpRolAsig".Column1.Controlsource = "TmpRolAsig.granted_role".Column2.Controlsource = "TmpRolAsig.admin_option"
.refreshENDWITH
ENDIF
**SELECT TmpRolAsig**SEEK "RESOURCE"**IF FOUND()
**thisform.inactiva()**ENDIF
SELECT TmpRolAsigSCAN
SELECT TmpRolPriObj
- 47 -
APPEND BLANKreplace TmpRolPriObj.categoria WITH 'ROL',;
TmpRolPriObj.tipo WITH ALLTRIM(TmpRolAsig.granted_role),;TmpRolPriObj.admin WITH TmpRolAsig.admin_option
ENDSCAN
SELECT TmpRolAsigGO TOPthisform.pgroles.pgrol.grid1.Refresh
**Mostrar los Privilegios de Sistemalcsql = "select privilege,case admin_option when 'NO' then 0 else 1 end admin_option "lcsql = lcsql + "from dba_sys_privs where rtrim(grantee)=RTRIM(?lcroles) order by privilege "liresult = thisform.sqlexec(lcsql,"tmprolasigsis")IF liresult < 0
men = "Error al buscar Privilegios de Sistemas - " + MESSAGE()thisform.log_error(lcsql)MESSAGEBOX(men,16,_screen.esTANDAR.cmensistema)RETURN
ENDIF
SELECT TmprolasigsisINDEX on ALLTRIM(TmpRolAsigsis.privilege) TAG rol
IF USED("Tmprolasigsis")with thisform.pgroles.pgsistema.grid2
.Recordsource = ""
.Column1.Controlsource = ""
.Column2.Controlsource = ""SELECT TmpRolAsigsisGO TOP.Recordsource = "TmpRolAsigsis".Column1.Controlsource = "TmpRolAsigsis.privilege".Column2.Controlsource = "TmpRolAsigsis.admin_option"
.refreshENDWITH
ENDIF
SELECT TmpRolAsigsisGO TOPSCAN
SELECT TmpRolPriObjAPPEND BLANKreplace TmpRolPriObj.categoria WITH 'SIS',;
TmpRolPriObj.tipo WITH ALLTRIM(TmpRolAsigsis.privilege),;TmpRolPriObj.admin WITH
TmpRolAsigsis.admin_optionENDSCAN
SELECT TmpRolAsigsisGO TOP
- 48 -
thisform.pgroles.pgsistema.grid2.Refresh
**Mostrar los Privilegios de las tablas(objeto) que han sido otorgados a los roleslcsql = "select table_name,privilege,owner "lcsql = lcsql + "from dba_tab_privs where rtrim(grantee)=RTRIM(?lcroles) order by privilege "liresult = thisform.sqlexec(lcsql,"tmprolasigobj")IF liresult < 0
men = "Error al buscar Privilegios de Objetos - " + MESSAGE()thisform.log_error(lcsql)MESSAGEBOX(men,16,_screen.esTANDAR.cmensistema)RETURN
ENDIF
SELECT TmpRolAsigobjINDEX on ALLTRIM(TmpRolAsigobj.privilege) TAG rol
IF USED("Tmprolasigobj")with thisform.pgroles.pgobjeto.grid3
.Recordsource = ""
.Column1.Controlsource = ""
.Column2.Controlsource = ""
.Column3.Controlsource = ""
SELECT TmpRolAsigobjGO TOP.Recordsource = "TmpRolAsigobj".Column1.Controlsource = "TmpRolAsigobj.privilege".Column2.Controlsource = "TmpRolAsigobj.owner".Column3.Controlsource = "TmpRolAsigobj.table_name"
.refreshENDWITH
ENDIF
SELECT TmpRolAsigobjGO TOPSCAN
SELECT TmpRolPriObjAPPEND BLANKreplace TmpRolPriObj.categoria WITH 'OBJ',;
TmpRolPriObj.tipo WITH ALLTRIM(TmpRolAsigobj.privilege),;TmpRolPriObj.esquema WITH ALLTRIM(TmpRolAsigobj.owner),;TmpRolPriObj.objeto WITH
ALLTRIM(TmpRolAsigobj.table_name)ENDSCAN
SELECT TmpRolAsigobjGO TOPthisform.pgroles.pgobjeto.grid3.Refresh
**Llenar Privilegios de Objetos
- 49 -
** 1. Llenar el treeview de Objetosthisform.llena_trwobjetorol()** Llena los Grupos de Consumidores los cuales estan asignados a los Rolesthisform.llena_consumidores_roles(lcroles)** Llena los Grupos de Consumidores los cuales estan asignados a los Rolesthisform.llena_consum_no_rol(lcroles)
IF thisform.Pgroles.pggeneral.Tnom.Enabled = .T.thisform.CAmbios_totalesrol ()
ENDIF
Asignar_grupoconsumidoreslcsql = ''
lcinicial = ''SELECT TmpConsumRollipos = RECNO('TmpConsumRol')lcsqlrol = ""SELECT TmpRolPriObjSCAN FOR ALLTRIM(TmpRolPriObj.categoria)='GRP'
SELECT TmpConsumRolSEEK ALLTRIM(TmpRolPriObj.tipo)IF !FOUND()
lcsql = lcsql + "BEGINdbms_resource_manager_privs.revoke_switch_consumer_group("
lcsql = lcsql + " revokee_name=>'" +ALLTRIM(thisform.pgroles.pggeneral.tnom.Value) + "', "
lcsql = lcsql + " consumer_group=>'" + ALLTRIM(TmpRolPriObj.tipo) + "');END;"ENDIF
ENDSCANSELECT TmpConsumRollint = RECCOUNT()SCAN
SELECT TmpRolPriObjSEEK 'GRP'+ALLTRIM(TmpConsumRol.granted_group)IF !FOUND()
**IF INT(TmpConsumRol.grant_option) = 0lcsql = lcsql + "BEGIN
dbms_resource_manager_privs.grant_switch_consumer_group("lcsql = lcsql + " grantee_name =>'" +
ALLTRIM(thisform.pgroles.pggeneral.tnom.Value) + "', "lcsql = lcsql + " consumer_group =>'" +
ALLTRIM(TmpConsumRol.granted_group) + "',"lcsql = lcsql + " grant_option =>FALSE);END;"
**ELSE**lcsql = lcsql + "BEGIN
dbms_resource_manager_privs.grant_switch_consumer_group("**lcsql = lcsql + " grantee_name =>'" +
ALLTRIM(thisform.pguser.pggeneral.tnom.Value) + "', "**lcsql = lcsql + " consumer_group =>'" +
ALLTRIM(TmpConsumRol.granted_group) + "',"
- 50 -
**lcsql = lcsql + " grant_option =>TRUE);END;"**ENDIF
ENDIFENDSCAN
IF lipos > lintlipos = lint
ENDIF
IF lipos > 0SELECT TmpConsumRolGO lipos
ENDIF
thisform.editsql.Value = thisform.editsql.Value + lcsql
asignar_privilegios_tablas
lcsql = ''libandera = 0lcsqlrol = ""SELECT tmprolasigobjlipos = RECNO('tmprolasigobj')
SELECT TmpRolPriObjDELETE TAG llave
SELECT TmpRolPriObjINDEX on
ALLTRIM(TmpRolPriObj.tipo)+ALLTRIM(TmpRolPriObj.esquema)+ALLTRIM(TmpRolPriObj.objeto) TAG llave1
SELECT tmprolasigobjDELETE TAG rol
SELECT tmprolasigobjINDEX on
ALLTRIM(tmprolasigobj.privilege)+ALLTRIM(tmprolasigobj.owner)+ALLTRIM(tmprolasigobj.table_name) TAG rol1
SELECT TmpRolPriObjSCAN FOR ALLTRIM(TmpRolPriObj.categoria)='OBJ'
SELECT tmprolasigobjSEEK
ALLTRIM(TmpRolPriObj.tipo)+ALLTRIM(TmpRolPriObj.esquema)+ALLTRIM(TmpRolPriObj.objeto)IF !FOUND()
lcsql = lcsql + "REVOKE " + ALLTRIM(TmpRolPriObj.tipo) + " ON " +ALLTRIM(TmpRolPriObj.esquema) + "." + ALLTRIM(TmpRolPriObj.objeto) + " FROM " +ALLTRIM(thisform.lblglosarol.Caption) +";"
libandera = 1**ELSE
- 51 -
**IF TmpRolPriObj.admin <> INT(tmprolasigobj.grantable)**lcsql = lcsql + "REVOKE " + ALLTRIM(TmpRolPriObj.tipo) + " ON " +
ALLTRIM(TmpRolPriObj.esquema) + "." + ALLTRIM(TmpRolPriObj.objeto) + " FROM " +ALLTRIM(thisform.lblglosarol.Caption) +";"
**IF INT(tmprolasigobj.grantable) = 0**lcsql = lcsql + "GRANT " + ALLTRIM(TmpRolPriObj.tipo) + " ON
" + ALLTRIM(TmpRolPriObj.esquema) + "." + ALLTRIM(TmpRolPriObj.objeto) + " TO " +ALLTRIM(thisform.lblglosarol.Caption) + ";"
**ELSE**lcsql = lcsql + "GRANT " + ALLTRIM(TmpRolPriObj.tipo) + " ON
" + ALLTRIM(TmpRolPriObj.esquema) + "." + ALLTRIM(TmpRolPriObj.objeto) + " TO " +ALLTRIM(thisform.lblglosarol.Caption) + ";"
**ENDIF**ENDIF
ENDIFENDSCAN
SELECT tmprolasigobjlint = RECCOUNT()SCAN
SELECT TmpRolPriObjSEEK
ALLTRIM(tmprolasigobj.privilege)+ALLTRIM(tmprolasigobj.owner)+ALLTRIM(tmprolasigobj.table_name)IF !FOUND()
lcsql = lcsql + "GRANT " + ALLTRIM(tmprolasigobj.privilege) + " ON " +ALLTRIM(tmprolasigobj.owner) + "." + ALLTRIM(tmprolasigobj.table_name) + " TO " +ALLTRIM(thisform.lblglosarol.Caption) + ";"
ENDIFENDSCAN
SELECT TmpRolPriObjDELETE TAG llave1
SELECT TmpRolPriObjINDEX on ALLTRIM(TmpRolPriObj.categoria)+ALLTRIM(TmpRolPriObj.tipo) TAG llave
SELECT tmprolasigobjDELETE TAG rol1
SELECT tmprolasigobjINDEX on ALLTRIM(tmprolasigobj.privilege) TAG rol
IF lipos > lintlipos = lint
ENDIF
IF lipos > 0SELECT tmprolasigobjGO lipos
ENDIF
thisform.editsql.Value = thisform.editsql.Value + lcsql
- 52 -
Asigna_roles
lcsql = ''libandera = 0
SELECT TmpRolAsiglipos = RECNO('TmpRolAsig')
lcsqlrol = ""SELECT TmpRolPriObjSCAN FOR ALLTRIM(TmpRolPriObj.categoria)='ROL'
SELECT TmpRolAsigSEEK ALLTRIM(TmpRolPriObj.tipo)IF !FOUND()
lcsql = lcsql + "REVOKE " + ALLTRIM(TmpRolPriObj.tipo) + " FROM " +ALLTRIM(thisform.lblglosarol.Caption) +";"
libandera = 1ELSE
IF TmpRolPriObj.admin <> INT(TmpRolAsig.admin_option)lcsql = lcsql + "REVOKE " + ALLTRIM(TmpRolPriObj.tipo) + " FROM " +
ALLTRIM(thisform.lblglosarol.Caption) +";"IF INT(TmpRolAsig.admin_option) = 0
lcsql = lcsql + "GRANT " + ALLTRIM(TmpRolPriObj.tipo) + " TO "+ ALLTRIM(thisform.lblglosarol.Caption) + ";"
ELSElcsql = lcsql + "GRANT " + ALLTRIM(TmpRolPriObj.tipo) + " TO "
+ ALLTRIM(thisform.lblglosarol.Caption) + " WITH ADMIN OPTION;"ENDIF
ENDIFENDIF
ENDSCAN
SELECT TmpRolAsiglint = RECCOUNT()SCAN
SELECT TmpRolPriObjSEEK 'ROL'+ALLTRIM(TmpRolAsig.granted_role)IF !FOUND()
IF INT(TmpRolAsig.admin_option) = 0lcsql = lcsql + "GRANT " + ALLTRIM(TmpRolAsig.granted_role) + " TO " +
ALLTRIM(thisform.lblglosarol.Caption) + ";"ELSE
lcsql = lcsql + "GRANT " + ALLTRIM(TmpRolAsig.granted_role) + " TO " +ALLTRIM(thisform.lblglosarol.Caption) + " WITH ADMIN OPTION;"
ENDIFENDIF
ENDSCAN
IF lipos > lintlipos = lint
- 53 -
ENDIF
IF lipos > 0SELECT TmpRolAsigGO lipos
ENDIF
thisform.editsql.Value = lcsql
cmdaceptar.click
IF !EMPTY(thisform.editsql.Value)lcsql = ALLTRIM(thisform.editsql.Value)lcsqlT = ""lcsqlG = ""lcsqlC = ""libandera = 0FOR i=0 TO LEN(lcsql)
lcsqlT = lcsqlT + SUBSTR(lcsql,i,1)lcsqlG = lcsqlG + SUBSTR(lcsql,i,5)IF lcsqlG = "BEGIN" OR libandera = 1
libandera = 1lcsqlC = lcsqlC + SUBSTR(lcsql,i,1)IF LIKE('*END;*',lcsqlC)
liresult = thisform.sqlexec(lcsqlC,"")IF liresult < 0
men = MESSAGE()thisform.log_error(lcsqlC)MESSAGEBOX(men,16,_screen.esTANDAR.cmensistema)RETURN
ENDIFlcsqlC = ""lcsqlG = ""
ENDIFELSE
IF libandera = 0IF SUBSTR(lcsql,i,1) = ";"
liresult = thisform.sqlexec(lcsqlT,"")IF liresult < 0
men = MESSAGE()thisform.log_error(lcsqlT)
MESSAGEBOX(men,16,_screen.esTANDAR.cmensistema)RETURN
ENDIFlcsqlT = ""
ENDIFENDIF
ENDIFlcsqlG = ""
- 54 -
ENDFORENDIF
thisform.editsql.Value = ""
thisform.Release
1.6.3 Perfiles
Mostrar_datos()
lcsql = "Select * from dba_profiles order by profile"liresult = thisform.sqlexec(lcsql,"tmp2")IF liresult < 0
men = "Error al buscar los perfiles - " + MESSAGE()thisform.log_error(lcsql)MESSAGEBOX(men,16,_screen.esTANDAR.cmensistema)thisform.Release
ENDIF
SELECT tmp2GO TOPlcprofile = ' '
SELECT tmp1DELETE ALL
SELECT tmp2
SCANIF ALLTRIM(lcprofile)<>ALLTRIM(tmp2.profile)
SELECT tmp1APPEND BLANKlcprofile = ALLTRIM(tmp2.profile)
ENDIFSELECT tmp1replace tmp1.profile WITH ALLTRIM(tmp2.profile)
DO CASECASE ALLTRIM(tmp2.resource_name)=='FAILED_LOGIN_ATTEMPTS'
SELECT tmp1replace tmp1.c1 WITH ALLTRIM(tmp2.limit)
CASE ALLTRIM(tmp2.resource_name)=='PASSWORD_LIFE_TIME'SELECT tmp1replace tmp1.c2 WITH ALLTRIM(tmp2.limit)
CASE ALLTRIM(tmp2.resource_name)=='PASSWORD_LOCK_TIME'SELECT tmp1replace tmp1.c3 WITH ALLTRIM(tmp2.limit)
- 55 -
CASE ALLTRIM(tmp2.resource_name)=='CONNECT_TIME'SELECT tmp1replace tmp1.c4 WITH ALLTRIM(tmp2.limit)
CASE ALLTRIM(tmp2.resource_name)=='IDLE_TIME'SELECT tmp1replace tmp1.c5 WITH ALLTRIM(tmp2.limit)
CASE ALLTRIM(tmp2.resource_name)=='SESSIONS_PER_USER'SELECT tmp1replace tmp1.c6 WITH ALLTRIM(tmp2.limit)
ENDCASE
ENDSCAN
SELECT tmp1COUNT TO linumthisform.lblcuenta.Caption = ALLTRIM(STR(linum,10)) + " Perfiles"
SELECT tmp1GO topthisform.grid1.Refresh
Frmbase.init
lparameters lcprofilecperfil = lcprofile
IF LEN(ALLTRIM(lcprofile))> 0thisform.pgperfiles.pggeneral.lbprofile.Value= ALLTRIM(lcprofile)thisform.pgperfiles.pggeneral.lbprofile.Enabled =.f.
bandera = 0
lcsql = "Select * from dba_profiles where RTRIM(profile)= RTRIM(?cperfil)order by resource_name"liresult = thisform.sqlexec(lcsql,"tmp2")
****copia de cursor para utilizar para la comparacion
SELECT * FROM tmp2 INTO CURSOR tmp2cp
IF liresult < 0men = "Error al buscar los perfiles - " + MESSAGE()thisform.log_error(lcsql)MESSAGEBOX(men,16,_screen.esTANDAR.cmensistema)thisform.Release
ENDIFSELECT tmp2GO top
SCAN
- 56 -
DO CASE*************GENERAL - DETALLES (CARGA DE LOS DATOS)
CASE ALLTRIM(tmp2.resource_name)=="CPU_PER_SESSION"bandera1=0
FOR i=1 TOthisform.pgperfiles.pggeneral.pgdetalles.page1.cbsesion.ListCount
IFALLTRIM(tmp2.limit)==ALLTRIM(thisform.pgperfiles.pggeneral.pgdetalles.page1.cbsesion.List(i,1))
thisform.pgperfiles.pggeneral.pgdetalles.page1.cbsesion.ListIndex = ibandera1= 1
EXITENDIF
ENDFORIF bandera1 = 0
thisform.pgperfiles.pggeneral.pgdetalles.page1.cbsesion.AddItem(tmp2.limit)
thisform.pgperfiles.pggeneral.pgdetalles.page1.cbsesion.ListIndex =thisform.pgperfiles.pggeneral.pgdetalles.page1.cbsesion.ListCount
ENDIF
CASE ALLTRIM(tmp2.resource_name)=="CPU_PER_CALL"
bandera1 = 0FOR i=1 TO
thisform.pgperfiles.pggeneral.pgdetalles.page1.cbllamada.ListCountIF
ALLTRIM(tmp2.limit)==ALLTRIM(thisform.pgperfiles.pggeneral.pgdetalles.page1.cbllamada.List(i,1))
thisform.pgperfiles.pggeneral.pgdetalles.page1.cbllamada.ListIndex = ibandera1=1EXIT
ENDIFENDFORIF bandera1 = 0
thisform.pgperfiles.pggeneral.pgdetalles.page1.cbllamada.AddItem(tmp2.limit)
thisform.pgperfiles.pggeneral.pgdetalles.page1.cbllamada.ListIndex =thisform.pgperfiles.pggeneral.pgdetalles.page1.cbllamada.ListCount
ENDIFCASE ALLTRIM(tmp2.resource_name)=="CONNECT_TIME"
bandera1 = 0FOR i=1 TO
thisform.pgperfiles.pggeneral.pgdetalles.page1.cbconexion.ListCountIF
ALLTRIM(tmp2.limit)==ALLTRIM(thisform.pgperfiles.pggeneral.pgdetalles.page1.cbconexion.List(i,1))
thisform.pgperfiles.pggeneral.pgdetalles.page1.cbconexion.ListIndex = i
- 57 -
bandera1=1EXIT
ENDIFENDFORIF bandera1 = 0
thisform.pgperfiles.pggeneral.pgdetalles.page1.cbconexion.AddItem(tmp2.limit)
thisform.pgperfiles.pggeneral.pgdetalles.page1.cbconexion.ListIndex =thisform.pgperfiles.pggeneral.pgdetalles.page1.cbconexion.ListCount
ENDIF
CASE ALLTRIM(tmp2.resource_name)=="IDLE_TIME"bandera1=0
FOR i=1 TOthisform.pgperfiles.pggeneral.pgdetalles.page1.cbinacti.ListCount
IFALLTRIM(tmp2.limit)==ALLTRIM(thisform.pgperfiles.pggeneral.pgdetalles.page1.cbinacti.List(i,1))
thisform.pgperfiles.pggeneral.pgdetalles.page1.cbinacti.ListIndex = ibandera1=1EXIT
ENDIFENDFOR
IF bandera1=0
thisform.pgperfiles.pggeneral.pgdetalles.page1.cbinacti.AddItem(tmp2.limit)
thisform.pgperfiles.pggeneral.pgdetalles.page1.cbinacti.ListIndex =thisform.pgperfiles.pggeneral.pgdetalles.page1.cbinacti.ListCount
ENDIF*************GENERAL - SERVICIOS (CARGA DE LOS DATOS)
CASE ALLTRIM(tmp2.resource_name)=="SESSIONS_PER_USER"bandera1=0
FOR i=1 TOthisform.pgperfiles.pggeneral.pgservicios.page1.cbsimul.ListCount
IFALLTRIM(tmp2.limit)==ALLTRIM(thisform.pgperfiles.pggeneral.pgservicios.page1.cbsimul.List(i,1))
thisform.pgperfiles.pggeneral.pgservicios.page1.cbsimul.ListIndex = ibandera1=1EXIT
ENDIFENDFOR
IF bandera1=0
thisform.pgperfiles.pggeneral.pgservicios.page1.cbsimul.AddItem(tmp2.limit)
thisform.pgperfiles.pggeneral.pgservicios.page1.cbsimul.ListIndex =thisform.pgperfiles.pggeneral.pgservicios.page1.cbsimul.ListCount
ENDIFCASE ALLTRIM(tmp2.resource_name)=="LOGICAL_READS_PER_SESSION"
bandera1=0
- 58 -
FOR i=1 TOthisform.pgperfiles.pggeneral.pgservicios.page1.cblecturas.ListCount
IFALLTRIM(tmp2.limit)==ALLTRIM(thisform.pgperfiles.pggeneral.pgservicios.page1.cblecturas.List(i,1))
thisform.pgperfiles.pggeneral.pgservicios.page1.cblecturas.ListIndex = ibandera1=1EXIT
ENDIFENDFOR
IF bandera1=0
thisform.pgperfiles.pggeneral.pgservicios.page1.cblecturas.AddItem(tmp2.limit)
thisform.pgperfiles.pggeneral.pgservicios.page1.cblecturas.ListIndex =thisform.pgperfiles.pggeneral.pgservicios.page1.cblecturas.ListCount
ENDIFCASE ALLTRIM(tmp2.resource_name)=="LOGICAL_READS_PER_CALL"
bandera1=0FOR i=1 TO
thisform.pgperfiles.pggeneral.pgservicios.page1.cbllamadas.ListCountIF
ALLTRIM(tmp2.limit)==ALLTRIM(thisform.pgperfiles.pggeneral.pgservicios.page1.cbllamadas.List(i,1))
thisform.pgperfiles.pggeneral.pgservicios.page1.cbllamadas.ListIndex = ibandera1=1EXIT
ENDIFENDFOR
IF bandera1=0
thisform.pgperfiles.pggeneral.pgservicios.page1.cbllamadas.AddItem(tmp2.limit)
thisform.pgperfiles.pggeneral.pgservicios.page1.cbllamadas.ListIndex =thisform.pgperfiles.pggeneral.pgservicios.page1.cbllamadas.ListCount
ENDIFCASE ALLTRIM(tmp2.resource_name)=="PRIVATE_SGA"
bandera1=0FOR i=1 TO
thisform.pgperfiles.pggeneral.pgservicios.page1.cbsga.ListCountIF
ALLTRIM(tmp2.limit)==ALLTRIM(thisform.pgperfiles.pggeneral.pgservicios.page1.cbsga.List(i,1))
thisform.pgperfiles.pggeneral.pgservicios.page1.cbsga.ListIndex = ibandera1=1EXIT
ENDIFENDFOR
IF bandera1=0
thisform.pgperfiles.pggeneral.pgservicios.page1.cbsga.AddItem(tmp2.limit)
- 59 -
thisform.pgperfiles.pggeneral.pgservicios.page1.cbsga.ListIndex =thisform.pgperfiles.pggeneral.pgservicios.page1.cbsga.ListCount
ENDIFCASE ALLTRIM(tmp2.resource_name)=="COMPOSITE_LIMIT"
bandera1=0FOR i=1 TO
thisform.pgperfiles.pggeneral.pgservicios.page1.Cblimite.ListCountIF
ALLTRIM(tmp2.limit)==ALLTRIM(thisform.pgperfiles.pggeneral.pgservicios.page1.cblimite.List(i,1))
thisform.pgperfiles.pggeneral.pgservicios.page1.cblimite.ListIndex = ibandera1=1EXIT
ENDIFENDFOR
IF bandera1=0
thisform.pgperfiles.pggeneral.pgservicios.page1.cblimite.AddItem(tmp2.limit)
thisform.pgperfiles.pggeneral.pgservicios.page1.cblimite.ListIndex =thisform.pgperfiles.pggeneral.pgservicios.page1.cblimite.ListCount
ENDIF*********************CONTRASEÑA - PGContraseña (Tiempo de vencimiento de Contraseña)
CASE ALLTRIM(tmp2.resource_name) =="PASSWORD_LIFE_TIME"bandera1=0
FOR i=1 TOthisform.pgperfiles.pgcontraseña.pgcontraseña.page1.cbvencer.ListCount
IFALLTRIM(tmp2.limit)==ALLTRIM(thisform.pgperfiles.pgcontraseña.pgcontraseña.page1.cbvencer.List(i,1))
thisform.pgperfiles.pgcontraseña.pgcontraseña.page1.cbvencer.ListIndex = ibandera1=1EXIT
ENDIFENDFOR
IF bandera1=0SET STEP ON
thisform.pgperfiles.pgcontraseña.pgcontraseña.page1.cbvencer.AddItem(tmp2.limit)
thisform.pgperfiles.pgcontraseña.pgcontraseña.page1.cbvencer.ListIndex =thisform.pgperfiles.pgcontraseña.pgcontraseña.page1.cbvencer.ListCount
ENDIF
CASE ALLTRIM(tmp2.resource_name) =="PASSWORD_GRACE_TIME"
bandera1=0
- 60 -
FOR i=1 TOthisform.pgperfiles.pgcontraseña.pgcontraseña.page1.cbbloquear.ListCount
IFALLTRIM(tmp2.limit)==ALLTRIM(thisform.pgperfiles.pgcontraseña.pgcontraseña.page1.cbbloquear.List(i,1))
thisform.pgperfiles.pgcontraseña.pgcontraseña.page1.cbbloquear.ListIndex = ibandera1=1
EXITENDIF
ENDFOR
IF bandera1=0
thisform.pgperfiles.pgcontraseña.pgcontraseña.page1.cbbloquear.AddItem(tmp2.limit)
thisform.pgperfiles.pgcontraseña.pgcontraseña.page1.cbbloquear.ListIndex =thisform.pgperfiles.pgcontraseña.pgcontraseña.page1.cbbloquear.ListCount
ENDIF
CASE ALLTRIM(tmp2.resource_name) =="PASSWORD_REUSE_MAX"bandera1=0
FOR i=1 TOthisform.pgperfiles.pgcontraseña.pghistorial.page1.cbmantCon.ListCount
IFALLTRIM(tmp2.limit)==ALLTRIM(thisform.pgperfiles.pgcontraseña.pghistorial.page1.cbmantCon.List(i,1))
thisform.pgperfiles.pgcontraseña.pghistorial.page1.cbmantCon.ListIndex = ibandera1=1EXIT
ENDIFENDFORIF bandera1=0
thisform.pgperfiles.pgcontraseña.pghistorial.page1.cbmantCon.AddItem(tmp2.limit)
thisform.pgperfiles.pgcontraseña.pghistorial.page1.cbmantCon.ListIndex =thisform.pgperfiles.pgcontraseña.pghistorial.page1.cbmantCon.ListCount
ENDIF
CASE ALLTRIM(tmp2.resource_name) =="PASSWORD_REUSE_TIME"bandera1=0
FOR i=1 TOthisform.pgperfiles.pgcontraseña.pghistorial.page1.cbmantcontDias.ListCount
IFALLTRIM(tmp2.limit)==ALLTRIM(thisform.pgperfiles.pgcontraseña.pghistorial.page1.cbmantcontDias.List(i,1))
thisform.pgperfiles.pgcontraseña.pghistorial.page1.cbmantcontDias.ListIndex = ibandera1=1EXIT
ENDIFENDFOR
- 61 -
IF bandera1=0
thisform.pgperfiles.pgcontraseña.pghistorial.page1.cbmantcontDias.AddItem(tmp2.limit)
thisform.pgperfiles.pgcontraseña.pghistorial.page1.cbmantcontDias.ListIndex =thisform.pgperfiles.pgcontraseña.pghistorial.page1.cbmantcontDias.ListCount
ENDIFCASE ALLTRIM(tmp2.resource_name)
=="PASSWORD_VERIFY_FUNCTION"bandera1=0
FOR i=1 TOthisform.pgperfiles.pgcontraseña.PGomplejidad.page1.cbcomplejidad.ListCount
IFALLTRIM(tmp2.limit)==ALLTRIM(thisform.pgperfiles.pgcontraseña.PGomplejidad.page1.cbcomplejidad.List(i,1))
thisform.pgperfiles.pgcontraseña.PGomplejidad.page1.cbcomplejidad.ListIndex = ibandera1=1EXIT
ENDIFENDFORIF bandera1=0
thisform.pgperfiles.pgcontraseña.PGomplejidad.page1.cbcomplejidad.AddItem(tmp2.limit)
thisform.pgperfiles.pgcontraseña.PGomplejidad.page1.cbcomplejidad.ListIndex =thisform.pgperfiles.pgcontraseña.PGomplejidad.page1.cbcomplejidad.ListCount
ENDIFCASE ALLTRIM(tmp2.resource_name) =="FAILED_LOGIN_ATTEMPTS"
bandera1=0FOR i=1 TO
thisform.pgperfiles.pgcontraseña.pgconexion.Page1.cbbloquear.ListCountIF
ALLTRIM(tmp2.limit)==ALLTRIM(thisform.pgperfiles.pgcontraseña.pgconexion.Page1.cbbloquear.List(i,1))
thisform.pgperfiles.pgcontraseña.pgconexion.Page1.cbbloquear.ListIndex = ibandera1=1EXIT
ENDIFENDFORIF bandera1=0
thisform.pgperfiles.pgcontraseña.pgconexion.Page1.cbbloquear.AddItem(tmp2.limit)
thisform.pgperfiles.pgcontraseña.pgconexion.Page1.cbbloquear.ListIndex =thisform.pgperfiles.pgcontraseña.pgconexion.Page1.cbbloquear.ListCount
ENDIFCASE ALLTRIM(tmp2.resource_name) =="PASSWORD_LOCK_TIME"
bandera1=0FOR i=1 TO
thisform.pgperfiles.pgcontraseña.pgconexion.Page1.cbbloqueardias.ListCountIF
ALLTRIM(tmp2.limit)==ALLTRIM(thisform.pgperfiles.pgcontraseña.pgconexion.Page1.cbbloqueardias.List(i,1))
thisform.pgperfiles.pgcontraseña.pgconexion.Page1.cbbloqueardias.ListIndex = i
- 62 -
bandera1=1EXIT
ENDIFENDFORIF bandera1=0
thisform.pgperfiles.pgcontraseña.pgconexion.Page1.cbbloqueardias.AddItem(tmp2.limit)
thisform.pgperfiles.pgcontraseña.pgconexion.Page1.cbbloqueardias.ListIndex =thisform.pgperfiles.pgcontraseña.pgconexion.Page1.cbbloqueardias.ListCount
ENDIF
OTHERWISE
ENDCASE
ENDSCANIF thisform.pgperfiles.pgcontraseña.pgcontraseña.page1.cbvencer.Value="UNLIMITED" AND
thisform.pgperfiles.pgcontraseña.pgcontraseña.page1.cbbloquear.value="UNLIMITED"thisform.pgperfiles.pgcontraseña.pgcontraseña.page1.cbbloquear.Enabled= .F.thisform.pgperfiles.pgcontraseña.pgcontraseña.page1.cbvencer.Enabled= .F.thisform.pgperfiles.pgcontraseña.pgcontraseña.page1.label3.Enabled= .F.thisform.pgperfiles.pgcontraseña.pgcontraseña.page1.label4.Enabled= .F.thisform.pgperfiles.pgcontraseña.pgcontraseña.page1.label5.Enabled= .F.thisform.pgperfiles.pgcontraseña.pgcontraseña.page1.label6.Enabled= .F.
ELSEthisform.pgperfiles.pgcontraseña.pgcontraseña.page1.check1.value= 1
ENDIF
IF thisform.pgperfiles.pgcontraseña.pghistorial.page1.cbmantCon.Value="UNLIMITED" ANDthisform.pgperfiles.pgcontraseña.pghistorial.page1.cbmantcontDias.value="UNLIMITED"
thisform.pgperfiles.pgcontraseña.pghistorial.page1.CbmantCon.Enabled= .F.thisform.pgperfiles.pgcontraseña.pghistorial.page1.cbmantcontDias.Enabled= .F.thisform.pgperfiles.pgcontraseña.pghistorial.page1.label3.Enabled= .F.thisform.pgperfiles.pgcontraseña.pghistorial.page1.label4.Enabled= .F.thisform.pgperfiles.pgcontraseña.pghistorial.page1.label5.Enabled= .F.thisform.pgperfiles.pgcontraseña.pghistorial.page1.label6.Enabled= .F.
ELSEthisform.pgperfiles.pgcontraseña.pghistorial.page1.check1.value =1
ENDIF
IF thisform.pgperfiles.pgcontraseña.pgomplejidad.page1.cbcomplejidad.Value="NULL"thisform.pgperfiles.pgcontraseña.pgomplejidad.page1.cbcomplejidad.Enabled=.F.thisform.pgperfiles.pgcontraseña.pgomplejidad.page1.label4.Enabled=.F.
ELSEthisform.pgperfiles.pgcontraseña.pgomplejidad.page1.check1.value=1
ENDIF
IF thisform.pgperfiles.pgcontraseña.pgconexion.page1.cbbloquear.Value = "UNLIMITED" ANDthisform.pgperfiles.pgcontraseña.pgconexion.page1.cbbloqueardias.Value="UNLIMITED"
thisform.pgperfiles.pgcontraseña.pgconexion.page1.cbbloquear.Enabled= .F.thisform.pgperfiles.pgcontraseña.pgconexion.page1.cbbloqueardias.Enabled= .F.thisform.pgperfiles.pgcontraseña.pgconexion.page1.label3.Enabled= .F.
- 63 -
thisform.pgperfiles.pgcontraseña.pgconexion.page1.label4.Enabled= .F.thisform.pgperfiles.pgcontraseña.pgconexion.page1.label5.Enabled= .F.thisform.pgperfiles.pgcontraseña.pgconexion.page1.label6.Enabled= .F.
ELSEthisform.pgperfiles.pgcontraseña.pgconexion.page1.check1.value= 1
ENDIF
ELSE
thisform.pgperfiles.pggeneral.pgdetalles.page1.cbsesion.ListIndex = 1thisform.pgperfiles.pggeneral.pgdetalles.page1.cbllamada.ListIndex = 1thisform.pgperfiles.pggeneral.pgdetalles.page1.cbconexion.ListIndex = 1thisform.pgperfiles.pggeneral.pgdetalles.page1.cbinacti.ListIndex = 1
thisform.pgperfiles.pggeneral.pgservicios.page1.cbsimul.ListIndex = 1thisform.pgperfiles.pggeneral.pgservicios.page1.cblecturas.ListIndex = 1thisform.pgperfiles.pggeneral.pgservicios.page1.cbllamadas.ListIndex = 1thisform.pgperfiles.pggeneral.pgservicios.page1.cbsga.ListIndex = 1thisform.pgperfiles.pggeneral.pgservicios.page1.cblimite.ListIndex = 1
thisform.pgperfiles.pgcontraseña.pgcontraseña.page1.check1.Value = 1thisform.pgperfiles.pgcontraseña.pgcontraseña.page1.cbvencer.ListIndex = 1thisform.pgperfiles.pgcontraseña.pgcontraseña.page1.cbbloquear.ListIndex= 1
thisform.pgperfiles.pgcontraseña.pghistorial.page1.check1.Value = 1thisform.pgperfiles.pgcontraseña.pghistorial.page1.cbmantCon.ListIndex = 1thisform.pgperfiles.pgcontraseña.pghistorial.page1.cbmantcontDias.ListIndex = 1
thisform.pgperfiles.pgcontraseña.pgomplejidad.page1.check1.Value = 1thisform.pgperfiles.pgcontraseña.pgomplejidad.page1.cbcomplejidad.ListIndex = 1
thisform.pgperfiles.pgcontraseña.pgconexion.page1.check1.Value = 1thisform.pgperfiles.pgcontraseña.pgconexion.page1.cbbloquear.ListIndex = 1thisform.pgperfiles.pgcontraseña.pgconexion.page1.cbbloqueardias.ListIndex = 1
thisform.mostrarsql()
ENDIF
MostrarSql
IF USED("tmp2cp")
lcsql = "Alter profile "+ ALLTRIM(tmp2cp.profile) + " LIMIT "lcsql1 = "Alter profile "+ ALLTRIM(tmp2cp.profile) + " LIMIT "
- 64 -
SELECT tmp2GO top
SCANDO CASE
*************GENERAL - DETALLES (MOSTRAR EL SQL MODIFICADO)CASE ALLTRIM(tmp2.resource_name)=="CPU_PER_SESSION"
IF ALLTRIM(tmp2.limit)<>thisform.pgperfiles.pggeneral.pgdetalles.page1.cbsesion.Value
lcsql = lcsql + " CPU_PER_SESSION " +ALLTRIM(thisform.pgperfiles.pggeneral.pgdetalles.page1.cbsesion.Text)
ENDIFCASE ALLTRIM(tmp2.resource_name)=="CPU_PER_CALL"
IF ALLTRIM(tmp2.limit)<>thisform.pgperfiles.pggeneral.pgdetalles.page1.cbllamada.Value
lcsql = lcsql + " CPU_PER_CALL " +ALLTRIM(thisform.pgperfiles.pggeneral.pgdetalles.page1.cbllamada.text)
ENDIFCASE ALLTRIM(tmp2.resource_name)=="CONNECT_TIME"
IF ALLTRIM(tmp2.limit)<>thisform.pgperfiles.pggeneral.pgdetalles.page1.cbconexion.value
lcsql = lcsql + " CONNECT_TIME " +ALLTRIM(thisform.pgperfiles.pggeneral.pgdetalles.page1.cbconexion.Text)
ENDIFCASE ALLTRIM(tmp2.resource_name)=="IDLE_TIME"
IF ALLTRIM(tmp2.limit)<>thisform.pgperfiles.pggeneral.pgdetalles.page1.cbinacti.Value
lcsql = lcsql + " IDLE_TIME " +alltrim(thisform.pgperfiles.pggeneral.pgdetalles.page1.cbinacti.Text)
ENDIF*************GENERAL - SERVICIOS (MOSTRAR EL SQL MODIFICADO)
CASE ALLTRIM(tmp2.resource_name)=="SESSIONS_PER_USER"IF ALLTRIM(tmp2.limit)<>
thisform.pgperfiles.pggeneral.pgservicios.page1.cbsimul.Valuelcsql = lcsql + " SESSIONS_PER_USER " +
ALLTRIM(thisform.pgperfiles.pggeneral.pgservicios.page1.cbsimul.text)ENDIF
CASEALLTRIM(tmp2.resource_name)=="LOGICAL_READS_PER_SESSION"
IF ALLTRIM(tmp2.limit)<>thisform.pgperfiles.pggeneral.pgservicios.page1.cblecturas.Value
lcsql = lcsql + " LOGICAL_READS_PER_SESSION " +ALLTRIM(thisform.pgperfiles.pggeneral.pgservicios.page1.cblecturas.text)
ENDIFCASE ALLTRIM(tmp2.resource_name)=="LOGICAL_READS_PER_CALL"
IF ALLTRIM(tmp2.limit)<>thisform.pgperfiles.pggeneral.pgservicios.page1.cbllamadas.Value
lcsql = lcsql + " LOGICAL_READS_PER_CALL " +ALLTRIM(thisform.pgperfiles.pggeneral.pgservicios.page1.cbllamadas.text)
ENDIFCASE ALLTRIM(tmp2.resource_name)=="PRIVATE_SGA"
IF ALLTRIM(tmp2.limit)<>thisform.pgperfiles.pggeneral.pgservicios.page1.cbsga.Value
lcsql = lcsql + " PRIVATE_SGA " +ALLTRIM(thisform.pgperfiles.pggeneral.pgservicios.page1.cbsga.text)
- 65 -
ENDIFCASE ALLTRIM(tmp2.resource_name)=="COMPOSITE_LIMIT"
IF ALLTRIM(tmp2.limit)<>thisform.pgperfiles.pggeneral.pgservicios.page1.cblimite.Value
lcsql = lcsql + " COMPOSITE_LIMIT " +ALLTRIM(thisform.pgperfiles.pggeneral.pgservicios.page1.cblimite.Text)
ENDIF**************CONTRASEÑA - CONTRASEÑA (MOSTRAR EL SQL MODIFICADO)
CASE ALLTRIM(tmp2.resource_name)=="PASSWORD_LIFE_TIME"IF ALLTRIM(tmp2.limit)<>
thisform.pgperfiles.pgcontraseña.pgcontraseña.page1.cbvencer.Valuelcsql = lcsql + " PASSWORD_LIFE_TIME " +
ALLTRIM(thisform.pgperfiles.pgcontraseña.pgcontraseña.page1.cbvencer.text)ENDIF
CASE ALLTRIM(tmp2.resource_name)=="PASSWORD_GRACE_TIME"IF ALLTRIM(tmp2.limit)<>
thisform.pgperfiles.pgcontraseña.pgcontraseña.page1.cbbloquear.Valuelcsql = lcsql + " PASSWORD_GRACE_TIME " +
ALLTRIM(thisform.pgperfiles.pgcontraseña.pgcontraseña.page1.cbbloquear.text)ENDIF
CASE ALLTRIM(tmp2.resource_name)=="PASSWORD_REUSE_MAX"IF ALLTRIM(tmp2.limit)<>
thisform.pgperfiles.pgcontraseña.pghistorial.page1.cbmantCon.Valuelcsql = lcsql + " PASSWORD_REUSE_MAX " +
ALLTRIM(thisform.pgperfiles.pgcontraseña.pghistorial.page1.cbmantCon.text)ENDIF
CASE ALLTRIM(tmp2.resource_name)=="PASSWORD_REUSE_TIME"IF ALLTRIM(tmp2.limit)<>
thisform.pgperfiles.pgcontraseña.pghistorial.page1.CBmantcontDias.Valuelcsql = lcsql + " PASSWORD_REUSE_TIME " +
ALLTRIM(thisform.pgperfiles.pgcontraseña.pghistorial.page1.CBmantcontDias.text)ENDIF
CASE ALLTRIM(tmp2.resource_name)=="PASSWORD_VERIFY_FUNCTION"IF ALLTRIM(tmp2.limit)<>
thisform.pgperfiles.pgcontraseña.pgomplejidad.page1.cbcomplejidad.Valuelcsql = lcsql + " PASSWORD_VERIFY_FUNCTION " +
ALLTRIM(thisform.pgperfiles.pgcontraseña.pgomplejidad.page1.cbcomplejidad.text)ENDIF
CASE ALLTRIM(tmp2.resource_name)=="FAILED_LOGIN_ATTEMPTS"IF ALLTRIM(tmp2.limit)<>
thisform.pgperfiles.pgcontraseña.pgconexion.page1.cbbloquear.Valuelcsql = lcsql + " FAILED_LOGIN_ATTEMPTS " +
ALLTRIM(thisform.pgperfiles.pgcontraseña.pgconexion.page1.cbbloquear.text)ENDIF
CASE ALLTRIM(tmp2.resource_name)=="PASSWORD_LOCK_TIME"IF ALLTRIM(tmp2.limit)<>
thisform.pgperfiles.pgcontraseña.pgconexion.page1.cbbloqueardias.Valuelcsql = lcsql + " PASSWORD_LOCK_TIME " +
ALLTRIM(thisform.pgperfiles.pgcontraseña.pgconexion.page1.cbbloqueardias.text)ENDIF
ENDCASEENDSCAN
IF lcsql <> lcsql1
- 66 -
Thisform.edit1.Value = lcsqlELSE
Thisform.edit1.Value = ""endif
ELSE
lcsql = "CREATE profile "+ alltrim(thisform.pgperfiles.pggeneral.lbprofile.value) + " LIMIT "lcsql2 = "CREATE profile "+ alltrim(thisform.pgperfiles.pggeneral.lbprofile.value) + " LIMIT "
IF ALLTRIM(thisform.pgperfiles.pggeneral.pgdetalles.page1.cbsesion.Value) <> "DEFAULT"lcsql = lcsql + " CPU_PER_SESSION " +
ALLTRIM(thisform.pgperfiles.pggeneral.pgdetalles.page1.cbsesion.text)ELSE
lcsql = lcsql + " CPU_PER_SESSION " +ALLTRIM(thisform.pgperfiles.pggeneral.pgdetalles.page1.cbsesion.Text)
ENDIFIF ALLTRIM(thisform.pgperfiles.pggeneral.pgdetalles.page1.cbllamada.Value) <> "DEFAULT"
lcsql = lcsql + " CPU_PER_CALL " +ALLTRIM(thisform.pgperfiles.pggeneral.pgdetalles.page1.cbllamada.text)
ELSElcsql = lcsql + " CPU_PER_CALL " +
ALLTRIM(thisform.pgperfiles.pggeneral.pgdetalles.page1.cbllamada.Text)ENDIFIF ALLTRIM(thisform.pgperfiles.pggeneral.pgdetalles.page1.cbconexion.Value) <> "DEFAULT"
lcsql = lcsql + " CONNECT_TIME " +ALLTRIM(thisform.pgperfiles.pggeneral.pgdetalles.page1.cbconexion.text)
ELSElcsql = lcsql + " CONNECT_TIME " +
ALLTRIM(thisform.pgperfiles.pggeneral.pgdetalles.page1.cbconexion.Text)ENDIFIF ALLTRIM(thisform.pgperfiles.pggeneral.pgdetalles.page1.cbinacti.Value) <> "DEFAULT"
lcsql = lcsql + " IDLE_TIME " +ALLTRIM(thisform.pgperfiles.pggeneral.pgdetalles.page1.cbinacti.text)
ELSElcsql = lcsql + " IDLE_TIME " +
ALLTRIM(thisform.pgperfiles.pggeneral.pgdetalles.page1.cbinacti.Text)ENDIF
IF ALLTRIM(thisform.pgperfiles.pggeneral.pgservicios.page1.cbsimul.Value) <> "DEFAULT"lcsql = lcsql + " SESSIONS_PER_USER " +
ALLTRIM(thisform.pgperfiles.pggeneral.pgservicios.page1.cbsimul.text)ELSE
lcsql = lcsql + " SESSIONS_PER_USER " +ALLTRIM(thisform.pgperfiles.pggeneral.pgservicios.page1.cbsimul.Text)
ENDIFIF ALLTRIM(thisform.pgperfiles.pggeneral.pgservicios.page1.cblecturas.Value) <> "DEFAULT"
lcsql = lcsql + " LOGICAL_READS_PER_SESSION " +ALLTRIM(thisform.pgperfiles.pggeneral.pgservicios.page1.cblecturas.text)
ELSElcsql = lcsql + " LOGICAL_READS_PER_SESSION " +
ALLTRIM(thisform.pgperfiles.pggeneral.pgservicios.page1.cblecturas.Text)ENDIF
IF ALLTRIM(thisform.pgperfiles.pggeneral.pgservicios.page1.cbllamadas.Value) <> "DEFAULT"
- 67 -
lcsql = lcsql + " LOGICAL_READS_PER_CALL " +ALLTRIM(thisform.pgperfiles.pggeneral.pgservicios.page1.cbllamadas.text)
ELSElcsql = lcsql + " LOGICAL_READS_PER_CALL " +
ALLTRIM(thisform.pgperfiles.pggeneral.pgservicios.page1.cbllamadas.Text)ENDIF
IF ALLTRIM(thisform.pgperfiles.pggeneral.pgservicios.page1.cbsga.Value) <> "DEFAULT"lcsql = lcsql + " PRIVATE_SGA " +
ALLTRIM(thisform.pgperfiles.pggeneral.pgservicios.page1.cbsga.text)ELSE
lcsql = lcsql + " PRIVATE_SGA " +ALLTRIM(thisform.pgperfiles.pggeneral.pgservicios.page1.cbsga.Text)
ENDIFIF ALLTRIM(thisform.pgperfiles.pggeneral.pgservicios.page1.cblimite.Value) <> "DEFAULT"
lcsql = lcsql + " COMPOSITE_LIMIT " +ALLTRIM(thisform.pgperfiles.pggeneral.pgservicios.page1.cblimite.text)
ELSElcsql = lcsql + " COMPOSITE_LIMIT " +
ALLTRIM(thisform.pgperfiles.pggeneral.pgservicios.page1.cblimite.Text)ENDIF
********Contrasena
IF ALLTRIM(thisform.pgperfiles.pgcontraseña.pgcontraseña.Page1.cbvencer.Value) <>"DEFAULT"
lcsql = lcsql + " PASSWORD_LIFE_TIME " +ALLTRIM(thisform.pgperfiles.pgcontraseña.pgcontraseña.Page1.cbvencer.text)
ELSElcsql = lcsql + " PASSWORD_LIFE_TIME " +
ALLTRIM(thisform.pgperfiles.pgcontraseña.pgcontraseña.Page1.cbvencer.Text)ENDIF
IF ALLTRIM(thisform.pgperfiles.pgcontraseña.pgcontraseña.Page1.CBbloquear.Value) <>"DEFAULT"
lcsql = lcsql + " PASSWORD_GRACE_TIME " +ALLTRIM(thisform.pgperfiles.pgcontraseña.pgcontraseña.Page1.cbbloquear.text)
ELSElcsql = lcsql + " PASSWORD_GRACE_TIME " +
ALLTRIM(thisform.pgperfiles.pgcontraseña.pgcontraseña.Page1.cbbloquear.Text)ENDIF
IF ALLTRIM(thisform.pgperfiles.pgcontraseña.pghistorial.Page1.cbmantCon.Value) <>"DEFAULT"
lcsql = lcsql + " PASSWORD_REUSE_MAX " +ALLTRIM(thisform.pgperfiles.pgcontraseña.pghistorial.page1.cbmantCon.text)
ELSElcsql = lcsql + " PASSWORD_REUSE_MAX " +
ALLTRIM(thisform.pgperfiles.pgcontraseña.pghistorial.page1.cbmantCon.Text)ENDIF
IF ALLTRIM(thisform.pgperfiles.pgcontraseña.pghistorial.page1.cbmantcontDias.Value) <>"DEFAULT"
lcsql = lcsql + " PASSWORD_REUSE_TIME " +ALLTRIM(thisform.pgperfiles.pgcontraseña.pghistorial.page1.cbmantcontDias.text)
ELSE
- 68 -
lcsql = lcsql + " PASSWORD_REUSE_TIME " +ALLTRIM(thisform.pgperfiles.pgcontraseña.pghistorial.page1.cbmantcontDias.Text)
ENDIFIF ALLTRIM(thisform.pgperfiles.pgcontraseña.pgomplejidad.page1.cbcomplejidad.Value) <>
"DEFAULT"lcsql = lcsql + " PASSWORD_VERIFY_FUNCTION " +
ALLTRIM(thisform.pgperfiles.pgcontraseña.pgomplejidad.page1.cbcomplejidad.text)ELSE
lcsql = lcsql + " PASSWORD_VERIFY_FUNCTION " +ALLTRIM(thisform.pgperfiles.pgcontraseña.pgomplejidad.page1.cbcomplejidad.Text)
ENDIFIF ALLTRIM(thisform.pgperfiles.pgcontraseña.pgconexion.page1.cbbloquear.Value) <>
"DEFAULT"lcsql = lcsql + " FAILED_LOGIN_ATTEMPTS " +
ALLTRIM(thisform.pgperfiles.pgcontraseña.pgconexion.page1.cbbloquear.text)ELSE
lcsql = lcsql + " FAILED_LOGIN_ATTEMPTS " +ALLTRIM(thisform.pgperfiles.pgcontraseña.pgconexion.page1.cbbloquear.Text)
ENDIFIF ALLTRIM(thisform.pgperfiles.pgcontraseña.pgconexion.page1.cbbloqueardias.Value) <>
"DEFAULT"lcsql = lcsql + " PASSWORD_LOCK_TIME " +
ALLTRIM(thisform.pgperfiles.pgcontraseña.pgconexion.page1.cbbloqueardias.text)ELSE
lcsql = lcsql + " PASSWORD_LOCK_TIME " +ALLTRIM(thisform.pgperfiles.pgcontraseña.pgconexion.page1.cbbloqueardias.Text)
ENDIF
IF lcsql <> lcsql2thisform.edit1.Value = lcsql
ELSEthisform.edit1.Value = ""
ENDIF
ENDIF
Cmdaceptar.click
IF LEN(ALLTRIM(THISFORM.pgperfiles.pggeneral.lbprofile.Value))>0IF !EMPTY(thisform.edit1.Value)
lcsql = ALLTRIM(thisform.edit1.Value)liresult = thisform.sqlexec(lcsql,"")IF liresult < 0
MESSAGEbox(MESSAGE(),16,_screen.esTANDAR.cmensistema)thisform.log_error(lcsql)
- 69 -
ENDIFENDIF
ELSEMESSAGEBOX("Ingrese nombre de perfil")THISFORM.pgperfiles.pggeneral.lbprofile.SetFocus
ENDIF
thisform.Release
1.7 Método Bibliotecas de Servicios
1.7.1 Listener
Init
IF _screen.esTANDAR.cprivilegio = 'SYSDBA'thisform.cmbtipo.ListIndex = 1thisform.cmbtipo.InteractiveChange()SELECT 0USE _screen.esTANDAR.crutadbf + 'partarea' ALIAS ptar
SELECT ptarlinum = RECCOUNT()IF linum = 0
MESSAGEBOX("No se ha programado ninguna Tarea deInspección",64,_screen.esTANDAR.cmensistema)
ELSESELECT ptarthisform.spntiempo.Value = ptar.frecuenciathisform.cmbtipo.ListIndex = IIF(ptar.tipo='M',1,2)
ENDIF
SELECT ptarUSE
ELSEthisform.SetAll('Enabled',.F.)MESSAGEBOX("Privilegios Insuficientes",48,_screen.esTANDAR.cmensistema)thisform.cmdsalir.Click()
ENDIF
- 70 -
Guardar.click
lcsid = _screen.esTANDAR.cdatabase
*!* lcsql = "select * from partarea where TRIM(sid)=TRIM(?lcsid)"*!* liresult = thisform.sqlexec(lcsql,"ptar")*!* IF liresult < 0*!* men = MESSAGE()*!* thisform.log_error(lcsql)*!* MESSAGEBOX(men,16,_screen.esTANDAR.cmensistema)*!* RETURN*!* ENDIF
SELECT 0USE _screen.esTANDAR.crutadbf + 'partarea' order sid ALIAS ptar
BEGIN TRANSACTION
lcsid = _screen.esTANDAR.cdatabase
SELECT ptarSEEK ALLTRIM(lcsid)IF FOUND()
SELECT ptarreplace ptar.frecuencia WITH thisform.spntiempo.value;
ptar.tipo WITH SUBSTR(thisform.cmbtipo.Value,1,1),;ptar.ruta WITH SYS(5)
ELSESELECT ptarAPPEND BLANKreplace ptar.sid WITH lcsid,;
ptar.frecuencia WITH thisform.spntiempo.Value,;ptar.tipo WITH SUBSTR(thisform.cmbtipo.Value,1,1),;ptar.ruta WITH SYS(5)
ENDIF
WAIT WINDOW "Programando Tarea.... espere por favor!!!" NOWAITcdoselimina = "at /delete /yes"
RUN /N0 &cdoselimina
lctime = TIME()IF thisform.cmbtipo.ListIndex = 1
litope = 1440 / IIF(thisform.spntiempo.Value=0,1,thisform.spntiempo.Value )limin = INT(VAL(SUBSTR(lctime,4,2)))lihor = INT(VAL(SUBSTR(lctime,1,2)))
FOR i=1 TO litopeIF limin > 60
limin = limin - 60lihor = lihor + 1
ENDIF
- 71 -
lchora = IIF(lihor<10,'0'+STR(lihor,1),STR(lihor,2)) + ':' +IIF(limin<10,'0'+STR(limin,1),STR(limin,2))
lcdostarea = "at " + ALLTRIM(lchora) + '/INTERACTIVE/EVERY ' + SYS(5)+ _screen.esTANDAR.crutaexe + "prginslist.exe"
RUN /N0 &lcdostarealimin = limin + thisform.spntiempo.Value
ENDFORELSE
litope = 24 / IIF(thisform.spntiempo.Value=0,1,thisform.spntiempo.Value)limin = INT(VAL(SUBSTR(lctime,4,2)))lihor = INT(VAL(SUBSTR(lctime,1,2)))
FOR i=1 TO litopelchora = IIF(lihor<10,'0'+STR(lihor,1),STR(lihor,2)) + ':' +
IIF(limin<10,'0'+STR(limin,1),STR(limin,2))lcdostarea = "at " + ALLTRIM(lchora) + '/INTERACTIVE/EVERY ' + SYS(5)
+ _screen.esTANDAR.crutaexe + "prginslist.exe"RUN /N0 &lcdostarea
limin = limin + thisform.spntiempo.ValueENDFOR
ENDIFWAIT CLEARIF !error_al_grabar
END TRANSACTIONmen = 'Se registro la tarea de inspección correctamente'MESSAGEBOX(men,64,_screen.esTANDAR.cmensistema)
ELSEROLLBACK
ENDIF
SELECT ptarUSE
thisform.metodo_biblio_cargarlistener()thisform.pageframe1.page2.cmb_biblio_disponible.ListIndex = 1thisform.pageframe1.page2.cmb_biblio_disponible.InteractiveChange()
IF _screen.estandar.iconectada = 0thisform.cmd_biblio_parametros.Enabled = .F.thisform.cmd_biblio_pararlistener.Enabled = .F.
ENDIF
Load
- 72 -
DODEFAULT()
SELECT 0CREATE CURSOR tmpdib(;etiqueta c(25),;valor n(10),;fecha d)INDEX on tmpdib.fecha TAG llave
Conecta_new
ln = SQLSETPROP(0,"DispLogin",3)liconex = SQLSTRINGCONNECT(_screen.esTANDAR.cstringconnect)IF liconex < 0
men = "No se pudo conectar al servidor - " + MESSAGE()IF LIKE('*ORA-01034*',men)
MESSAGEBOX("No se encuentra conectado a Oracle",16,_screen.estandar.cmensistema)ELSE
MESSAGEBOX(men,16,_screen.estandar.cmensistema)ENDIF_screen.estandar.iconectada = 0this.liconexion = -1RETURN
ENDIF
IF liconex > 0this.liconexion = liconex_screen.estandar.iconectada = 1
ELSEthis.liconex = -1_screen.estandar.iconectada = 0
ENDIF
Metodo_biblio_cargaListener
Local gnFileHandle,nSize,cString
thisform.pageframe1.page1.staTUS.Value=''
contador = 0WAIT WINDOW "Cargando Informacion del Listener...!" NOWAIT
listener_status =" RUN lsnrctl status >" + _screen.esTANDAR.crutatxt + "listenerstatus.txt"&listener_statusgnFileHandle = FOPEN(_screen.estANDAR.crutatxt + "listenerstatus.txt")* Seek to end of file to determine number of bytes in the file.
- 73 -
nSize = FSEEK(gnFileHandle, 1, 2) && Move pointer to EOFIF nSize <= 0
* If file is empty, display an error message.WAIT WINDOW "This file is empty!" NOWAIT
ELSE= FSEEK(gnFileHandle, 0, 0) && Move pointer to BOFFOR i=1 TO nSize STEP 263
contador = contador + 1IF contador >= 2
cString = FREAD(gnFileHandle, i)thisform.pageframe1.page1.sTATUS.Value=
thisform.pageframe1.page1.sTATUS.Value + cstringELSE
cString = FREAD(gnFileHandle, i)ENDIF
ENDFORENDIF= FCLOSE(gnFileHandle) && Close the file
WAIT CLEAR
Cmb_biblio_disponible
DO CASECASE this.ListIndex = 1
SELECT TmpdibZAP
SELECT 0USE _screen.estandar.crutadbf + 'histlist' ALIAS tmphist
lihora = STR(INT(VAL(SUBSTR(TIME(),1,2)) - 1),2)
SELECT * FROM tmphist WHERE fecha=DATE() AND SUBSTR(hora,1,2)=lihora ANDALLTRIM(sid)==ALLTRIM(_screen.estandar.cdatabase) ORDER BY hora INTO CURSOR tmp1
SELECT tmp1SCAN
SELECT tmpdibAPPEND BLANKreplace tmpdib.etiqueta WITH tmp1.hora,;
tmpdib.valor WITH tmp1.censoENDSCAN
SELECT tmphistUSE
thisform.pageframe1.page2.simplechart1.createchart()
- 74 -
CASE this.ListIndex = 2 OR this.ListIndex =3SELECT TmpdibZAP
SELECT 0USE _screen.estandar.crutadbf + 'histlist' ALIAS tmphist
IF this.ListIndex =2licriterio = 7
ELSElicriterio = 14
ENDIF
SELECT * FROM tmphist WHERE fecha>=DATE() - licriterio AND fecha<= DATE() ANDALLTRIM(sid)==ALLTRIM(_screen.estandar.cdatabase) ORDER BY fecha,hora INTO CURSOR tmp1 READWRITE
SELECT tmp1GO TOP
lidia = DAY(tmp1.fecha)lcglosa1 = DTOC(tmp1.fecha)lcglosa2 = ""
licnt = 0lisum = 0licnt1 = 0lisum1 = 0SELECT tmp1SCAN
IF lidia <> DAY(tmp1.fecha)IF licnt > 0
SELECT tmpdibAPPEND BLANKreplace tmpdib.etiqueta WITH lcglosa1 + " 12:00 AM";
tmpdib.valor WITH lisum /IIF(licnt=0,1,licnt);
tmpdib.fecha WITH CTOD(lcglosa1)ELSE
SELECT tmpdibAPPEND BLANKreplace tmpdib.etiqueta WITH lcglosa1 + " 12:00 AM";
tmpdib.valor WITH 0;tmpdib.fecha WITH CTOD(lcglosa1)
ENDIF
IF licnt1 > 0SELECT tmpdibAPPEND BLANKreplace tmpdib.etiqueta WITH lcglosa1 + " 12:00 PM";
tmpdib.valor WITH lisum1 /IIF(licnt1=0,1,licnt1);
- 75 -
tmpdib.fecha WITH CTOD(lcglosa1)ELSE
SELECT tmpdibAPPEND BLANKreplace tmpdib.etiqueta WITH lcglosa1 + " 12:00 PM";
tmpdib.valor WITH 0;tmpdib.fecha WITH CTOD(lcglosa1)
ENDIF
lcglosa1 = DTOC(tmp1.fecha)lcglosa2 = ""licnt = 0lisum = 0licnt1 = 0lisum1 = 0
lidia = DAY(tmp1.fecha)ENDIF
DO CASECASE tmp1.hora <= "12:59"
licnt = licnt + 1lisum = lisum + tmp1.censo
CASE tmp1.hora > "12:59" AND tmp1.hora<="23:59"licnt1 = licnt + 1lisum1 = lisum + tmp1.censo
ENDCASEENDSCAN
IF licnt > 0SELECT tmpdibAPPEND BLANKreplace tmpdib.etiqueta WITH lcglosa1 + " 12:00 AM";
tmpdib.valor WITH lisum / IIF(licnt=0,1,licnt);tmpdib.fecha WITH CTOD(lcglosa1)
ELSESELECT tmpdibAPPEND BLANKreplace tmpdib.etiqueta WITH lcglosa1 + " 12:00 AM";
tmpdib.valor WITH 0;tmpdib.fecha WITH CTOD(lcglosa1)
ENDIF
IF licnt1 > 0SELECT tmpdibAPPEND BLANKreplace tmpdib.etiqueta WITH lcglosa1 + " 12:00 PM";
tmpdib.valor WITH lisum1 / IIF(licnt1=0,1,licnt1);tmpdib.fecha WITH CTOD(lcglosa1)
ELSE
- 76 -
SELECT tmpdibAPPEND BLANKreplace tmpdib.etiqueta WITH lcglosa1 + " 12:00 PM";
tmpdib.valor WITH 0;tmpdib.fecha WITH CTOD(lcglosa1)
ENDIF
lidia = licriterioFOR i=DAY(DATE())-(licriterio+1) TO DAY(DATE())
lbentre = .f.
SELECT tmphistSCAN FOR DAY(tmphist.fecha)=i
lbentre = .t.ENDSCANIF !lbentre
SELECT tmpdibAPPEND BLANKreplace tmpdib.etiqueta WITH DTOC(DATE()-lidia) + " 12:00 AM";
tmpdib.valor WITH 0;tmpdib.fecha WITH DATE() - lidia
SELECT tmpdibAPPEND BLANKreplace tmpdib.etiqueta WITH DTOC(DATE()-lidia) + " 12:00 PM";
tmpdib.valor WITH 0;tmpdib.fecha WITH DATE() - lidia
ENDIFlidia = lidia - 1
ENDFOR
SELECT tmphistUSEthisform.pageframe1.page2.simplechart1.createchart()
ENDCASE
Cmd_biblio_levantar
*************************************************************************LEVANTAR EL LISTENER DE LA BASE DE DATOS *************************************************************************
IF ALLTRIM(_screen.esTANDAR.cprivilegio)=="SYSDBA"listener_start =" RUN lsnrctl start > " + _screen.esTANDAR.crutatxt + "listenerstart.txt"&listener_startIF FILE(_screen.esTANDAR.crutatxt + 'listenerstart.txt')
- 77 -
WAIT WINDOW "Esperando Servicio" TIMEOUT 60thisform.metodo_biblio_cargarlistener()_screen.esTANDAR.iconectada = 1thisform.cmd_biblio_parametros.Enabled = .T.thisform.cmd_biblio_parametros.Enabled = .T.thisform.cmd_biblio_levantarlistener.Enabled = .T.thisform.cmd_biblio_pararlistener.Enabled = .T.MESSAGEBOX("Se levanto el listener",64)
WAIT CLEARELSE
MESSAGEBOX("No existe listener Levantado",64)ENDIF
ELSEMESSAGEBOX("Privilegios Insuficientes",16,_screen.esTANDAR.cmensistema)
ENDIF
Cmd_biblio_pararlistener
********************************************************************* PARA DETENER EL LISTENER DE LA BASE DE DATOS *********************************************************************
IF ALLTRIM(_screen.esTANDAR.cprivilegio)=="SYSDBA"vb=MESSAGEBOX("Esta seguro de bajar el Servicio del
Listener..?",32+4+256,_screen.esTANDAR.cmensistema)IF vb=6
RUN lsnrctl stop > + _screen.esTANDAR.crutatxt + 'listenerstop.txt'listener_stop =" RUN lsnrctl stop >" + _screen.esTANDAR.crutatxt + "listenerstop.txt"&listener_stopIF FILE(_screen.esTANDAR.crutatxt + 'listenerstop.txt')
MESSAGEBOX("Se paro el listener",64)thisform.metodo_biblio_cargarlistener()_screen.esTANDAr.iconectada = 0thisform.cmd_biblio_parametros.Enabled = .F.thisform.cmd_biblio_levantarlistener.Enabled = .F.thisform.cmd_biblio_pararlistener.Enabled = .F.
ELSEMESSAGEBOX("No existe listener Levantado",64)
ENDIFENDIF
ELSEMESSAGEBOX("Privilegios Insuficientes",16,_screen.esTANDAR.cmensistema)
ENDIF
Cmd_biblio_parametros
IF ALLTRIM(_screen.esTANDAR.cprivilegio)=="SYSDBA"
- 78 -
DO FORM _screen.estandar.crutafte + 'manbibliotecas\frmparametros.scx'ELSE
MESSAGEBOX("Privilegios Insuficientes",16,_screen.esTANDAR.cmensistema)ENDIF
Frmparametros.init
WAIT WINDOW "Cargando Informacion... espere por favor" NOWAITthisform.cargaubicacion()thisform.cargagenerales()** Ruta del Log
lcpath = ALLTRIM(_screen.estaNDAR.path_archivo('listener.log'))thisform.pglist.page2.pgregistro.page1.txtlog.value = SUBSTR(lcpath,1,LEN(lcpath)-1)
** Ruta de Rastreolcpath = ALLTRIM(_screen.estaNDAR.path_archivo('listener.trc'))thisform.pglist.page2.pgrastreo.page1.txtrastreo.Value = SUBSTR(lcpath,1,LEN(lcpath)-1)
SELECT tmptemporalreplace tmptemporal.ruta_registro WITH thisform.pglist.page2.pgregistro.page1.txtlog.valuereplace tmptemporal.ruta_rastreo WITH thisform.pglist.page2.pgrastreo.page1.txtrastreo.Value
WAIT CLEAR
Load
DODEFAULT()
PUBLIC band_listenerpassPUBLIC band_listenerpass1
band_listenerpass = 0band_listenerpass1 =''
SELECT 0CREATE CURSOR tmptemporal(;registro c(1),;registro_new c(1),;ruta_registro c(120),;rastreo c(1),;rastreo_new c(1),;ruta_rastreo c(120),;clave c(1),;clave_new c(1),;
- 79 -
ruta_clavea c(20),;ruta_clave c(20))
SELECT tmptemporalAPPEND BLANK
Cargagenerales
***********************************************************************Buscar el archivo del listener y lo apertura****************************************************************txtarchivo =_screen.estaNDAR.path_archivo('listener.ora')
x=0FOR i=1 TO LEN(txtarchivo)
IF SUBSTR(txtarchivo,i,1)=';'x = iEXIT
ENDIFENDFOR
txtarchivo = SUBSTR(txtarchivo,1,x-1)Archivo_listener = FOPEN(txtarchivo)*******Tamaño del listener***********************************************************************Variables del listener****************************************************************
band_listenerpass = 0band_listenerpass1 = ''
*******Verifica si existe el ArchivoIF archivo_listener <= 0
WAIT WINDOW "El archivo esta vacio o no se encuentra!" NOWAITELSE
cstring =fread(Archivo_listener,1000)***********************************************************************Buscar registros activados del listener****************************************************************IF LIKE('*LOGGING_LISTENER = OFF*', cString) = .t.
thisform.pglist.page2.pgregistro.page1.optregistro.optsi.Value = 0thisform.pglist.page2.pgregistro.page1.optregistro.optno.Value = 1thisform.pglist.page2.pgregistro.page1.txtlog.Enabled=.f.
SELECT tmptemporalreplace tmptemporal.registro WITH 'D'
ELSEthisform.pglist.page2.pgregistro.page1.optregistro.optsi.Value = 1thisform.pglist.page2.pgregistro.page1.optregistro.optno.Value = 0thisform.pglist.page2.pgregistro.page1.txtlog.Enabled=.F.
SELECT tmptemporalreplace tmptemporal.registro WITH 'A'
- 80 -
ENDIF
IF LIKE('*TRACE_LEVEL_LISTENER*',cString) = .t.thisform.pglist.page2.pgrastreo.page1.optrastreo.optno.Value = 0thisform.pglist.page2.pgrastreo.page1.optrastreo.optsi.Value = 1thisform.pglist.page2.pgrastreo.page1.txtrastreo.Enabled= .F.
SELECT tmptemporalreplace tmptemporal.rastreo WITH 'A'
ELSEthisform.pglist.page2.pgrastreo.page1.optrastreo.optno.Value = 1thisform.pglist.page2.pgrastreo.page1.optrastreo.optsi.Value = 0
thisform.pglist.page2.pgrastreo.page1.txtrastreo.Enabled= .F.
SELECT tmptemporalreplace tmptemporal.rastreo WITH 'D'
ENDIF
IF LIKE('*PASSWORDS_LISTENER=*',cString) = .T.thisform.pglist.page2.pgcontra.page1.optcontra.optno.Value = 0thisform.pglist.page2.pgcontra.page1.optcontra.optsi.Value = 1
thisform.pglist.page2.pgcontra.page1.txtcontra.value =_screen.esTANDAR.desencriptador(SUBSTR(cString,22,8))
SELECT tmptemporalreplace tmptemporal.clave WITH 'A'replace tmptemporal.ruta_clavea WITH
thisform.pglist.page2.pgcontra.page1.txtcontra.valuereplace tmptemporal.ruta_clave WITH
thisform.pglist.page2.pgcontra.page1.txtcontra.valueELSE
thisform.pglist.page2.pgcontra.page1.optcontra.optno.Value = 1thisform.pglist.page2.pgcontra.page1.optcontra.optsi.Value = 0
SELECT tmptemporalreplace tmptemporal.clave WITH 'D'
ENDIFENDIF
FCLOSE(Archivo_listener)
thisform.pglist.page2.pgcontra.page1.optcontra.InteractiveChange()
cargaubicacion
***************************************************************Este Método Carga la información de la ubicacion*******del listener********************************************************
lcsql = "select name from v$database "contador = 0
- 81 -
liresult = thisform.sqlexec(lcsql,"tmp1")IF liresult < 0
thisform.log_error(lcsql)RETURN
ENDIF******* Buscar el nombre de la base de datos
SELECT tmp1GO TOP
*******Se crea un archivo de información del listenercoperacion = "run(tnsping " + tmp1.name + ">" + _screen.estANDAR.crutatxt + "tnsping_base.txt)"coperacion1 = "run(lsnrctl set current_listener" + ">" + _screen.estANDAR.crutatxt + "Current_listener.txt)"&coperacion&coperacion1
*******Apertura de archivos creadosgnFileHandle = FOPEN(_screen.estANDAR.crutatxt + "tnsping_base.txt")&& Nombre de la basecontador =0nSize = FSEEK(gnFileHandle, 1, 2) && se mueve hasta el EOFIF nSize <= 0
WAIT WINDOW "El Archivo esta vacio!" NOWAITELSE
= FSEEK(gnFileHandle, 0, 0) && se mueve hasta el BOFFOR i=1 TO nSize STEP 100
cString = FREAD(gnFileHandle, i)
IF LIKE('*PROTOCOL = TCP*', cString) = .T. AND LIKE('*PORT = 1521*', cString)= .t.thisform.pglist.page1.txtprotocolo.value = "TCP"thisform.pglist.page1.txthost.Value = tmp1.namethisform.pglist.page1.txtport.Value = "1521"
ENDIFENDFOR
ENDIF= FCLOSE(gnFileHandle)****************************************************************************
txtValOpen = FOPEN(_screen.estandar.crutatxt + "Current_listener.txt")DO WHILE NOT FEOF(txtvalopen) &&hasta que este vacia la linea
txtCadena = FGETS(txtvalopen)IF LIKE('*El listener actual es*',txtcadena) = .T.
thisform.pglist.page1.listener.value =SUBSTR(txtcadena,22,10)ENDIF
ENDDOFCLOSE(txtValopen)
*******************************************************************************
Cmd_listenerguardar.click
*****************************
- 82 -
IF thisform.pglist.page2.pgcontra.page1.optcontra.optsi.Value = 1IF LEN(ALLTRIM(thisform.pglist.page2.pgcontra.page1.txtcontra.Value)) = 0
MESSAGEBOX("Debe Ingresar la contraseña del Listener",16,_screen.estandar.cmensistema)RETURN
ENDIFENDIF
SELECT tmptemporalGO TOPreplace tmptemporal.registro_new WITHIIF(thisform.pglist.page2.pgregistro.page1.optregistro.optsi.Value=1,'A','D')replace tmptemporal.rastreo_new WITHIIF(thisform.pglist.page2.pgrastreo.page1.optrastreo.optsi.Value=1,'A','D')replace tmptemporal.clave_new WITHIIF(thisform.pglist.page2.pgcontra.page1.optcontra.optsi.Value=1,'A','D')replace tmptemporal.ruta_clave WITH thisform.pglist.page2.pgcontra.page1.txtcontra.Value
txtArchivo = _screen.estanDAR.path_archivo('listener.ora') &&nombre del archivo.. con todo y su rutax=0FOR i=1 TO LEN(txtarchivo)
IF SUBSTR(txtarchivo,i,1)=';'x = iEXIT
ENDIFENDFOR
txtarchivor = SYS(5) + '\DBMS-FOX\listener.ora'SELECT tmptemporalGO TOPlbgraba = 0
IF tmptemporal.rastreo <> tmptemporal.rastreo_newWAIT WINDOW "Modificando parametro TRACE_LEVEL_LISTENER" TIMEOUT 2
IF tmptemporal.rastreo_new = 'A'lbgraba = 1txtarchivo = SUBSTR(txtarchivo,1,x-1)gnFileHandle = FOPEN(txtArchivo,12) &&abre el archivo para lecturaIF gnFileHandle > 0
nSize = FSEEK(gnFileHandle, 0, 2) && Move pointer to EOFgcstring = FSEEK(gnFileHandle, 0, 1)STORE FSEEK(gnFileHandle, 0, 1) TO gnendgcString = FGETS(gnFileHandle, gnEnd) && Store contentsFPUTS(gnFileHandle,"TRACE_LEVEL_LISTENER = USER")FFLUSH(gnFileHandle)FPUTS(gnFileHandle,"")FFLUSH(gnFileHandle)
ENDIFFCLOSE(gnFileHandle)
ELSElbgraba = 1txtarchivo = SUBSTR(txtarchivo,1,x-1)lhFile = FOPEN(txtArchivo,12)lFIle = FCREATE(txtArchivor)
- 83 -
IF lhFile>0DO WHILE NOT FEOF(lhFile)
lsBuffer=FGETS(lhFile)IF ALLTRIM(lsBuffer)<>ALLTRIM('TRACE_LEVEL_LISTENER =
USER')FPUTS(lFile,lsBuffer)FFLUSH(lFile)
ENDIFENDDO
ENDIFFCLOSE(lhFile)FCLOSE(lFile)
IF FILE(txtarchivor)DELETE FILE(txtarchivo)c_copia = 'xcopy ' + txtarchivor + ' ' + SUBSTR(txtarchivo,1,LEN(txtarchivo)-
12)RUN /N0 &c_copia
ENDIFENDIF
WAIT CLEAR
ENDIF
IF tmptemporal.registro <> tmptemporal.registro_newWAIT WINDOW "Modificando parametro LOGGING_LISTENER" TIMEOUT 2
IF tmptemporal.registro_new = 'D'lbgraba = 1txtarchivo = SUBSTR(txtarchivo,1,x-1)gnFileHandle = FOPEN(txtArchivo,12) &&abre el archivo para lecturaIF gnFileHandle > 0
nSize = FSEEK(gnFileHandle, 0, 2) && Move pointer to EOFgcstring = FSEEK(gnFileHandle, 0, 1)STORE FSEEK(gnFileHandle, 0, 1) TO gnendgcString = FGETS(gnFileHandle, gnEnd) && Store contentsFPUTS(gnFileHandle,"LOGGING_LISTENER = OFF")FFLUSH(gnFileHandle)
FPUTS(gnFileHandle,"")FFLUSH(gnFileHandle)
ENDIFFCLOSE(gnFileHandle)
ELSElbgraba = 1txtarchivo = SUBSTR(txtarchivo,1,x-1)lhFile = FOPEN(txtArchivo,12)lFIle = FCREATE(txtArchivor)IF lhFile>0
DO WHILE NOT FEOF(lhFile)lsBuffer=FGETS(lhFile)IF ALLTRIM(lsBuffer)<>ALLTRIM('LOGGING_LISTENER = OFF')
FPUTS(lFile,lsBuffer)FFLUSH(lFile)
- 84 -
ENDIFENDDO
ENDIFFCLOSE(lhFile)FCLOSE(lFile)
IF FILE(txtarchivor)DELETE FILE(txtarchivo)c_copia = 'xcopy ' + txtarchivor + ' ' + SUBSTR(txtarchivo,1,LEN(txtarchivo)-
12)RUN /N0 &c_copia
ENDIFENDIF
WAIT CLEARENDIF
IF tmptemporal.clave <> tmptemporal.clave_newWAIT WINDOW 'Modificando parametro PASSWORDS_LISTENER ' TIMEOUT 2
tcl = ''IF tmptemporal.clave_new = 'A'
lbgraba = 1clav = ALLTRIM(tmptemporal.ruta_clave)tcl = clavIF LEN(clav) <17
FOR i=LEN(clav) TO 17tcl = tcl + 'X'
ENDFORENDIFtcl = _screen.estandar.encriptador(tcl)txtarchivo = SUBSTR(txtarchivo,1,x-1)gnFileHandle = FOPEN(txtArchivo,12) &&abre el archivo para lecturaIF gnFileHandle > 0
nSize = FSEEK(gnFileHandle, 0, 2) && Move pointer to EOFgcstring = FSEEK(gnFileHandle, 0, 1)STORE FSEEK(gnFileHandle, 0, 1) TO gnendgcString = FGETS(gnFileHandle, gnEnd) && Store contentsFPUTS(gnFileHandle,"PASSWORDS_LISTENER= (" + tcl + ")" )FFLUSH(gnFileHandle)FPUTS(gnFileHandle,"")FFLUSH(gnFileHandle)
ENDIFFCLOSE(gnFileHandle)
ELSElbgraba = 1txtarchivo = SUBSTR(txtarchivo,1,x-1)lhFile = FOPEN(txtArchivo,12)lFIle = FCREATE(txtArchivor)IF lhFile>0
DO WHILE NOT FEOF(lhFile)lsBuffer=FGETS(lhFile)IF !LIKE('*PASSWORDS_LISTENER=*',lsBuffer)
FPUTS(lFile,lsBuffer)FFLUSH(lFile)
- 85 -
ENDIFENDDO
ENDIFFCLOSE(lhFile)FCLOSE(lFile)
IF FILE(txtarchivor)DELETE FILE(txtarchivo)c_copia = 'xcopy ' + txtarchivor + ' ' + SUBSTR(txtarchivo,1,LEN(txtarchivo)-
12)RUN /N0 &c_copia
ENDIFENDIF
WAIT CLEARELSE
IF ALLTRIM(tmptemporal.ruta_clavea) <> ALLTRIM(tmptemporal.ruta_clave)lbgraba = 1tcl = ''clav = ALLTRIM(tmptemporal.ruta_clave)tcl = clavIF LEN(clav) <17
FOR i=LEN(clav) TO 17tcl = tcl + 'X'
ENDFORENDIF
tcl = _screen.estandar.encriptador(tcl)
txtarchivo = SUBSTR(txtarchivo,1,x-1)lhFile = FOPEN(txtArchivo,12)lFIle = FCREATE(txtArchivor)IF lhFile>0
DO WHILE NOT FEOF(lhFile)lsBuffer=FGETS(lhFile)IF !LIKE('*PASSWORDS_LISTENER=*',lsBuffer)
FPUTS(lFile,lsBuffer)FFLUSH(lFile)
ELSEFPUTS(lFile,"PASSWORDS_LISTENER= (" + tcl + ")" )FFLUSH(lFile)
ENDIFENDDO
ENDIFFCLOSE(lhFile)FCLOSE(lFile)
IF FILE(txtarchivor)DELETE FILE(txtarchivo)c_copia = 'xcopy ' + txtarchivor + ' ' + SUBSTR(txtarchivo,1,LEN(txtarchivo)-12)RUN /N0 &c_copia
ENDIFENDIF
ENDIF
- 86 -
IF lbgraba = 1MESSAGEBOX("Cambios realizados con exito",64,_screen.estandar.cmensistema)thisform.Release
ENDIF
1.8 Módulo de Politicas
1.8.1 Definición de politicas
Init
IF this.obtener_datos()<1 thenRETURN
ENDIFthis.llenar_datos()
thisform.grid_politicas.column4.ReadOnly = .F.
IF _screen.esTANDAR.cprivilegio<>"SYSDBA"thisform.SetAll('Enabled',.f.)MESSAGEBOX("Privilegios Insuficientes",48,_screen.esTANDAR.cmensistema)
ENDIF
Llenar_datos
SELECT c_politicasWITH this.grid_politicas as Grid
.ColumnCount=5
.RecordSource='c_politicas'WITH .Columns(1) as Column
.Header1.Caption="ID"
.ControlSource="c_politicas.NUM"
.Width=20
.ReadOnly= .T.
.InputMask="99"ENDWITHWITH .Columns(2) as Column
.header1.Caption="Regla de Politica"
.ControlSource='c_politicas.nombre_politica'
.Width=340
.ReadOnly= .T.ENDWITHWITH .Columns(3) as Column
.header1.caption="Categoria"
.ControlSource='c_politicas.NOM_CATEGORIA'
- 87 -
.Width=100
.ReadOnly= .T.ENDWITHWITH .Columns(4) as Column
.header1.caption="Estado"
.ControlSource='c_politicas.LESTADO'
.Width=70
.Alignment= 2
.Sparse= .F.ENDWITHWITH .Columns(5) as Column
.header1.caption="Descripcion"
.ControlSource='c_politicas.DESCRIPCION'
.Width=750
.ReadOnly= .T.ENDWITH
.SetAll("dynamicfontbold","iif(LESTADO<>ANT_ESTADO,.T.,.F.)","column")ENDWITH
Obtener_datos
*!* CONSULTA DE POLITICAS DE LA BASE DE DATOS
lcsql = "SELECT A.NUM NUM, A.NOMBRE_POLITICA NOMBRE_POLITICA, SUBSTR(A.DESCRIPCION,1,250)DESCRIPCION, B.CATEGORIA NOM_CATEGORIA, A.ESTADO ESTADO "lcsql = lcsql + " FROM " + _screen.esTANDAR.cusubd + ".politicas A," + _screen.esTANDAR.cusubd + ".CATEGORIA B WHERE A.ID_CATEGORIA=B.ID order by a.num"RESULT=THISFORM.SQLexec(lcSql,"c_politicas")IF RESULT < 0
men = "Error al buscar las politicas - " + MESSAGE()thisform.log_error(lcsql)MESSAGEBOX(men,16,_screen.ESTANDAR.cmensistema)RETURN
ENDIF
SELECT C.*, IIF(ESTADO="A",.T.,.F.) LESTADO FROM c_politicas C INTO CURSOR c_politicas READWRITESELECT A.*, NUM LNUM, LESTADO ANT_ESTADO FROM c_politicas A INTO CURSOR c_politicas READWRITE
RETURN 1
Cmd_aplicar.click
lcSql=""lcSql1=""LNPOLITICAS=0
SELECT C_POLITICASGO TOPSCAN FOR LESTADO!=ANT_ESTADO
- 88 -
LNPOLITICAS=LNUMIF C_POLITICAS.LESTADO=.T. THEN
lcSql1="UPDATE " + _screen.esTANDAR.cusubd + ".POLITICAS SET ESTADO=" +"'A'" + "WHERE NUM=" + TRANSFORM(LNPOLITICAS)+';'
ELSElcSql1="UPDATE " + _screen.esTANDAR.cusubd + ".POLITICAS SET ESTADO=" +"'I'" + "
WHERE NUM=" + TRANSFORM(LNPOLITICAS)+';'ENDIFLCSQL=lcSql+lcSql1
ENDSCAN
IF EMPTY(lcsql) thenMESSAGEBOX("Usted no ha realizado cambios",48,_screen.esTANDAR.cmensistema)RETURN
ENDIF
LCSQL="BEGIN "+ LCSQL + " END;"liresult = thisform.sqlexec(lcsql,"tmpresul")IF liresult < 0
men = MESSAGE()thisform.log_error(lcsql)MESSAGEBOX(men,16,_screen.esTANDAR.cmensistema)
RETURNENDIF
MESSAGEBOX("Transacción finalizada con éxito",64,_screen.esTANDAR.cmensistema)thisform.Release()
1.9 Módulo de Métricas de Rendimiento
1.9.1 Definición de métricas
Limpia
WITH thisform.grid1.Recordsource = "".Column1.Controlsource = "".Column2.Controlsource = "".Column3.Controlsource = "".Column4.Controlsource = ""
SELECT TmpmetGO TOP.Recordsource = "Tmpmet".Column1.Controlsource = "Tmpmet.nombre".Column2.Controlsource = "Tmpmet.comparador".Column3.Controlsource = "Tmpmet.minimo".Column4.Controlsource = "Tmpmet.maximo"
.refresh
- 89 -
ENDWITH
Init
thisform.limpia()thisform.muestra()
IF _screen.esTANDAR.cprivilegio<>"SYSDBA"thisform.SetAll('Enabled',.f.)MESSAGEBOX("Privilegios Insuficientes",48,_screen.esTANDAR.cmensistema)
ENDIF
Load
DODEFAULT()
SELECT 0CREATE CURSOR Tmpmet(;indice n(10),;nombre c(100),;operador c(50),;minimo c(10),;maximo c(10),;comparador c(15))INDEX on tmpmet.indice TAG llave
Muestra
SELECT TmpMetZAP
lcsql = "Select * from " + _screen.esTANDAR.cusubd + ".metrica order by indice"liresult = thisform.sqlexec(lcsql,"Tmpm1")IF liresult<0
men = MESSAGE()thisform.log_error(lcsql)MESSAGEBOX(men,16,_screen.esTANDAR.cmensistema)RETURN
ENDIF
- 90 -
SELECT tmpm1SCAN
SELECT TmpMetAPPEND BLANKreplace TmpMet.indice WITH tmpm1.indice,;
TmpMet.nombre WITH ALLTRIM(tmpm1.metrica),;TmpMet.operador WITH tmpm1.operador,;TmpMet.minimo WITH tmpm1.minimo,;TmpMet.maximo WITH tmpm1.maximo,;TmpMet.comparador WITH tmpm1.comparador
ENDSCAN
SELECT tmpm1USE
SELECT TmpMetGO TOP
thisform.grid1.Refresh()
Editmetrica.init
LPARAMETERS iindice
thisform.tinDICE.Value = iindiceliindice = iindicelcsql = "Select * from " + _screen.esTANDAR.cusubd + ".metrica where indice=?liindice"liresult = thisform.sqlexec(lcsql,"tmpm1")IF liresult <0
men = MESSAGE()thisform.log_error(lcsql)MESSAGEBOX(men,16,_screen.esTANDAR.cmensistema)RETURN
ENDIF
SELECT tmpm1li = RECCOUNT()IF li > 0
thisform.tnombre.Value = ALLTRIM(tmpm1.metrica)thisform.tcritico.Value = tmpm1.maximothisform.tadvierte.Value = tmpm1.minimothisform.editsql.Value = ALLTRIM(tmpm1.sentencia)thisform.lbltit.Caption = "Editar métricas"FOR i=1 TO thisform.coperador.ListCount
IF ALLTRIM(thisform.coperador.List(i,1))==ALLTRIM(tmpm1.comparador)thisform.coperador.ListIndex = iEXIT
ENDIFENDFOR
- 91 -
IF tmpm1.tipo ='P'thisform.ctiposent.ListIndex = 2
ELSEthisform.ctiposent.ListIndex = 1
ENDIF
ELSEthisform.tnombre.Enabled = .T.thisform.coperador.Enabled = .T.thisform.coperador.ListIndex = 1thisform.lbltit.Caption = "Creación de métricas"thisform.ctiposent.Enabled = .T.thisform.ctiposent.ListIndex=1
ENDIFthisform.ctiposent.InteractiveChange()thisform.Caption = thisform.lbltit.Caption
cmdguardar.click
lccadena = CHRTRAN(thisform.editsql.Value,CHR(8),' ')lccadena = CHRTRAN(lccadena,CHR(13),' ')lctipo = IIF(thisform.ctiposent.ListIndex=1,'S','P')
IF thisform.ctiposent.ListIndex = 1IF !LIKE('*SELECT*',UPPER(lccadena))
MESSAGEBOX("Debe ingresar una instruccion deSeleccion",16,_screen.esTANDAR.cmensistema)
RETURNENDIF
ELSEIF LIKE('*SELECT*',UPPER(lccadena))
MESSAGEBOX("No debe ingresar una instruccion deSeleccion",16,_screen.esTANDAR.cmensistema)
RETURNENDIF
ENDIF
IF thisform.tinDICE.Value > 0lcsql = "Update " + _screen.esTANDAR.cusubd + ".metrica "lcsql = lcsql + " set minimo=?thisform.tadvierte.Value,"lcsql = lcsql + " maximo=?thisform.tcritico.Value,"lcsql = lcsql + " sentencia=RTRIM(?lccadena),"lcsql = lcsql + " comparador=RTRIM(?thisform.coperador.Value), "lcsql = lcsql + " tipo=?lctipo "lcsql = lcsql + " where indice=?thisform.tindice.value "liresult = thisform.sqlexec(lcsql,"")IF liresult < 0
men = MESSAGE()thisform.log_error(lcsql)
- 92 -
MESSAGEBOX(men,16,_screen.esTANDAR.cmensistema)RETURN
ENDIFELSE
lcsql = "Insert Into " + _screen.esTANDAR.cusubd +".metrica(indice,metrica,comparador,minimo,maximo,sentencia,tipo,operador) "
lcsql = lcsql + " values(" +_screen.esTANDAR.cusubd + ".metrica_id.nextval,'" +ALLTRIM(thisform.tnombre.value) + "','" + thisform.coperador.Value + "','"
lcsql = lcsql + ALLTRIM(thisform.tadvierte.Value) + "','" + ALLTRIM(thisform.tcritico.Value) + "','" +lccadena + "','" + lctipo + "','" + ALLTRIM(_screen.esTANDAR.cusuario) +"')"
liresult = thisform.sqlexec(lcsql,"")IF liresult < 0
men = MESSAGE()thisform.log_error(lcsql)MESSAGEBOX(men,16,_screen.esTANDAR.cmensistema)RETURN
ENDIFENDIF
MESSAGEBOX("Cambios relizados con exito",64,_screen.esTANDAR.cmensistema)thisform.cmdsalir.Click()
1.10 Modulo de Almacenamiento
1.10.1 Archivo de Control
Load
DODEFAULT()
SELECT 0CREATE CURSOR tmpfile(;status c(20),;name c(160),;directorio c(160))
lcsql = "Select * from v$controlfile "liresult = thisform.sqlexec(lcsql,"tmpf")IF liresult < 0
men = MESSAGE()thisform.log_error(lcsql)MESSAGEBOX(men,16,_screen.esTANDAR.cmensistema)RETURN
ENDIF
- 93 -
lcban = ''liban = 0SELECT tmpfSCAN
FOR i=1 TO LEN(ALLTRIM(tmpf.name))lcban = SUBSTR(ALLTRIM(tmpf.name),i,1)IF lcban ='\'
liban = iENDIF
ENDFORlcnombre = SUBSTR(ALLTRIM(tmpf.name),liban+1,LEN(ALLTRIM(tmpf.name)))
SELECT tmpfileAPPEND BLANKreplace tmpfile.status WITH IIF(ISNULL(tmpf.status),'VALID',ALLTRIM(tmpf.status)),;
tmpfile.name WITH ALLTRIM(lcnombre),;tmpfile.directorio WITH SUBSTR(tmpf.name,1,liban)
ENDSCAN
lcsql = "select type,record_size,records_total,records_used from v$controlfile_record_section"lcsql = lcsql + " where type in ('CKPT PROGRESS','DATABASE','DATAFILE','FILENAME','LOG HISTORY','REDOLOG','REDO THREAD','TABLESPACE')"liresult = thisform.sqlexec(lcsql,"tmprecord")IF liresult<0
men = MESSAGE()thisform.log_error(lcsql)MESSAGEBOX(men,64,_screen.esTANDAR.cmensistema)RETURN
ENDIF
Limpia
IF USED("TmpFile")with thisform.pgcontrol.pggeneral.grid1
.Recordsource = ""
.Column1.Controlsource = ""
.Column2.Controlsource = ""
.Column3.Controlsource = ""SELECT TmpFileGO TOP.Recordsource = "TmpFile".Column1.Controlsource = "TmpFile.status".Column2.Controlsource = "TmpFile.name".Column3.Controlsource = "TmpFile.Directorio"
.refreshENDWITH
- 94 -
ENDIF
thisform.pgcontrol.pggeneral.grid1.Refresh
IF USED("TmpRecord")with thisform.pgcontrol.pgrecord.grid1
.Recordsource = ""
.Column1.Controlsource = ""
.Column2.Controlsource = ""
.Column3.Controlsource = ""
.Column4.Controlsource = ""SELECT TmpRecordGO TOP.Recordsource = "TmpRecord".Column1.Controlsource = "TmpRecord.type".Column2.Controlsource = "TmpRecord.record_size".Column3.Controlsource = "TmpRecord.records_total".Column4.Controlsource = "TmpRecord.records_used"
.refreshENDWITH
ENDIF
thisform.pgcontrol.pgrecord.grid1.Refresh
thisform.llena_datos()
Llena_datos
lcbase = _screen.esTANDAR.cdatabaselcsql = "select dbid,name,controlfile_type,to_char(controlfile_created,'dd - month- yyyy hh:mm:ss')controlfile_created,"lcsql = lcsql + " controlfile_sequence# sequence,controlfile_change# change,"lcsql = lcsql + " to_char(controlfile_time,'dd - month- yyyy hh:mm:ss') controlfile_time "lcsql = lcsql + " from v$database where UPPER(RTRIM(name))=UPPER(RTRIM(?lcbase)) "liresult = thisform.sqlexec(lcsql,"tmpInf")IF liresult < 0
men = MESSAGE()thisform.log_error(lcsql)MESSAGEBOX(men,16,_screen.esTANDAR.cmensistema)RETURN
ENDIF
SELECT TmpInfthisform.pgcontrol.pginfo.lbliddata.Caption = ALLTRIM(STR(TmpInf.dbid))thisform.pgcontrol.pginfo.lbltipctrl.Caption = TmpInf.controlfile_typethisform.pgcontrol.pginfo.lblfeccrea.Caption = TmpInf.controlfile_createdthisform.pgcontrol.pginfo.lblnumsec.Caption = ALLTRIM(STR(TmpInf.sequence))thisform.pgcontrol.pginfo.lblnumultcam.Caption = ALLTRIM(STR(TmpInf.change))thisform.pgcontrol.pginfo.lblfecmodi.Caption = TmpInf.controlfile_time
- 95 -
cmdcopia.click
lcsql = "Alter Database backup Controlfile to trace;"liresult = thisform.sqlexec(lcsql,"")IF liresult < 0
men = MESSAGE()thisform.log_error(lcsql)MESSAGEBOX(men,16,_screen.esTANDAR.cmensistema)RETURN
ELSEmen = "Copia realizada con exito.."MESSAGEBOX(men,64,_screen.esTANDAR.cmensistema)thisform.llena_datos()
ENDIF
1.10.2 Tablespaces
Load
DODEFAULT()
SELECT 0CREATE CURSOR TmpTableSpace(;name c(80),;contents c(160),;extent_management c(25),;tamanio n(11,3),;usado n(11,3),;porusado n(11,3))
SELECT TmpTableSpaceINDEX on ALLTRIM(TmpTableSpace.name) TAG llave
thisform.muestra()
limpia
IF USED("TmpTableSpace")with thisform.grid1
.Recordsource = ""
.Column1.Controlsource = ""
- 96 -
.Column2.Controlsource = ""
.Column3.Controlsource = ""
.Column4.Controlsource = ""
.Column5.Controlsource = ""
.Column6.Controlsource = ""SELECT TmpTableSpaceGO TOP.Recordsource = "TmpTableSpace".Column1.Controlsource = "TmpTableSpace.name".Column2.Controlsource = "TmpTableSpace.contents".Column3.Controlsource = "TmpTableSpace.extent_management".Column4.Controlsource = "TmpTableSpace.tamanio".Column5.Controlsource = "TmpTableSpace.usado".Column6.Controlsource = "TmpTableSpace.porusado"
.refreshENDWITH
ENDIF
Muestra
SELECT TmpTableSpaceZAP
lcsql = 'Select t.tablespace_name "Tablespace", t.contents "Tipo", t.extent_management "Gestion",d.file_name, 'lcsql = lcsql + ' ROUND(MAX(d.bytes)/1024/1024,2) "MB_Tamanio", 'lcsql = lcsql + ' ROUND((MAX(d.bytes)/1024/1024) - (SUM(decode(f.bytes, NULL,0, f.bytes))/1024/1024),2)"MB_Usados" 'lcsql = lcsql + ' FROM DBA_FREE_SPACE f, DBA_DATA_FILES d, DBA_TABLESPACES t 'lcsql = lcsql + ' WHERE t.tablespace_name = d.tablespace_name AND f.tablespace_name(+) = d.tablespace_name'lcsql = lcsql + ' AND f.file_id(+) = d.file_id 'lcsql = lcsql + ' GROUP BY t.tablespace_name,t.contents,t.extent_management,d.file_name 'lcsql = lcsql + ' ORDER BY 1,3 DESC 'liresult = thisform.sqlexec(lcsql,"TmpTable")IF liresult < 0
men = MESSAGE()thisform.log_error(lcsql)MESSAGEBOX(men,16,_screen.esTANDAR.cmensistema)RETURN
ENDIF
SELECT TmpTableSCAN
SELECT TmpTableSpaceSEEK ALLTRIM(TmpTable.Tablespace)IF !FOUND()
SELECT TmpTableSpaceAPPEND BLANK
- 97 -
replace TmpTableSpace.name WITHTmpTable.Tablespace,;
TmpTableSpace.contents WITH TmpTable.tipo,;TmpTableSpace.extent_management WITH TmpTable.Gestion,;TmpTableSpace.tamanio WITH
IIF(ISNULL(TmpTable.MB_tamanio),0,TmpTable.MB_tamanio),;TmpTableSpace.usado WITH
IIF(ISNULL(TmpTable.MB_usados),0,TmpTable.MB_usados),;TmpTableSpace.porusado WITH
IIF(ISNULL(TmpTable.MB_usados),0,ROUND((TmpTable.MB_usados *100)/IIF(TmpTable.MB_tamanio=0,1,TmpTable.MB_tamanio),2))
ELSESELECT TmpTableSpacereplace TmpTableSpace.tamanio WITH TmpTableSpace.tamanio +
IIF(ISNULL(TmpTable.MB_tamanio),0,TmpTable.MB_tamanio),;TmpTableSpace.usado WITH
TmpTableSpace.usado + IIF(ISNULL(TmpTable.MB_usados),0,TmpTable.MB_usados),;TmptableSpace.porusado WITH
ROUND((TmpTableSpace.usado * 100)/IIF(TmpTableSpace.tamanio=0,1,TmpTableSpace.tamanio),2)
ENDIFENDSCAN
SELECT TmpTableSpaceGO TOP
Editable.init
LPARAMETERS cnombrelcntable = cnombre
thisform.pgtable.pggeneral.txtnombre.Value = lcntablethisform.limpia()thisform.llena_archivos(lcntable)thisform.inf_status(lcntable)thisform.pgtable.pggeneral.cmdoffline.ListIndex = 1thisform.pgtable.pggeneral.optestado.InteractiveChange()
IF LEN(ALLTRIM(lcntable))=0thisform.pgtable.pggeneral.txtnombre.Enabled = .T.thisform.Caption = 'Crear Tablespace 'thisform.pgtable.pggeneral.cmdagrega.Click()
lcsql = "select value from v$parameter where RTRIM(name)='control_files'"liresult = thisform.sqlexec(lcsql,"tmpname")IF liresult < 0
men = "Error al seleccionar la ruta del tablespace - " + MESSAGE()thisform.log_error(lcsql)MESSAGEBOX(men,16,_screen.esTANDAR.cmensistema)
- 98 -
ENDIF
libar = 0licom = 0SELECT tmpnameFOR i=0 TO LEN(ALLTRIM(Tmpname.value))
IF SUBSTR(ALLTRIM(tmpname.value),i,1)<>','IF SUBSTR(ALLTRIM(tmpname.value),i,1)='\'
libar = iENDIF
ELSEEXIT
ENDIFENDFOR
SELECT TmpFileGO TOPreplace TmpFile.nombre WITH '.ora'replace TmpFile.ruta WITH UPPER(SUBSTR(ALLTRIM(Tmpname.value),1,libar))replace TmpFile.peso WITH 'MB'replace TmpFile.tamanio WITH 5
cruta = UPPER(SUBSTR(ALLTRIM(Tmpname.value),1,libar))thisform.pgtable.pggeneral.grid1.Refresh()thisform.pgtable.pggeneral.grid1.column1.text1.InteractiveChange()thisform.pgtable.page2.optregistro.optsi.Value = 1thisform.pgtable.page2.optregistro.optno.Value = 0thisform.cmdsql.Click()thisform.pgtable.pggeneral.chkestado.Enabled = .F.
thisform.pgtable.page2.optgestion.optdiccionario.Value = 0thisform.pgtable.page2.optgestion.optdiccionario.Enabled = .F.thisform.pgtable.page2.optgestion.optlocal.Value = 1thisform.pgtable.page2.optgestion.optlocal.Enabled = .T.thisform.pgtable.page2.optasigna.optautoma.Enabled = .T.thisform.pgtable.page2.optasigna.optautoma.Value = 1thisform.pgtable.page2.optasigna.optuniforme.Enabled = .T.thisform.pgtable.page2.optasigna.optuniforme.Value = 0thisform.pgtable.page2.optasigna.InteractiveChange()
thisform.pgtable.page2.optsigue.optautoma.Value = 1thisform.pgtable.page2.optsigue.optautoma.Enabled = .T.thisform.pgtable.page2.optsigue.optuniforme.Value = 0thisform.pgtable.page2.optsigue.optuniforme.Enabled = .T.
thisform.pgtable.pggeneral.opttipo.optdeshacer.Enabled = .T.thisform.pgtable.pggeneral.opttipo.optpermanente.Enabled = .T.thisform.pgtable.pggeneral.opttipo.opttemporal.Enabled = .T.
thisform.pgtable.pggeneral.opttipo.optdeshacer.Value = 0thisform.pgtable.pggeneral.opttipo.opttemporal.Value = 0thisform.pgtable.pggeneral.opttipo.optpermanente.Value = 1
thisform.pgtable.pggeneral.opttipo.InteractiveChange()
- 99 -
thisform.pgtable.pggeneral.txtnombre.SetFocus()
ELSEthisform.Caption = 'Editar Tablespace: ' + ALLTRIM(lcntable)
ENDIF
Load
DODEFAULT()thisform.crear_cursor()PUBLIC cRuta,lifocos,lidatafilecRuta = ''lifocos = 0lidatafile = 0
buscacambios
thisform.busccamarcprin()thisform.buscacamestado()
*thisform.busca_cambiosarch()
Busca_cambiosarch
SELECT TmpCambiosSCAN
IF TmpCambios.status <> 'N'lcsql = ''SELECT TmpCambiosIF ALLTRIM(TmpCambios.nameact)<>ALLTRIM(TmpCambios.namenew)
lcsql = "ALTER DATABASE RENAME FILE '" + ALLTRIM(TmpCambios.nameact) + "'TO "
lcsql = lcsql + "'" + ALLTRIM(TmpCambios.namenew) + "';"ENDIF
- 100 -
IF ALLTRIM(TmpCambios.estadoact)<>ALLTRIM(TmpCambios.estadonew)lcsql = lcsql + " ALTER DATABASE DATAFILE '" + ALLTRIM(TmpCambios.namenew)lcsql = lcsql + "' " + ALLTRIM(TmpCambios.estadonew) + " ;"
ENDIF
IF Tmpcambios.tamact <> TmpCambios.tamnewlcsql = lcsql + " ALTER DATABASE DATAFILE '" + ALLTRIM(TmpCambios.namenew)lcsql = lcsql + "' RESIZE " + ALLTRIM(STR(TmpCambios.tamnew,10)) +
SUBSTR(TmpCambios.pesotamnew,1,1)ELSE
IF ALLTRIM(TmpCambios.pesotamnew) <> ALLTRIM(Tmpcambios.pesotamact)lcsql = lcsql + " ALTER DATABASE DATAFILE '" +
ALLTRIM(TmpCambios.namenew)lcsql = lcsql + "' RESIZE " + ALLTRIM(STR(TmpCambios.tamnew,10)) +
SUBSTR(TmpCambios.pesotamnew,1,1) + ";"ENDIF
ENDIF
lcsql1 = ''lcsql2 = ''libandera = .f.
IF TmpCambios.autoextnew <> TmpCambios.autoextactIF ALLTRIM(TmpCambios.autoextnew) = 'NO'
lcsql1 = lcsql1 + " ALTER DATABASE DATAFILE '" +ALLTRIM(TmpCambios.namenew)
lcsql1 = lcsql1 + "' AUTOEXTEND OFF;"libandera = .t.
ELSElcsql1 = lcsql1 + " ALTER DATABASE DATAFILE '" +
ALLTRIM(TmpCambios.namenew)lcsql1 = lcsql1 + "' AUTOEXTEND ON "
ENDIFELSE
IF ALLTRIM(TmpCambios.autoextnew) = 'YES'lcsql1 = lcsql1 + " ALTER DATABASE DATAFILE '" +
ALLTRIM(TmpCambios.namenew)lcsql1 = lcsql1 + "' AUTOEXTEND ON "
ENDIFENDIF
lcsql2 = lcsql1
IF !libanderaIF TmpCambios.increnew <> TmpCambios.increact
lcsql1 = lcsql1 + " NEXT " + ALLTRIM(STR(TmpCambios.increnew,10)) +SUBSTR(TmpCambios.pesoincrenew,1,1) + " "
ELSEIF ALLTRIM(TmpCambios.pesoincrenew) <>
ALLTRIM(TmpCambios.pesoincreact)lcsql1 = lcsql1 + " NEXT " +
ALLTRIM(STR(TmpCambios.increnew,10)) + SUBSTR(TmpCambios.pesoincrenew,1,1) + " "ENDIF
ENDIF
- 101 -
IF TmpCambios.noliminew <> TmpCambios.nolimiactIF TmpCambios.noliminew = 'NO'
IF TmpCambios.valornew <> TmpCambios.valoractlcsql1 = lcsql1 + " MAXSIZE " +
ALLTRIM(STR(TmpCambios.valornew,10)) + SUBSTR(TmpCambios.pesovalnew,1,1) + ";"ELSE
IF ALLTRIM(TmpCambios.pesovalnew) <>ALLTRIM(TmpCambios.pesovalact)
lcsql1 = lcsql1 + " MAXIZE " +ALLTRIM(STR(TmpCambios.valornew,10)) + SUBSTR(TmpCambios.pesovalnew,1,1) + ";"
ENDIFENDIF
ELSElcsql1 = lcsql1 + " MAXSIZE UNLIMITED;"
ENDIFENDIF
ENDIF
thisform.editSql.value = thisform.editSql.value + lcsql +IIF(ALLTRIM(lcsql1)<>ALLTRIM(lcsql2),lcsql1,IIF(libandera=.f.,'',lcsql1))
ENDIFENDSCAN
Busca_cambioslista
lcsql = ''thisform.editSql.Value = ''SELECT TmpFileln = RECNO('TmpFile')SELECT TmpFileSCAN
SELECT TmpRFileSEEK TmpFile.file_idIF FOUND()
IF ALLTRIM(tmprfile.nombre)<>ALLTRIM(tmpfile.nombre)lcsql = "ALTER DATABASE RENAME FILE '" +
ALLTRIM(tmprfile.ruta)+ALLTRIM(tmprfile.nombre) + "' TO '"lcsql = lcsql + ALLTRIM(tmpfile.ruta)+ALLTRIM(tmpfile.nombre) + "'; "
ENDIFthisform.editSql.Value = thisform.editSql.Value + lcsql
ENDIFENDSCAN
SELECT TmpFileGO ln
- 102 -
Buscacamestado
cnametable = ALLTRIM(thisform.pgtable.pggeneral.txtnombre.Value)lcsql = "Selectstatus,contents,extent_management,allocation_type,segment_space_management,logging,block_size,initial_extent "lcsql = lcsql + " from dba_tablespaces where tablespace_name=?cnametable"liresult = thisform.sqlexec(lcsql,"tmp2")IF liresult < 0
men = MESSAGE()thisform.log_error(lcsql)MESSAGEBOX(men,16,_screen.esTANDAR.cmensistema)RETURN
ENDIF
lcsql = ''SELECT tmp2GO TOPIF thisform.pgtable.pggeneral.txtnombre.Enabled = .F.
IF thisform.pgtable.pggeneral.optestado.optonline.Value = 1IF ALLTRIM(tmp2.status)=='OFFLINE'
lcsql = "Alter Tablespace " + cnametable + " OFFLINE " +ALLTRIM(thisform.pgtable.pggeneral.cmdoffline.Value) + ";"
ENDIF
IF ALLTRIM(tmp2.status)=='READ ONLY'IF thisform.pgtable.pggeneral.chkestado.Value = 0
lcsql = "ALTER TABLESPACE " + cnametable + " READ WRITE; "ENDIF
ELSEIF thisform.pgtable.pggeneral.chkestado.Value = 1
lcsql = "ALTER TABLESPACE " + cnametable + " READ ONLY; "ENDIF
ENDIFELSE
IF ALLTRIM(tmp2.status)=='OFFLINE'lcsql = "Alter Tablespace " + cnametable + " ONLINE; "
ELSEctipo = ' 'DO CASE
CASE ALLTRIM(thisform.pgtable.pggeneral.cmdoffline.Value)=='Temporal'ctipo = 'TEMPORARY'
CASE ALLTRIM(thisform.pgtable.pggeneral.cmdoffline.Value)=='Inmediato'ctipo = 'INMEDIATE'
CASE ALLTRIM(thisform.pgtable.pggeneral.cmdoffline.Value)=='ParaRecuperar'
ctipo = 'FOR RECOVER'
OTHERWISEctipo = 'NORMAL'
ENDCASE
- 103 -
lcsql = "Alter Tablespace " + cnametable + " OFFLINE " + ctipo + ";"ENDIF
ENDIF
IF thisform.pgtable.page2.optregistro.optsi.Value = 1IF ALLTRIM(tmp2.logging)=='NOLOGGING'
lcsql = lcsql + " ALTER TABLESPACE " + cnametable + " LOGGING;"ENDIF
ELSEIF ALLTRIM(tmp2.logging)=='LOGGING'
lcsql = lcsql + " ALTER TABLESPACE " + cnametable + " NOLOGGING;"ENDIF
ENDIFENDIF
thisform.editSql.Value = ALLTRIM(thisform.editSql.Value) + lcsql
buscacamarcprin
lcsql = ''thisform.pgtable.pggeneral.grid1.Refreshlidatafile = 0IF thisform.pgtable.pggeneral.txtnombre.Enabled
lcsql = "CREATE"
DO CASECASE thisform.pgtable.pggeneral.opttipo.opttemporal.value = 1
lcsql = lcsql + " TEMPORARY"
CASE thisform.pgtable.pggeneral.opttipo.optdeshacer.Value = 1lcsql = lcsql + " UNDO"
ENDCASE
lcsql = lcsql + " TABLESPACE " + ALLTRIM(thisform.pgtable.pggeneral.txtnombre.Value)
DO CASECASE thisform.pgtable.pggeneral.opttipo.opttemporal.value = 1
lcsql = lcsql + " TEMPFILE"
CASE thisform.pgtable.pggeneral.opttipo.optpermanente.Value = 1IF thisform.pgtable.page2.optregistro.optsi.Value = 1
lcsql = lcsql + " LOGGING"ELSE
lcsql = lcsql + " NOLOGGING"ENDIF
- 104 -
lcsql = lcsql + " DATAFILE"ENDCASE
ENDIF
SELECT TmpFilelipos = RECNO('TmpFile')
SELECT TmpFilelinum = RECCOUNT()licnt = 0SELECT TmpFileGO TOPSCAN
licnt = licnt + 1SELECT TmpRFileSEEK TmpFile.file_idIF FOUND()
IF ALLTRIM(TmpFile.nombre)<>ALLTRIM(TmpRFile.nombre)lcsql = "ALTER DATABASE RENAME FILE '" +
ALLTRIM(TmpRFile.ruta)+ALLTRIM(TmpRFIle.nombre) + "' TO "lcsql = lcsql + "'" + ALLTRIM(TmpFile.ruta)+ALLTRIM(TmpFile.nombre) + "';"
ENDIF
IF ALLTRIM(TmpFile.estadoact)<>ALLTRIM(TmpRFile.estadoact)lcsql = lcsql + " ALTER DATABASE DATAFILE '" + ALLTRIM(TmpFile.ruta) +
ALLTRIM(TmpFile.nombre)lcsql = lcsql + "' " + ALLTRIM(TmpFile.estadoact) + " ;"
ENDIF
IF TmpFile.tamanio <> TmpRFile.tamaniolcsql = lcsql + " ALTER DATABASE DATAFILE '" + ALLTRIM(TmpFile.ruta) +
ALLTRIM(TmpFile.nombre)lcsql = lcsql + "' RESIZE " + ALLTRIM(STR(TmpFile.tamanio,10)) + TmpFile.peso +
";"ELSE
IF ALLTRIM(TmpFile.peso) <> ALLTRIM(TmpRFile.peso)lcsql = lcsql + " ALTER DATABASE DATAFILE '" +
ALLTRIM(TmpFile.ruta)+ALLTRIM(TmpFile.nombre)lcsql = lcsql + "' RESIZE " +
ALLTRIM(STR(TmpFile.tamanio,10))+TmpFile.peso + ";"ENDIF
ENDIF
lcsql1 = ''lcsql2 = ''libandera = .f.IF TmpFile.autoextact <> TmpRFile.autoextact
IF ALLTRIM(TmpFile.autoextact) = 'NO'lcsql1 = lcsql1 + " ALTER DATABASE DATAFILE '" +
ALLTRIM(TmpFile.ruta) + ALLTRIM(TmpFile.nombre)lcsql1 = lcsql1 + "' AUTOEXTEND OFF;"libandera = .t.
ELSE
- 105 -
lcsql1 = lcsql1 + " ALTER DATABASE DATAFILE '" +ALLTRIM(TmpFile.ruta) + ALLTRIM(TmpFile.nombre)
lcsql1 = lcsql1 + "' AUTOEXTEND ON "ENDIF
ELSEIF ALLTRIM(TmpFile.autoextact) = 'YES'
lcsql1 = lcsql1 + " ALTER DATABASE DATAFILE '" +ALLTRIM(TmpFile.ruta) + ALLTRIM(TmpFile.nombre)
lcsql1 = lcsql1 + "' AUTOEXTEND ON "ENDIF
ENDIF
lcsql2 = lcsql1
IF !libanderaIF TmpFile.increact <> TmpRFile.increact
lcsql1 = lcsql1 + " NEXT " + ALLTRIM(STR(TmpFile.increact,10)) +SUBSTR(TmpFile.pesoincreact,1,1) + " "
ELSEIF ALLTRIM(TmpFile.pesoincreact) <> ALLTRIM(TmpRFile.pesoincreact)
lcsql1 = lcsql1 + " NEXT " +ALLTRIM(STR(TmpRFile.increact,10)) + SUBSTR(TmpRFile.pesoincreact,1,1) + " "
ENDIFENDIFIF TmpFile.nolimiact <> TmpRFile.nolimiact
IF TmpFile.nolimiact = 'NO'IF TmpFile.valoract <> TmpRFile.valoract
lcsql1 = lcsql1 + " MAXSIZE " +ALLTRIM(STR(TmpFile.valoract,10)) + SUBSTR(TmpFile.pesovalact,1,1) + ";"
ELSEIF ALLTRIM(TmpFile.pesovalact) <>
ALLTRIM(TmpRFile.pesovalact)lcsql1 = lcsql1 + " MAXIZE " +
ALLTRIM(STR(TmpFile.valoract,10)) + SUBSTR(TmpFile.pesovalact,1,1) + ";"ENDIF
ENDIFELSE
lcsql1 = lcsql1 + " MAXSIZE UNLIMITED;"ENDIF
ELSEIF TmpFile.nolimiact = 'NO'
IF TmpFile.valoract <> TmpRFile.valoractlcsql1 = lcsql1 + " MAXSIZE " +
ALLTRIM(STR(TmpFile.valoract,10)) + SUBSTR(TmpFile.pesovalact,1,1) + ";"ELSE
IF ALLTRIM(TmpFile.pesovalact) <>ALLTRIM(TmpRFile.pesovalact)
lcsql1 = lcsql1 + " MAXIZE " +ALLTRIM(STR(TmpFile.valoract,10)) + SUBSTR(TmpFile.pesovalact,1,1) + ";"
ENDIFENDIF
ENDIFENDIF
ENDIF
- 106 -
lcsql = lcsql + IIF(ALLTRIM(lcsql1)<>ALLTRIM(lcsql2),lcsql1,IIF(libandera=.f.,'',lcsql1))
ELSEIF thisform.pgtable.pggeneral.txtnombre.Enabled = .F.
IF LEN(ALLTRIM(TmpFile.nombre)) > 0 OR LEN(ALLTRIM(TmpFile.ruta))>0lcsql = lcsql + " ALTER TABLESPACE " +
ALLTRIM(thisform.pgtable.pggeneral.txtnombre.Value) + " ADD "lcsql = lcsql + " DATAFILE '" + ALLTRIM(TmpFile.ruta) +
ALLTRIM(TmpFile.nombre) + "' SIZE " + ALLTRIM(STR(TmpFile.tamanio,10)) + SUBSTR(TmpFile.peso,1,1)ENDIF
IF TmpFile.reutiliza = 1lcsql = lcsql + " REUSE"
ENDIFELSE
lcsql = lcsql + IIF(licnt=1,"",",") + " '" + ALLTRIM(TmpFile.ruta) +ALLTRIM(TmpFile.nombre) + "' SIZE " + ALLTRIM(STR(TmpFile.tamanio,10)) + SUBSTR(TmpFile.peso,1,1)
ENDIF
lcsql1 = ''lcsql2 = ''libandera = .f.lientre = 0
IF ALLTRIM(TmpFile.autoextact) = 'YES'lcsql1 = lcsql1 + " AUTOEXTEND ON"libandera = .t.
ENDIF
lcsql2 = lcsql1IF libandera
IF TmpFile.increact > 0lcsql1 = lcsql1 + " NEXT " + ALLTRIM(STR(TmpFile.increact,10)) +
SUBSTR(TmpFile.pesoincreact,1,1)ENDIF
IF TmpFile.nolimiact = 'NO'IF TmpFile.valoract > 0
lcsql1 = lcsql1 + " MAXSIZE " +ALLTRIM(STR(TmpFile.valoract,10)) + SUBSTR(TmpFile.pesovalact,1,1)
ENDIFELSE
lcsql1 = lcsql1 + " MAXSIZE UNLIMITED"ENDIF
lcsql = lcsql + IIF(ALLTRIM(lcsql1)<>ALLTRIM(lcsql2),lcsql1,IIF(libandera=.f.,'',lcsql1))ENDIF
IF thisform.pgtable.pggeneral.txtnombre.Enabled = .F.lcsql = lcsql + ";"
ENDIFENDIF
- 107 -
ENDSCAN
IF thisform.pgtable.pggeneral.opttipo.optdeshacer.Value = 0IF thisform.pgtable.pggeneral.txtnombre.Enabled = .T.
lcsql = lcsql + " EXTENT MANAGEMENT LOCAL"
IF thisform.pgtable.pggeneral.optestado.EnabledIF thisform.pgtable.pggeneral.optestado.optonline.Value = 1
lcsql = lcsql + ""ELSE
lcsql = lcsql + " OFFLINE"ENDIF
ENDIF
IF thisform.pgtable.page2.optasigna.optautoma.Value = 1lcsql = lcsql + ""
ELSElcsql = lcsql + " UNIFORM"IF thisform.pgtable.page2.txttam.Value > 0
lcsql = lcsql + ' SIZE ' +ALLTRIM(STR(thisform.pgtable.page2.txttam.Value)) + SUBSTR(thisform.pgtable.page2.cmbtamanio.Value,1,1)
ENDIFENDIF
DO CASECASE thisform.pgtable.pggeneral.opttipo.optpermanente.Value = 1
lcsql = lcsql + " SEGMENT SPACE MANAGEMENT"IF thisform.pgtable.page2.optsigue.optautoma.Value = 1
lcsql = lcsql + " AUTO"ELSE
lcsql = lcsql + " MANUAL"ENDIF
ENDCASElcsql = lcsql + ";"
ENDIFENDIF
IF thisform.pgtable.pggeneral.chktipo.Value = 1lcsql = lcsql + " ALTER DATABASE DEFAULT TEMPORARY TABLESPACE " +
ALLTRIM(thisform.pgtable.pggeneral.txtnombre.Value)+";"ENDIF
IF linum > 0SELECT TmpFileGO lipos
ENDIF
thisform.editSql.Value = lcsql
- 108 -
Crear_cursor
SELECT 0CREATE CURSOR tmpfile(;nombre c(160),;ruta c(160),;tamanio n(10),;usado n(10,6),;status c(1),;peso c(2),;file_id n(10),;tam n(10,6),;nameact c(160),;estadoact c(160),;tamact n(10),;pesotamact c(2),;autoextact c(3),;increact n(10),;pesoincreact c(2),;valoract n(10),;pesovalact c(2),;nolimiact c(2),;reutiliza n(1),;status1 c(1))
SELECT 0CREATE CURSOR TmpRFile(;nombre c(160),;ruta c(160),;tamanio n(10),;usado n(10,6),;status c(1),;peso c(2),;file_id n(10),;tam n(10,6),;nameact c(160),;estadoact c(160),;tamact n(10),;pesotamact c(2),;autoextact c(3),;increact n(10),;pesoincreact c(2),;valoract n(10),;pesovalact c(2),;nolimiact c(2),;reutiliza n(1),;status1 c(1))
SELECT TmpRFileINDEX on TmpRFile.file_id TAG llave
- 109 -
SELECT 0CREATE CURSOR tmpcambios(;nameact c(160),;namenew c(160),;estadoact c(160),;estadonew c(160),;tamnew n(10),;pesotamnew c(2),;autoextnew c(3),;increnew n(10),;pesoincrenew c(2),;valornew n(10),;pesovalnew c(2),;tamact n(10),;pesotamact c(2),;autoextact c(3),;increact n(10),;pesoincreact c(2),;valoract n(10),;pesovalact c(2),;nolimiact c(2),;noliminew c(2),;file_id n(10),;reutiliza n(1),;status c(1))
SELECT TmpcambiosINDEX on TmpCambios.file_id TAG llave
Inf_status
LPARAMETERS ctablecnametable = ctable
lcsql = "Selectstatus,contents,extent_management,allocation_type,segment_space_management,logging,block_size,initial_extent "lcsql = lcsql + " from dba_tablespaces where tablespace_name=?cnametable"liresult = thisform.sqlexec(lcsql,"tmp2")IF liresult < 0
men = MESSAGE()thisform.log_error(lcsql)MESSAGEBOX(men,16,_screen.esTANDAR.cmensistema)RETURN
ENDIF
SELECT tmp2GO TOPDO CASE
- 110 -
CASE ALLTRIM(tmp2.status)=='ONLINE'thisform.pgtable.pggeneral.optestado.optonline.Value = 1thisform.pgtable.pggeneral.optestado.optOffline.Value = 0thisform.pgtable.pggeneral.chkestado.Value = 0thisform.pgtable.pggeneral.cmdoffline.Enabled = .F.
CASE ALLTRIM(tmp2.status)=='OFFLINE'thisform.pgtable.pggeneral.optestado.optonline.Value = 0thisform.pgtable.pggeneral.optestado.optOffline.Value = 1thisform.pgtable.pggeneral.cmdoffline.Enabled = .T.
CASE ALLTRIM(tmp2.status)=='READ ONLY'thisform.pgtable.pggeneral.optestado.optonline.Value = 1thisform.pgtable.pggeneral.optestado.optOffline.Value = 0thisform.pgtable.pggeneral.chkestado.Value = 1
ENDCASE
SELECT tmp2GO TOPDO CASE
CASE ALLTRIM(tmp2.contents)=='PERMANENT'thisform.pgtable.pggeneral.opttipo.optpermanente.Value = 1thisform.pgtable.pggeneral.opttipo.optdeshacer.Value = 0thisform.pgtable.pggeneral.opttipo.opttemporal.Value = 0
CASE ALLTRIM(tmp2.contents)=='TEMPORARY'thisform.pgtable.pggeneral.opttipo.optpermanente.Value = 0thisform.pgtable.pggeneral.opttipo.optdeshacer.Value = 0thisform.pgtable.pggeneral.opttipo.opttemporal.Value = 1
CASE ALLTRIM(tmp2.contents)=='UNDO'thisform.pgtable.pggeneral.opttipo.optpermanente.Value = 0thisform.pgtable.pggeneral.opttipo.optdeshacer.Value = 1thisform.pgtable.pggeneral.opttipo.opttemporal.Value = 0
thisform.pgtable.page2.optregistro.Enabled = .F.
ENDCASE
thisform.pgtable.pggeneral.opttipo.InteractiveChange()
SELECT tmp2GO TOPIF ALLTRIM(tmp2.extent_management)=='LOCAL'
thisform.pgtable.page2.optgestion.optlocal.Value = 1thisform.pgtable.page2.optgestion.optdiccionario.Enabled = .F.thisform.pgtable.page2.optgestion.optlocal.Enabled = .T.thisform.pgtable.page2.optgestion.optdiccionario.Value = 0
ELSEthisform.pgtable.page2.optgestion.optlocal.Value = 0thisform.pgtable.page2.optgestion.optdiccionario.Enabled = .T.thisform.pgtable.page2.optgestion.optlocal.Enabled = .F.
- 111 -
thisform.pgtable.page2.optgestion.optdiccionario.Value = 1ENDIF
SELECT tmp2GO TOPIF ALLTRIM(tmp2.allocation_type)=='SYSTEM'
thisform.pgtable.page2.optasigna.optautoma.Value = 1thisform.pgtable.page2.optasigna.optuniforme.Value = 0
ELSEthisform.pgtable.page2.optasigna.optautoma.Value = 0thisform.pgtable.page2.optasigna.optuniforme.Value = 1
ENDIFSELECT tmp2GO TOPIF ALLTRIM(tmp2.logging)=='LOGGING'
thisform.pgtable.page2.optregistro.optsi.Value = 1thisform.pgtable.page2.optregistro.optno.Value = 0
ELSEthisform.pgtable.page2.optregistro.optsi.Value = 0thisform.pgtable.page2.optregistro.optno.Value = 1
ENDIFSELECT tmp2thisform.pgtable.page2.txtblock.Value = tmp2.block_sizethisform.pgtable.page2.txttam.Value = tmp2.initial_extent/1024thisform.pgtable.page2.cmbtamanio.ListIndex = 1
thisform.pgtable.page2.optasigna.InteractiveChange()
limpia
IF USED("TmpFile")with thisform.pgtable.pggeneral.grid1
.Recordsource = ""
.Column1.Controlsource = ""
.Column2.Controlsource = ""
.Column3.Controlsource = ""
.Column4.Controlsource = ""
.Column5.Controlsource = ""SELECT TmpFileZAP.Recordsource = "TmpFile".Column1.Controlsource = "TmpFile.nombre".Column2.Controlsource = "TmpFile.ruta".Column3.Controlsource = "TmpFile.tamanio".Column4.ControlSource = "TmpFile.peso".column5.COntrolSource = "TmpFile.usado"
.refreshENDWITH
ENDIF*!* .Column4.ControlSource = "TmpFile.peso"*!*
- 112 -
Llena_archivos
LPARAMETERS ctablespacectable = UPPER(ctablespace)lcsql = "Select d.file_id,d.file_name,MAX(d.bytes)/1024/1024 MB_Tamanio, "lcsql = lcsql + " ROUND((MAX(d.bytes)/1024/1024) - (SUM(decode(f.bytes, NULL,0,
f.bytes))/1024/1024),3) MB_Usados "lcsql = lcsql + " FROM DBA_FREE_SPACE f, DBA_DATA_FILES d, DBA_TABLESPACES t "lcsql = lcsql + " WHERE t.tablespace_name = d.tablespace_name AND f.tablespace_name(+) =
d.tablespace_name "lcsql = lcsql + " AND f.file_id(+) = d.file_id and RTRIM(t.tablespace_name)=RTRIM(?ctable) "lcsql = lcsql + " GROUP BY d.file_id,t.tablespace_name,t.contents,t.extent_management,d.file_name "liresult = thisform.sqlexec(lcsql,"tmp1")IF liresult < 0
men = MESSAGE()thisform.log_error(lcsql)MESSAGEBOX(men,16,_screen.esTANDAR.cmensistema)RETURN
ENDIF
lcname = ''liindice = 0SELECT tmp1SCAN
FOR i=1 TO LEN(ALLTRIM(tmp1.file_name))IF SUBSTR(ALLTRIM(tmp1.file_name),i,1)='\'
liindice = iENDIF
ENDFOR
lcname = SUBSTR(ALLTRIM(tmp1.file_name),liindice+1,i)litam = tmp1.mb_tamanio - INT(tmp1.mb_tamanio*100)/100SELECT tmpfileAPPEND BLANKreplace tmpfile.nombre WITH lcname,;
tmpfile.ruta WITH SUBSTR(ALLTRIM(tmp1.file_name),1,liindice),;tmpfile.tamanio WITH
IIF(litam=0,tmp1.mb_tamanio,tmp1.mb_tamanio*1024),;tmpfile.usado WITH
IIF(litam=0,tmp1.mb_usados,tmp1.mb_usados*1024),;tmpfile.status WITH 'O',;tmpfile.peso WITH IIF(litam=0,'MB','KB'),;tmpfile.file_id WITH tmp1.file_id,;tmpfile.tam WITH tmp1.mb_usados
cRuta = ALLTRIM(TmpFile.ruta)
SELECT TmpFileSCATTER MEMVARSELECT TmpRFileAPPEND BLANKGATHER MEMVAR
- 113 -
SELECT TmpRFilelipos = RECNO('TmpRFile')
thisform.llena_archivos2(ALLTRIM(TmpFile.ruta)+ALLTRIM(TmpFile.nombre),thisform.pgtable.pggeneral.txtnombre.Value,lipos,TmpFile.file_id,TmpFile.status,tmpfile.tamanio,tmpfile.peso)
ENDSCAN
SELECT TmpFileGO TOPthisform.pgtable.pggeneral.grid1.Refresh
llena_archivos2
LPARAMETERS cname,ctable,isesion,ifileid,cstatus,itamanio,cpeso
SELECT TmpRFileGO isesion
SELECT TmpFileGO isesion
i_File = ifileidlcname = cname
SELECT TmpRFilereplace TmpRFile.nameact WITH cname
SELECT TmpFilereplace TmpFile.nameact WITH cname
lcsql = " select * from v$datafile where RTRIM(name)=RTRIM(?lcname)"liresult = thisform.sqlexec(lcsql,"Tfiles")IF liresult < 0
men = MESSAGE()thisform.log_error(lcsql)MESSAGEBOX(men,16,_screen.esTANDAR.cmensistema)RETURN
ENDIF
SELECT TfilesGO TOP
SELECT TmpRFilereplace TmpRFile.estadoact WITH ALLTRIM(Tfiles.status)
SELECT TmpFilereplace TmpFile.estadoact WITH ALLTRIM(Tfiles.status)
IF cstatus = 'N'SELECT TmpRFile
- 114 -
replace TmpRFile.tamact WITH itamanio
SELECT TmpFilereplace TmpFile.tamact WITH itamanio
IF cpeso = 'KB'SELECT TmpRFilereplace TmpRFile.pesotamact WITH 'KB'
SELECT TmpFilereplace TmpFile.pesotamact WITH 'KB'
ELSESELECT TmpRFilereplace TmpRFile.pesotamact WITH 'MB'
SELECT TmpFilereplace TmpFile.pesotamact WITH 'MB'
ENDIFELSE
litam = Tfiles.bytes/1024/1024lipeso = litam - INT(litam*100)/100IF lipeso = 0
SELECT TmpRFilereplace TmpRFile.tamact WITH litamreplace TmpRFile.pesotamact WITH 'MB'
SELECT TmpFilereplace TmpFile.tamact WITH litamreplace TmpFile.pesotamact WITH 'MB'
ELSESELECT TmpRFilereplace TmpRFile.tamact WITH litam *1024replace TmpRFile.pesotamact WITH 'KB'
SELECT TmpFilereplace TmpFile.tamact WITH litam *1024replace TmpFile.pesotamact WITH 'KB'
ENDIFENDIF
lcsql = " select * from dba_data_files where RTRIM(file_name)=RTRIM(?lcname)"liresult = thisform.sqlexec(lcsql,"Tfiles1")IF liresult < 0
men = MESSAGE()thisform.log_error(lcsql)MESSAGEBOX(men,16,_screen.esTANDAR.cmensistema)RETURN
ENDIF
SELECT Tfiles1
SELECT TmpRFilereplace TmpRFile.autoextact WITH Tfiles1.autoextensible
- 115 -
SELECT TmpFilereplace TmpFile.autoextact WITH Tfiles1.autoextensible
lcsql = "select value/1024 value from v$parameter where name='db_block_size'"liresult = thisform.sqlexec(lcsql,"tmpsize")IF liresult < 0
men = MESSAGE()thisform.log_error(lcsql)MESSAGEBOX(men,16,_screen.esTANDAR.cmensistema)RETURN
ENDIF
SELECT tmpsizeGO TOPlitam = (Tfiles1.increment_by * tmpsize.value)/1024lipeso = litam - INT(litam*100)/100IF lipeso=0
SELECT TmpRFilereplace TmpRFile.increact WITH (Tfiles1.increment_by * tmpsize.value)/1024replace TmpRFile.pesoincreact WITH 'MB'
SELECT TmpFilereplace TmpFile.increact WITH (Tfiles1.increment_by * tmpsize.value)/1024replace TmpFile.pesoincreact WITH 'MB'
ELSESELECT TmpRFilereplace TmpRFile.increact WITH Tfiles1.increment_by * tmpsize.valuereplace TmpRFile.pesoincreact WITH 'KB'
SELECT TmpFilereplace TmpFile.increact WITH Tfiles1.increment_by * tmpsize.valuereplace TmpFile.pesoincreact WITH 'KB'
ENDIF
SELECT Tfiles1litam = (Tfiles1.maxbytes/1024)/1024lipeso = litam - INT(litam*100)/100IF lipeso = 0 OR INT(litam) = 16383
IF INT(litam) = 16383SELECT TmpRFilereplace TmpRFile.valoract WITH INT(litam)replace TmpRFile.pesovalact WITH 'MB'replace TmpRFile.nolimiact WITH 'NO'
SELECT TmpFilereplace TmpFile.valoract WITH INT(litam)replace TmpFile.pesovalact WITH 'MB'replace TmpFile.nolimiact WITH 'NO'
ELSESELECT TmpRFilereplace TmpRFile.valoract WITH INT(litam)replace TmpRFile.pesovalact WITH 'MB'replace TmpRFile.nolimiact WITH 'NO'
- 116 -
SELECT TmpFilereplace TmpFile.valoract WITH INT(litam)replace TmpFile.pesovalact WITH 'MB'replace TmpFile.nolimiact WITH 'NO'
ENDIFELSE
SELECT TmpRFilereplace TmpRFile.valoract WITH litam * 1024replace TmpRFile.pesovalact WITH 'KB'replace TmpRFile.nolimiact WITH 'NO'
SELECT TmpFilereplace TmpFile.valoract WITH litam * 1024replace TmpFile.pesovalact WITH 'KB'replace TmpFile.nolimiact WITH 'NO'
ENDIF
Cmdaceptar.clik
IF !EMPTY(thisform.editsql.Value)lcsql = ALLTRIM(thisform.editsql.Value)libandera = 0lcsqlT = ""FOR i=0 TO LEN(lcsql)
lcsqlT = lcsqlT + SUBSTR(lcsql,i,1)IF SUBSTR(lcsql,i,1) = ";"
liresult = thisform.sqlexec(lcsqlT,"")IF liresult < 0
men = MESSAGE()thisform.log_error(lcsqlT)MESSAGEBOX(men,16,_screen.esTANDAR.cmensistema)RETURN
ENDIFlcsqlT = ""
ENDIFENDFOR
ENDIF
thisform.editsql.Value = ""thisform.Release
frmelimina.click()
lcsql = ''
lcsql = "DRop Tablespace " + elitable
- 117 -
IF thisform.chksystem.Value = 1lcsql = lcsql + " INCLUDING CONTENTS AND DATAFILES"
ENDIF
liresult = thisform.sqlexec(lcsql,"")IF liresult < 0
men = MESSAGE()thisform.log_error(lcsql)MESSAGEBOX(men,16,_screen.esTANDAR.cmensistema)RETURN
ENDIF
thisform.Release
manarch.click()
SELECT tmpcambiosSEEK i_FileIF FOUND()
replace tmpcambios.namenew WITH ALLTRIM(thisform.txtnombre.Value)replace tmpcambios.estadonew WITH
IIF(thisform.optestado.optonline.Value=1,'ONLINE','OFFLINE')replace tmpcambios.tamnew WITH thisform.txttam.Valuereplace tmpcambios.pesotamnew WITH thisform.cmbtamanio.Valuereplace tmpcambios.autoextnew WITH IIF(thisform.chkautoextend.Value = 1,'YES','NO')replace tmpcambios.increnew WITH thisform.txtincrementa.Valuereplace tmpcambios.pesoincrenew WITH thisform.cmbincre.Valuereplace tmpcambios.valornew WITH thisform.txtvalor.Valuereplace tmpcambios.pesovalnew WITH thisform.cmbvalor.Valuereplace tmpcambios.noliminew WITH IIF(thisform.opttam.optno.Value = 1,'SI','NO')replace tmpcambios.reutiliza WITH thisform.chkreutiliza.Value
ENDIFthisform.Release
1.10.3 Archivos de Datos
Load
DODEFAULT()
SELECT 0CREATE CURSOR TmpArchDatos(;name c(80),;tablespace c(160),;
- 118 -
tamanio n(11,3),;usado n(11,3),;porusado n(11,3),;status n(1))
SELECT TmpArchDatosINDEX on ALLTRIM(TmpArchDatos.name) TAG llave
limpia
IF USED("TmpArchDatos")with thisform.grid1
.Recordsource = ""
.Column1.Controlsource = ""
.Column2.Controlsource = ""
.Column4.Controlsource = ""
.Column5.Controlsource = ""
.Column6.Controlsource = ""SELECT TmpArchDatosGO TOP.Recordsource = "TmpArchDatos".Column1.Controlsource = "TmpArchDatos.name".Column2.Controlsource = "TmpArchDatos.tablespace".Column4.Controlsource = "TmpArchDatos.tamanio".Column5.Controlsource = "TmpArchDatos.usado".Column6.Controlsource = "TmpArchDatos.porusado"
.refreshENDWITH
ENDIF
Muestra
SELECT TmpArchDatosZAP
lcsql = 'Select t.tablespace_name "Tablespace", t.contents "Tipo", t.extent_management "Gestion",d.file_name, 'lcsql = lcsql + ' ROUND(MAX(d.bytes)/1024/1024,2) "MB_Tamanio", 'lcsql = lcsql + ' ROUND((MAX(d.bytes)/1024/1024) - (SUM(decode(f.bytes, NULL,0, f.bytes))/1024/1024),2)"MB_Usados" 'lcsql = lcsql + ' FROM DBA_FREE_SPACE f, DBA_DATA_FILES d, DBA_TABLESPACES t 'lcsql = lcsql + ' WHERE t.tablespace_name = d.tablespace_name AND f.tablespace_name(+) = d.tablespace_name'lcsql = lcsql + ' AND f.file_id(+) = d.file_id 'lcsql = lcsql + ' GROUP BY t.tablespace_name,t.contents,t.extent_management,d.file_name 'lcsql = lcsql + ' ORDER BY 1,3 DESC '
- 119 -
liresult = thisform.sqlexec(lcsql,"TmpTable")IF liresult < 0
men = MESSAGE()thisform.log_error(lcsql)MESSAGEBOX(men,16,_screen.esTANDAR.cmensistema)RETURN
ENDIF
lcsql = " select * from v$datafile "liresult = thisform.sqlexec(lcsql,"Tfil")IF liresult < 0
men = MESSAGE()thisform.log_error(lcsql)MESSAGEBOX(men,16,_screen.esTANDAR.cmensistema)RETURN
ENDIF
SELECT TmpTableSCAN
SELECT TmpArchDatosAPPEND BLANKreplace TmpArchDatos.name WITH TmpTable.file_name,;
TmpArchDatos.tablespace WITH TmpTable.tablespace,;TmpArchDatos.tamanio WITH
IIF(ISNULL(TmpTable.MB_tamanio),0,TmpTable.MB_tamanio),;TmpArchDatos.usado WITH
IIF(ISNULL(TmpTable.MB_usados),0,TmpTable.MB_usados),;TmpArchDatos.porusado WITH
IIF(ISNULL(TmpTable.MB_usados),0,ROUND((TmpTable.MB_usados *100)/IIF(TmpTable.MB_tamanio=0,1,TmpTable.MB_tamanio),2))
SELECT TfilSCAN FOR ALLTRIM(tfil.name)==ALLTRIM(TmpArchDatos.name)
SELECT TmpArchDatosreplace TmpArchDatos.status WITH IIF(ALLTRIM(Tfil.status)=="ONLINE",1,0)
ENDSCAN
ENDSCAN
SELECT TmpArchDatosGO TOP
thisform.Grid1.SetAll("DynamicForeColor", "iif(TmpArchDatos.status=0,RGB(255,0,0),.f.)", "Column")
thisform.grid1.Refresh
ediarch.init()
LPARAMETERS cname,ctable,cstadolcname = cnamethisform.txtnombre.Value = ALLTRIM(cname)
- 120 -
IF cstado = 'N'FOR i=1 TO thisform.cdefecto.ListCount
IF ALLTRIM(thisform.cdefecto.List(i,1))==ALLTRIM(ctable)thisform.cdefecto.ListIndex = iEXIT
ENDIFENDFORlcsql = " select * from v$datafile where RTRIM(name)=RTRIM(?lcname)"liresult = thisform.sqlexec(lcsql,"Tfiles")IF liresult < 0
men = MESSAGE()thisform.log_error(lcsql)MESSAGEBOX(men,16,_screen.esTANDAR.cmensistema)RETURN
ENDIF
SELECT TfilesGO TOPthisform.optestado.Visible = .T.thisform.chkreutiliza.Visible = .F.litam = Tfiles.bytes/1024/1024lipeso = litam - INT(litam*100)/100thisform.txttam.Enabled = .T.thisform.cmbtamanio.Enabled = .T.IF lipeso = 0
thisform.txttam.value = litamthisform.cmbtamanio.ListIndex = 2
ELSEthisform.txttam.value = litam * 1024thisform.cmbtamanio.ListIndex = 1
ENDIF
SELECT TfilesGO TOPIF ALLTRIM(Tfiles.status)=="ONLINE"
thisform.optestado.optonline.Value = 1thisform.optestado.optOffline.Value = 0
ELSEthisform.optestado.optonline.Value = 0thisform.optestado.optOffline.Value = 1
ENDIF
lcsql = " select * from dba_data_files where RTRIM(file_name)=RTRIM(?lcname)"liresult = thisform.sqlexec(lcsql,"Tfiles1")IF liresult < 0
men = MESSAGE()thisform.log_error(lcsql)MESSAGEBOX(men,16,_screen.esTANDAR.cmensistema)RETURN
ENDIF
SELECT Tfiles1IF Tfiles1.autoextensible='YES'
thisform.chkautoextend.Value = 1
- 121 -
ELSEthisform.chkautoextend.Value = 0
ENDIF
lcsql = "select value/1024 value from v$parameter where name='db_block_size'"liresult = thisform.sqlexec(lcsql,"tmpsize")IF liresult < 0
men = MESSAGE()thisform.log_error(lcsql)MESSAGEBOX(men,16,_screen.esTANDAR.cmensistema)RETURN
ENDIF
SELECT tmpsizelitam = (Tfiles1.increment_by * tmpsize.value)/1024lipeso = litam - INT(litam*100)/100IF lipeso=0
thisform.txtincrementa.Value = (Tfiles1.increment_by * tmpsize.value)/1024thisform.cmbincre.ListIndex = 2
ELSEthisform.txtincrementa.Value = Tfiles1.increment_by * tmpsize.valuethisform.cmbincre.ListIndex = 1
ENDIF
SELECT Tfiles1litam = (Tfiles1.maxbytes/1024)/1024lipeso = litam - INT(litam*100)/100IF lipeso = 0 OR INT(litam) = 16383
IF INT(litam) = 16383thisform.txtvalor.Value = INT(litam)thisform.cmbvalor.ListIndex = 2thisform.opttam.optno.Value = 0thisform.opttam.optval.Value = 1
ELSEthisform.txtvalor.Value = litamthisform.cmbvalor.ListIndex = 2thisform.opttam.optno.Value = 0thisform.opttam.optval.Value = 1
ENDIFELSE
thisform.txtvalor.Value = litam * 1024thisform.cmbvalor.ListIndex = 1
thisform.opttam.optno.Value = 0thisform.opttam.optval.Value = 1
ENDIF
SELECT TmpCambiosAPPEND BLANKreplace tmpcambios.nameact WITH cnamereplace tmpcambios.estadoact WITH ALLTRIM(Tfiles.status)replace tmpcambios.tamact WITH thisform.txttam.Valuereplace tmpcambios.pesotamact WITH thisform.cmbtamanio.Valuereplace tmpcambios.autoextact WITH IIF(ISNULL(Tfiles1.autoextensible),'',Tfiles1.autoextensible)
- 122 -
replace tmpcambios.increact WITHIIF(ISNULL(thisform.txtincrementa.Value),0,thisform.txtincrementa.Value)
replace tmpcambios.pesoincreact WITH thisform.cmbincre.Valuereplace tmpcambios.valoract WITH
IIF(ISNULL(thisform.txtvalor.Value),0,thisform.txtvalor.Value)replace tmpcambios.pesovalact WITH thisform.cmbvalor.Valuereplace tmpcambios.nolimiact WITH IIF(thisform.opttam.optno.Value = 1,'SI','NO')
thisform.opttam.InteractiveChange()ELSE
thisform.Caption = "Crear Archivo de Datos"lcsql = "select value from v$parameter where RTRIM(name)='control_files'"liresult = thisform.sqlexec(lcsql,"tmpname")IF liresult < 0
men = "Error al seleccionar la ruta del tablespace - " + MESSAGE()thisform.log_error(lcsql)MESSAGEBOX(men,16,_screen.esTANDAR.cmensistema)
ENDIF
libar = 0licom = 0SELECT tmpnameFOR i=0 TO LEN(ALLTRIM(Tmpname.value))
IF SUBSTR(ALLTRIM(tmpname.value),i,1)<>','IF SUBSTR(ALLTRIM(tmpname.value),i,1)='\'
libar = iENDIF
ELSEEXIT
ENDIFENDFOR
thisform.txtnombre.Value = UPPER(SUBSTR(tmpname.value,1,libar))thisform.cdefecto.Enabled = .T.thisform.txttam.Enabled = .T.thisform.cmbtamanio.Enabled = .T.thisform.txttam.Value = 5thisform.cmbtamanio.ListIndex = 2thisform.cmbincre.ListIndex = 1thisform.cmbvalor.ListIndex = 1thisform.optestado.Visible = .F.thisform.txtnombre.SetFocus()
ENDIF
thisform.busca_cambios()
Load
DODEFAULT()
SELECT 0
- 123 -
CREATE CURSOR tmpcambios(;nameact c(160),;estadoact c(160),;tamact n(10),;pesotamact c(2),;autoextact c(3),;increact n(10),;pesoincreact c(2),;valoract n(10),;pesovalact c(2),;nolimiact c(2),;reutiliza n(1))
busca_cambios
lcsql = ''
IF thisform.cdefecto.Enabled = .F.SELECT TmpcambiosGO TOPIF ALLTRIM(TmpCambios.nameact)<>ALLTRIM(thisform.txtnombre.Value)
lcsql = "ALTER DATABASE RENAME FILE '" + ALLTRIM(TmpCambios.nameact) + "'TO "
lcsql = lcsql + "'" + ALLTRIM(thisform.txtnombre.Value) + "';"ENDIF
IF thisform.optestado.optonline.Value = 1IF ALLTRIM(TmpCambios.estadoact)='OFFLINE'
lcsql = lcsql + " ALTER DATABASE DATAFILE '" +ALLTRIM(thisform.txtnombre.Value)
lcsql = lcsql + "' ONLINE ;"ENDIF
ELSEIF ALLTRIM(TmpCambios.estadoact)='ONLINE'
lcsql = lcsql + " ALTER DATABASE DATAFILE '" +ALLTRIM(thisform.txtnombre.Value)
lcsql = lcsql + "' OFFLINE ;"ENDIF
ENDIF
IF Tmpcambios.tamact <> thisform.txttam.Valuelcsql = lcsql + " ALTER DATABASE DATAFILE '" +
ALLTRIM(thisform.txtnombre.Value)lcsql = lcsql + "' RESIZE " + ALLTRIM(STR(thisform.txttam.Value,10)) +
SUBSTR(thisform.cmbtamanio.Value,1,1) + ";"ELSE
IF ALLTRIM(TmpCambios.pesotamact) <> thisform.cmbtamanio.Valuelcsql = lcsql + " ALTER DATABASE DATAFILE '" +
ALLTRIM(thisform.txtnombre.Value)
- 124 -
lcsql = lcsql + "' RESIZE " + ALLTRIM(STR(thisform.txttam.Value,10)) +SUBSTR(thisform.cmbtamanio.Value,1,1) + ";"
ENDIFENDIF
lcsql1 = ''lcsql2 = ''libandera = .f.lcautoext = IIF(thisform.chkautoextend.Value=1,"YES","NO")lbentre = .f.
IF TmpCambios.autoextact <> lcautoextIF ALLTRIM(lcautoext) = 'NO'
lcsql1 = lcsql1 + " ALTER DATABASE DATAFILE '" +ALLTRIM(thisform.txtnombre.Value)
lcsql1 = lcsql1 + "' AUTOEXTEND OFF;"libandera = .t.
ELSElcsql1 = lcsql1 + " ALTER DATABASE DATAFILE '" +
ALLTRIM(thisform.txtnombre.Value)lcsql1 = lcsql1 + "' AUTOEXTEND ON "lbentre = .t.
ENDIFELSE
IF TmpCambios.increact <> thisform.txtincrementa.Valuelcsql1 = lcsql1 + " ALTER DATABASE DATAFILE '" +
ALLTRIM(thisform.txtnombre.Value)lcsql1 = lcsql1 + "' AUTOEXTEND ON "lbentre = .t.
ENDIFENDIF
lcsql2 = lcsql1
IF !libanderaIF TmpCambios.increact <> thisform.txtincrementa.Value
lcsql1 = lcsql1 + " NEXT " +ALLTRIM(STR(thisform.txtincrementa.Value,10)) + SUBSTR(thisform.cmbincre.Value,1,1) + " "
ELSEIF ALLTRIM(TmpCambios.pesoincreact) <>
ALLTRIM(thisform.cmbincre.Value)IF LEN(lcsql2)=0
lcsql1 = lcsql1 + " ALTER DATABASE DATAFILE '" +ALLTRIM(thisform.txtnombre.Value)
lcsql1 = lcsql1 + "' AUTOEXTEND ON "ENDIFlcsql1 = lcsql1 + " NEXT " +
ALLTRIM(STR(thisform.txtincrementa.Value,10)) + SUBSTR(thisform.cmbincre.Value,1,1) + " "ENDIF
ENDIF
lcnolimi = IIF(thisform.opttam.optno.Value = 1,'SI','NO')IF TmpCambios.nolimiact <> lcnolimi
IF lcnolimi = 'NO'
- 125 -
IF TmpCambios.valoract <> thisform.txtvalor.ValueIF LEN(lcsql2)=0
lcsql1 = lcsql1 + " ALTER DATABASEDATAFILE '" + ALLTRIM(thisform.txtnombre.Value)
lcsql1 = lcsql1 + "' AUTOEXTEND ON "ENDIF
lcsql1 = lcsql1 + " MAXSIZE " +ALLTRIM(STR(thisform.txtvalor.Value,10)) + SUBSTR(thisform.cmbvalor.Value,1,1) + ";"
ELSEIF ALLTRIM(TmpCambios.pesovalact) <>
ALLTRIM(thisform.cmbvalor.Value)IF LEN(lcsql2)=0
lcsql1 = lcsql1 + " ALTERDATABASE DATAFILE '" + ALLTRIM(thisform.txtnombre.Value)
lcsql1 = lcsql1 + "' AUTOEXTENDON "
ENDIF
lcsql1 = lcsql1 + " MAXIZE " +ALLTRIM(STR(thisform.txtvalor.Value,10)) + SUBSTR(thisform.cmbvalor.Value,1,1) + ";"
ENDIFENDIF
ELSEIF LEN(lcsql2)=0
lcsql1 = lcsql1 + " ALTER DATABASE DATAFILE '" +ALLTRIM(thisform.txtnombre.Value)
lcsql1 = lcsql1 + "' AUTOEXTEND ON "ENDIFlcsql1 = lcsql1 + " MAXSIZE UNLIMITED;"
ENDIFELSE
IF lcnolimi = 'NO'IF TmpCambios.valoract <> thisform.txtvalor.Value
IF LEN(lcsql2)=0lcsql1 = lcsql1 + " ALTER DATABASE
DATAFILE '" + ALLTRIM(thisform.txtnombre.Value)lcsql1 = lcsql1 + "' AUTOEXTEND ON "
ENDIF
lcsql1 = lcsql1 + " MAXSIZE " +ALLTRIM(STR(thisform.txtvalor.Value,10)) + SUBSTR(thisform.cmbvalor.Value,1,1) + ";"
ELSEIF ALLTRIM(TmpCambios.pesovalact) <>
ALLTRIM(thisform.cmbvalor.Value)IF LEN(lcsql2)=0
lcsql1 = lcsql1 + " ALTERDATABASE DATAFILE '" + ALLTRIM(thisform.txtnombre.Value)
lcsql1 = lcsql1 + "' AUTOEXTENDON "
ENDIF
lcsql1 = lcsql1 + " MAXIZE " +ALLTRIM(STR(thisform.txtvalor.Value,10)) + SUBSTR(thisform.cmbvalor.Value,1,1) + ";"
- 126 -
ENDIFENDIF
ELSEIF LEN(lcsql2)=0
lcsql1 = lcsql1 + " ALTER DATABASE DATAFILE '" +ALLTRIM(thisform.txtnombre.Value)
lcsql1 = lcsql1 + "' AUTOEXTEND ON "ENDIF
lcsql1 = lcsql1 + " MAXSIZE UNLIMITED;"ENDIF
ENDIFENDIF
thisform.editSql.value = lcsql +IIF(ALLTRIM(lcsql1)<>ALLTRIM(lcsql2),lcsql1,IIF(libandera=.f.,'',lcsql1))
ELSElcsql = "ALTER TABLESPACE " + ALLTRIM(thisform.cdefecto.Value) + " ADD DATAFILE '"lcsql = lcsql + ALLTRIM(thisform.txtnombre.Value) + "'"lcsql = lcsql + " SIZE "lcsql = lcsql + ALLTRIM(STR(thisform.txttam.Value)) +
SUBSTR(thisform.cmbtamanio.Value,1,1)
IF thisform.chkreutiliza.Value = 1lcsql = lcsql + " REUSE"
ENDIF
IF thisform.chkautoextend.Value = 1lcsql = lcsql + " AUTOEXTEND ON"IF thisform.txtincrementa.Value > 0
lcsql = lcsql + " NEXT " + ALLTRIM(STR(thisform.txtincrementa.Value)) +SUBSTR(thisform.cmbincre.Value,1,1)
ENDIF
IF thisform.opttam.optno.Value = 1lcsql = lcsql + " MAXSIZE UNLIMITED"
ELSEIF thisform.txtvalor.Value >0
lcsql = lcsql + " MAXSIZE " +ALLTRIM(STR(thisform.txtvalor.Value)) + SUBSTR(thisform.cmbvalor.Value,1,1)
ENDIFENDIF
ENDIF
thisform.editSql.value = lcsql + IIF(LEN(ALLTRIM(lcsql))=0,'',';')ENDIF
Cmdaceptar.click
IF !EMPTY(thisform.editsql.Value)lcsql = ALLTRIM(thisform.editsql.Value)
- 127 -
libandera = 0lcsqlT = ""FOR i=0 TO LEN(lcsql)
lcsqlT = lcsqlT + SUBSTR(lcsql,i,1)IF SUBSTR(lcsql,i,1) = ";"
liresult = thisform.sqlexec(lcsqlT,"")IF liresult < 0
men = MESSAGE()thisform.log_error(lcsqlT)MESSAGEBOX(men,16,_screen.esTANDAR.cmensistema)RETURN
ENDIFlcsqlT = ""
ENDIFENDFOR
ENDIF
thisform.editsql.Value = ""thisform.Release
1.10.4 Segmentos de Rollback
Load
DODEFAULT()
SELECT 0CREATE CURSOR TmpSeg(;name c(80),;tablespace c(160),;extensiones n(10),;tamanio n(11,3),;status n(1))
limpia
IF USED("TmpSeg")with thisform.grid1
.Recordsource = ""
.Column1.Controlsource = ""
.Column2.Controlsource = ""
.Column3.Controlsource = ""
.Column4.Controlsource = ""SELECT TmpSegGO TOP
- 128 -
.Recordsource = "TmpSeg"
.Column1.Controlsource = "TmpSeg.name"
.Column2.Controlsource = "TmpSeg.tablespace"
.Column3.Controlsource = "TmpSeg.extensiones"
.Column4.Controlsource = "TmpSeg.tamanio".refresh
ENDWITHENDIF
Muestra
SELECT TmpSegZAP
lcsql = "select * from dba_rollback_segs "lcsql = lcsql + " where segment_name not like '_SYS%' "lcsql = lcsql + " order by tablespace_name,segment_name"liresult = thisform.sqlexec(lcsql,"Tms")IF liresult < 0
men = MESSAGE()thisform.log_error(lcsql)MESSAGEBOX(men,16,_screen.esTANDAR.cmensistema)RETURN
ENDIF
SELECT TmsSCAN
SELECT TmpSegAPPEND BLANKreplace TmpSeg.name WITH Tms.segment_name,;
TmpSeg.tablespaceWITH Tms.tablespace_name,;TmpSeg.extensiones WITH Tms.min_extents,;TmpSeg.status WITH IIF(ALLTRIM(Tms.status)=='ONLINE',1,0)
lcsql = "SELECT rssize"lcsql = lcsql + " FROM v$rollstat s "lcsql = lcsql + " WHERE usn=?Tms.segment_id "liresult = thisform.sqlexec(lcsql,"Tms1")IF liresult > 0
SELECT TmpSegreplace TmpSeg.tamanio WITH ((Tms1.RsSize)/1024)/1024
ELSEthisform.log_error(lcsql)
ENDIFENDSCAN
SELECT TmsGO TOP
- 129 -
thisform.Grid1.SetAll("DynamicForeColor","iif(TmpSeg.status=0,RGB(255,0,0),.f.)", "Column")
thisform.grid1.Refresh()
cmdEliminar.click
SELECT TmpSegvb = MESSAGEBOX("Seguro que desea eliminar el segmendo de rollback " + ALLTRIM(Tmpseg.name) +"?",32+4+256,_screen.esTANDAR.cmensistema)IF vb = 6
SELECT TmpSeglcsql = "DROP ROLLBACK SEGMENT " + ALLTRIM(TmpSeg.name)liresult = thisform.sqlexec(lcsql,"")IF liresult < 0
men = MESSAGE()thisform.log_error(lcsql)MESSAGEBOX(men,16,_screen.esTANDAR.cmensistema)RETURN
ENDIF
thisform.limpia()thisform.muestra()
ENDIF
Edisetrol.init()
LPARAMETERS cname,ctable,cstatuslcname = cnamethisform.txtnombre.Value = ALLTRIM(cname)
IF cstatus = 'N'FOR i=1 TO thisform.cdefecto.ListCount
IF ALLTRIM(thisform.cdefecto.List(i,1))==ALLTRIM(ctable)thisform.cdefecto.ListIndex = iEXIT
ENDIFENDFOR
lcsql = "select * from dba_rollback_segs where RTRIM(segment_name)=RTRIM(?lcname)"liresult = thisform.sqlexec(lcsql,"tmp")IF liresult < 0
men = MESSAGE()thisform.log_error(lcsql)MESSAGEBOX(men,16,_screen.esTANDAR.cmensistema)RETURN
ENDIF
- 130 -
SELECT tmpIF ALLTRIM(tmp.owner)=="PUBLIC"
thisform.chkpublico.Value = 1ENDIF
IF ALLTRIM(tmp.status)=="ONLINE"thisform.optestado.optonline.Value = 1thisform.optestado.optoffline.Value = 0
ELSEthisform.optestado.optonline.Value = 0thisform.optestado.optoffline.Value = 1
ENDIF
litam = Tmp.initial_extent/1024/1024lipeso = litam - INT(litam*100)/100IF lipeso = 0
thisform.txttamini.Value = litamthisform.cmbtamini.ListIndex = 3
ELSElitam = Tmp.initial_extent/1024lipeso = litam - INT(litam*100)/100IF lipeso = 0
thisform.txttamini.Value = litamthisform.cmbtamini.ListIndex = 2
ELSEthisform.txttamini.value = litamthisform.cmbtamini.ListIndex = 1
ENDIFENDIF
litam = IIF(ISNULL(Tmp.next_extent),0,Tmp.next_extent)/1024/1024lipeso = litam - INT(litam*100)/100IF lipeso = 0
thisform.ttamsig.Value = litamthisform.ctamsig.ListIndex = 3
ELSElitam = IIF(ISNULL(Tmp.next_extent),0,Tmp.next_extent)/1024lipeso = litam - INT(litam*100)/100IF lipeso = 0
thisform.ttamsig.Value = litamthisform.ctamsig.ListIndex = 2
ELSEthisform.ttamsig.value = litamthisform.ctamsig.ListIndex = 1
ENDIFENDIF
lifile = tmp.segment_idlcsql = "Select optsize from v$rollstat Where usn=?lifile"liresult = thisform.sqlexec(lcsql,"Tmp2")IF liresult < 0
men = MESSAGE()thisform.log_error(lcsql)
- 131 -
MESSAGEBOX(men,16,_screen.esTANDAR.cmensistema)RETURN
ENDIF
SELECT Tmp2GO TOPlitam = IIF(ISNULL(Tmp2.optsize),0,Tmp2.optsize)/1024/1024lipeso = litam - INT(litam*100)/100IF lipeso = 0
thisform.ttamop.Value = litamthisform.ctamop.ListIndex = 3
ELSElitam = IIF(ISNULL(Tmp2.optsize),0,Tmp2.optsize)/1024lipeso = litam - INT(litam*100)/100IF lipeso = 0
thisform.ttamop.Value = litamthisform.ctamop.ListIndex = 2
ELSEthisform.ttamop.value = litamthisform.ctamop.ListIndex = 1
ENDIFENDIF
SELECT Tmpthisform.tminext.Value = Tmp.min_extents
IF Tmp.max_extents > 0thisform.txtvalor.Value = Tmp.max_extentsthisform.opttam.optval.value = 1thisform.opttam.optno.Value = 0
ELSEthisform.opttam.optval.value = 0thisform.opttam.optno.Value = 1
ENDIF
SELECT tmpcamAPPEND BLANKreplace tmpcam.estado WITH tmp.status,;
tmpcam.siguiente WITH thisform.ttamsig.Value,;tmpcam.pesosig WITH thisform.ctamsig.Value,;tmpcam.optimo WITH thisform.ttamop.Value,;tmpcam.pesoopt WITH thisform.ctamop.Value,;tmpcam.valor WITH thisform.txtvalor.Value
thisform.opttam.InteractiveChange()thisform.busca_cambios()
ELSEthisform.Caption = "Crear Segmento de Rollback"thisform.txtnombre.Enabled = .T.thisform.cdefecto.Enabled = .T.thisform.chkpublico.Enabled = .T.thisform.txttamini.Enabled = .T.thisform.cmbtamini.Enabled = .T.thisform.tminext.Enabled = .T.
- 132 -
thisform.opttam.optno.Value = 0thisform.opttam.optval.Value = 1thisform.txtvalor.Enabled = .T.
thisform.busca_cambios()thisform.txtnombre.SetFocus()
ENDIF
load
DODEFAULT()
SELECT 0CREATE CURSOR tmpcam(;estado c(15),;siguiente n(10),;pesosig c(2),;optimo n(10),;pesoopt c(2),;valor n(10))
busca_cambios
lcsql = ""lcsql1 = ''IF thisform.txtnombre.Enabled = .f.
lbentre = .f.
SELECT TmpcamIF tmpcam.siguiente <> thisform.ttamsig.Value
lbentre = .t.lcsql1 = lcsql1 + "NEXT " + ALLTRIM(STR(thisform.ttamsig.Value)) +
SUBSTR(thisform.ctamsig.Value,1,1)ELSE
IF tmpcam.pesosig <> thisform.ctamsig.Valuelbentre = .t.lcsql1 = lcsql1 + "NEXT " + ALLTRIM(STR(thisform.ttamsig.Value)) +
SUBSTR(thisform.ctamsig.Value,1,1)ENDIF
ENDIF
IF tmpcam.optimo <> thisform.ttamop.Valuelbentre = .t.lcsql1 = lcsql1 + " OPTIMAL " + ALLTRIM(STR(thisform.ttamop.Value)) +
SUBSTR(thisform.ctamop.Value,1,1)ELSE
IF tmpcam.pesoopt <> thisform.ctamop.Value
- 133 -
lbentre = .t.lcsql1 = lcsql1 + " OPTIMAL " + ALLTRIM(STR(thisform.ttamop.Value)) +
SUBSTR(thisform.ctamop.Value,1,1)ENDIF
ENDIF
IF thisform.opttam.optno.Value = 1IF tmpcam.valor <> 0
lbentre = .t.lcsql1 = lcsql1 + " MAXEXTENTS UNLIMITED"
ENDIFELSE
IF tmpcam.valor <> thisform.txtvalor.Valuelbentre = .t.lcsql1 = lcsql1 + " MAXEXTENTS " + ALLTRIM(STR(thisform.txtvalor.Value))
ENDIFENDIF
IF lbentrelcsql = "ALTER ROLLBACK SEGMENT " + ALLTRIM(thisform.txtnombre.Value)+ " STORAGE ("
+ lcsql1 + ");"ENDIF
IF thisform.optestado.optonline.Value = 1IF ALLTRIM(Tmpcam.estado)=="OFFLINE"
lcsql = lcsql + "ALTER ROLLBACK SEGMENT " +ALLTRIM(thisform.txtnombre.Value) + " ONLINE;"
ENDIFELSE
IF ALLTRIM(Tmpcam.estado)=="ONLINE"lcsql = lcsql + "ALTER ROLLBACK SEGMENT " +
ALLTRIM(thisform.txtnombre.Value) + " OFFLINE;"ENDIF
ENDIF
thisform.editSql.Value = lcsqlELSE
lcsql = ""lcsql = "CREATE" + IIF(thisform.chkpublico.Value=1," PUBLIC"," ") + " ROLLBACK SEGMENT "lcsql = lcsql + ALLTRIM(thisform.txtnombre.Value)lcsql = lcsql + " TABLESPACE "lcsql = lcsql + ALLTRIM(thisform.cdefecto.Value)lcsql = lcsql + " STORAGE ("
lcsql1 = ""lbentre = .f.IF thisform.txttamini.Value > 0
lcsql1 = lcsql1 + " INITIAL " + ALLTRIM(STR(thisform.txttamini.Value)) +IIF(SUBSTR(thisform.cmbtamini.Value,1,1)='B','',SUBSTR(thisform.cmbtamini.Value,1,1))
lbentre = .t.ENDIF
IF thisform.ttamsig.Value > 0
- 134 -
lcsql1 = lcsql1 + " NEXT " + ALLTRIM(STR(thisform.ttamsig.Value)) +IIF(SUBSTR(thisform.ctamsig.Value,1,1)='B','',SUBSTR(thisform.ctamsig.Value,1,1))
lbentre = .t.ENDIF
IF thisform.ttamop.Value > 0lcsql1 = lcsql1 + " OPTIMAL " + ALLTRIM(STR(thisform.ttamop.Value)) +
IIF(SUBSTR(thisform.ctamop.Value,1,1)='B','',SUBSTR(thisform.ctamop.Value,1,1))lbentre = .t.
ELSElcsql1 = lcsql1 + " OPTIMAL NULL"lbentre = .t.
ENDIF
IF thisform.tminext.Value > 0lcsql1 = lcsql1 + " MINEXTENTS " + ALLTRIM(STR(thisform.tminext.Value))lbentre = .t.
ENDIF
IF thisform.opttam.optno.Value = 1lcsql1 = lcsql1 + " MAXEXTENTS UNLIMITED"lbentre = .t.
ELSEIF thisform.txtvalor.Value > 0
lcsql1 = lcsql1 + " MAXEXTENTS " + ALLTRIM(STR(thisform.txtvalor.Value))lbentre = .t.
ENDIFENDIF
IF lbentrelcsql = lcsql + lcsql1 + ");"
ENDIF
IF thisform.optestado.optonline.Value = 1lcsql = lcsql + " ALTER ROLLBACK SEGMENT " + ALLTRIM(thisform.txtnombre.Value) + "
ONLINE;"ENDIF
thisform.editSql.Value = lcsqlENDIF
1.10.5 Redo Logs
load
DODEFAULT()SELECT 0CREATE CURSOR tmproll(;estado c(15),;grupo n(2),;miembrosn(3),;archivado c(3),;
- 135 -
tamanio n(20,6),;secuencia n(10),;cambio n(10))
limpia
IF USED("TmpRoll")with thisform.grid1
.Recordsource = ""
.Column1.Controlsource = ""
.Column2.Controlsource = ""
.Column3.Controlsource = ""
.Column4.Controlsource = ""
.Column5.Controlsource = ""
.Column6.Controlsource = ""
.Column7.Controlsource = ""SELECT TmpRollGO TOP.Recordsource = "TmpRoll".Column1.Controlsource = "TmpRoll.estado".Column2.Controlsource = "TmpRoll.grupo".Column3.Controlsource = "TmpRoll.miembros".Column4.Controlsource = "TmpRoll.archivado".Column5.Controlsource = "TmpRoll.tamanio".Column6.Controlsource = "TmpRoll.secuencia".Column7.Controlsource = "TmpRoll.cambio"
.refreshENDWITH
ENDIF
muestra
SELECT TmpRollZAP
lcsql = "select status,group# grupo,members,archived,bytes/1024 tamanio,sequence# secuencia,first_change#cambio"lcsql = lcsql + " from v$log "liresult = thisform.sqlexec(lcsql,"Tmpr")IF liresult < 0
men = MESSAGE()thisform.log_error(lcsql)MESSAGEBOX(men,16,_screen.esTANDAR.cmensistema)RETURN
ENDIF
SELECT tmprSCAN
SELECT TmpRoll
- 136 -
APPEND BLANKreplace TmpRoll.estado WITH tmpr.status,;
TmpRoll.grupo WITH tmpr.grupo,;TmpRoll.miembros WITH tmpr.members,;TmpRoll.archivado WITH tmpr.archived,;TmpRoll.tamanio WITH tmpr.tamanio,;TmpRoll.secuencia WITH tmpr.secuencia,;TmpRoll.cambio WITH tmpr.cambio
ENDSCAN
SELECT TmpRollGO TOP
thisform.grid1.Refresh()
editredlog.load()
LPARAMETERS igrupo,itamanio,cstatusligrupo = igrupothisform.limpia()
IF cstatus= 'N'thisform.txtvalor.Value = igrupothisform.txttam.Value = itamaniothisform.cmbtamanio.Value = 1lcsql = "select * from v$logfile where group#=?ligrupo "liresult = thisform.sqlexec(lcsql,"tmpg")IF liresult < 0
men = MESSAGE()thisform.log_error(lcsql)MESSAGEBOX(men,16,_screen.estANDAR.cmensistema)RETURN
ENDIF
liindice = 1licnt = 0SELECT TmpgSCAN
FOR i=1 TO LEN(ALLTRIM(tmpg.member))IF SUBSTR(ALLTRIM(tmpg.member),i,1)='\'
liindice = iENDIF
ENDFOR
lcname = SUBSTR(ALLTRIM(tmpg.member),liindice+1,i)crutatable = SUBSTR(Tmpg.member,1,liindice)
licnt = licnt + 1SELECT TredoAPPEND BLANK
- 137 -
replace Tredo.indice WITH ALLTRIM(STR(licnt)),;Tredo.nombre WITH ALLTRIM(lcname),;Tredo.ruta WITH SUBSTR(Tmpg.member,1,liindice),;Tredo.tipo WITH Tmpg.type,;Tredo.status WITH IIF(ISNULL(Tmpg.status),'',Tmpg.status)
SELECT TredoSCATTER MEMVARSELECT TrespAPPEND BLANKGATHER MEMVAR
ENDSCAN
SELECT TredoGO TOPthisform.grid1.Refresh()
ELSEthisform.txtvalor.Enabled = .T.thisform.txttam.Enabled = .T.thisform.cmbtamanio.Enabled = .T.
thisform.txtvalor.Value = igrupothisform.txttam.Value = 1024thisform.cmbtamanio.ListIndex = 1
licnt = 0licnt = licnt + 1
lcsql = "select * from v$logfile "liresult = thisform.sqlexec(lcsql,"tmpg")IF liresult < 0
men = MESSAGE()thisform.log_error(lcsql)MESSAGEBOX(men,16,_screen.estANDAR.cmensistema)RETURN
ENDIF
liindice = 1licnt = 0SELECT TmpgGO TOPFOR i=1 TO LEN(ALLTRIM(tmpg.member))
IF SUBSTR(ALLTRIM(tmpg.member),i,1)='\'liindice = i
ENDIFENDFORcrutatable = SUBSTR(Tmpg.member,1,liindice)thisform.Caption = "Crear Grupo de Redo Logs"thisform.cmdagrega.Click()thisform.txtvalor.SetFocus()
ENDIF
thisform.lbltitulo.Caption = thisform.Caption
- 138 -
load
DODEFAULT()
SELECT 0CREATE CURSOR Tredo(;indice c(2),;nombre c(50),;ruta c(80),;tipo c(20),;status c(15))INDEX on ALLTRIM(Tredo.indice) TAG indice1
SELECT 0CREATE CURSOR Tresp(;indice c(2),;nombre c(50),;ruta c(80),;tipo c(20),;status c(15))INDEX on ALLTRIM(Tresp.indice) TAG indice
PUBLIC licnt,crutatable
licnt = 0crutatable = ''
busca_cambios
lcsql = ""lcsql1 = ""IF thisform.txtvalor.Enabled = .F.
SELECT Tredolipos = RECNO('Tredo')linum = RECCOUNT()
SELECT TredoGO TOPSCAN
SELECT TrespGO TOPSEEK ALLTRIM(Tredo.indice)IF !FOUND()
lcsql = lcsql + "ALTER DATABASE ADD LOGFILE MEMBER '" +ALLTRIM(Tredo.ruta) + ALLTRIM(Tredo.nombre) + "'"
lcsql = lcsql + " TO GROUP " + ALLTRIM(STR(thisform.txtvalor.Value)) + "; "
- 139 -
ENDIFENDSCAN
SELECT TrespGO TOPSCAN
SELECT TredoGO TOPSEEK ALLTRIM(Tresp.indice)IF FOUND()
IF ALLTRIM(Tredo.nombre)<>ALLTRIM(Tresp.nombre) ORALLTRIM(Tredo.ruta)<>ALLTRIM(Tresp.ruta)
lcsql = lcsql + " ALTER DATABASE RENAME FILE '" +ALLTRIM(Tresp.ruta) + ALLTRIM(Tresp.nombre)
lcsql = lcsql + "' TO '" + ALLTRIM(Tredo.ruta) + ALLTRIM(Tredo.nombre) +"'; "
ENDIFELSE
lcsql = lcsql + "ALTER DATABASE DROP LOGFILE MEMBER '" +ALLTRIM(Tresp.ruta) + ALLTRIM(Tresp.nombre) + "'; "
ENDIFENDSCAN
IF linum > 0SELECT TredoGO lipos
ENDIF
ELSElcsql = ""lcsql = "ALTER DATABASE ADD LOGFILE GROUP " + ALLTRIM(STR(thisform.txtvalor.Value)) + " ("SELECT Tredolipos = RECNO('Tredo')linum = RECCOUNT()lcsql1 = ""SELECT TredoGO TOPSCAN
IF LEN(ALLTRIM(Tredo.ruta))>0 OR LEN(ALLTRIM(Tredo.nombre))>0IF LEN(ALLTRIM(lcsql1))>0
lcsql1 = lcsql1 + ","ENDIFlcsql1 = lcsql1 + "'" + ALLTRIM(Tredo.ruta) + ALLTRIM(Tredo.nombre) + "'"
ENDIFENDSCAN
lcsql = lcsql + lcsql1 + ") SIZE " + ALLTRIM(STR(thisform.txttam.Value)) +SUBSTR(thisform.cmbtamanio.Value,1,1) + ";"
IF linum > 0SELECT TredoGO lipos
ENDIF
- 140 -
ENDIFthisform.editSql.Value = lcsql
limpia
WITH thisform.grid1.Recordsource = "".Column1.Controlsource = "".Column2.Controlsource = ""SELECT TredoZAP.Recordsource = "Tredo".Column1.Controlsource = "Tredo.nombre".Column2.Controlsource = "Tredo.ruta"
.refreshENDWITH
Informe de Archive Logs
Load
DODEFAULT()
SELECT 0CREATE CURSOR Tmpinfarch(;nombre c(100),;secuencia n(10),;thread n(10),;copias n(10),;cambio n(10),;fecprimer datetime,;fecarch datetime)
Limpia
WITH thisform.grid1.Recordsource = "".Column1.Controlsource = "".Column2.Controlsource = "".Column3.Controlsource = ""
- 141 -
.Column4.Controlsource = ""
.Column5.Controlsource = ""
.Column6.Controlsource = ""
.Column7.Controlsource = ""SELECT TmpinfarchGO TOP.Recordsource = "Tmpinfarch".Column1.Controlsource = "Tmpinfarch.nombre".Column2.Controlsource = "Tmpinfarch.secuencia".Column3.Controlsource = "Tmpinfarch.thread".Column4.Controlsource = "Tmpinfarch.copias".Column5.Controlsource = "Tmpinfarch.cambio".Column6.Controlsource = "Tmpinfarch.fecprimer".Column7.Controlsource = "Tmpinfarch.fecarch"
.refreshENDWITH
muestra
SELECT TmpInfarchZAP
lcsql = "Select name,sequence# sequence,thread# thread,backup_count,first_change#first_change,first_time,completion_time from v$archived_log"liresult = thisform.sqlexec(lcsql,"tmp")IF liresult < 0
men = MESSAGE()thisform.log_error(lcsql)MESSAGEBOX(men,16,_screen.esTANDAR.cmensistema)RETURN
ENDIF
SELECT tmpSCAN
SELECT TmpInfarchAPPEND BLANKreplace TmpInfarch.nombre WITH tmp.name,;
TmpInfarch.secuencia WITH tmp.sequence,;TmpInfarch.thread WITH tmp.thread,;TmpInfarch.copias WITH tmp.backup_count,;TmpInfarch.cambio WITH tmp.first_change,;TmpInfarch.fecprimer WITH tmp.first_time,;TmpInfarch.fecarch WITH tmp.completion_time
ENDSCAN
SELECT TmpInfarchGO TOP
thisform.grid1.Refresh()
- 142 -
editarchlog.init()
LPARAMETERS cname
lcname = cnamelcsql = "Select name,sequence# secuencia,blocks,block_size,completion_time,first_change#primero,first_time,next_change# ultimo,next_time "lcsql = lcsql + " from v$archived_log where RTRIM(name)=RTRIM(?lcname) "liresult = thisform.sqlexec(lcsql,"Tmp1")IF liresult < 0
men = MESSAGE()thisform.log_error(lcsql)MESSAGEBOX(men,16,_screen.esTANDAR.cmensistema)RETURN
ENDIF
SELECT Tmp1GO TOPthisform.lblname.Caption = ALLTRIM(Tmp1.name)thisform.tsecuencia.Value = tmp1.secuenciathisform.ttamanio.Value = (tmp1.blocks*tmp1.block_size)/1024thisform.tfecarch.Value = tmp1.completion_timethisform.tpricambio.Value = tmp1.primerothisform.tfecpricambio.Value = tmp1.first_timethisform.tultcambio.Value = tmp1.ultimothisform.tfecultcambio.Value = tmp1.next_time
1.11 Modulo de Recursos
1.11.1 Mantenimiento de Recursos
Init
thisform.limpia()
IF ALLTRIM(_screen.esTANDAR.cprivilegio)=="SYSDBA"thisform.pgrecursos.pggeneralinstancia.pageframe1.page1.optinstancia.Enabled= .T.thisform.pgrecursos.pgrecuperacion.archivadoAutomatico.Enabled= .T.thisform.pgrecursos.pgrecuperacion.modoArchivelog.Enabled = .T.thisform.pgrecursos.pgrecuperacion.nombreArchivo.Enabled = .F.thisform.pgrecursos.pgrecuperacion.grid3.Enabled = .F.
ELSEthisform.pgrecursos.pggeneralinstancia.pageframe1.page1.optinstancia.Enabled= .F.thisform.pgrecursos.pgrecuperacion.archivadoAutomatico.Enabled= .F.thisform.pgrecursos.pgrecuperacion.modoArchivelog.Enabled = .F.
- 143 -
thisform.pgrecursos.pgrecuperacion.nombreArchivo.Enabled = .F.thisform.pgrecursos.pgrecuperacion.grid3.Enabled = .F.
ENDIF
** Mostrar la hora de inicio del Equipothisform.cargarcpugeneral()
** Mostrar información de la instancia y la Base de Datosthisform.cargainstanciageneral()
**Mostrar el Estado de la Instanciathisform.estado_instance()
**Mostrar Memoria SGAthisform.memoria_sga ()
** Mostrar Memoria PGAthisform.memoriapga()
**Mostrar Recuperación de la Instanciathisform.recuperacion_instancia ()
thisform.pgrecursos.pgrecuperacion.modoArchivelog.InteractiveChange()
Load
DODEFAULT()
PUBLIC lcinstancia,lcoptionlcinstancia = ''lcoption = 0
SELECT 0CREATE CURSOR tmpUbicacionArchivelog(;DESTINATION c(254),;STATUS c(254),;dest_name c(20))
activa
**Desabilita opciones de pestaña de General Instancia
thisform.pgrecursos.pggeneralinstancia.command2.Enabled= .T.thisform.pgrecursos.pggeneralinstancia.label1.Visible= .T.thisform.pgrecursos.pggeneralinstancia.label2.Visible= .T.thisform.pgrecursos.pggeneralinstancia.label3.Visible= .T.
- 144 -
thisform.pgrecursos.pggeneralinstancia.label4.Visible= .T.thisform.pgrecursos.pggeneralinstancia.label5.Visible= .T.thisform.pgrecursos.pggeneralinstancia.label6.Visible= .T.thisform.pgrecursos.pggeneralinstancia.label7.Visible= .T.thisform.pgrecursos.pggeneralinstancia.label8.Visible= .T.thisform.pgrecursos.pggeneralinstancia.label9.Visible= .T.thisform.pgrecursos.pggeneralinstancia.text10.Visible= .T.thisform.pgrecursos.pggeneralinstancia.text11.Visible= .T.thisform.pgrecursos.pggeneralinstancia.text12.Visible= .T.thisform.pgrecursos.pggeneralinstancia.text13.Visible= .T.thisform.pgrecursos.pggeneralinstancia.text14.Visible= .T.thisform.pgrecursos.pggeneralinstancia.text15.Visible= .T.thisform.pgrecursos.pggeneralinstancia.text16.Visible= .T.thisform.pgrecursos.pggeneralinstancia.cmodorestringido.Visible= .T.thisform.pgrecursos.pggeneralinstancia.cmodolectura.Visible= .T.thisform.pgrecursos.pggeneralinstancia.label_oracle.Visible= .F.
** Desabilita opciones de pestaña de Memoria SGA, PGAthisform.pgrecursos.pgmemoria.shape1.Visible= .T.thisform.pgrecursos.pgmemoria.shape2.Visible= .T.thisform.pgrecursos.pgmemoria.shape3.Visible= .T.thisform.pgrecursos.pgmemoria.shape4.Visible= .T.thisform.pgrecursos.pgmemoria.label1.Visible= .T.thisform.pgrecursos.pgmemoria.label2.Visible= .T.thisform.pgrecursos.pgmemoria.label3.Visible= .T.thisform.pgrecursos.pgmemoria.label4.Visible= .T.thisform.pgrecursos.pgmemoria.label5.Visible= .T.thisform.pgrecursos.pgmemoria.label6.Visible= .T.thisform.pgrecursos.pgmemoria.label7.Visible= .T.thisform.pgrecursos.pgmemoria.label8.Visible= .T.thisform.pgrecursos.pgmemoria.label9.Visible= .T.thisform.pgrecursos.pgmemoria.label10.Visible= .T.thisform.pgrecursos.pgmemoria.label11.Visible= .T.thisform.pgrecursos.pgmemoria.label12.Visible= .T.thisform.pgrecursos.pgmemoria.label13.Visible= .T.thisform.pgrecursos.pgmemoria.label14.Visible= .T.thisform.pgrecursos.pgmemoria.label15.Visible= .T.thisform.pgrecursos.pgmemoria.image3.Visible = .T.thisform.pgrecursos.pgmemoria.conjuntoCompartido.Visible= .T.thisform.pgrecursos.pgmemoria.cacheBuffers.Visible= .T.thisform.pgrecursos.pgmemoria.conjuntoGrande.Visible= .T.thisform.pgrecursos.pgmemoria.conjuntoJava.Visible= .T.thisform.pgrecursos.pgmemoria.cconjuntoCompartido.Visible= .T.thisform.pgrecursos.pgmemoria.ccacheBuffers.Visible= .T.thisform.pgrecursos.pgmemoria.CconjuntoGrande.Visible= .T.thisform.pgrecursos.pgmemoria.cconjuntoJava.Visible= .T.thisform.pgrecursos.pgmemoria.sGAtotal.Visible= .T.thisform.pgrecursos.pgmemoria.tamañoMaximoSGA.Visible= .T.thisform.pgrecursos.pgmemoria.destinoPga.Visible= .T.thisform.pgrecursos.pgmemoria.pgaActual.Visible= .T.thisform.pgrecursos.pgmemoria.maximoPga.Visible= .T.thisform.pgrecursos.pgmemoria.porcentajesAciertos.Visible= .T.thisform.pgrecursos.pgmemoria.cdestinoPGA.Visible= .T.thisform.pgrecursos.pgmemoria.textoGeneral.Visible= .T.
- 145 -
thisform.pgrecursos.pgmemoria.label_oracle1.Visible= .F.thisform.pgrecursos.pgmemoria.label_oracle2.Visible= .F.
** Desabilita opciones de Pestaña de Recuperaciónthisform.pgrecursos.pgrecuperacion.label3.Visible= .T.thisform.pgrecursos.pgrecuperacion.label4.Visible= .T.thisform.pgrecursos.pgrecuperacion.label5.Visible= .T.thisform.pgrecursos.pgrecuperacion.label6.Visible= .T.thisform.pgrecursos.pgrecuperacion.label7.Visible= .T.thisform.pgrecursos.pgrecuperacion.tiempoMedioRecuperación.Visible= .T.thisform.pgrecursos.pgrecuperacion.textoGeneralRecup.Visible= .T.thisform.pgrecursos.pgrecuperacion.tiempoRecuperacion.Visible= .T.thisform.pgrecursos.pgrecuperacion.nombreArchivo.Visible= .F.thisform.pgrecursos.pgrecuperacion.cTiempoMedioRecuperacion.Visible= .T.thisform.pgrecursos.pgrecuperacion.modoArchivelog.Visible= .T.thisform.pgrecursos.pgrecuperacion.archivadoAutomatico.Visible= .T.thisform.pgrecursos.pgrecuperacion.grid3.Visible= .T.thisform.pgrecursos.pgrecuperacion.image3.Visible= .T.thisform.pgrecursos.pgrecuperacion.pageframe1.Visible= .T.thisform.pgrecursos.pgrecuperacion.pageframe2.Visible= .T.thisform.pgrecursos.pgrecuperacion.label_oracle3.Visible= .F.thisform.cmdAceptar.Enabled = .T.lcinstancia="OPEN"
archive_automatico
liaut = IIF(ALLTRIM(thisform.pgrecursos.pgrecuperacion.tarcaut.Value)=='SI',1,0)IF liaut <> thisform.pgrecursos.pgrecuperacion.archivadoAutomatico.Value
IF thisform.pgrecursos.pgrecuperacion.archivadoAutomatico.Value = 1lcarch = SYS(5) + '\' + _screen.esTANDAR.crutatxt + 'archive.bat'IF FILE("&lcarch")
DELETE FILE ("&lcarch")ENDIFcprivilegio = ''
IF ALLTRIM(_screen.esTANDAR.cprivilegio)=='Normal'cprivilegio = ' '
ELSEcprivilegio = ' as ' + ALLTRIM(_screen.esTANDAR.cprivilegio)
ENDIF
arch = fcreate("&lcarch")FPUTS(arch,"@echo off")FPUTS(arch,"set oracle_sid="+_screen.esTANDAR.cdatabase)FPUTS(arch, "echo set echo on > %0.tmp")FPUTS(arch,"echo connect " + ALLTRIM(_screen.esTANDAR.cusuario) + '/' +
ALLTRIM(_screen.esTANDAR.cclave) + cprivilegio + "; >> %0.tmp")FPUTS(arch,"echo shutdown immediate; >> %0.tmp")FPUTS(arch,"echo startup mount; >> %0.tmp")FPUTS(arch,"echo alter database open; >> %0.tmp")FPUTS(arch,"echo alter system archive log start; >> %0.tmp")FPUTS(arch,"echo exit; >> %0.tmp")
- 146 -
FPUTS(arch,"echo pause >> %0.tmp")FPUTS(arch,"sqlplus /nolog @%0.tmp")FPUTS(arch,"del %0.tmp")fclose(arch)RUN "&lcarch"
ELSElcarch = SYS(5) + '\' + _screen.esTANDAR.crutatxt + 'archive.bat'IF FILE("&lcarch")
DELETE FILE ("&lcarch")ENDIFcprivilegio = ''
IF ALLTRIM(_screen.esTANDAR.cprivilegio)=='Normal'cprivilegio = ' '
ELSEcprivilegio = ' as ' + ALLTRIM(_screen.esTANDAR.cprivilegio)
ENDIF
arch = fcreate("&lcarch")FPUTS(arch,"@echo off")FPUTS(arch,"set oracle_sid="+_screen.esTANDAR.cdatabase)FPUTS(arch, "echo set echo on > %0.tmp")FPUTS(arch,"echo connect " + ALLTRIM(_screen.esTANDAR.cusuario) + '/' +
ALLTRIM(_screen.esTANDAR.cclave) + cprivilegio + "; >> %0.tmp")FPUTS(arch,"echo shutdown immediate; >> %0.tmp")FPUTS(arch,"echo startup mount; >> %0.tmp")FPUTS(arch,"echo alter database open; >> %0.tmp")FPUTS(arch,"echo alter system archive log stop; >> %0.tmp")FPUTS(arch,"echo exit; >> %0.tmp")FPUTS(arch,"echo pause >> %0.tmp")FPUTS(arch,"sqlplus /nolog @%0.tmp")FPUTS(arch,"del %0.tmp")fclose(arch)RUN "&lcarch"
ENDIFENDIF
cargainstanciageneral
lcsql = "select a.host_name, a.version, instance_name,to_char(a.startup_time,'dd-mm-yyyyhh:mi:ss')startup_time, "
lcsql = lcsql + " b.name, b.log_mode, a.logins, b.open_mode from v$instance a, v$database b "liresult = thisform.sqlexec(lcsql,"tmpresul")IF liresult < 0
**Desabilita opciones de pestaña de General Instancia
thisform.pgrecursos.pggeneralinstancia.pageframe1.page1.optinstancia.optcerrada.Value = 1thisform.pgrecursos.pggeneralinstancia.command2.Enabled= .F.thisform.pgrecursos.pggeneralinstancia.label1.Visible= .F.thisform.pgrecursos.pggeneralinstancia.label2.Visible= .F.thisform.pgrecursos.pggeneralinstancia.label3.Visible= .F.
- 147 -
thisform.pgrecursos.pggeneralinstancia.label4.Visible= .F.thisform.pgrecursos.pggeneralinstancia.label5.Visible= .F.thisform.pgrecursos.pggeneralinstancia.label6.Visible= .F.thisform.pgrecursos.pggeneralinstancia.label7.Visible= .F.thisform.pgrecursos.pggeneralinstancia.label8.Visible= .F.thisform.pgrecursos.pggeneralinstancia.label9.Visible= .F.thisform.pgrecursos.pggeneralinstancia.text10.Visible= .F.thisform.pgrecursos.pggeneralinstancia.text11.Visible= .F.thisform.pgrecursos.pggeneralinstancia.text12.Visible= .F.thisform.pgrecursos.pggeneralinstancia.text13.Visible= .F.thisform.pgrecursos.pggeneralinstancia.text14.Visible= .F.thisform.pgrecursos.pggeneralinstancia.text15.Visible= .F.thisform.pgrecursos.pggeneralinstancia.text16.Visible= .F.thisform.pgrecursos.pggeneralinstancia.cmodorestringido.Visible= .F.thisform.pgrecursos.pggeneralinstancia.cmodolectura.Visible= .F.thisform.pgrecursos.pggeneralinstancia.label_oracle.Visible= .T.thisform.log_error(lcsql)
ELSElcsql= "select value from v$parameter where num=75"liresult= thisform.sqlexec(lcsql,"tmpresul2")IF liresult < 0
men = MESSAGE()thisform.log_error(lcsql)MESSAGEBOX(men,16,_screen.esTANDAR.cmensistema)RETURN
ELSESELECT tmpresulthisform.pgrecursos.pggeneralinstancia.text10.Value =
ALLTRIM(tmpresul.host_name)thisform.pgrecursos.pggeneralinstancia.text11.Value =ALLTRIM(tmpresul.name)thisform.pgrecursos.pggeneralinstancia.text12.Value = "Oracle9i Enterprise Edition
Release " + ALLTRIM(tmpresul.version)thisform.pgrecursos.pggeneralinstancia.text13.Value =
ALLTRIM(tmpresul.instance_name)thisform.pgrecursos.pggeneralinstancia.text14.Value =
ALLTRIM(tmpresul.startup_time)thisform.pgrecursos.pggeneralinstancia.text15.Value = ALLTRIM(tmpresul.log_mode)thisform.pgrecursos.pggeneralinstancia.text16.Value =ALLTRIM(tmpresul2.value)
DO CASECASE ALLTRIM(tmpresul.logins)=="ALLOWED"
thisform.pgrecursos.pggeneralinstancia.Cmodorestringido.ListIndex = 2OTHERWISE
thisform.pgrecursos.pggeneralinstancia.cmodorestringido.ListIndex = 1ENDCASE
DO CASECASE ALLTRIM(tmpresul.open_mode)=="READ WRITE"
thisform.pgrecursos.pggeneralinstancia.Cmodolectura.ListIndex =2
thisform.pgrecursos.pggeneralinstancia.Cmodolectura.Enabled=.F.
- 148 -
OTHERWISEthisform.pgrecursos.pggeneralinstancia.Cmodolectura.ListIndex =
1thisform.pgrecursos.pggeneralinstancia.Cmodolectura.Enabled=
.F.ENDCASE
ENDIFENDIF
cargarcpugeneral
Local gnFileHandle,nSize,cStringWAIT WINDOW "Cargando Informacion del Equipo" NOWAIT
contador = 0coperacion = "Run (systeminfo >" + SYS(5) + _screen.estANDAR.crutatxt +
"informacioncpu.txt)"&coperacion
WAIT CLEAR
lcdato = SYS(5)lhFile=FOPEN(SYS(5) + _screen.estANDAR.crutatxt + "informacioncpu.txt")IF lhFile>0
DO WHILE NOT FEOF(lhFile)lsBuffer=FGETS(lhFile)DO CASE
CASE LIKE("*Tiempo de arranque del sistema*",lsBuffer) ORLIKE("*System Up Time*",lsBuffer)
IF LIKE("*System Up Time*",lsBuffer)thisform.pgrecursos.pggeneralcpu.text1.Value =
ALLTRIM(SUBSTR(lsBuffer,16,100))ELSE
thisform.pgrecursos.pggeneralcpu.text1.Value =ALLTRIM(SUBSTR(lsBuffer,32,100))
ENDIF
CASE LIKE("*Nombre de host:*",lsBuffer) OR LIKE("*Host Name:*",lsBuffer)IF LIKE("*Host Name:*",lsBuffer)
thisform.pgrecursos.pggeneralcpu.text2.Value =ALLTRIM(SUBSTR(lsBuffer,11,100))
ELSEthisform.pgrecursos.pggeneralcpu.text2.Value =
ALLTRIM(SUBSTR(lsBuffer,16,100))ENDIF
CASE LIKE("*Nombre del sistema operativo:*",lsBuffer) OR LIKE("*OSName:*",lsBuffer)
IF LIKE("*OS Name:*",lsBuffer)thisform.pgrecursos.pggeneralcpu.text4.Value =
ALLTRIM(SUBSTR(lsBuffer,9,100))ELSE
thisform.pgrecursos.pggeneralcpu.text4.Value =ALLTRIM(SUBSTR(lsBuffer,30,100))
- 149 -
ENDIF
CASE LIKE("*Procesador(es):*",lsBuffer) ORLIKE("*Processor(s):*",lsBuffer)
IF LIKE("*Processors(s):*",lsBuffer)thisform.pgrecursos.pggeneralcpu.text6.Value =
ALLTRIM(SUBSTR(lsBuffer,15,100))ELSE
thisform.pgrecursos.pggeneralcpu.text6.Value =ALLTRIM(SUBSTR(lsBuffer,16,100))
ENDIF
CASE LIKE("*Cantidad total de memoria f*",lsBuffer) OR LIKE("*TotalPhysical Memory:*",lsBuffer)
IF LIKE("*Total Physical Memory:*",lsBuffer)thisform.pgrecursos.pggeneralcpu.text7.Value =
ALLTRIM(SUBSTR(lsBuffer,23,100))ELSE
thisform.pgrecursos.pggeneralcpu.text7.Value =ALLTRIM(SUBSTR(lsBuffer,34,100))
ENDIFENDCASE
ENDDOENDIFFCLOSE(lhFile)
**Mostrar Dirección IPlowinsock= CREATEOBJECT("mswinsock.winsock.1")direccion= lowinsock.LocalIPTHISFORM.PGrecursos.PGgeneralcpu.Text5.Value= direccion
*** Mostrar espacio Libre en Disco*!* SET DEFAULT TO z:\espacio1= VAL(SYS(2020))/1024/1024/1024thisform.pgrecursos.pggeneralcpu.text9.Value =espacio1
** Mostrar el tamanio total del Discoobj = GETOBJECT("winmgmts:\\")cCad = "Select * from Win32_LogicalDisk"oCapacity = obj.ExecQuery(cCad)FOR EACH Disco IN oCapacity
IF !ISNULL(Disco.size) AND ALLTRIM(Disco.name)==SYS(5)thisform.pgrecursos.pggeneralcpu.text8.Value = VAL(disco.size)/1024/1024/1024
ENDIFNEXT
Cierra_base
lcarch = SYS(5) + '\' + _screen.esTANDAR.crutatxt + 'baja.bat'IF FILE("&lcarch")
DELETE FILE ("&lcarch")ENDIF
- 150 -
cprivilegio = ''IF ALLTRIM(_screen.esTANDAR.cprivilegio)=='Normal'
cprivilegio = ' 'ELSE
cprivilegio = ' as ' + ALLTRIM(_screen.esTANDAR.cprivilegio)ENDIF
arch = fcreate("&lcarch")FPUTS(arch,"@echo off")FPUTS(arch,"set oracle_sid="+_screen.esTANDAR.cdatabase)FPUTS(arch, "echo set echo on > %0.tmp")FPUTS(arch,"echo connect " + ALLTRIM(_screen.esTANDAR.cusuario) + '/' +ALLTRIM(_screen.esTANDAR.cclave) + cprivilegio + "; >> %0.tmp")FPUTS(arch,"echo shutdown immediate; >> %0.tmp")FPUTS(arch,"echo exit; >> %0.tmp")FPUTS(arch,"echo pause >> %0.tmp")FPUTS(arch,"sqlplus /nolog @%0.tmp")FPUTS(arch,"del %0.tmp")fclose(arch)
RUN "&lcarch"
Conecta_new
ln = SQLSETPROP(0,"DispLogin",3)liconex = SQLSTRINGCONNECT(_screen.esTANDAR.cstringconnect)IF liconex < 0
men = "No se pudo conectar al servidor - " + MESSAGE()IF LIKE('*ORA-01034*',men)
MESSAGEBOX("No se encuentra conectado a Oracle",16,_screen.estandar.cmensistema)ELSE
MESSAGEBOX(men,16,_screen.estandar.cmensistema)ENDIF_screen.estandar.iconectada = 0this.liconexion = -1RETURN
ENDIF
IF liconex > 0this.liconexion = liconex_screen.estandar.iconectada = 1
ELSEthis.liconex = -1_screen.estandar.iconectada = 0
ENDIF
estadoinstance
- 151 -
lcsql = "select status,database_status from v$instance"liresult = thisform.sqlexec(lcsql,"tmpresul")IF liresult < 0
men = MESSAGE()thisform.pgrecursos.pggeneralinstancia.pageframe1.page1.optinstancia.optcerrada.Value = 1thisform.pgrecursos.pggeneralinstancia.pageframe1.page1.optinstancia.optabierto.Value = 0thisform.pgrecursos.pggeneralinstancia.pageframe1.page1.optinstancia.optiniciado.Value= 0thisform.pgrecursos.pggeneralinstancia.pageframe1.page1.optinstancia.optMontado.Value = 0thisform.pgrecursos.pggeneralcpu.text3.value= "INACTIVO"thisform.log_error(lcsql)RETURN
ELSElcinstancia = ALLTRIM(tmpresul.status)thisform.pgrecursos.pggeneralcpu.text3.value= tmpresul.database_statusDO CASE
CASE ALLTRIM(tmpresul.status)=="OPEN"
thisform.pgrecursos.pggeneralinstancia.pageframe1.page1.optinstancia.optcerrada.Value = 0
thisform.pgrecursos.pggeneralinstancia.pageframe1.page1.optinstancia.optabierto.Value = 1
thisform.pgrecursos.pggeneralinstancia.pageframe1.page1.optinstancia.optiniciado.Value= 0
thisform.pgrecursos.pggeneralinstancia.pageframe1.page1.optinstancia.optMontado.Value = 0
lcoption= 1
CASE ALLTRIM (tmpresul.status)="MOUNTED"
thisform.pgrecursos.pggeneralinstancia.pageframe1.page1.optinstancia.optcerrada.Value = 0
thisform.pgrecursos.pggeneralinstancia.pageframe1.page1.optinstancia.optabierto.Value = 0
thisform.pgrecursos.pggeneralinstancia.pageframe1.page1.optinstancia.optiniciado.Value= 0
thisform.pgrecursos.pggeneralinstancia.pageframe1.page1.optinstancia.optMontado.Value = 1
lcoption= 2CASE ALLTRIM (tmpresul.status)="STARTED"
thisform.pgrecursos.pggeneralinstancia.pageframe1.page1.optinstancia.optcerrada.Value = 0
thisform.pgrecursos.pggeneralinstancia.pageframe1.page1.optinstancia.optabierto.Value = 0
thisform.pgrecursos.pggeneralinstancia.pageframe1.page1.optinstancia.optiniciado.Value= 1
thisform.pgrecursos.pggeneralinstancia.pageframe1.page1.optinstancia.optMontado.Value = 0
lcoption= 3OTHERWISE
thisform.pgrecursos.pggeneralinstancia.pageframe1.page1.optinstancia.optcerrada.Value = 1
thisform.pgrecursos.pggeneralinstancia.pageframe1.page1.optinstancia.optabierto.Value = 0
- 152 -
thisform.pgrecursos.pggeneralinstancia.pageframe1.page1.optinstancia.optiniciado.Value= 0
thisform.pgrecursos.pggeneralinstancia.pageframe1.page1.optinstancia.optMontado.Value = 0lcoption= 4
ENDCASEENDIF
Inactiva
**Desabilita opciones de pestaña de General Instancia
thisform.pgrecursos.pggeneralinstancia.command2.Enabled= .F.thisform.pgrecursos.pggeneralinstancia.label1.Visible= .F.thisform.pgrecursos.pggeneralinstancia.label2.Visible= .F.thisform.pgrecursos.pggeneralinstancia.label3.Visible= .F.thisform.pgrecursos.pggeneralinstancia.label4.Visible= .F.thisform.pgrecursos.pggeneralinstancia.label5.Visible= .F.thisform.pgrecursos.pggeneralinstancia.label6.Visible= .F.thisform.pgrecursos.pggeneralinstancia.label7.Visible= .F.thisform.pgrecursos.pggeneralinstancia.label8.Visible= .F.thisform.pgrecursos.pggeneralinstancia.label9.Visible= .F.thisform.pgrecursos.pggeneralinstancia.text10.Visible= .F.thisform.pgrecursos.pggeneralinstancia.text11.Visible= .F.thisform.pgrecursos.pggeneralinstancia.text12.Visible= .F.thisform.pgrecursos.pggeneralinstancia.text13.Visible= .F.thisform.pgrecursos.pggeneralinstancia.text14.Visible= .F.thisform.pgrecursos.pggeneralinstancia.text15.Visible= .F.thisform.pgrecursos.pggeneralinstancia.text16.Visible= .F.thisform.pgrecursos.pggeneralinstancia.cmodorestringido.Visible= .F.thisform.pgrecursos.pggeneralinstancia.cmodolectura.Visible= .F.thisform.pgrecursos.pggeneralinstancia.label_oracle.Visible= .T.
** Desabilita opciones de pestaña de Memoria SGA, PGAthisform.pgrecursos.pgmemoria.shape1.Visible= .F.thisform.pgrecursos.pgmemoria.shape2.Visible= .F.thisform.pgrecursos.pgmemoria.shape3.Visible= .F.thisform.pgrecursos.pgmemoria.shape4.Visible= .F.thisform.pgrecursos.pgmemoria.label1.Visible= .F.thisform.pgrecursos.pgmemoria.label2.Visible= .F.thisform.pgrecursos.pgmemoria.label3.Visible= .F.thisform.pgrecursos.pgmemoria.label4.Visible= .F.thisform.pgrecursos.pgmemoria.label5.Visible= .F.thisform.pgrecursos.pgmemoria.label6.Visible= .F.thisform.pgrecursos.pgmemoria.label7.Visible= .F.thisform.pgrecursos.pgmemoria.label8.Visible= .F.thisform.pgrecursos.pgmemoria.label9.Visible= .F.thisform.pgrecursos.pgmemoria.label10.Visible= .F.thisform.pgrecursos.pgmemoria.label11.Visible= .F.thisform.pgrecursos.pgmemoria.label12.Visible= .F.thisform.pgrecursos.pgmemoria.label13.Visible= .F.thisform.pgrecursos.pgmemoria.label14.Visible= .F.
- 153 -
thisform.pgrecursos.pgmemoria.label15.Visible= .F.thisform.pgrecursos.pgmemoria.image3.Visible = .F.thisform.pgrecursos.pgmemoria.conjuntoCompartido.Visible= .F.thisform.pgrecursos.pgmemoria.cacheBuffers.Visible= .F.thisform.pgrecursos.pgmemoria.conjuntoGrande.Visible= .F.thisform.pgrecursos.pgmemoria.conjuntoJava.Visible= .F.thisform.pgrecursos.pgmemoria.cconjuntoCompartido.Visible= .F.thisform.pgrecursos.pgmemoria.ccacheBuffers.Visible= .F.thisform.pgrecursos.pgmemoria.CconjuntoGrande.Visible= .F.thisform.pgrecursos.pgmemoria.cconjuntoJava.Visible= .F.thisform.pgrecursos.pgmemoria.sGAtotal.Visible= .F.thisform.pgrecursos.pgmemoria.tamañoMaximoSGA.Visible= .F.thisform.pgrecursos.pgmemoria.destinoPga.Visible= .F.thisform.pgrecursos.pgmemoria.pgaActual.Visible= .F.thisform.pgrecursos.pgmemoria.maximoPga.Visible= .F.thisform.pgrecursos.pgmemoria.porcentajesAciertos.Visible= .F.thisform.pgrecursos.pgmemoria.cdestinoPGA.Visible= .F.thisform.pgrecursos.pgmemoria.textoGeneral.Visible= .F.thisform.pgrecursos.pgmemoria.label_oracle1.Visible= .T.thisform.pgrecursos.pgmemoria.label_oracle2.Visible= .T.
** Desabilita opciones de Pestaña de Recuperación
thisform.pgrecursos.pgrecuperacion.label3.Visible= .F.thisform.pgrecursos.pgrecuperacion.label4.Visible= .F.thisform.pgrecursos.pgrecuperacion.label5.Visible= .F.thisform.pgrecursos.pgrecuperacion.label6.Visible= .F.thisform.pgrecursos.pgrecuperacion.label7.Visible= .F.thisform.pgrecursos.pgrecuperacion.tiempoMedioRecuperación.Visible= .F.thisform.pgrecursos.pgrecuperacion.textoGeneralRecup.Visible= .F.thisform.pgrecursos.pgrecuperacion.tiempoRecuperacion.Visible= .F.thisform.pgrecursos.pgrecuperacion.nombreArchivo.Visible= .F.thisform.pgrecursos.pgrecuperacion.cTiempoMedioRecuperacion.Visible= .F.thisform.pgrecursos.pgrecuperacion.modoArchivelog.Visible= .F.thisform.pgrecursos.pgrecuperacion.archivadoAutomatico.Visible= .F.thisform.pgrecursos.pgrecuperacion.grid3.Visible= .F.thisform.pgrecursos.pgrecuperacion.image3.Visible= .F.thisform.pgrecursos.pgrecuperacion.pageframe1.Visible= .F.thisform.pgrecursos.pgrecuperacion.pageframe2.Visible= .F.thisform.pgrecursos.pgrecuperacion.label_oracle3.Visible= .T.lcinstancia="STOP"
limpia
WITH thisform.pgrecursos.pgrecuperacion.grid3.Recordsource = "".Column1.Controlsource = "".Column2.Controlsource = ""SELECT tmpUbicacionArchivelogZAP.Recordsource = "tmpUbicacionArchivelog".Column1.Controlsource = "tmpUbicacionArchivelog.DESTINATION"
- 154 -
.Column2.Controlsource = "tmpUbicacionArchivelog.STATUS"
.refreshENDWITH
Memoria_sga
lcsql = "select value, name from v$parameter where name in('shared_pool_size', 'db_cache_size', 'large_pool_size','java_pool_size', 'log_buffer', 'sga_max_size')"liresult = thisform.sqlexec(lcsql,"tmpresulSGA")IF liresult < 0
** Desabilita opciones de pestaña de Memoria SGAthisform.pgrecursos.pgmemoria.shape1.Visible= .F.thisform.pgrecursos.pgmemoria.shape2.Visible= .F.thisform.pgrecursos.pgmemoria.shape3.Visible= .F.thisform.pgrecursos.pgmemoria.shape4.Visible= .F.thisform.pgrecursos.pgmemoria.label1.Visible= .F.thisform.pgrecursos.pgmemoria.label2.Visible= .F.thisform.pgrecursos.pgmemoria.label3.Visible= .F.thisform.pgrecursos.pgmemoria.label4.Visible= .F.thisform.pgrecursos.pgmemoria.label5.Visible= .F.thisform.pgrecursos.pgmemoria.label6.Visible= .F.thisform.pgrecursos.pgmemoria.label7.Visible= .F.thisform.pgrecursos.pgmemoria.label8.Visible= .F.thisform.pgrecursos.pgmemoria.conjuntoCompartido.Visible= .F.thisform.pgrecursos.pgmemoria.cacheBuffers.Visible= .F.thisform.pgrecursos.pgmemoria.conjuntoGrande.Visible= .F.thisform.pgrecursos.pgmemoria.conjuntoJava.Visible= .F.thisform.pgrecursos.pgmemoria.cconjuntoCompartido.Visible= .F.thisform.pgrecursos.pgmemoria.ccacheBuffers.Visible= .F.thisform.pgrecursos.pgmemoria.CconjuntoGrande.Visible= .F.thisform.pgrecursos.pgmemoria.cconjuntoJava.Visible= .F.thisform.pgrecursos.pgmemoria.sGAtotal.Visible= .F.thisform.pgrecursos.pgmemoria.tamañoMaximoSGA.Visible= .F.thisform.pgrecursos.pgmemoria.label_oracle1.Visible= .T.thisform.log_error(lcsql)RETURN
ELSESELECT tmpresulSGASCAN
DO CASECASE ALLTRIM(tmpresulSGA.name)=="shared_pool_size"
thisform.pgrecursos.pgmemoria.conjuntoCompartido.Value=ROUND((VAL(ALLTRIM(tmpresulSGA.value))/1024/1024),0)
thisform.pgrecursos.pgmemoria.CconjuntoCompartido.ListIndex= 1shared_pool=VAL(ALLTRIM(tmpresulSGA.value))
CASE ALLTRIM(tmpresulSGA.name)=="db_cache_size"thisform.pgrecursos.pgmemoria.cacheBuffers.Value =
ROUND((VAL(ALLTRIM(tmpresulSGA.value))/1024/1024),0)
- 155 -
thisform.pgrecursos.pgmemoria.ccacheBuffers.ListIndex= 1cache=VAL(ALLTRIM(tmpresulSGA.value))
CASE ALLTRIM(tmpresulSGA.name)=="large_pool_size"thisform.pgrecursos.pgmemoria.conjuntoGrande.Value
=ROUND((VAL(ALLTRIM(tmpresulSGA.value))/1024/1024),0)thisform.pgrecursos.pgmemoria.cconjuntoGrande.ListIndex= 1large=VAL(ALLTRIM(tmpresulSGA.value))
CASE ALLTRIM(tmpresulSGA.name)=="java_pool_size"thisform.pgrecursos.pgmemoria.conjuntoJava.Value
=ROUND((VAL(ALLTRIM(tmpresulSGA.value))/1024/1024),0)thisform.pgrecursos.pgmemoria.cconjuntoJava.ListIndex = 1java=VAL(ALLTRIM(tmpresulSGA.value))
CASE ALLTRIM(tmpresulSGA.name)=="log_buffer"logbuffer=VAL( ALLTRIM(tmpresulSGA.value))
CASE ALLTRIM(tmpresulSGA.name)=="sga_max_size"tamañomaximo=VAL( ALLTRIM(tmpresulSGA.value))
ENDCASEENDSCAN
ENDIF
*** SEGUNDO CURSOR TAMAÑO FIJO DE LA SGAlcsql2 = "select sum(decode(name,'fixed_sga',bytes))valor from v$sgastat"liresult2 = thisform.sqlexec(lcsql2,"tmpresulSGA2")IF liresult < 0
men = MESSAGE()thisform.log_error(lcsql)RETURN
ELSESELECT tmpresulSGA2SCAN
tamañofijo= (tmpresulSGA2.valor)ENDSCAN
***Calculo del SGA TOTALthisform.pgrecursos.pgmemoria.sGAtotal.Value= ROUND(((shared_pool + cache + large + java
+ logbuffer + tamañofijo)/1024)/1024, 3)
*** Calculo del tamaño máximo SGAthisform.pgrecursos.pgmemoria.tamañoMaximoSGA.Value=
ROUND(((tamañomaximo)/1024/1024),3 )ENDIF
memoriapga
- 156 -
lcsql = "select value,name from v$pgastat where name in('aggregate PGA target parameter','total PGAallocated','maximum PGA allocated','cache hit percentage')"liresult = thisform.sqlexec(lcsql,"tmpresulPGA")IF liresult < 0
** Desabilita opciones de pestaña de Memoria PGAthisform.pgrecursos.pgmemoria.label9.Visible= .F.thisform.pgrecursos.pgmemoria.label10.Visible= .F.thisform.pgrecursos.pgmemoria.label11.Visible= .F.thisform.pgrecursos.pgmemoria.label12.Visible= .F.thisform.pgrecursos.pgmemoria.label13.Visible= .F.thisform.pgrecursos.pgmemoria.label14.Visible= .F.thisform.pgrecursos.pgmemoria.label15.Visible= .F.thisform.pgrecursos.pgmemoria.image3.Visible = .F.thisform.pgrecursos.pgmemoria.destinoPga.Visible= .F.thisform.pgrecursos.pgmemoria.pgaActual.Visible= .F.thisform.pgrecursos.pgmemoria.maximoPga.Visible= .F.thisform.pgrecursos.pgmemoria.porcentajesAciertos.Visible= .F.thisform.pgrecursos.pgmemoria.cdestinoPGA.Visible= .F.thisform.pgrecursos.pgmemoria.textoGeneral.Visible= .F.thisform.pgrecursos.pgmemoria.label_oracle2.Visible= .T.thisform.log_error(lcsql)RETURN
ELSESELECT tmpresulPGASCAN
DO caseCASE ALLTRIM(tmpresulPGA.name)=="aggregate PGA target parameter"
thisform.pgrecursos.pgmemoria.destinoPga.Value=ROUND(VAL(STR(tmpresulPGA.value,8,6))/1024/1024,0)
thisform.pgrecursos.pgmemoria.cdestinoPGA.ListIndex = 1
CASE ALLTRIM(tmpresulPGA.name)=="total PGA allocated"thisform.pgrecursos.pgmemoria.pgaActual.Value=
ROUND(VAL(STR(tmpresulPGA.value,8,6))/1024,0)
CASE ALLTRIM(tmpresulPGA.name)=="maximum PGA allocated"
thisform.pgrecursos.pgmemoria.maximoPga.Value=ROUND(VAL(STR(tmpresulPGA.value,8,6))/1024,0)
CASE ALLTRIM(tmpresulPGA.name)=="cache hit percentage"
thisform.pgrecursos.pgmemoria.porcentajesAciertos.Value=ROUND(VAL(STR(tmpresulPGA.value,8,6)),0)
ENDCASE
THISFORM.PGrecursos.PGmemoria.TextoGeneral.Value ="La suma de SGA y PGAdebe ser menor que el total de memoria del sistema menos la memoria que necesita el sistema operativo y el restode aplicaciones"
ENDSCANENDIF
- 157 -
Modoarchive
lcarch = SYS(5) + '\' + _screen.esTANDAR.crutatxt + 'archive.bat'IF FILE("&lcarch")
DELETE FILE ("&lcarch")ENDIFcprivilegio = ''
IF ALLTRIM(_screen.esTANDAR.cprivilegio)=='Normal'cprivilegio = ' '
ELSEcprivilegio = ' as ' + ALLTRIM(_screen.esTANDAR.cprivilegio)
ENDIF
arch = fcreate("&lcarch")FPUTS(arch,"@echo off")FPUTS(arch,"set oracle_sid="+_screen.esTANDAR.cdatabase)FPUTS(arch, "echo set echo on > %0.tmp")FPUTS(arch,"echo connect " + ALLTRIM(_screen.esTANDAR.cusuario) + '/' +
ALLTRIM(_screen.esTANDAR.cclave) + cprivilegio + "; >> %0.tmp")FPUTS(arch,"echo shutdown immediate; >> %0.tmp")FPUTS(arch,"echo startup mount; >> %0.tmp")FPUTS(arch,"echo alter database archivelog; >> %0.tmp")FPUTS(arch,"echo alter database open; >> %0.tmp")FPUTS(arch,"echo exit; >> %0.tmp")FPUTS(arch,"echo pause >> %0.tmp")FPUTS(arch,"sqlplus /nolog @%0.tmp")FPUTS(arch,"del %0.tmp")fclose(arch)RUN "&lcarch"
modonoarchive
lcarch = SYS(5) + '\' + _screen.esTANDAR.crutatxt + 'archive.bat'IF FILE("&lcarch")
DELETE FILE ("&lcarch")ENDIFcprivilegio = ''
IF ALLTRIM(_screen.esTANDAR.cprivilegio)=='Normal'cprivilegio = ' '
ELSEcprivilegio = ' as ' + ALLTRIM(_screen.esTANDAR.cprivilegio)
ENDIF
arch = fcreate("&lcarch")FPUTS(arch,"@echo off")FPUTS(arch,"set oracle_sid="+_screen.esTANDAR.cdatabase)FPUTS(arch, "echo set echo on > %0.tmp")
- 158 -
FPUTS(arch,"echo connect " + ALLTRIM(_screen.esTANDAR.cusuario) + '/' +ALLTRIM(_screen.esTANDAR.cclave) + cprivilegio + "; >> %0.tmp")FPUTS(arch,"echo shutdown immediate; >> %0.tmp")FPUTS(arch,"echo startup mount; >> %0.tmp")FPUTS(arch,"echo alter database noarchivelog; >> %0.tmp")FPUTS(arch,"echo alter database open; >> %0.tmp")FPUTS(arch,"echo exit; >> %0.tmp")FPUTS(arch,"echo pause >> %0.tmp")FPUTS(arch,"sqlplus /nolog @%0.tmp")FPUTS(arch,"del %0.tmp")fclose(arch)RUN "&lcarch"
Muestra_datos
thisform.limpia()thisform.conecta_new()** Mostrar la hora de inicio del Equipothisform.cargarcpugeneral()
IF ALLTRIM(_screen.esTANDAR.cprivilegio)=="SYSDBA"thisform.pgrecursos.pggeneralinstancia.pageframe1.page1.optinstancia.Enabled= .T.thisform.pgrecursos.pgrecuperacion.archivadoAutomatico.Enabled= .T.thisform.pgrecursos.pgrecuperacion.modoArchivelog.Enabled = .T.thisform.pgrecursos.pgrecuperacion.nombreArchivo.Enabled = .F.thisform.pgrecursos.pgrecuperacion.grid3.Enabled = .F.
ELSEthisform.pgrecursos.pggeneralinstancia.pageframe1.page1.optinstancia.Enabled= .F.thisform.pgrecursos.pgrecuperacion.archivadoAutomatico.Enabled= .F.thisform.pgrecursos.pgrecuperacion.modoArchivelog.Enabled = .F.thisform.pgrecursos.pgrecuperacion.nombreArchivo.Enabled = .F.thisform.pgrecursos.pgrecuperacion.grid3.Enabled = .F.
ENDIF
** Mostrar información de la instancia y la Base de Datosthisform.cargainstanciageneral()
**Mostrar el Estado de la Instanciathisform.estado_instance()
**Mostrar Memoria SGAthisform.memoria_sga ()
** Mostrar Memoria PGAthisform.memoriapga()
- 159 -
**Mostrar Recuperación de la Instanciathisform.recuperacion_instancia ()
recuperacion_instancia
lcsql = "select name, value from v$parameter where name in('fast_start_mttr_target','log_archive_format','standby_archive_dest')"liresult = thisform.sqlexec(lcsql,"tmpresulrecuperacion")lcsql = "select a.log_mode, b.archiver from v$database a, v$instance b"liresult = thisform.sqlexec(lcsql,"tmpresulrecuperacionModo")IF liresult < 0
** Desabilita opciones de Pestaña de Recuperación
thisform.pgrecursos.pgrecuperacion.label3.Visible= .F.thisform.pgrecursos.pgrecuperacion.label4.Visible= .F.thisform.pgrecursos.pgrecuperacion.label5.Visible= .F.thisform.pgrecursos.pgrecuperacion.label6.Visible= .F.thisform.pgrecursos.pgrecuperacion.label7.Visible= .F.thisform.pgrecursos.pgrecuperacion.tiempoMedioRecuperación.Visible= .F.thisform.pgrecursos.pgrecuperacion.textoGeneralRecup.Visible= .F.thisform.pgrecursos.pgrecuperacion.tiempoRecuperacion.Visible= .F.thisform.pgrecursos.pgrecuperacion.nombreArchivo.Visible= .F.thisform.pgrecursos.pgrecuperacion.cTiempoMedioRecuperacion.Visible= .F.thisform.pgrecursos.pgrecuperacion.modoArchivelog.Visible= .F.thisform.pgrecursos.pgrecuperacion.archivadoAutomatico.Visible= .F.thisform.pgrecursos.pgrecuperacion.grid3.Visible= .F.thisform.pgrecursos.pgrecuperacion.image3.Visible= .F.thisform.pgrecursos.pgrecuperacion.pageframe1.Visible= .F.thisform.pgrecursos.pgrecuperacion.pageframe2.Visible= .F.thisform.pgrecursos.pgrecuperacion.label_oracle3.Visible= .T.thisform.log_error(lcsql)RETURN
ELSESELECT tmpresulrecuperacionSCAN
DO CASECASE ALLTRIM(tmpresulrecuperacion.name)=="fast_start_mttr_target"
thisform.pgrecursos.pgrecuperacion.tiempoMedioRecuperación.Value =ROUND((VAL(ALLTRIM(tmpresulrecuperacion.value))/60),0)
thisform.pgrecursos.pgrecuperacion.cTiempoMedioRecuperacion.ListIndex=1
CASE ALLTRIM(tmpresulrecuperacion.name)=="log_archive_format"thisform.pgrecursos.pgrecuperacion.nombreArchivo.Value=
ALLTRIM(tmpresulrecuperacion.value)thisform.pgrecursos.pgrecuperacion.tname.Value =
ALLTRIM(tmpresulrecuperacion.value)ENDCASE
ENDSCAN
- 160 -
THISFORM.PGrecursos.pgrecuperacion.textoGeneralRecup.Value ="En modo Archive Log, se puedenrealizar copias de seguridad con la base de datos activa " + "y las ultimas recuperaciones, pero debe proporcionarespacio para los logs. Si cambia " + "el modo al modo Archive Log, debería realizar una copias de seguridadinmediatamente. " + "En modo No Archive Log, sólo se pueden realizar copias de seguridad en frio y se pueden " +"perder los datos en caso de corrupción de la base de datos."
SELECT tmpresulrecuperacionModoDO CASE
CASE ALLTRIM(tmpresulrecuperacionModo.log_mode)=="ARCHIVELOG"thisform.PGrecursos.PGrecuperacion.ModoArchivelog.Value= 1thisform.pgrecursos.pgrecuperacion.label6.Visible= .F.IF tmpresulrecuperacionModo.archiver=="STARTED"
thisform.pgrecursos.pgrecuperacion.archivadoAutomatico.Value=1thisform.pgrecursos.pgrecuperacion.tarcaut.Value = 'SI'
ELSEthisform.pgrecursos.pgrecuperacion.archivadoAutomatico.Value=0thisform.pgrecursos.pgrecuperacion.tarcaut.Value = 'NO'
ENDIFCASE ALLTRIM(tmpresulrecuperacionModo.log_mode)=="NOARCHIVELOG"
thisform.pgrecursos.pgrecuperacion.modoArchivelog.Value= 0thisform.pgrecursos.pgrecuperacion.archivadoAutomatico.Value = 1thisform.pgrecursos.pgrecuperacion.tarcaut.Value = 'SI'thisform.pgrecursos.pgrecuperacion.archivadoAutomatico.Enabled = .F.thisform.pgrecursos.pgrecuperacion.label3.Visible= .F.thisform.pgrecursos.pgrecuperacion.nombreArchivo.Enabled= .F.
ENDCASEENDIF
**Mostrar ubicaciones de los Archive Loglcsql= "select NVL(DEST_NAME,' ') dest_name,case STATUS when 'INACTIVE' then ' ' else STATUS end
STATUS,nvl(DESTINATION,' ') DESTINATION from v$archive_dest"liresult = thisform.sqlexec(lcsql,"tmpUbicacionArchivelog1")IF liresult < 0
men = "Error al buscar Ubicación de Archive Log - " + MESSAGE()thisform.log_error(lcsql)MESSAGEBOX(men,16,_screen.esTANDAR.cmensistema)RETURN
ENDIF
thisform.limpia()
SELECT tmpUbicacionArchivelog1GO TOPSCAN
IF LEN(ALLTRIM(tmpUbicacionArchivelog1.destination))>0SELECT tmpUbicacionArchivelogAPPEND BLANKreplace tmpUbicacionArchivelog.destination WITH
ALLTRIM(tmpUbicacionArchivelog1.destination)replace tmpUbicacionArchivelog.status WITH
ALLTRIM(tmpUbicacionArchivelog1.status)replace tmpUbicacionArchivelog.dest_name WITH
ALLTRIM(tmpUbicacionArchivelog1.dest_name)
- 161 -
ENDIFENDSCAN
SELECT tmpUbicacionArchivelogGO TOPthisform.pgrecursos.pgrecuperacion.grid3.Refresh()
thisform.PGrecursos.PGrecuperacion.ModoArchivelog.InteractiveChange()
Sube_base
lcarch = SYS(5) + '\' + _screen.esTANDAR.crutatxt + 'sube.bat'IF FILE("&lcarch")
DELETE FILE ("&lcarch")ENDIF
cprivilegio = ''IF ALLTRIM(_screen.esTANDAR.cprivilegio)=='Normal'
cprivilegio = ' 'ELSE
cprivilegio = ' as ' + ALLTRIM(_screen.esTANDAR.cprivilegio)ENDIF
arch = fcreate("&lcarch")FPUTS(arch,"@echo off")FPUTS(arch,"set oracle_sid="+_screen.esTANDAR.cdatabase)FPUTS(arch, "echo set echo on > %0.tmp")FPUTS(arch,"echo connect " + ALLTRIM(_screen.esTANDAR.cusuario) + '/' +ALLTRIM(_screen.esTANDAR.cclave) + cprivilegio + "; >> %0.tmp")FPUTS(arch,"echo startup; >> %0.tmp")FPUTS(arch,"echo exit; >> %0.tmp")FPUTS(arch,"echo pause >> %0.tmp")FPUTS(arch,"sqlplus /nolog @%0.tmp")FPUTS(arch,"del %0.tmp")FCLOSE(arch)RUN "&lcarch"
Dtos_parametros.init
IF USED("tmprecursoPar")with thisform.grid1
.Recordsource = ""
.Column1.Controlsource = ""
.Column4.Controlsource = ""
.Column3.Controlsource = ""
.Column2.Controlsource = ""
.Column5.Controlsource = ""SELECT tmprecursoParGO TOP.Recordsource = "tmprecursoPar"
- 162 -
.Column1.Controlsource = "tmprecursoPar.name"
.Column4.Controlsource = "tmprecursoPar.value"
.Column3.Controlsource = "tmprecursoPar.ISDEFAULT"
.Column2.Controlsource = "tmprecursoPar.ISSYS_MODIFIABLE"
.Column5.Controlsource = "tmprecursoPar.DESCRIPTION"
.refreshENDWITH
thisform.textoGeneralParametros.Value= "Los parametros en ejecución son parametros activos para esta Base deDatos"
ENDIF
load
DODEFAULT()
lcsql = "select name, nvl(value, ' ') value, case ISDEFAULT when 'TRUE' then 1 else 0 end ISDEFAULT, "lcsql = lcsql + "case ISSYS_MODIFIABLE when 'FALSE' then 0 else 1 end ISSYS_MODIFIABLE, DESCRIPTIONfrom v$parameter "lcsql = lcsql + " order by name "liresult = thisform.sqlexec(lcsql,"tmprecursoPar")IF liresult < 0
men = "Error al buscar los Roles - " + MESSAGE()thisform.log_error(lcsql)MESSAGEBOX(men,16,_screen.esTANDAR.cmensistema)thisform.Release
ENDIF
1.11.2 Informe de Sesiones
Init
IF USED("Tmpsesiones")with thisform.grid1
.Recordsource = ""
.Column1.Controlsource = ""
.Column2.Controlsource = ""
.Column3.Controlsource = ""
.Column4.Controlsource = ""
.Column5.Controlsource = ""
.Column6.Controlsource = ""
.Column7.Controlsource = ""
.Column8.Controlsource = ""
.Column9.Controlsource = ""
.Column10.Controlsource = ""
.Column11.Controlsource = ""
- 163 -
.Column12.Controlsource = ""SELECT TmpsesionesGO TOP.Recordsource = "Tmpsesiones".Column1.Controlsource = "Tmpsesiones.sid".Column2.Controlsource = "tmpsesiones.value2".Column3.Controlsource = "tmpsesiones.value3".Column4.Controlsource = "tmpsesiones.value4".Column5.Controlsource = "tmpsesiones.value5".Column6.Controlsource = "tmpsesiones.value6".Column7.Controlsource = "Tmpsesiones.status".Column8.Controlsource = "Tmpsesiones.username".Column9.Controlsource = "Tmpsesiones.osuser".Column10.Controlsource = "Tmpsesiones.spid".Column11.Controlsource = "Tmpsesiones.machine".Column12.Controlsource = "Tmpsesiones.program".refresh
ENDWITH
SELECT Tmpsesioneslinum = RECCOUNT()IF linum > 0
thisform.lblsesiones.Caption = ALLTRIM(STR(linum,10)) + " Sesiones"ENDIF
ENDIF
thisform.csesiones.ListIndex = 1thisform.csesiones.InteractiveChange()
Load
DODEFAULT()lcsql = "SELECT NVL(s.username, '(oracle)') AS username,s.osuser,s.sid,s.sid value2, s.sid value3, s.sid value4,s.sid value5, s.sid value6, p.spid,s.status,s.machine,s.program FROM "lcsql= lcsql + "v$session s, v$process p WHERE s.paddr = p.addr ORDER BY s.username, s.osuser"liresult = thisform.sqlexec(lcsql,"tmpsesiones")IF liresult < 0
men = "Error al buscar las Sesiones - " + MESSAGE()thisform.log_error(lcsql)MESSAGEBOX(men,16,_screen.esTANDAR.cmensistema)thisform.Release
ENDIF
SELECT tmpsesionesINDEX on tmpsesiones.sid TAG llave
** Para ver CPU en las sesiones
- 164 -
lcsql2= "select s.value,s.sid from v$sesstat s, v$statname n where n.name='CPU used by this session' andn.statistic#=s.statistic#"liresult2 = thisform.sqlexec(lcsql2,"tmpsesiones2")IF liresult < 0
men = "Error al buscar las Sesiones2 - " + MESSAGE()thisform.log_error(lcsql2)MESSAGEBOX(men,16,_screen.esTANDAR.cmensistema)thisform.Release
ENDIF
SELECT tmpsesiones2SCAN
SELECT tmpsesionesSEEK tmpsesiones2.sidIF FOUND()
SELECT tmpsesionesreplace tmpsesiones.value2 WITH tmpsesiones2.value
ELSESELECT tmpsesionesreplace tmpsesiones.value2 WITH 0
ENDIFENDSCAN
** Memoria PGA en las sesioneslcsql3="select s.value, s.sid from v$sesstat s, v$statname n, v$session se where n.name='session pga memory' andn.statistic#=s.statistic# and s.sid=se.sid"liresult3= thisform.sqlexec(lcsql3,"tmpsesiones3")IF liresult < 0
men = "Error al buscar las Sesiones3 - " + MESSAGE()thisform.log_error(lcsql3)MESSAGEBOX(men,16,_screen.esTANDAR.cmensistema)thisform.Release
ENDIF
SELECT tmpsesiones3SCAN
SELECT tmpsesionesSEEK tmpsesiones3.sidIF FOUND()
SELECT tmpsesionesreplace tmpsesiones.value3 WITH tmpsesiones3.value
ELSESELECT tmpsesionesreplace tmpsesiones.value3 WITH 0
ENDIFENDSCAN
** Entrada y Salida de Lectura Fisicalcsql4="select s.value, s.sid from v$sesstat s, v$statname n where n.name='physical reads' andn.statistic#=s.statistic#"liresult4= thisform.sqlexec(lcsql4,"tmpsesiones4")IF liresult < 0
men = "Error al buscar las Sesiones4 - " + MESSAGE()thisform.log_error(lcsql4)
- 165 -
MESSAGEBOX(men,16,_screen.esTANDAR.cmensistema)thisform.Release
ENDIF
SELECT tmpsesiones4SCAN
SELECT tmpsesionesSEEK tmpsesiones4.sidIF FOUND()
SELECT tmpsesionesreplace tmpsesiones.value4 WITH tmpsesiones4.value
ELSESELECT tmpsesionesreplace tmpsesiones.value4 WITH 0
ENDIFENDSCAN
**Lectura Lògicalcsql5="select s.value, s.sid from v$sesstat s, v$statname n where n.name='session logical reads' andn.statistic#=s.statistic#"liresult5= thisform.sqlexec(lcsql5,"tmpsesiones5")IF liresult < 0
men = "Error al buscar las Sesiones5 - " + MESSAGE()thisform.log_error(lcsql5)MESSAGEBOX(men,16,_screen.esTANDAR.cmensistema)thisform.Release
ENDIF
SELECT tmpsesiones5SCAN
SELECT tmpsesionesSEEK tmpsesiones5.sidIF FOUND()
SELECT tmpsesionesreplace tmpsesiones.value5 WITH tmpsesiones5.value
ELSESELECT tmpsesionesreplace tmpsesiones.value5 WITH 0
ENDIFENDSCAN
**Hard Parse (Analiza dificilmente)lcsql6="select s.value, s.sid from v$sesstat s, v$statname n where n.name='parse count (hard)' andn.statistic#=s.statistic#"liresult6= thisform.sqlexec(lcsql6,"tmpsesiones6")IF liresult < 0
men = "Error al buscar las Sesiones6 - " + MESSAGE()thisform.log_error(lcsql6)MESSAGEBOX(men,16,_screen.esTANDAR.cmensistema)thisform.Release
ENDIF
SELECT tmpsesiones6
- 166 -
SCANSELECT tmpsesionesSEEK tmpsesiones6.sidIF FOUND()
SELECT tmpsesionesreplace tmpsesiones.value6 WITH tmpsesiones6.value
ELSESELECT tmpsesionesreplace tmpsesiones.value6 WITH 0
ENDIFENDSCAN
1.12 Modulo de eventos, errores y notificaciones
1.12.1 Configuración de Parámetros y Notificaciones
Manmetnot.init
lcsql = "Select NVL(password,'nada') password,dirremitente,smtp,puerto,NVL(dirsaliente,'@') dirsaliente,envia from "+ _screen.esTANDAR.cusubd + ".parametros"lcsql = lcsql + " where tipo='E' "liresult = thisform.sqlexec(lcsql,"tmp1")IF liresult < 0
men = MESSAGE()thisform.log_error(lcsql)MESSAGEBOX(men,16,_screen.esTANDAR.cmensistema)RETURN
ENDIF
SELECT tmp1GO TOPthisform.tclave.Value = _screen.estandar.desencriptador(ALLTRIM(tmp1.password))thisform.tdirremi.Value = ALLTRIM(tmp1.dirremitente)thisform.tserv.Value = ALLTRIM(tmp1.smtp)thisform.tpuerto.Value = tmp1.puertothisform.chkenvio.Value = IIF(tmp1.envia='S',1,0)
lcmail = ''FOR i=0 TO LEN(tmp1.dirsaliente)
IF SUBSTR(tmp1.dirsaliente,i,1) = ";"SELECT TmpmailAPPEND BLANKreplace Tmpmail.nombre WITH ALLTRIM(lcmail)
lcmail = ''ELSE
lcmail = lcmail + SUBSTR(tmp1.dirsaliente,i,1)ENDIF
ENDFOR
- 167 -
lcsql = "Select NVL(dirsaliente,' ') dirsaliente,dirremitente,password from " + _screen.esTANDAR.cusubd +".parametros"lcsql = lcsql + " where tipo='C' "liresult = thisform.sqlexec(lcsql,"tmp1")IF liresult < 0
men = MESSAGE()thisform.log_error(lcsql)MESSAGEBOX(men,16,_screen.esTANDAR.cmensistema)RETURN
ENDIF
SELECT tmp1GO TOPSELECT TmpmailGO TOPthisform.tsms.Value = ALLTRIM(tmp1.dirremitente)thisform.tcvlsms.Value = _screen.esTANDAR.desencriptador(ALLTRIM(tmp1.password))lccel = ''FOR i=0 TO LEN(tmp1.dirsaliente)
IF SUBSTR(tmp1.dirsaliente,i,1) = ";"SELECT Tmpmailreplace Tmpmail.celular WITH SUBSTR(ALLTRIM(lccel),2,LEN(lccel))replace Tmpmail.proveedor WITH IIF(SUBSTR(lccel,1,1)='P','PORTA','MOVISTAR')
SELECT tmpmailSKIPlccel = ''
ELSElccel = lccel + SUBSTR(tmp1.dirsaliente,i,1)
ENDIFENDFOR
SELECT tmpmailGO TOPthisform.grid1.Refresh()
IF _screen.esTANDAR.cprivilegio<>"SYSDBA"thisform.SetAll('Enabled',.f.)MESSAGEBOX("Privilegios Insuficientes",48,_screen.esTANDAR.cmensistema)
ENDIF
- 168 -
Manmetnot.load
DODEFAULT()
CREATE CURSOR tmpmail(;nombre c(150),;proveedor c(20),;celular c(15))
Manmetnot.limpia
WITH thisform.grid1.Recordsource = "".Column1.Controlsource = "".Column2.Controlsource = "".Column3.Controlsource = ""SELECT TmpmailGO TOP.Recordsource = "Tmpmail".Column1.Controlsource = "Tmpmail.nombre".Column2.Controlsource = "Tmpmail.proveedor".Column3.Controlsource = "Tmpmail.celular"
.refreshENDWITH
Manmetnot.mail
TRYsmtp = ALLTRIM(thisform.tserv.Value)puerto = thisform.tpuerto.Valuelcfrom = ALLTRIM(thisform.tdirremi.Value)clave = ALLTRIM(thisform.tclave.Value)
LOCAL lcSchema, loConfig, loMsg, loError, lcErrlcErr = ""lcSchema = "http://schemas.microsoft.com/cdo/configuration/"loConfig = CREATEOBJECT("CDO.Configuration")WITH loConfig.FIELDS
.ITEM(lcSchema + "smtpserver") = "&smtp"
.ITEM(lcSchema + "smtpserverport") = puerto
.ITEM(lcSchema + "sendusing") = 2
.ITEM(lcSchema + "smtpauthenticate") = .T.
.ITEM(lcSchema + "smtpusessl") = .T.
.ITEM(lcSchema + "sendusername") = "&lcfrom"
.ITEM(lcSchema + "sendpassword") = "&clave"
.UPDATEENDWITH
- 169 -
lcmail = ''SELECT tmpmailSCAN
IF LEN(tmpmail.nombre)>0IF EMPTY(lcmail)
lcmail = ALLTRIM(tmpmail.nombre) + ";"ELSE
lcmail = lcmail + ALLTRIM(tmpmail.nombre) + ";"ENDIF
ENDIFENDSCAN
lcmail = SUBSTR(lcmail,1,LEN(ALLTRIM(lcmail))-1)loMsg = CREATEOBJECT ("CDO.Message")WITH loMsg
.Configuration = loConfig
.FROM = "&lcfrom"
.TO = "&lcmail"
.Subject = "Prueba desde Sistema DBMS - FOX"
.TextBody = "Este es un mensaje de prueba desde el Sistema " + ;"DBMS - FOX, para la notificacion de alertas."
.Send()ENDWITH
CATCH TO loErrorlcErr = [Error: ] + STR(loError.ERRORNO) + CHR(13) + ;
[Linea: ] + STR(loError.LINENO) + CHR(13) + ;[Mensaje: ] + loError.MESSAGE
FINALLYRELEASE loConfig, loMsgSTORE .NULL. TO loConfig, loMsgIF EMPTY(lcErr)
MESSAGEBOX("El mail se envió con éxito", 64, _screen.esTANDAR.cmensistema)ELSE
MESSAGEBOX(lcErr, 16 , _screen.esTANDAR.cmensistema)ENDIF
ENDTRY
Manmentnot.sms
TRYsmtp = ALLTRIM(thisform.tserv.Value)puerto = thisform.tpuerto.Valuelcfrom = ALLTRIM(thisform.tdirremi.Value)clave = ALLTRIM(thisform.tclave.Value)
LOCAL lcSchema, loConfig, loMsg, loError, lcErrlcErr = ""lcSchema = "http://schemas.microsoft.com/cdo/configuration/"loConfig = CREATEOBJECT("CDO.Configuration")WITH loConfig.FIELDS
.ITEM(lcSchema + "smtpserver") = "&smtp"
.ITEM(lcSchema + "smtpserverport") = puerto
- 170 -
.ITEM(lcSchema + "sendusing") = 2
.ITEM(lcSchema + "smtpauthenticate") = .T.
.ITEM(lcSchema + "smtpusessl") = .T.
.ITEM(lcSchema + "sendusername") = "&lcfrom"
.ITEM(lcSchema + "sendpassword") = "&clave"
.UPDATEENDWITH
lcmail = ''lccel =''SELECT tmpmailSCAN
IF LEN(tmpmail.celular)>0DO CASE
CASE ALLTRIM(tmpmail.proveedor)=='PORTA'IF LEN(tmpmail.celular) > 0
IF SUBSTR(tmpmail.celular,1,3)='090'lcdato =
ALLTRIM(SUBSTR(tmpmail.celular,2,LEN(tmpmail.celular)))lccel = lcdato +
IIF(LEN(ALLTRIM(lcdato))>0,'@portafree.com','')ELSE
lcdato =ALLTRIM(SUBSTR(tmpmail.celular,3,LEN(tmpmail.celular)))
lccel = lcdato +IIF(LEN(ALLTRIM(lcdato))>0,'@portafree.com','')
ENDIFENDIF
CASE ALLTRIM(tmpmail.proveedor)=='MOVISTAR'IF LEN(tmpmail.celular) > 0
lcdato =ALLTRIM(SUBSTR(tmpmail.celular,2,LEN(tmpmail.celular)))
lccel = lcdato +IIF(LEN(ALLTRIM(lcdato))>0,'@im.movistar.com.ec','')
ENDIFENDCASE
IF EMPTY(lcmail)lcmail = ALLTRIM(lccel) + IIF(LEN(ALLTRIM(lccel))>0,";",'')
ELSElcmail = lcmail + ALLTRIM(lccel) + IIF(LEN(ALLTRIM(lccel))>0,";",'')
ENDIFENDIF
ENDSCAN
lcmail = SUBSTR(lcmail,1,LEN(ALLTRIM(lcmail))-1)loMsg = CREATEOBJECT ("CDO.Message")WITH loMsg
.Configuration = loConfig
.FROM = "&lcfrom"
.TO = "&lcmail"
.Subject = "Prueba desde Sistema DBMS - FOX"
- 171 -
.TextBody = "Este es un mensaje de prueba desde el Sistema " + ;"DBMS - FOX."
.Send()ENDWITH
CATCH TO loErrorlcErr = [Error: ] + STR(loError.ERRORNO) + CHR(13) + ;
[Linea: ] + STR(loError.LINENO) + CHR(13) + ;[Mensaje: ] + loError.MESSAGE
FINALLYRELEASE loConfig, loMsgSTORE .NULL. TO loConfig, loMsgIF EMPTY(lcErr)
MESSAGEBOX("El SMS se envió con éxito", 64, _screen.esTANDAR.cmensistema)ELSE
MESSAGEBOX(lcErr, 16 , _screen.esTANDAR.cmensistema)ENDIF
ENDTRY
Cmdagrega.clickSELECT TmpmailAPPEND BLANKthisform.grid1.column2.cmdproveedor.ListIndex = 1SELECT TmpmailGO BOTTOM
thisform.grid1.Refreshthisform.grid1.column1.text1.SetFocus()
cmdeliminar.click
SELECT tmpmailDELETE
SELECT tmpmailGO TOPthisform.grid1.Refresh
cmd_probar_servicio.click
SELECT tmpmaillinum = RECCOUNT()IF linum > 0
thisform.mail()thisform.sms()
ELSE
- 172 -
MESSAGEBOX("Debe Ingresar la direccion del Correo Saliente",48,_screen.estandar.cmensistema)ENDIF
Cmdgrabar.click
lcsql = "Select * from " + _screen.esTANDAR.cusubd + ".parametros"liresult = thisform.sqlexec(lcsql,"tmp2")IF liresult < 0
men = MESSAGE()thisform.log_error(lcsql)MESSAGEBOX(men,16,_screen.esTANDAR.cmensistema)RETURN
ENDIF
lcmail = ''lccel = ''SELECT tmpmailSCAN
IF LEN(tmpmail.nombre)>0IF EMPTY(lcmail)
lcmail = ALLTRIM(tmpmail.nombre) + ";"ELSE
lcmail = lcmail + ALLTRIM(tmpmail.nombre) + ";"ENDIF
ENDIF
IF EMPTY(lccel)lccel = SUBSTR(tmpmail.proveedor,1,1) + ALLTRIM(tmpmail.celular) + ";"
ELSE
lccel = lccel + SUBSTR(tmpmail.proveedor,1,1) + ALLTRIM(tmpmail.celular) + ";"ENDIF
ENDSCANlcclave = _screen.esTANDAR.encriptador(ALLTRIM(thisform.tclave.Value))SELECT tmp2linum = RECCOUNT()IF linum > 0
lcenvia = IIF(thisform.chkenvio.Value=1,'S','N')
lcsql = "Update " + _screen.esTANDAR.cusubd + ".parametros "lcsql = lcsql + " set "lcsql = lcsql + " dirremitente='" + ALLTRIM(thisform.tdirremi.Value) + "',"lcsql = lcsql + " dirsaliente='" + lcmail + "',"lcsql = lcsql + " smtp=TRIM(?thisform.tserv.value),"lcsql = lcsql + " password=TRIM(?lcclave),"lcsql = lcsql + " puerto=?thisform.tpuerto.value, "lcsql = lcsql + " envia=?lcenvia "lcsql = lcsql + " where tipo='E' "liresult = thisform.sqlexec(lcsql,"")IF liresult < 0
- 173 -
men = MESSAGE()thisform.log_error(lcsql)MESSAGEBOX(men,16,_screen.esTANDAR.cmensistema)RETURN
ENDIF
lcsql = "Update " + _screen.esTANDAR.cusubd + ".parametros "lcsql = lcsql + " set "lcsql = lcsql + " dirsaliente='" + lccel + "',"lcsql = lcsql + " envia=?lcenvia "lcsql = lcsql + " where tipo='C' "liresult = thisform.sqlexec(lcsql,"")IF liresult < 0
men = MESSAGE()thisform.log_error(lcsql)MESSAGEBOX(men,16,_screen.esTANDAR.cmensistema)RETURN
ENDIF
ELSElcenvia = IIF(thisform.chkenvio.Value=1,'S','N')lcsql = "insert into " + _screen.esTANDAR.cusubd + ".parametros"lcsql = lcsql + "(dirremitente,dirsaliente,smtp,puerto,password,tipo,envia) "lcsql = lcsql + " values("lcsql = lcsql + "'" + ALLTRIM(thisform.tdirremi.Value) + "',"lcsql = lcsql + "'" + lcmail +
"',TRIM(?thisform.tserv.value),?thisform.tpuerto.value,TRIM(?lcclave),'E',?lcenvia)"liresult = thisform.sqlexec(lcsql,"")IF liresult < 0
men = MESSAGE()thisform.log_error(lcsql)MESSAGEBOX(men,16,_screen.esTANDAR.cmensistema)RETURN
ENDIFENDIF
MESSAGEBOX("Cambio realizado con exito",64,_screen.esTANDAR.cmensistema)
1.12.2 Reporte de Eventos
Infalerta.init
thisform.pgevento.pgtran.tdesde.Value = DATE()thisform.pgevento.pgtran.thasta.Value = DATE()
thisform.limpia()
- 174 -
thisform.pgevento.pgtran.cmdbuscar.Click()
infalerta.load
DODEFAULT()
SELECT 0CREATE CURSOR tmp1(;fecha datetime,;maquina c(30),;modulo c(254),;instruccion c(254))
SELECT 0CREATE CURSOR tmp2(;indice n(10),;metrica c(200),;operador c(20),;instruccion c(30),;ult_evaluacion c(20),;fec_ocurrencia c(20),;tipo c(254),;notificado c(1),;fec_notificado c(20))INDEX on tmp2.indice TAG llave
Infalerta.carga_metricas
lcusubd = _screen.esTANDAR.cusubdlcsql = " Select indice,metrica,operador,tipo,to_char(ult_ejec,'dd/mm/yyyy hh:mi:ss') ult_ejec "lcsql = lcsql + " from " + lcusubd + ".metrica where ejecuta='S' "lcsql = lcsql + " order by indice "liresult = thisform.sqlexec(lcsql,"tmpmet")IF liresult < 0
men = MESSAGE()thisform.log_error(lcsql)MESSAGEBOX(men,16,_screen.esTANDAR.cmensistema)RETURN
ENDIF
SELECT tmpmetSCAN
SELECT tmp2APPEND BLANKreplace tmp2.indice WITH tmpmet.indice,;
tmp2.metrica WITH tmpmet.metrica,;tmp2.operador WITH tmpmet.operador,;tmp2.instruccion WITH IIF(tmpmet.tipo='S','Query','Procedure'),;
- 175 -
tmp2.ult_evaluacionWITH tmpmet.ult_ejecENDSCAN
lcsql = "select indice_met,tipo_umbral,NVL(comentario,' ') comentario,NVL(operador,' ') operador,NVL(limitante,' ')limitante,to_char(fecha,'dd/mm/yyyy hh:mi:ss') fecha1, "lcsql = lcsql + " notificado,NVL(to_char(fec_notifica,'dd/mm/yyyy hh:mi:ss'),' ') fec_notificado "lcsql = lcsql + " from " + lcusubdlcsql = lcsql + ".detalle_metrica order by indice_met"liresult = thisform.sqlexec(lcsql,"tmpmet")IF liresult < 0
men = MESSAGE()thisform.log_error(lcsql)MESSAGEBOX(men,16,_screen.esTANDAR.cmensistema)RETURN
ENDIF
SELECT tmpmetSCAN
SELECT tmp2SEEK tmpmet.indice_metIF FOUND()
SELECT tmp2replace tmp2.fec_ocurrencia WITH tmpmet.fecha1,;
tmp2.tipo WITHIIF(tmpmet.tipo_umbral='C',"Critico - ","Advertencia - ") + ALLTRIM(tmpmet.comentario) + ' ' +ALLTRIM(tmpmet.operador) + ' ' + ALLTRIM(tmpmet.limitante),;
tmp2.notificado WITHIIF(tmpmet.notificado='S','S','N'),;
tmp2.fec_notificado WITH tmpmet.fec_notificadoENDIF
ENDSCAN
SELECT tmp2GO TOPthisform.pgevento.pgmetricas.grid1.Refresh()
infalerta.limpia
WITH thisform.pgevento.pgtran.grid1.Recordsource = "".Column1.Controlsource = "".Column2.Controlsource = "".Column3.Controlsource = "".Column4.Controlsource = ""SELECT Tmp1ZAP.Recordsource = "Tmp1"
- 176 -
.Column1.Controlsource = "Tmp1.fecha"
.Column2.Controlsource = "Tmp1.maquina"
.Column3.Controlsource = "Tmp1.modulo"
.Column4.Controlsource = "Tmp1.instruccion".refresh
ENDWITH
WITH thisform.pgevento.pgmetricas.grid1.Recordsource = "".Column1.Controlsource = "".Column2.Controlsource = "".Column3.Controlsource = "".Column4.Controlsource = "".Column5.Controlsource = "".Column6.Controlsource = "".Column7.Controlsource = "".Column8.Controlsource = ""SELECT Tmp2ZAP.Recordsource = "Tmp2".Column1.Controlsource = "Tmp2.metrica".Column2.Controlsource = "Tmp2.operador".Column3.Controlsource = "Tmp2.instruccion".Column4.Controlsource = "Tmp2.ult_evaluacion".Column5.Controlsource = "tmp2.fec_ocurrencia".Column6.Controlsource = "tmp2.tipo".Column7.Controlsource = "tmp2.notificado".Column8.Controlsource = "tmp2.fec_notificado"
.refreshENDWITH
Infalerta.reporte
LPARAMETERS p_tiporeporte
*p_tiporeporte = 1 Pantalla*p_tiporeporte = 2 Impresora*p_tiporeporte = 3 Excel
WITH thisform.pgevento.pgtran.tdesde.setfocusc_rango_fecha = 'Desde: ' + DTOC(.tdesde.value)+ ' Hasta: '+ dtoc(.thasta.value)c_rango_usuario = 'De: ' + ALLTRIM(.tuser.value)
SELECT tmp1COUNT TO nregIF nreg >0
SELECT tmp1GO TOPDO case
CASE p_tiporeporte = 1
- 177 -
REPORT FORM _screen.estandar.crutafte + 'infalerta\inflogtran'NOCONSOLE preview
CASE p_tiporeporte = 2WAIT WINDOW 'Exportando los datos a Microsft Excel...espere
por favor' NOWAIT noclearthis.exportar('tmp1','Audt','Reporte de Transacciones del
Sistema',c_rango_fecha,c_rango_usuario)WAIT clear
ENDCASE
ENDIFENDWITH
Cmdbuscar.clickthisform.limpia()
DO CASECASE thisform.pgevento.pgtran.tdesde.Value > thisform.pgevento.pgtran.thasta.Value
men = "No puede ingresar una fecha de inicio mayor a la del fin"MESSAGEBOX(men,16,_screen.esTANDAR.cmensistema)thisform.pgevento.pgtran.tdesde.SetFocus()RETURN
ENDCASE
lcfechad = thisform.pgevento.pgtran.tdesde.Valuelcfechah = thisform.pgevento.pgtran.thasta.Valuelcuser = thisform.pgevento.pgtran.tuser.ValueIF LEN(ALLTRIM(thisform.pgevento.pgtran.tuser.Value))>0
lccriterio = " and UPPER(TRIM(operador))=UPPER('" + ALLTRIM(lcuser) + "')"ELSE
lcCriterio = ' 'ENDIFlcbase = _screen.esTANDAR.cdatabaselcsql = "Select * from " + _screen.esTANDAR.cusubd + ".logdbms "lcsql = lcsql + " Where to_char(fecha,'dd/mm/yyyy')>='" + DTOC(lcfechad) + "' and to_char(fecha,'dd/mm/yyyy')<='" +DTOC(lcfechah) + "' "lcsql = lcsql + " and tipo='1' and UPPER(sid)=UPPER('&lcbase')" + lccriteriolcsql = lcsql + " order by fecha "liresult = thisform.sqlexec(lcsql,"tmp")IF liresult < 0
men = MESSAGE()thisform.log_error(lcsql)MESSAGEBOX(men,15,_screen.esTANDAR.cmensistema)RETURN
ENDIF
SELECT tmplinum = RECCOUNT()IF linum > 0
SELECT tmpSCAN
- 178 -
SELECT tmp1APPEND BLANKREPLACE tmp1.fecha WITH tmp.fecha,;
tmp1.maquina WITH tmp.maquina,;tmp1.modulo WITH tmp.modulo,;tmp1.instruccion WITH tmp.sentencia
ENDSCANELSE
men = "No existe informacion con ese criterio"MESSAGEBOX(men,64,_screen.esTANDAR.cmensistema)
ENDIF
SELECT tmp1GO TOPthisform.pgevento.pgtran.grid1.Refresh()
thisform.carga_metricas()
histmetricas.init
LPARAMETERS imetrica,cmetricalimetrica = imetricalcmetrica = cmetricalcusubd = _screen.esTANDAR.cusubd
thisform.limpia()thisform.lbltitulo.Caption = thisform.lbltitulo.Caption + lcmetricathisform.Caption = thisform.lbltitulo.Caption
lcsql = "Select to_char(fecha,'dd/mm/yyyy hh:mi:ss') fecha,tipo_umbral,NVL(operador,' ') operador, "lcsql = lcsql + " NVL(limitante,' ') limitante,NVL(valor,0) valor,NVL(comentario,' ') comentario,NVL(notificado,'')notificado, "lcsql = lcsql + " NVL(to_char(fec_notifica,'dd/mm/yyyy hh:mi:ss'),' ') fec_notifica"lcsql = lcsql + " from " + lcusubd + ".detalle_metrica "lcsql = lcsql + " where indice_met=?limetrica "lcsql = lcsql + " order by fecha "liresult = thisform.sqlexec(lcsql,"tmphist")IF liresult< 0
men = MESSAGE()thisform.log_error(lcsql)MESSAGEBOX(men,16,_screen.esTANDAR.cmensistema)RETURN
ENDIF
SELECT tmphistSCAN
SELECT tmphAPPEND BLANKreplace tmph.fecha WITH tmphist.fecha,;
- 179 -
tmph.status WITHIIF(tmphist.tipo_umbral='C','Critico','Advertencia'),;
tmph.operador WITH tmphist.operador,;tmph.limitante WITH tmphist.limitante,;tmph.valor WITH tmphist.valor,;tmph.comentario WITH tmphist.comentario,;tmph.notificado WITH IIF(tmphist.notificado='S','S','N'),;tmph.fec_notificado WITH tmphist.fec_notifica
ENDSCAN
SELECT tmphGO TOPthisform.grid1.Refresh()
histmetricas.load
DODEFAULT()
SELECT 0CREATE CURSOR tmph(;fecha c(20),;status c(15),;operador c(15),;limitante c(15),;valor n(10),;comentario c(254),;notificado c(1),;fec_notificado c(20))
histmetricas.limpia
WITH thisform.grid1.Recordsource = "".Column1.Controlsource = "".Column2.Controlsource = "".Column3.Controlsource = "".Column4.Controlsource = "".Column5.Controlsource = "".Column6.Controlsource = "".Column7.Controlsource = "".Column8.Controlsource = ""SELECT TmphZAP.Recordsource = "Tmph".Column1.Controlsource = "Tmph.fecha".Column2.Controlsource = "Tmph.status".Column3.Controlsource = "Tmph.operador".Column4.Controlsource = "Tmph.limitante".Column5.Controlsource = "tmph.valor".Column6.Controlsource = "tmph.comentario"
- 180 -
.Column7.Controlsource = "tmph.notificado"
.Column8.Controlsource = "tmph.fec_notificado".refresh
ENDWITH
Cmdexcel.click
WITH thisformc_rango_usuario = thisform.Caption
SELECT tmphCOUNT TO nregIF nreg >0
SELECT tmphGO TOPWAIT WINDOW 'Exportando los datos a Microsft Excel...espere por favor' NOWAIT
noclearthisform.exportar('tmph','Audt','Metricas',' ',c_rango_usuario)
WAIT clearENDIF
ENDWITH
1.12.3 Informe de Errores
Inferror.init
thisform.pgevento.pgtran.tdesde.Value = DATE()thisform.pgevento.pgtran.thasta.Value = DATE()
thisform.limpia()thisform.pgevento.pgtran.cmdbuscar.Click()thisform.pgevento.pgmetricas.Caption = "alert_" + ALLTRIM(_screen.esTANDAR.cdatabase) + ".log"
thisform.lee_archivo()
inferror.load
DODEFAULT()
- 181 -
SELECT 0CREATE CURSOR tmp1(;fecha datetime,;maquina c(30),;modulo c(254),;instruccion c(254))
SELECT 0CREATE CURSOR tmp2(;indice n(10),;metrica c(200),;operador c(20),;instruccion c(30),;ult_evaluacion c(20),;fec_ocurrencia c(20),;tipo c(254),;notificado c(1),;fec_notificado c(20))INDEX on tmp2.indice TAG llave
Inferror.carga_metricas
lcusubd = _screen.esTANDAR.cusubdlcsql = " Select indice,metrica,operador,tipo,to_char(ult_ejec,'dd/mm/yyyy hh:mm:ss') ult_ejec "lcsql = lcsql + " from " + lcusubd + ".metrica where ejecuta='S' "lcsql = lcsql + " order by indice "liresult = thisform.sqlexec(lcsql,"tmpmet")IF liresult < 0
men = MESSAGE()thisform.log_error(lcsql)MESSAGEBOX(men,16,_screen.esTANDAR.cmensistema)RETURN
ENDIF
SELECT tmpmetSCAN
SELECT tmp2APPEND BLANKreplace tmp2.indice WITH tmpmet.indice,;
tmp2.metrica WITH tmpmet.metrica,;tmp2.operador WITH tmpmet.operador,;tmp2.instruccion WITH IIF(tmpmet.tipo='S','Query','Procedure'),;tmp2.ult_evaluacionWITH tmpmet.ult_ejec
ENDSCAN
lcsql = "select indice_met,tipo_umbral,NVL(comentario,' ') comentario,NVL(operador,' ') operador,NVL(limitante,' ')limitante,to_char(fecha,'dd/mm/yyyy hh:mm:ss') fecha1, "lcsql = lcsql + " notificado,NVL(to_char(fec_notifica,'dd/mm/yyyy hh:mm:ss'),' ') fec_notificado "lcsql = lcsql + " from " + lcusubdlcsql = lcsql + ".detalle_metrica order by indice_met"
- 182 -
liresult = thisform.sqlexec(lcsql,"tmpmet")IF liresult < 0
men = MESSAGE()thisform.log_error(lcsql)MESSAGEBOX(men,16,_screen.esTANDAR.cmensistema)RETURN
ENDIF
SELECT tmpmetSCAN
SELECT tmp2SEEK tmpmet.indice_metIF FOUND()
SELECT tmp2replace tmp2.fec_ocurrencia WITH tmpmet.fecha1,;
tmp2.tipo WITHIIF(tmpmet.tipo_umbral='C',"Critico - ","Advertencia - ") + ALLTRIM(tmpmet.comentario) + ' ' +ALLTRIM(tmpmet.operador) + ' ' + ALLTRIM(tmpmet.limitante),;
tmp2.notificado WITHIIF(tmpmet.notificado='S','S','N'),;
tmp2.fec_notificado WITH tmpmet.fec_notificadoENDIF
ENDSCAN
SELECT tmp2GO TOPthisform.pgevento.pgmetricas.grid1.Refresh()
inferior.lee_archivo
lcsql = "select value from v$parameter where rtrim(name)='background_dump_dest'"liresult = thisform.sqlexec(lcsql,"tmpar")IF liresult < 0
men = MESSAGE()thisform.log_error(lcsql)MESSAGEBOX(men,16,_screen.esTANDAR.cmensistema)RETURN
ENDIFSELECT tmparlcnamearch = ALLTRIM(tmpar.value) + '\alert_' + _screen.esTANDAR.cdatabase + '.log'lhFile=FOPEN("&lcnamearch",0)nSize = FSEEK(lhFile, 0, 2)WAIT WINDOW "Cargando Informacion del Arhivo Log!" NOWAIT
= FSEEK(lhFile, 0, 0) && Move pointer to BOFthisform.pgevento.pgmetricas.olealert.text = FREAD(lhFile, nSize)
WAIT CLEARFCLOSE(lhFile)
- 183 -
Inferror.limpia
WITH thisform.pgevento.pgtran.grid1.Recordsource = "".Column1.Controlsource = "".Column2.Controlsource = "".Column3.Controlsource = "".Column4.Controlsource = ""SELECT Tmp1ZAP.Recordsource = "Tmp1".Column1.Controlsource = "Tmp1.fecha".Column2.Controlsource = "Tmp1.maquina".Column3.Controlsource = "Tmp1.modulo".Column4.Controlsource = "Tmp1.instruccion"
.refreshENDWITH
Inferior.reporte
LPARAMETERS p_tiporeporte
*p_tiporeporte = 1 Pantalla*p_tiporeporte = 2 Impresora*p_tiporeporte = 3 Excel
WITH thisform.pgevento.pgtran.tdesde.setfocusc_rango_fecha = 'Desde: ' + DTOC(.tdesde.value)+ ' Hasta: '+ dtoc(.thasta.value)c_rango_usuario = 'De: ' + ALLTRIM(.tuser.value)
SELECT tmp1COUNT TO nregIF nreg >0
SELECT tmp1GO TOPDO case
CASE p_tiporeporte = 1REPORT FORM _screen.estandar.crutafte + 'inferror\inferror'
NOCONSOLE previewCASE p_tiporeporte = 2
WAIT WINDOW 'Exportando los datos a Microsft Excel...esperepor favor' NOWAIT noclear
this.exportar('tmp1','Audt','Reporte de Transacciones delSistema',c_rango_fecha,c_rango_usuario)
WAIT clearENDCASE
- 184 -
ENDIFENDWITH
Cmdbuscar.click
thisform.limpia()
DO CASECASE thisform.pgevento.pgtran.tdesde.Value > thisform.pgevento.pgtran.thasta.Value
men = "No puede ingresar una fecha de inicio mayor a la del fin"MESSAGEBOX(men,16,_screen.esTANDAR.cmensistema)thisform.pgevento.pgtran.tdesde.SetFocus()RETURN
ENDCASElcfechad = thisform.pgevento.pgtran.tdesde.Valuelcfechah = thisform.pgevento.pgtran.thasta.Valuelcuser = thisform.pgevento.pgtran.tuser.ValueIF LEN(ALLTRIM(thisform.pgevento.pgtran.tuser.Value))>0
lccriterio = " and UPPER(TRIM(operador))=UPPER('" + ALLTRIM(lcuser) + "')"ELSE
lcCriterio = ' 'ENDIFlcbase = _screen.esTANDAR.cdatabaselcsql = "Select * from " + _screen.esTANDAR.cusubd + ".logdbms "lcsql = lcsql + " Where to_char(fecha,'dd/mm/yyyy')>='" + DTOC(lcfechad) + "' and to_char(fecha,'dd/mm/yyyy')<='" +DTOC(lcfechah) + "' "lcsql = lcsql + " and tipo='2' and UPPER(sid)=UPPER('&lcbase')" + lccriteriolcsql = lcsql + " order by fecha "liresult = thisform.sqlexec(lcsql,"tmp")IF liresult < 0
men = MESSAGE()thisform.log_error(lcsql)MESSAGEBOX(men,15,_screen.esTANDAR.cmensistema)RETURN
ENDIFSELECT tmplinum = RECCOUNT()IF linum > 0
SELECT tmpSCAN
SELECT tmp1APPEND BLANKREPLACE tmp1.fecha WITH tmp.fecha,;
tmp1.maquina WITH tmp.maquina,;tmp1.modulo WITH tmp.modulo,;tmp1.instruccion WITH IIF(ISNULL(tmp.sentencia),'
',ALLTRIM(tmp.sentencia))ENDSCAN
- 185 -
ELSEmen = "No existe informacion con ese criterio"MESSAGEBOX(men,64,_screen.esTANDAR.cmensistema)
ENDIFSELECT tmp1GO TOPthisform.pgevento.pgtran.grid1.Refresh()
Cmdguardar.click
IF LEN(ALLTRIM(thisform.pgevento.pgmetricas.truta.Value))> 0 ANDLEN(ALLTRIM(thisform.pgevento.pgmetricas.tnombre.Value))>0
WAIT WINDOW "Guardando la Información..... espere por favor" NOWAITlcarc = ALLTRIM(thisform.pgevento.pgmetricas.truta.Value) +
ALLTRIM(thisform.pgevento.pgmetricas.tnombre.Value)IF FILE("&lcarc")
DELETE FILE ("&lcarc")ENDIF
arch = fcreate("&lcarc")FPUTS(arch,thisform.pgevento.pgmetricas.olealert.text)FCLOSE(arch)
WAIT CLEARMESSAGEBOX("Generación Correcta",64,_screen.esTANDAR.cmensistema)this.Enabled = .F.thisform.pgevento.pgmetricas.truta.Value = ''thisform.pgevento.pgmetricas.tnombre.Value = ''
ELSEMESSAGEBOX("Debe ingresar los datos de ruta y
nombre",16,_screen.esTANDAR.cmensistema)ENDIF
1.12.4 Políticas violadas
Manpoliticashistorial.init
IF thisform.obtener_datos() < 1 thenRETURN
ENDIFthisform.llenar_datos()
- 186 -
Manpoliticashistorial.llenar_datos
SELECT c_polivioladasWITH this.grid_polivioladas as Grid
.ColumnCount=6
.RecordSource='c_polivioladas'WITH .Columns(1) as Column
.Header1.Caption="ID"
.ControlSource="c_polivioladas.NUM"
.Width=40
.InputMask="99"
.Alignment= 2
.ReadOnly= .T.ENDWITHWITH .Columns(2) as Column
.header1.Caption="Politica"
.ControlSource='c_polivioladas.nombre_politica'
.Width=340
.ReadOnly= .T.ENDWITHWITH .Columns(3) as Column
.header1.caption="Estado"
.ControlSource='c_polivioladas.LESTADO'
.Width=50
.Alignment= 2
.Sparse= .F.
.ReadOnly= .T.ENDWITHWITH .Columns(4) as Column
.header1.caption="Fecha"
.ControlSource='c_polivioladas.FECHA'
.Width=130
.ReadOnly= .T.ENDWITHWITH .Columns(5) as Column
.header1.caption="Comentario"
.ControlSource='c_polivioladas.COMENTARIO'
.Width=350
.ReadOnly= .T.ENDWITHWITH .Columns(6) as Column
.header1.caption="Fecha Modificación"
.TEXT1.NULLDISPLAY=" "
.ControlSource='c_polivioladas.FECHA_MODIFICA'
.Width=138
.ReadOnly=.T.
.Sparse= .F.ENDWITH
ENDWITH
- 187 -
Manpoliticashistorial.obtener_datos
**CONSULTA DE POLITICAS VIOLADAS
lcsql = "SELECT A.ID_POLITICA NUM, B.NOMBRE_POLITICA NOMBRE_POLITICA, A.ESTADO ESTADO, "lcsql = lcsql + " A.FECHA FECHA, A.COMENTARIO COMENTARIO ,A.FECHA_MODIFICA FECHA_MODIFICA "lcsql = lcsql + " FROM " + _screen.esTANDAR.cusubd + ".poli_violadas A, " + _screen.esTANDAR.cusubd +".politicas B WHERE A.ID_POLITICA=B.NUM "RESULT=THISFORM.SQLexec(lcSql,"c_polivioladas")IF RESULT < 0
men = "Error al buscar politicas violadas:" + MESSAGE()thisform.log_error(lcsql)MESSAGEBOX(men,16,_screen.ESTANDAR.cmensistema)RETURN
ENDIF
SELECT C.*, IIF(ESTADO="A",.T.,.F.) LESTADO FROM c_polivioladas C INTO CURSOR c_polivioladasREADWRITE
RETURN 1
1.13 Módulo Terminal
1.13.1 Consola Sqlplus
init
IF _screen.esTANDAR.cprivilegio<>"SYSDBA"thisform.SetAll('Enabled',.f.)MESSAGEBOX("Privilegios Insuficientes",48,_screen.esTANDAR.cmensistema)
ENDIF
Crear_batlcsql = " "
cprivilegio = " "IF UPPER(ALLTRIM(_screen.esTANDAR.cprivilegio))<>'NORMAL'
cprivilegio = " as " + _screen.esTANDAR.cprivilegioENDIF
lcarchivo = SYS(5) + ALLTRIM(_screen.esTANDAR.crutatxt) +ALLTRIM(_screen.esTANDAR.cdatabase)+ "CMD.txt"
- 188 -
lcarchivobat = SYS(5) + ALLTRIM(_screen.esTANDAR.crutatxt) + DTOC(DATE(),1) +ALLTRIM(_screen.esTANDAR.cdatabase) + ".bat"
IF FILE("&lcarchivobat")DELETE FILE ("&lcarchivobat")
ENDIF
IF FILE("&lcarchivo")DELETE FILE ("&lcarchivo")
ENDIF
lcsql1 = ""arch = fcreate("&lcarchivobat")FPUTS(arch,"@echo off")FPUTS(arch,"Set ORACLE_SID=" + ALLTRIM(_screen.esTANDAR.cdatabase))FPUTS(arch,"echo set echo on > %0.tmp")FPUTS(arch,"echo connect " +
ALLTRIM(_screen.esTANDAR.cusuario)+"/"+ALLTRIM(_screen.esTANDAR.cclave) + cprivilegio + "; >> %0.tmp")FPUTS(arch,"echo spool " + lcarchivo + "; >> %0.tmp")
lcsql = "echo "FOR I=0 TO LEN(thisform.editsql.Value)
IF SUBSTR(ALLTRIM(thisform.editsql.Value),i,1)=';'lcsql = lcsql + "; >> %0.tmp"FPUTS(arch,lcsql)IF i <> LEN(thisform.editsql.Value)
lcsql = "echo "ENDIF
ELSElc = SUBSTR(ALLTRIM(thisform.editsql.Value),i,1)IF ASC(lc) <> 13 and ASC(lc)<>10
lcsql = lcsql + SUBSTR(ALLTRIM(thisform.editsql.Value),i,1)ENDIF
ENDIFENDFOR
FPUTS(arch,"echo SPOOL OFF; >>%0.tmp")FPUTS(arch,"echo exit; >>%0.tmp")FPUTS(arch,"sqlplus /nolog @%0.tmp")FPUTS(arch,"del %0.tmp")FCLOSE(arch)lc = "RUN " + lcarchivobat
WAIT WINDOW "Procesando Informacion.... espere por favor" NOWAITRUN &lcarchivobat
WAIT CLEAR
Mostrar_datos
lcarchivo = SYS(5) + ALLTRIM(_screen.esTANDAR.crutatxt) +ALLTRIM(_screen.esTANDAR.cdatabase)+ "CMD.txt"
lcdato = lcarchivolhFile=FOPEN(lcdato)
- 189 -
thisform.editsql.Value = STR(lhFile)IF lhFile>0
thisform.editsql.Value = ""DO WHILE NOT FEOF(lhFile)
lsBuffer=FGETS(lhFile)thisform.editsql.Value = thisform.editsql.Value + CHR(13) + ALLTRIM(lsBuffer)
ENDDOthisform.editsql.ReadOnly = .T.thisform.cmdejecuta.Enabled = .F.
ENDIFFCLOSE(lhFile)
Valida_sql
lcsql = ''FOR I=0 TO LEN(thisform.editsql.Value)
IF SUBSTR(ALLTRIM(thisform.editsql.Value),i,1)=';'IF LIKE('*SHUTDOWN*',UPPER(lcsql)) OR LIKE('*MOUNT*',UPPER(lcsql)) OR
LIKE('*NOMOUNT*',UPPER(lcsql))MESSAGEBOX("Operacion Invalida",48,_screen.estandar.cmensistema)RETURN .t.
ENDIFlcsql = ""
ELSElc = SUBSTR(ALLTRIM(thisform.editsql.Value),i,1)IF ASC(lc) <> 13 and ASC(lc)<>10
lcsql = lcsql + SUBSTR(ALLTRIM(thisform.editsql.Value),i,1)ENDIF
ENDIFENDFOR
RETURN .f.
Cmdejecuta.click
IF LEN(ALLTRIM(thisform.editsql.Value)) > 0IF !thisform.valida_sql()
thisform.crear_bat()thisform.cmdmostrar.Enabled = .T.thisform.cmdejecuta.Enabled = .F.thisform.cmdmostrar.Click()
ENDIFELSE
men = "Debe ingresar las instrucciones"MESSAGEBOX(men,64,_screen.esTANDAR.cmensistema)
ENDIF
- 190 -
1.13.2 Schema Rman
initthisform.crear_funcion()thisform.crear_bat()thisform.carga_informacion()
carga_informacion
lcnamearch = SYS(5) + ALLTRIM(_screen.esTANDAR.crutatxt) + ALLTRIM(_screen.esTANDAR.cdatabase)+"Rschema.txt"
lhFile=FOPEN("&lcnamearch",0)nSize = FSEEK(lhFile, 0, 2)WAIT WINDOW "Cargando Informacion del Schema!" NOWAIT
= FSEEK(lhFile, 0, 0) && Move pointer to BOFthisform.olealert.text = FREAD(lhFile, nSize)
WAIT CLEARFCLOSE(lhFile)
Crear_bat
lcarc = SYS(5) + '\DBMS-FOX\RMAN\Rschema.txt'lcarchivo = SYS(5) + ALLTRIM(_screen.esTANDAR.crutatxt) +
ALLTRIM(_screen.esTANDAR.cdatabase)+ "Rschema.txt"lcarchivobat = SYS(5) + ALLTRIM(_screen.esTANDAR.crutatxt) +
ALLTRIM(_screen.esTANDAR.cdatabase) + "Rschema.bat"
IF FILE("&lcarchivobat")DELETE FILE ("&lcarchivobat")
ENDIF
IF FILE("&lcarchivo")DELETE FILE ("&lcarchivo")
ENDIF
lcsql1 = ""arch = fcreate("&lcarchivobat")FPUTS(arch,"@echo off")FPUTS(arch,"Set ORACLE_SID=" + ALLTRIM(_screen.esTANDAR.cdatabase))FPUTS(arch,"Rman Target / cmdfile='"+lcarc+ "' log='"+lcarchivo+"'")FCLOSE(arch)
WAIT WINDOW "Consultando Informacion.... espere por favor" NOWAITRUN &lcarchivobat
WAIT CLEAR
- 191 -
Crear_funcion
lcarc = SYS(5) + '\DBMS-FOX\RMAN\Rschema.txt'IF FILE("&lcarc")
DELETE FILE ("&lcarc")ENDIF
arch = fcreate("&lcarc")IF arch > 0
FPUTS(arch,"Report Schema;")FFLUSH(arch)
ENDIF
FCLOSE(arch)
1.13.3 Listado de Backup
Init
thisform.crear_funcion()thisform.crear_bat()thisform.cargar_informacion()
Cargar información
**List Backuplcnamearch = SYS(5) + ALLTRIM(_screen.esTANDAR.crutatxt) + ALLTRIM(_screen.esTANDAR.cdatabase)+"RListB.txt"
lhFile=FOPEN("&lcnamearch",0)nSize = FSEEK(lhFile, 0, 2)WAIT WINDOW "Cargando Informacion del Schema!" NOWAIT
= FSEEK(lhFile, 0, 0) && Move pointer to BOFthisform.pg.list.olealert.text = FREAD(lhFile, nSize)
WAIT CLEARFCLOSE(lhFile)
**Report Need Backuplcnamearch = SYS(5) + ALLTRIM(_screen.esTANDAR.crutatxt) + ALLTRIM(_screen.esTANDAR.cdatabase)+"RNeedB.txt"
lhFile=FOPEN("&lcnamearch",0)nSize = FSEEK(lhFile, 0, 2)WAIT WINDOW "Cargando Informacion del Schema!" NOWAIT
= FSEEK(lhFile, 0, 0) && Move pointer to BOFthisform.pg.rpt.olealert.text = FREAD(lhFile, nSize)
WAIT CLEARFCLOSE(lhFile)
- 192 -
Crear_bat
**Listado de Backuplcarc = SYS(5) + '\DBMS-FOX\RMAN\RListB.txt'lcarchivo = SYS(5) + ALLTRIM(_screen.esTANDAR.crutatxt) +
ALLTRIM(_screen.esTANDAR.cdatabase)+ "RListB.txt"lcarchivobat = SYS(5) + ALLTRIM(_screen.esTANDAR.crutatxt) +
ALLTRIM(_screen.esTANDAR.cdatabase) + "RListB.bat"
IF FILE("&lcarchivobat")DELETE FILE ("&lcarchivobat")
ENDIF
IF FILE("&lcarchivo")DELETE FILE ("&lcarchivo")
ENDIF
lcsql1 = ""arch = fcreate("&lcarchivobat")FPUTS(arch,"@echo off")FPUTS(arch,"Set ORACLE_SID=" + ALLTRIM(_screen.esTANDAR.cdatabase))FPUTS(arch,"Rman Target / cmdfile='"+lcarc+ "' log='"+lcarchivo+"'")FCLOSE(arch)
WAIT WINDOW "Consultando Informacion del Listado del Backup.... espere por favor" NOWAITRUN &lcarchivobat
WAIT CLEAR
**Report Need Backuplcarc = SYS(5) + '\DBMS-FOX\RMAN\RNeedB.txt'lcarchivo = SYS(5) + ALLTRIM(_screen.esTANDAR.crutatxt) +
ALLTRIM(_screen.esTANDAR.cdatabase)+ "RNeedB.txt"lcarchivobat = SYS(5) + ALLTRIM(_screen.esTANDAR.crutatxt) +
ALLTRIM(_screen.esTANDAR.cdatabase) + "RNeedB.bat"
IF FILE("&lcarchivobat")DELETE FILE ("&lcarchivobat")
ENDIF
IF FILE("&lcarchivo")DELETE FILE ("&lcarchivo")
ENDIF
lcsql1 = ""arch = fcreate("&lcarchivobat")FPUTS(arch,"@echo off")FPUTS(arch,"Set ORACLE_SID=" + ALLTRIM(_screen.esTANDAR.cdatabase))FPUTS(arch,"Rman Target / cmdfile='"+lcarc+ "' log='"+lcarchivo+"'")FCLOSE(arch)
WAIT WINDOW "Consultando Informacion de Report Need Backup.... espere por favor" NOWAITRUN &lcarchivobat
- 193 -
WAIT CLEAR
Crear_funcion
** Listado de los Backuplcarc = SYS(5) + '\DBMS-FOX\RMAN\RListB.txt'IF FILE("&lcarc")
DELETE FILE ("&lcarc")ENDIF
arch = fcreate("&lcarc")IF arch > 0
FPUTS(arch,"List Backup of Database;")FFLUSH(arch)
ENDIF
FCLOSE(arch)
** Report Need BAckuplcarc = SYS(5) + '\DBMS-FOX\RMAN\RNeedB.txt'IF FILE("&lcarc")
DELETE FILE ("&lcarc")ENDIF
arch = fcreate("&lcarc")IF arch > 0
FPUTS(arch,"Report Need Backup;")FFLUSH(arch)
ENDIF
FCLOSE(arch)
1.13.4 Rman Backup
Cargar_informacion
lcnamearch = SYS(5) + ALLTRIM(_screen.esTANDAR.crutatxt) + ALLTRIM(_screen.esTANDAR.cdatabase)+"RBackup.txt"
lhFile=FOPEN("&lcnamearch",0)nSize = FSEEK(lhFile, 0, 2)WAIT WINDOW "Cargando Informacion del Schema!" NOWAIT
= FSEEK(lhFile, 0, 0) && Move pointer to BOF
- 194 -
thisform.olealert.text = FREAD(lhFile, nSize)WAIT CLEARFCLOSE(lhFile)
MESSAGEBOX("Proceso exitoso...",64,_screen.esTANDAR.cmensistema)
Crear_bat
lcarc = SYS(5) + '\DBMS-FOX\RMAN\RBackup.txt'lcarchivo = SYS(5) + ALLTRIM(_screen.esTANDAR.crutatxt) +
ALLTRIM(_screen.esTANDAR.cdatabase)+ "RBackup.txt"lcarchivobat = SYS(5) + ALLTRIM(_screen.esTANDAR.crutatxt) +
ALLTRIM(_screen.esTANDAR.cdatabase) + "RBackup.bat"
IF FILE("&lcarchivobat")DELETE FILE ("&lcarchivobat")
ENDIF
IF FILE("&lcarchivo")DELETE FILE ("&lcarchivo")
ENDIFlcsql1 = ""arch = fcreate("&lcarchivobat")FPUTS(arch,"@echo off")FPUTS(arch,"Set ORACLE_SID=" + ALLTRIM(_screen.esTANDAR.cdatabase))FPUTS(arch,"Rman Target / cmdfile='"+lcarc+ "' log='"+lcarchivo+"'")FCLOSE(arch)
WAIT WINDOW "Procesando.... espere por favor" NOWAITRUN &lcarchivobat
WAIT CLEARCrear_funcion
lcarc = SYS(5) + '\DBMS-FOX\RMAN\RBackup.txt'IF FILE("&lcarc")
DELETE FILE ("&lcarc")ENDIF
arch = fcreate("&lcarc")IF arch > 0
FPUTS(arch,"Backup Format '" + thisform.truta.Value + "' Database filesperset 3;")FFLUSH(arch)
ENDIF
FCLOSE(arch)
Cmdguardar.click()
- 195 -
IF LEN(ALLTRIM(thisform.truta2.Value))> 0 AND LEN(ALLTRIM(thisform.tnombre.Value))>0WAIT WINDOW "Guardando la Información..... espere por favor" NOWAIT
lcarc = ALLTRIM(thisform.truta2.Value) + ALLTRIM(thisform.tnombre.Value)IF FILE("&lcarc")
DELETE FILE ("&lcarc")ENDIF
arch = fcreate("&lcarc")FPUTS(arch,thisform.olealert.text)FCLOSE(arch)
WAIT CLEARMESSAGEBOX("Generación Correcta",64,_screen.esTANDAR.cmensistema)this.Enabled = .F.thisform.truta2.Value = ''thisform.tnombre.Value = ''
ELSEMESSAGEBOX("Debe ingresar los datos de ruta y
nombre",16,_screen.esTANDAR.cmensistema)ENDIF
CAPITULO 2
MANUAL DE USUARIO
2.1 Introducción
Un administrador de Base de Datos, siempre busca un aplicativo el cual le
proporcione todas las funciones necesarias para llevar un buen control en la
administración de la base datos, que sea amigable, fácil de manejar y sobre
todo dinámico en el acceso a diferentes pantallas para poder visualizar
diferentes tipos de información al mismo tiempo, esto va a ayudar mucho al
administrador a llevar un control de todos los módulos.
- 161 -
2.2 Especificaciones del sistema DBMS-FOX
2.2.1 Pantalla Principal
La siguiente interfaz contendrá el diseño de la página principal del
aplicativo en la cual consta de 3 regiones como son:
Barra de Titulo (1)
Explorador de Módulos (2)
Área de Presentación (3)
Barra de Titulo.- Es donde se muestra el titulo de nuestro sistema,
además de esto a lado del mismo, se muestra el nombre de la Base
de datos a la cual estamos conectados.
Explorador de Módulos.- En esta sección se muestra a nivel de
explorador, todas las opciones (módulos) del sistema a las cuales el
DBA tiene acceso para poder administrar la base de Datos. Cada una
de estas opciones contiene subdivisiones en las cuales se especifica
las diferentes aplicaciones de cada uno de ellos.
Área de Presentación.- En esta sección se muestra todas las
pantallas, a las cuales accedemos a través del explorador de módulos.
Aquí podremos presentar desde una hasta muchas pantallas al mismo
tiempo, ya que esta área tiene la característica de ser una interfaz
- 162 -
multiventanas, la cual va a facilitar a la administración del DBA en la
observación de diferente tipo de información
FIGURA 2.1 – Pantalla Principal
- 163 -
La siguientes interfaces contendrá el diseño de acceso a la base de
datos así como también el diseño de los diferentes módulos que
forman parte del sistema.
2.2.2 Acceso al Sistema
El Administrador accederá al Sistema a través de una pequeña
pantalla en la cual tendrá que especificar los siguientes campos:
Servidor : IP del servidor
Usuario: Nombre del Usuario
Clave: Clave del usuario
SID: Nombre de la Base de Datos
Conectar como: Privilegio de Conexión
El sistema validará el ingreso de los datos, al momento de digitarlos
correctamente iniciara la sesión.
- 164 -
Figura 2.2 – Formulario de Acceso al sistema
2.2.3 Modulo de Seguridades
A través de este modulo se podrán visualizar tres tipos de pantalla en la cual
se llevara un control a través de mantenimientos a los usuarios, roles y
perfiles. Este mantenimiento permitirá crear, editar y eliminar información.
2.2.3.1 Usuario.- En esta opción tendremos una pantalla principal,
donde se mostraran todos los usuarios que existen en la Base de
Datos con su respectivo resumen de información además también
permitirá crearlos o eliminarlos. A través de esta pantalla tendremos
acceso a cada uno de los formularios de los mismos. Este formulario
contara con seis pestañas, cada una tendrá diferente tipo de
información asociada a un usuario. en el cual se podrá realizar tareas
- 165 -
de visualización, edición y llevar un óptimo mantenimiento.
Administración de Usuarios
FIGURA 2.3 – Pantalla Principal - Usuarios
Botón Crear (1)
Levanta otro formulario llamado creación de usuarios, para llenar
los respectivos datos del usuario a crear.
Botón Eliminar (2)
Procede a eliminar si se selecciona un usuario, y a la vez actualiza
la pantalla de administración de usuarios.
- 166 -
Botón Salir (3)
Procede a salir de la pantalla sin cambios algunos
Doble Click (4)
Levanta otro formulario llamado editar usuario. Donde podemos
modificar los parámetros del usuario
Editar General de Usuario
FIGURA 2.4 – Pantalla de Creación y edición de usuario
Opción (1)
Esta opción representa los permisos que pueden asignar a un
- 167 -
usuario
Botón Aceptar (2)
Este botón guarda los cambios que realizaron dentro del formulario
de las opciones 5-6-7
Botón Cancelar (3)
Permite cerrar el formulario sin guardar ningún cambio en el
formulario
Botón Mostrar (4)
Muestra la sentencias sql de los cambios que se esta realizando
en el formulario de manera dinámica y modifica el nombre del
combo para ocultar la pantalla
FIGURA 2.5 –Muestra los cambios en sentencias sql
Opcion (5)
Presentación de los datos del usuario
Opcion (6)
A que tablespace fue asignado el usuario
- 168 -
Opcion (7)
Presenta el estado del usuario como bloqueado y desbloqueado
Editar Rol de Usuario
Figura 2.6 - Pantalla Roles – Usuarios
Opcion (1)
Asigna roles disponibles al usuario
Opcion (2)
Quita roles otorgados a los usuarios
- 169 -
Opcion (3)
Muestra los roles disponibles
Opcion (4)
Muestra los roles otorgados, donde podemos escoger la opción de
asignar este rol.
Editar Sistema de Usuario
Figura 2.7 Pantalla de Privilegios – Usuarios
Opcion (1)
Asigna privilegios disponibles al usuario
Opcion (2)
Quita privilegios otorgados a los usuarios
- 170 -
Opcion (3)
Muestra los privilegios disponibles
Opcion (4)
Muestra los privilegios otorgados, donde podemos escoger la
opción de asignar estos privilegios
Editar Sistema de Usuario
Figura 2.8 Pantalla de Objetos del Usuarios
Opcion (1)
Asigna privilegios disponibles de los objetos al usuario
Opcion (2)
Quita privilegios disponibles de los objetos al usuario
- 171 -
Opcion (3)
Muestra los privilegios disponibles de los objetos
Opcion (4)
Muestra los privilegios otorgados de los objetos, donde podemos
escoger la opción de asignar estos privilegios
Opcion (5)
Muestra los objetos de los usuarios
Editar Cuota de Usuario
Figura 2.9 Pantalla de Cuota – Usuarios
- 172 -
Opcion (1)
Presenta los tablespace, y su tamaño de la cuota
Opcion (2)
Se presentan 3 opciones de chequear, donde ponemos el estado
el tamaño de la cuota del tablespace
Editar Grupo de Consumidores de Usuario
Figura 2.10 Pantalla de Grupos de Consumidores – Usuarios
- 173 -
Opcion (1)
Agrega un grupo de consumidores al usuario
Opcion (2)
Quita un grupo de consumidores al usuario
Opcion (3)
Presenta los grupos de consumidores disponibles
Opcion (4)
Muestra los grupos de consumidores otorgados de los objetos,
donde podemos escoger la opción de asignar estos grupos de
consumidores
2.2.3.2 Roles.- En esta opción tendremos una pantalla principal,
donde se mostraran todos los roles que existen en la Base de Datos
con su respectivo resumen de información además también permitirá
crearlos o eliminarlos. A través de esta pantalla tendremos acceso a
cada uno de los formularios de cada uno de los roles. Este formulario
contara con cinco pestañas, cada una tendrá diferente tipo de
información asociada a un rol en el cual se podrá realizar tareas de
visualización o edición, a través del cual nos permitirá llevar un
óptimo mantenimiento.
- 174 -
Información General de Roles
Figura 2.11 Pantalla General – Roles
Opcion (1)
Presenta el nombre del rol y sus diferentes Tipos de autentificación
Botón Aceptar (2)
Este botón guarda los cambios que realizaron dentro del formulario
de las opciones 1 y 5
Botón Cancelar (3)
Permite cerrar el formulario sin guardar ningún cambio en el
- 175 -
formulario
Botón Mostrar (4)
Muestra la sentencias sql de los cambios que se esta realizando
en el formulario de manera dinámica y modifica el nombre del
combo para ocultar la pantalla
Opcion (5)
Esta opción representa los permisos que pueden asignar de un rol
a un usuario
Rol de Roles
Figura 2.12 Pantalla Rol – Roles
- 176 -
Opcion (1)
Agrega roles disponibles al rol
Opción (2)
Quita roles otorgados al rol
Opción (3)
Presenta roles disponibles que se pueden asignar o quitar al rol
Opción (4)
Presenta roles otorgados que se pueden asignar o quitar al rol
Sistema de Rol
Figura 2.13 Pantalla Sistema – Roles
- 177 -
Opcion (1)
Agrega privilegios disponibles al rol
Opción (2)
Quita privilegios otorgados al rol
Opción (3)
Presenta privilegios disponibles que se pueden asignar o quitar al
rol
Opción (4)
Presenta privilegios otorgados que se pueden asignar o quitar al rol
Objeto de Rol
- 178 -
Figura 2.14 Pantalla Objeto – Roles
Opcion (1)
Agrega privilegios disponibles del objeto al rol
Opción (2)
Quita privilegios disponibles del objeto otorgados al rol
Opción (3)
Presenta privilegios disponibles del objeto que se pueden asignar o
quitar al rol
- 179 -
Opción (4)
Presenta privilegios disponibles del objeto otorgados que se
pueden asignar o quitar al rol
Grupo de consumidores rol
Figura 2.15 Pantalla Grupo de Consumidores – Roles
Opcion (1)
Agrega grupo de consumidores disponibles del objeto al rol
Opción (2)
Quita grupo de consumidores disponibles del objeto otorgados al
Rol
- 180 -
Opción (3)
Presenta grupo de consumidores disponibles del objeto que se
pueden asignar o quitar al rol
Opción (4)
Presenta grupo de consumidores disponibles del objeto otorgados
que se pueden asignar o quitar al rol
2.2.3.3 Perfiles.- En esta opción tendremos una pantalla principal,
donde se mostraran todos los perfiles que existen en la Base de
Datos con su respectivo resumen de información, además también
permitirá crearlos o eliminarlos. A través de esta pantalla tendremos
acceso a cada uno de los formularios de los mismos. Este formulario
contara con dos pestañas, cada una tendrá diferente tipo de
información asociada a un perfil en el cual se podrá realizar tareas
de visualización o edición a cada una de sus propiedades, a través
del cual nos permitirá llevar un óptimo mantenimiento.
- 181 -
Figura 2.16 Pantalla Administración de Perfiles – General
Botón Aceptar (1)
Este botón guarda los cambios que realizaron dentro de esta
pantalla de las opciones 4 y 5
Botón Cancelar (2)
Permite cerrar la pantalla sin guardar ningún cambio en esta forma
Botón Mostrar (3)
Muestra la sentencias sql de los cambios que se esta realizando
en el formulario de manera dinámica y modifica el nombre del
combo para ocultar la pantalla
- 182 -
Opción (4)
Estos campos determinan la cantidad de tiempo asignado a la CPU
por sesión, CPU por llamada, el tiempo de conexión y el tiempo de
inactividad para este perfil.
Opción (5)
Estos campos determinan los servicios de base de datos
asignados a este perfil
Figura 2.17 Pantalla Administración de Perfiles – Contraseña
Opción (1)
Vencer en: Limita el número de días que vence la contraseña.
- 183 -
Bloquear: Limita el número de días durante los que se puede
cambiar una contraseña después de la primera conexión correcta
tras el vencimiento de una contraseña.
Opción (2)
Mantener: Especifica el número de veces que se debe cambiar una
contraseña antes de que se pueda volver a utilizar.
Mantener durante: Limita el número de días antes de que se pueda
volver a utilizar una contraseña después de que haya vencido.
Opción (3)
Permite que se utilice la rutina PL/SQL para la verificación de
contraseña cuando los usuarios a los que se les asigna este perfil
se conectan a una base de datos.
Opción (4)
Bloquear después: Limita el número de intentos de conexión
fallidos permitido antes de que se bloquee el acceso a un usuario
de la cuenta.
Bloquear durante: Especifica el número de días que la cuenta está
bloqueada después de fallar el número especificado de intentos de
conexión.
- 184 -
2.2.4 Modulo Biblioteca de Servicios
Este modulo esta conformado por dos opciones. Las cuales permitirán llevar
un control del Listener.
2.2.4.1 Programar Inspección del Listener.- Permite tener una
programación en minutos o en horas del tiempo que va censar
Figura 2.18 – Pantalla Programar Inspección - Listener
Botón Guardar (1)
Crea una tarea de Windows para el censo del estado del listener
para crear el grafico en el formulario del listener
Botón Eliminar (2)
Elimina la tarea programada de Windows
- 185 -
Botón Salir (3)
Cierra la ventana de tareas programadas
2.2.4.2 Listener.- Esta opción muestra un formulario con dos
pestañas, en el cual se detalla información general del listener,
como su estado, la disponibilidad, además permite levantar, bajar y
darle un mantenimiento a los parámetros del listener.
Figura 2.19 Formulario Estado - Listener
Muestra la disponibilidad del listener gráficamente dependiendo de
la programación que se le haya hecho en la cesada del estado del
listener.
- 186 -
Figura 2.20 Formulario Disponibilidad - Listener
En este formulario se puede configurar los parámetros de
ubicación del listener, se tiene acceso a este formulario dando clic
en el botón Parámetros
Figura 2.21 Formulario Parámetros Ubicación – Listener
- 187 -
Figura 2.22 Formulario Parámetros Contraseña - Listener
Opción (1)
Registro:La actividad de servicio y las estadísticas se escriben en
un archivo log. El archivo log, mediante la pila de errores, muestra
el estado del software a varios niveles.
Rastreo: Utilidad que escribe información detallada sobre una
operación en un archivo de salida. La utilidad de rastreo genera
una secuencia detallada de sentencias que describen los eventos
de una operación al ejecutarse.
1
- 188 -
2.2.5 Modulo de Métricas de Rendimiento
A través de este modulo se podrán visualizar todas las métricas que
se han creado con sus respectivo operador, umbral de advertencia y
umbral critico. Además nos permite crear una métrica a través del
botón crear.
Figura 2.23 Formulario Principal - Métricas
El siguiente formulario podemos crear una métrica en el cual se debe
de especificar los umbrales limites y la sentencia a ejecutarse para el
funcionamiento de la métrica. Para tener acceso a esta pantalla se
debe dar un clic en el botón de crear
- 189 -
Figura – 2.24 Formulario de Creación – Métricas
2.2.6 Modulo Definición de Políticas
Este modulo permite visualizar todas las políticas creadas para
nuestro sistema, el DBA podrá activar o desactivar políticas para
especificar que políticas quiere que se analice a la hora de obtener un
reporte de políticas violadas. Para visualizar el reporte Ver figura 2.18
Figura 2.25 Formulario principal – Políticas
- 190 -
2.2.7 Modulo de Almacenamiento
A través de este modulo se podrán visualizar seis tipos de opciones en
la cual se realizaran tareas administrativas asociadas a la gestión de
almacenamiento de la base de datos, esto se llevara a cabo a través
de mantenimientos a los Archivos de Control, Tablespace, Archivos
de Datos, Segmentos de Rollbak, Grupos de Redo Logs y Archive
Log. Estos mantenimientos permitirán crear, editar y eliminar
información.
2.2.7.1 Archivo de Control.- En esta opción nos mostrara un
formulario el cual contara con tres pestañas, cada una tendrá
diferente tipo de información asociado al archivo de datos, además
tendrá un botón el cual nos permitirá realizar una copia de
seguridad al Archivo de Control.
En la siguiente pantalla se muestra los nombres de los controlfiles
y el directorio en donde esta ubicado cada uno.
- 191 -
Figura 2.26– Formulario General – Archivo de Control
Muestra información avanzada referente a los Archivos de Control
Figura 2.27 Formulario Avanzado – Archivo de Control
Permite visualizar la información general sobre la sección de
registros del Archivo de control
- 192 -
Figura 2.28 Formulario Sección de Registros – Archivo de
Control
2.2.7.2 Tablespace.- En esta opción nos mostrara una pantalla
en el cual se detalla todos los tablespace creados en la base de
datos con su respectivo resumen de información, también se podrá
eliminar y crear tablespace. A través de esta pantalla tendremos
acceso a cada uno de los formularios de los mismos. Este
formulario contara con dos pestañas, cada una tendrá diferente tipo
de información asociada al tablespace en el cual se podrá realizar
tareas de visualización o edición, a través del cual nos permitirá
llevar un óptimo mantenimiento.
- 193 -
Figura 2.29 – Formulario Principal - Tablespace
En esta pantalla podremos visualizar o editar toda la información
general del tablespace existentes o crear uno nuevo si se
selecciona el botón de Crear que se encuentra en la Figura 2.22.
Se podrá observar información del mismo, como el nombre del
archivo, directorio de archivo, tamaño, el almacenamiento y el
tamaño máximo.
- 194 -
Figura – 2.30 Formulario General - Tablespace
Muestra información acerca de los métodos de gestión de espacio
que están asignados al tablespace. Esta información se la puede
manipular a la hora de crear un nuevo tablespace
Figura–2.31 Formulario Almacenamiento - Tablespace
- 195 -
2.2.7.3 Archivo de Datos.- En esta opción nos mostrara una
pantalla en el cual se detalla todos los Archivos de datos creados
en la base de datos con su respectivo resumen de información,
además también permitirá crearlos. A través de esta pantalla
tendremos acceso a cada uno de los formularios de los mismos
que tendrá información general y de almacenamiento asociado al
Archivo de datos, en el cual se podrá realizar tareas de
visualización o edición que nos permitirá llevar un óptimo
mantenimiento.
Figura 2.32 – Pantalla Principal – Archivo de Datos
En la siguiente pantalla podremos visualizar o editar los
parámetros de los archivos de datos existentes, o crear un nuevo
si esta seleccionado el botón de crear que se encuentra en la
- 196 -
figura 3.35. La información que muestra en esta pantalla es de tipo
general y de almacenamiento en donde se puede ver el nombre del
archivo de datos, el tablespace donde esta creado, el estado, el
tamaño y la opción de almacenamiento.
Figura 2.33 – Formulario General – Archivo de Datos
2.2.7.4 Segmentos de Rollbak.- En esta opción nos mostrara una
pantalla en el cual se detalla todos los Segmentos Rollbak creados
en la base de datos con su respectivo resumen de información,
además también permitirá crearlos y eliminarlos . A través de esta
- 197 -
pantalla tendremos acceso a cada uno de los formularios de los
mismos que tendrá información general y de almacenamiento
asociado al Segmento Rollbak, en el cual se podrá realizar tareas
de visualización o edición que nos permitirá llevar un óptimo
mantenimiento.
Figura 2.34 – Pantalla Principal – Segmentos de Rollback
En esta pantalla podremos visualizar o editar la información de los
Segmentos Rollback existentes, o crear un nuevo si esta
seleccionado el botón de crear que se encuentra en la figura 2.27.
La información que muestra en esta pantalla es de tipo general y
de almacenamiento en donde se puede ver el nombre del
Segmento Rollback, el tablespace donde esta creado, el estado, y
- 198 -
las características de almacenamiento donde se detalla diferente
tipos de tamaños.
Figura 2.35 – Formulario General - Segmentos Rollback
2.2.7.5 Grupo de Redo Logs.- En esta opción nos mostrara una
pantalla en el cual se detalla todos los Grupos de Redo Logs
creados en la base de datos con su respectivo resumen de
información, además también permitirá crearlos y eliminarlos. A
través de esta pantalla tendremos acceso a cada uno de los
formularios de los mismos que tendrá información general
asociado al Grupo de Redo Logs en el cual se podrá realizar
- 199 -
tareas de visualización o edición que nos permitirá llevar un
óptimo mantenimiento.
Figura 2.36 – Pantalla Principal – Grupo de Redo Logs
En la siguiente pantalla podremos visualizar o editar los
parámetros de los Grupos de Redo Logs existentes, o crear un
nuevo si esta seleccionado el botón de crear. La información que
muestra en esta pantalla es de tipo general en donde se puede ver
el número de Grupo de Redo Logs, el tamaño, los nombres de los
miembros actuales que pertenecen al grupo y el directorio de
ubicación. Además este formulario permite agregar mas miembros
al grupo de Redo Log a través del botón Agregar.
- 200 -
Figura 2.37 – Formulario General – Grupo de Redo Logs
2.2.7.6 Archive Logs.- En esta opción nos mostrara una pantalla
en el cual se detalla la secuencia de los Archive Logs que se han
hecho a la base de datos con su respectivo resumen de
información. A través de esta pantalla tendremos acceso a cada
uno de los formularios de los mismos en donde se podrá visualizar
información general asociado al Archive Logs.
- 201 -
Figura 2.38 – Pantalla Principal Archive Logs
La información que muestra en esta pantalla es de tipo general en
donde se puede ver el directorio del archive Logs, nombre,
secuencia, tamaño, hora de archivado, primer cambio y segundo
cambio.
Figura 2.39 – Formulario General – Archive Logs
- 202 -
2.2.8 Modulo de Recursos
En este modulo se podrán visualizar dos tipos de opciones en la cual
no permitirá monitorear información referente al CPU, Instancia,
Base de Datos, memoria y sesiones.
2.2.8.1 Configuración.- En esta opción nos mostrara un
formulario el cual contara con cuatro pestañas, cada una tendrá
diferente tipo de información asociado al monitoreo de recursos.
La siguiente pantalla muestra información general correspondiente
al HOST, como es su estado, nombre del equipo, sistema
operativo, dirección IP, número de cpu, tamaño de la memoria,
capacidad de disco.
Figura 2.40 – Formulario General del Host - Recursos
- 203 -
Muestra información referente al estado de la Instancia, los
parámetros de inicialización, información general de la instancia y
la base de Datos. Además esta pantalla nos permite bajar y subir
la base de datos.
Figura 2.41 Formulario General Instancia- Recursos
En la siguiente pantalla nos permite tener un monitoreo de todos
los parámetros de la memoria tanto de la SGA y de la PGA.
Figura 2.42 Formulario Memoria - Recursos
- 204 -
La siguiente pantalla nos permite tener un monitoreo del Tiempo de
recuperación de fallo de la Instancia, Recuperación de medio físico
donde se muestra el estado actual del archivado de Redo Log,
especifica el destino en el que se deben crear los archivos archive
Log, además esta pantalla nos permite poner en estado Archive
Log a la Base de Datos
Figura – 2.43 Formulario Recuperación – Recursos
2.2.8.2 Sesiones.- En esta opción nos mostrara una pantalla en
la cual se detalla un informe de todas las secciones principales
activas e inactivas que hay en la base de datos ayudando al DBA a
tener una visión general por medio de la estadística de la actividad
de cada sesión y así poder identificar los cuellos de botella de
rendimiento de la base de datos.
- 205 -
Figura 2.44– Formulario Informe de Sesiones - Recursos
2.2.9 Modulo de Eventos, Errores y Notificaciones
A través de este modulo se podrán visualizar cuatro tipos de opciones
en la cual se realizaran tareas de configuración de notificaciones para
que el DBA reciba notificaciones de alerta por medio del correo, se
mostrara reportes de todos los eventos ocurridos, errores de métricas
y políticas violadas.
2.2.9.1 Configurar Parámetros- Esta opción nos va a mostrar
una pantalla en la cual se definen los métodos de notificación para
ellos se especifica la dirección del servidor de Correo, del remitente
y de los destinatarios. Los destinatarios van a hacer a las personas
a quienes les va a llegar la notificación
- 206 -
Figura 2.45 – Formulario Configurar Parámetros –
Notificaciones
2.2.9.2 Reporte de Eventos.- Esta opción nos va a mostrar una
pantalla la cual esta conformada por dos pestañas.
En la primera pestaña se mostrara todas las transacciones que se
han hecho en cada uno de los módulos del sistema, se especificara
la fecha, la hora, la maquina desde donde se hizo la transacción, el
módulos en que se realizo la transacción y el tipo de sentencia que
se ejecuto. Además en esta pantalla se podrán tener una
búsqueda de eventos por usuario y sacar reportes tipo Pantalla y
Excel.
.
- 207 -
Figura 2.46– Formulario Transacciones del Sistema – Eventos
Al dar un clic en el botón Pantalla que se muestra en la figura 2.39
nos mostrara el siguiente reporte.
Figura 2.47– Reporte Transacciones del Sistema – Eventos
Al dar un clic en el botón Excel que se muestra en la figura 3.49
nos mostrara el siguiente reporte.
- 208 -
Figura 2.48– Reporte en Excel Transacciones del Sistema –
Eventos
En la segunda pestaña se mostrara el listado de las métricas
donde se especifica los criterios con los cuales fueron creadas,
además se muestra la fecha y la hora de la ultima evaluación de la
métrica, fecha de la alerta, tipo de advertencia, el campo de
notificación donde indica si se ha enviado la alerta y la fecha de
cuando se envió la notificación..
Figura 2.49– Formulario Ejecución de Métricas – Eventos
- 209 -
Al dar doble clic en cada una de las métricas que se muestra en la
Figura 2.42 se mostrara un formulario en donde se detalla un
historial de todas las veces en que la métrica ha pasado sus
limitantes.
Figura 2.50 – Formulario Historial de Métricas – Eventos.
Al hacer clic en el botón que dice Excel que se muestra en la
Figura 2.43 se mostrara el informe del historial en un
documentos.exe como se puede apreciar en la Figura 3.54.
- 210 -
Figura 2.51– Reporte Historial de Métricas – Eventos
2.2.9.3 Reporte de Errores.- Esta opción nos va a mostrar una
pantalla la cual esta conformada por dos pestañas.
En la primera pestaña muestra el detalle de todos los errores que
han ocurridos en las transacciones que se han hecho en cada
modulo, se especificara la fecha, la hora, la maquina desde donde
se hizo la transacción, el módulos en que se realizo la transacción
y el tipo de sentencia que se ejecuto. Además en esta pantalla se
podrán tener una búsqueda de errores por usuario y sacar reportes
tipo Pantalla y Excel.
- 211 -
Figura 2.52 – Formulario Transacciones del Sistema – Errores
Al dar un clic en el botón Pantalla que se muestra en la figura 2.45
nos mostrara un reporte de los errores de las transacciones.
Figura 2.53 – Reporte Transacciones del Sistema – Errores
Al dar un clic en el botón Excel que se muestra en la figura 3.55
nos mostrara un reporte de los errores de las transacciones en un
documento en Excel.
- 212 -
Figura 2.54 – Reporte en Excel Transacciones del Sistema –
Errores
En la segunda pestaña se mostrara el contenido del archivo de la
alerta. Esta pantalla también ofrece una opción para guardar el
archivo en la cual se debe especificar la ruta de la ubicación y el
nombre.
Figura 2.55 – Formulario Contenido de Alerta – Errores
- 213 -
2.2.9.4 Políticas Violadas.- Esta opción nos mostrara un
formulario en la cual se detallan todas las políticas que han sido
violadas, el estado, la hora y fecha en que ocurrió, y la fecha de
modificación que es la fecha en que se corrigió la política.
Figura 2.56 – Formulario Historial – Políticas Violadas
2.2.10 Modulo Terminal
2.2.10.1 Consola Plus
A través de este modulo se podrán visualizar una consola en la cual
se podrá ejecutar comando SQL, también se podrá especificar una
ruta para guardar todos los script que ejecutemos en la consola.
Existe la opción Nuevo donde limpiamos la pantalla y ejecutamos
nuevamente, se puede colocar en la consola 2 sentencias SQL y
ejecutarlas a la vez.
- 214 -
Figura 2.57– Formulario de la Consola – Terminal
2.2.10.2 Schema Rman
Muestra la información del estado, lugar y tamaño de todos los
tablespace. Que para un administrador de base de datos es
importante saber para un respaldo previo de los mismos.
- 215 -
Figura 2.58 – Formulario Report Schema – Terminal
2.2.10.3 Listado Rman
Muestra el listado de los tablespace que son respaldados y los que
necesitan ser respaldados, ademas muestra la pantalla dos pestañas
en la que detalla lo antes expuesto.
En el List Backup: Presenta si fueron respaldados o no los
tablespace, donde el aplicativo le permite guardar el listado
de list backup a un archivo en la ruta que especifique el
usuario y guarda el archivo pulsando botón guardar.
En el Report need backup: Presenta los tablespace que
- 216 -
necesitan ser respaldados, también el aplicativo le permite
guardar el listado de Report need backup a un archivo en la
ruta que especifique el usuario y guarda el archivo pulsando
el botón guardar.
Figura 2.59– Formulario List backup – Terminal
- 217 -
Figura 2.60 – Formulario de la Consola – Terminal
2.2.10.4 Backup Database
Esta forma realiza un respaldo de la base de datos en la ruta que
disponga el usuario, tomando en cuenta el tamaño de los mismos.
El respaldo de la base de datos en rman que contiene todos los
datafile, siempre y cuando se encuentre la base en modo archive.
Como también nos da la herramienta, poder guardar el log del backup
en un archivo en la ruta que disponga el sysdba.
- 218 -
Figura 2.61 – Formulario de la Consola – Terminal
top related