Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Guía de Tareas Practico Final PDF
Guía de Tareas Practico Final PDF
11g-183-LNCISCO
GUÍA DE TAREAS
A. Creación de una Base de Datos
1) Práctica de Creación de la Base de Datos
A. Para la creación manual (sin usar DBCA) a través de la sentencia créate data base
B. Si desea crear una base de datos utilizando otras herramientas de línea de comandos, puede usar el script
BUILD_DB.SQL ubicado en ORACLE_HOME/admin
C. Priperos pasos
D. Baje la instancia SID, elimine todo vestigio de la base de datos SID creada. Usando el DBCA, recree la base de
datos sirio usando el template que existe para ella.
2) Cálculo de Volúmenes de una Base de Datos
B. Mantenimiento de la Base de Datos
1) Crear Tablas
2) Crear Un Tablespace
3) Compactar Un Tablespace
4) Eliminar Un Tablespace
5) Adición De Un DataFile
6) Ampliar El Tamaño De Un DataFile
7) Mover Un Tablespace
8) Mover Un DataFile
9) Activar el Modo Seguro de Transacción (ARCHIVE)
10) Creación de Índices
11) Modificación de Índices
12) Monitoreo de Índices
13) Borrado de Índices
14) Crear un grupo de Redo Log Files
15) Eliminar un grupo de Redo Log Files
16) Adicionar un elemento a un grupo de Redo Log Files
17) Eliminar un elemento de un grupo de Redo Log Files
18) Trasladar un elemento a un subgrupo de Redo Log Files
19) Crear ENLACES de base de datos
20) Crear SECUENCIAS
USO DE LA PÁGINA MANAGE OPTIMIZER STATISTICS
RECOPILACIÓN MANUAL DE ESTADÍSTICAS DEL OPTIMIZADOR
REPOSITORIO DE CARGA DE TRABAJO AUTOMÁTICA (AWR)
MARCO DE ASESORAMIENTO
C. Seguridad de la Base de Datos
1) Seguridad de Accesos
2) Creación y autenticación de Usuarios
A. Crear usuarios
B. Crear usuarios por medio del EM (Enterprise Manager)
C. Modificar un Perfil
D. Eliminar Usuario
E. Modificar Usuario
F. Dar privilegios a un Usuario
G. Quitar privilegios a un Usuario
H. Crear un Rol
I. Modificar un Rol
J. Eliminar un Rol
K. Asignar un Rol a un Usuario o Rol
3) Autenticación de Usuarios
A. Autenticación por medio del SO Linux XE
B. Autenticación por medio del SO Windows
C. Funciones de verificación de contraseñas.
B. Si desea crear una base de datos utilizando otras herramientas de línea de comandos, puede
usar el script BUILD_DB.SQL ubicado en ORACLE_HOME/admin
a. Defina nombre de la variable de instancia ORACLE_SID
b. Preparación de archivo de parametros init.ora, cambiando los parámetros de acuerdo al modelo
seleccionado para la base de datos.
c. Modificar el archivo build_db.sql, ajustando los parámetros a las necesidades de la empresa.
D. Baje la instancia SID, elimine todo vestigio de la base de datos SID creada. Usando el DBCA,
recree la base de datos sirio usando el template que existe para ella.
Porcentaje Tamaño
Nombre de Cantidad de Tamaño de Tamaño de
Crecimiento Total de la Observaciones
la Tabla Registros Registros (KB) Tabla (KB)
Anual (%) Tabla (MB)
Sin por ejemplo, queremos realizar un procedimiento para que inserte en la tabla t1 es necesario
ejecutar el siguiente código en la consola de sqlplus:
REATE TABLE T1 (A int ) tablespace users;
CREATE OR REPLACE PROCEDURE PRC001(Xa IN INT) IS
BEGIN
INSERT INTO t1 VALUES(Xa);
COMMIT;
END PRC001;
Sin queremos ejecutar un procedimiento ya creado previamente debemos encerrarlo entre un
bloque begin… end, como se expresa en el siguiente código:
BEGIN
PRC001(5);
END;
Supongamos que se nos ha contratado para crear un procedimiento almacenado capaz de desactivar
un tablespace
CREATE OR REPLACE PROCEDURE PRC003 (Xnombre IN varchar2)
IS
sql_dinamico varchar2(1000);
BEGIN
sql_dinamico := 'ALTER TABLESPACE :nombre offline';
EXECUTE IMMEDIATE sql_dinamico USING Xnombre;
END PRC003;
2. Modo Seguro de Transacciones. El modo seguro de Transacciones permite que la base de datos
realice respaldos automáticos de todas sus bitácoras sin necead de deshabilitarla. Cada vez que una
bitácora alcanza su capacidad máxima de almacenamiento se produce un cambio de bitácora, es
decir, los datos pasan a otra bitácora con más capacidad en la cual se almacenaran. Esto permite que
la base de datos trabaje 24x7, o sea, que no se tenga que deshabilitar para realizar respaldos en las
bitácoras. Se recomienda establecer el modo seguro de transacción desde el inicio de la instalación
de la base de datos, ya que, así asegurará los respaldos de la misma.
3. Índices. Un índice es una estructura diseñada para obtener un acceso más rápido a los datos
contenidos dentro de una tabla. Es independiente de los datos almacenados en la tabla y cuando se
encuentra bien definido reduce significativamente la búsqueda, aumentando el rendimiento, oracle
utiliza árboles tipo B+ para balancear el tiempo de acceso a cualquier fila. Inmediatamente luego de
crear el índice, este comienza a mantenerse al tanto de las inserciones, actualizaciones y
eliminaciones de registros de la tabla en la cual se ha implementado.
Los índices se utilizan para mejorar el rendimiento de consultas en un table. El uso indiscriminado de
índices tienen seria desventajas tanto es espacio físico como en operaciones de insert y update. Los
índices son utilizados para acelerar el acceso en búsquedas. Es recomendado la separación física de
los índices del tablespace de las tablas, esto para que el proceso de búsqueda se realice en un HD
mientras que la carga de los datos se realice en otro HD.
También es recomendado la separación de tablespace TMP que se utiliza para realizar
ordenamientos en las consultas, en resumen una arquitectura óptima requiere como mínimo 4 discos
duros: uno de datos, otro de índices, otro de TEMP y el diccionario de datos separados (SYSTEM).
Existen tres tipos de índices cuya naturaleza depende de la forma en que haya o creado. Estos tipos
son:
Índice Primario: Es aquel que tiene la restricción adicional de que el grupo de columnas indexadas
define una única fila o llave primaria.
Índice Foráneo: Se realizan consultas por campos distintos a los de la clave primaria, por ello hay
que crear un índice por los campos por los que se accede.
Índice Adicional: Se realizan cuando existen varias instrucciones que requieren ordenamiento, por
ejemplo cuando se utiliza el order by. Sin embargo, las consultas no deben ser alteradas cuando se
coloca un índice.
Es importante revisar con frecuencia los índices para que no se fragmenten, a su vez hay que
desfragmentarlos dependiendo del porcentaje de fragmentación que estos presentan.
Un índice sólo es efectivo cuando es utilizado. Es por eso que debe asegurarse que la frecuencia de
uso sea muy alta y que su implementación vaya a mejorar el rendimiento de las consultas efectuadas
a la tabla donde ree el índice. Sin embargo, no es muy conveniente el uso de varios índices dentro de
una misma tabla porque con cada operación de inserción, actualización o eliminación que se lleva a
cabo sobre una tabla, sus índices se deben recrear. La creación, organización, borrado y análisis de
índices deberán llevar un registro de documentación.
Los procesos de mantenimiento de índices son los siguientes:
Creación de Indices
Modificación de Indices
Monitoreo de Indices
Borrado de Indices
4. Bitacoras. Oracle cuenta con herramientas de recuperación de la información ante caídas de
suministro eléctrico, errores de disco duros y demás fallos. Estos mecanismos se llaman logs o
bitácoras, las mismas son capaces de almacenar todos los datos de las transacciones las cuales se les
han aplicado commit.
El sentido real la función de los logs, es poder trazar las transacciones (insert, update, delete) de las
bases de datos, esto permite reparar fallos. Existe un concepto denominado miltiplexación de los
redo logs files, el cual permite guardar la misma información en todos los redo logs files (miembros)
que componen un grupo. Este diseño fue realizado de esta forma para garantizar que la base de datos
siga operando sin importar la caída de un redo log file.
El proceso de escritura en logs (LGWR) escribe los registros de redo del buffer de redo log a todos los
miembros del grupo actual de redo logs, hasta que el archivo se llena o se solicita una operación de
cambio de archivo de log. Entonces, cambia el grupo activo y comienza a escribir en los archivos del
siguiente grupo. Los grupos de redo log son usados de una forma circular (como una cola circular). Es
recomendado tener los redo logs files separados en grupos (para garantizar la miltiplexación) en
discos duros independientes.
Oracle y Postgres son los únicos SGBDs que cuenta con bitácoras cíclicas, el funcionamiento es una
cola circular, cuando un log se llena se pasa al siguiente. Desde luego esto significa que con el tiempo
suficiente un log puede llegar a ser sobrescrito, en cuyo caso se recomienda habilitar otro tipo de
Log, llamado Log en Frio mediante el modo Archive.
Para un buen mantenimiento de las bitácoras de una base de datos es necesario tener presente la
organización de la empresa; es decir que tantas transacciones se reportan diariamente, y que
tambien respaldado se quieren tener esas transacciones (en la mayoría de las empresas estas
bitácoras son primordiales en caso de una posible caída de la base de datos). A la hora de crear una
base de datos se debe hacer un estudio previo del manejo de la empresa y la cantidad de recursos
disponibles para la construcción de la base, con estos datos ya cuantificados es posible determinar el
número de bitácoras, así como el tamaño necesario para cada una de ellas.
En caso de que la base ya haya o creada y lo que se necesite sea darle mantenimiento a las bitácoras,
es muy importante también el estudio preciso del número promedio de transacciones diarias de la
empresa, para así asegurar que el tamaño y el numero de bitácoras a adicionar sea el más preciso, y
brinde el mejor funcionamiento de la base de datos.
Los procesos de mantenimiento de bitácoras son los siguientes:
Adicionar elemento a un Redo Log
Eliminar un elemento a un Redo Log
Trasladar un elemento a un Redo Log
Crear un grupo de Redo Log
1 Cualquier acción proactiva se refiere a la medida preventiva.Reactiva activa se refiere la aplicación de una solución al problema se
presenta
El plan de ejecución conforma una serie de operaciones que se realizan en secuencia para ejecutar la
sentencia. El optimizador tiene en cuenta muchos factores relacionados con los objetos a los que se hace
referencia y con las condiciones especificadas en la consulta. La información necesaria para el
optimizador incluye:
- Estadísticas recopiladas para el sistema (E/S, CPU, etc.) al igual que objetos de esquema (número de
filas, índice, etc.)
- Información de diccionario
- Cualificadores de cláusula WHERE
- Indicaciones que proporciona el desarrollador
Si se utilizan herramientas de diagnóstico como Enterprise Manager, EXPLAIN PLAN y SQL*Plus
AUTOTRACE, se puede ver el plan de ejecución que elige el optimizador.
Nota: el optimizador de Oracle tiene dos nombres según su funcionalidad: optimizador de consulta y
optimizador automático de ajustes.
Las estadísticas del optimizador las recopila automáticamente un trabajo de mantenimiento automático
que se ejecuta una vez al día por defecto durante las ventanas de mantenimiento predefinidas. Las
estadísticas del sistema son características del sistema operativo que utiliza el optimizador. Estas
estadísticas no se recopilan automáticamente. Para obtener información sobre la recopilación de
estadísticas del sistema, consulte Oracle Database Performance Tuning Guide (Guía de Ajuste de
Rendimiento de Oracle Database).
Las estadísticas del optimizador no son las mismas que las estadísticas de rendimiento de la base de datos
que se recopilan en la instantánea de AWR
1) Crear Tablas
Desde EM, para crear tablas nos dirigimos a "Esquema", sección "Objetos de Base de Datos", "Tablas".
Se pueden crear las tablas como en línea de comandos pero de forma gráfica. Al entrar en este
apartado, tendremos que pulsar en "Crear".
Podemos seleccionar la organización de las tablas, si la queremos estándar o por índices. Elegimos
estándar y pasamos a la pantalla siguiente.
Veremos esta pantalla:
Aquí podemos elegir el nombre de la nueva tabla, el esquema donde va a estar y el tablespace por defecto
donde se va a guardar.
CESARI M. PROYDESA – DBA2 pág. 14
PRACTICO FINAL. AR-UTNME-DBA2.11g-183-LNCISCO
En el apartado Columnas podremos modificar la forma que tendrá la tabla, o sea, añadir las columnas
que tendrá.
En las pestañas de la parte superior podemos elegir las restricciones, el tamaño que va a tener la tabla
entre otras opciones.
Por ejemplo en Restricciones podemos elegir el tipo de restricción en la lista "Restricciones" y pulsando
en el botón "Agregar" para configurar las restricciones que queramos ponerle:
2) Crear Un Tablespace
Los tablespaces son espacios de memoria donde se van a almacenar las tablas. La memoria que se utiliza
para los tablespaces puede ser de disco o de la memoria principal.
Ejecutamos la siguiente consulta, debe tener en cuenta que el directorio debe existir previamente.
sql> create tablespace <nombre> datafile '<nombredatafile.dbf>' size
<tamaño_inicial>m autoextend on next <tamaño_incremento>m maxsize
<tamaño_maximo>m;
Por ejemplo, podemos ejecutar la siguiente creación de tablespace para Ventas, con un tamaño inicial de
2Mb, un crecimiento de 1Mb hasta 1Gb
create tablespace ventas datafile 'c:\bd\ventas.dbf ' size 2m
autoextend on next 1m maxsize 1g;
a. Verifique que no existe ninguna otra base de datos en ejecución en el sistema, en caso contrario
ejecute shutdown
b. Se prosigue a montar la Base de Datos, ejecute la siguiente instrucción:
startup open pfile =<Ruta>/initdatabase.ora;
c. Para crear el nuevo tablespace se deberá efectuar lo siguiente:
CREATE TABLESPACE <nombre> DATAFILE <nombredatafile.dbf>
SIZE 10M AUTOEXTEND ON NEXT 10M MAXSIZE 100M;
d. Como último paso se debe llenar el registro según corresponda:
Tablespace Fecha creación Ubicación Tamaño Observaciones
Desde la pestaña Servidor, sección Almacenamiento, "Tablespaces" podemos crear o configurar los
tablespaces:
En la pantalla principal de los tablespaces veremos los tablespaces que existen en el sistema y sus
características como el nombre, tamaño asignado, espacio usado, etc.
Al pulsar en el ya conocido botón Crear, podemos crear y configurar un tablespace nuevo. Debemos
introducir el nombre del nuevo tablespace y asignarle un fichero. Para asignar el fichero Pulsamos sobre
el botón Agregar que se encuentra en "Archivos de Datos".
Aquí podemos escribir el nombre del fichero, y a continuación el directorio de archivos, que por defecto
se encuentra donde está instalada la instancia. Le podemos dar un tamaño, que por defecto aparece como
100MB o reutilizar un fichero de tablespace que ya existe.
Otra de las opciones es que se puede indicar que el tablespace se amplíe automáticamente cunado llega al
límite de espacio, que si lo dejáramos como está, ese espacio sería los 100MB que estaban por defecto. Si
queremos que se amplíe automáticamente, lo activamos e indicamos el tamaño que se ampliará cuando se
produzca el exceso de tamaño. Para que no crezca indefinidamente, también podemos limitar el tamaño
máximo del archivo indicando el límite de tamaño.
De vuelta a la pantalla de los tablespaces, podremos observar que se ha añadido un archivo de datos.
Podemos agregar mas archivos si queremos, incluso archivos que se encuentren en otra partición o disco
duro simplemente indicando la ruta del archivo.
Podemos hacer que el tablespace sea permanente o temporal, y si queremos que sea de escritura/lectura,
solo lectura, o incluso offline que consiste en que el tablespace no se activa y por lo tanto no se podrá
usar.
En la pestaña Almacenamiento podemos encontrar otras opciones referidas a la gestión del tamaño del
tablespace. Para crear definitivamente el tablespace, pulsamos en Aceptar.
Podemos ver el nuevo tablespace que hemos creado en la pantalla principal de los tablespaces:
3) Compactar Un Tablespace
Ejecutamos la compactación cuando tenemos saturado el tablespace y queremos reducir el tamaño en
disco duro. Para ello el comando realiza una desfragmentación de los datos dejando extensiones de datos
de forma consecutiva ahorrando memoria.
sql> alter tablespace <nombre> coalesce;
Por ejemplo, vamos a compactar la tabla creada en el ejercicio anterior.
sql> alter tablespace ventas coalesce;
a. Verifique que no existe ninguna otra base de datos en ejecución en el sistema, en caso contrario
ejecute shutdown
b. Se prosigue a montar la Base de Datos, ejecute la siguiente instrucción:
startup open pfile =<ruta>/initdatabase.ora;
c. Para efectuar una defragmentación de un tablespace, utilice la siguiente instrucción:
alter tablespace <nombre> coalesce;
d. Como último paso se debe llenar el registro según corresponda
Tablespace Fecha compactación Ubicación Tamaño Observaciones
4) Eliminar Un Tablespace
En algún momento es necesario eliminar un tablespace, para ello el mismo debe estar vacío, esto quiere
decir que no tengan objetos tales como tablas, índices o procedimientos almacenados.
sql> alter tablespace <nombre> offline normal;
sql> drop tablespace <nombre> [including contents] ;
Por ejemplo, vamos a eliminar el tablespace de ventas. sql> drop tablespace ventas;
Podría surgir el caso que necesitemos borrar un tablespace junto con todos los objetos que contiene, para
ello utilizamos la siguiente sintaxis: sql> drop tablespace ventas including contents;
a. Se prosigue a montar la Base de Datos, ejecute la siguiente instrucción:
startup open pfile =<ruta>/initdatabase.ora;
b. Ejecute la siguiente instrucción para deshabilitar el Tablespace que desea eliminar:
alter tablespace <nombre> offline;
c. Ahora para eliminar el tablespace usted debe de ejecutar la instrucción siguiente:
drop tablespace <nombre>;
d. Como último paso se debe llenar el registro según corresponda
Tablespace Fecha de Eliminación Ubicación Tamaño Observaciones
5) Adición De Un DataFile
a. Verifique que no existe ninguna otra base de datos en ejecución en el sistema, en caso contrario,
ejecute el siguiente código: shutdown;
b. Se prosigue a montar la Base de Datos, ejecute la siguiente instrucción:
startup open pfile =<Ruta>/initdatabase.ora;
c. Para adición de un nuevo datafile, efectué lo siguiente:
ALTER TABLESPACE <nombre> ADD
DATAFILE <ruta_nombredatafile.dbf>
SIZE 100M
AUTOEXTEND ON NEXT 50K MAXSIZE 1000M;
d. Como último paso, se debe llenar el registro correspondiente
DataFile Fecha de creación Ubicación Tamaño Observaciones
7) Mover Un Tablespace
a. Se debe poner offline el tablespace que se desea mover con la siguiente instrucción:
alter tablespace <nombre> offline;
b. Luego mueva el tablespace a nivel sistema operativo. Efectuando cut and paste desde el
explorador para ubicarlo en la nueva dirección.
c. Ahora mueva el o los DataFiles que componen el tablespace de la siguiente manera:
alter tablespace <nombre>
rename datafile <ruta_nombredatafile.dbf>
to < ruta_nombredatafile.dbf>;
d. Como un último paso, se debe poner online el tablespace, con la siguiente instrucción:
alter tablespace "ventas" online;
e. Llene el registro correspondiente:
Tablespace Fecha de reubicación Ubicación nueva Tamaño Motivo Observaciones
8) Mover Un DataFile
a. Verifique que no existe ninguna otra base de datos en ejecución en el sistema, en caso contrario,
ejecute el siguiente código: shutdown;
b. Se prosigue a montar la Base de Datos, ejecute la siguiente instrucción:
startup open pfile =<Ruta>/initdatabase.ora;
c. Para mover el DataFile ejecute la siguiente instrucción:
ALTER DATABASE RENAME FILE <ruta/nombredatafile.dbf> TO <ruta/nombredatafile.dbf >;
d. Como ultimo paso, se debe llenar el registro correspondiente
Datafile Fecha de reubicación Ubicación nueva Tamaño Motivo Observaciones
Los índices son necesarios para aumentar el rendimiento de las consultas a las tablas, sobre todo cuando
esas consultas se producen muy a menudo en una columna concreta. Entonces se crea un índice de esa
columna o columnas. Dentro de "Índices" observamos que se pueden buscar los índices que existen en un
determinado esquema. Podremos buscarlos por nombre de tabla, que mostrará las tablas con índice, o
por nombre de índice. Como siempre, podemos ver el contenido del índice pulsando sobre el, así como
editarlo, eliminarlo o crear uno nuevo. Al verlo, veremos multitud de parámetros, incluido estadísticas. En
"Acciones", al seleccionar "Generar DLL" veremos la sentencia con la que se creó el índice. La creación de
objetos en la BD a través de la interfaz web viene a tener la mísma dinámica siempre, esto es lo que lo
hace muy intuitivo y fácil.
Si queremos crear un índice nuevo pulsamos en "Crear". Introducimos el nombre del índice, el esquema
de usuario y el tablespace donde se va a crear. Lo podemos hacer sobre una tabla o en un cluster.
Suponga que el registro civil de Costa Rica quiere realizar un estudio de minería de datos, para ello quiere
segmentar a la población en las provincias del país. De esta forma cada persona va está en una categoría
de provincia. Es justamente esta segmentación lo que hace al bitmap la elección ideal para hacer
consultas por categorías.
CREATE BITMAP INDEX <nombre_indice> ON <nombre_tabla>(<datos>) REVERSE;
a. Deshabilitar la instancia de Oracle, de la siguiente manera: shutdown
b. Iniciar la Base de Datos en modo: "open", utilizando el siguiente comando:
Startup open pfile='\init.ora';
c. Crear un indice con el siguiente comando:
create index nombreindice on table (columnas )
d. Para finalizar, se debe registrar correctamente.
Nombre
Fecha de creación Ubicación Observaciones
del Indice
Verificamos que efectivamente el grupo que queremos eliminar no este siendo utilizado, procedemos la
eliminación mediante la siguiente instrucción:
ALTER DATABASE DROP LOGFILE GROUP 3;
16) Adicionar un elemento a un grupo de Redo Log Files
Algunas consultas importantes para tener en cuenta son:
Vista: V$LOG Muestra la información del redo log file
Vista: V$LOGFILE Muestra la ruta de los redo logs files
Vista: V$LOG_HISTORY Muestra el historial del redo log files
Para crear miembros de grupos de redo log files, ejecutamos la siguiente instrucción:
ALTER DATABASE ADD LOGFILE MEMBER '/oracle/dbs/log2b.rdo'
TO GROUP 2;
a. Deshabilitar la instancia de Oracle, de la siguiente manera: shutdown
b. Iniciar la Base de Datos en modo: "open", utilizando el siguiente comando:
startup open pfile='\init.ora';
c. Utilizar la siguiente instrucción para crear el grupo de redo log files, especificando la ruta y el
nombre del Redo Log File donde se desea guardar, así como el tamaño máximo de los mismos,
además la inclusión de nuevos elementos a crear van separados por coma:
alter database add logfile 'Ruta/nombreArchivo.log' size 10m;
d. Para finalizar, se debe registrar correctamente.
Nombre archivo/grupo
Fecha adición Ubicación Tamaño
Redo Log File
Pasos
a. Deshabilitar la instancia de Oracle, de la siguiente manera: shutdown
b. Iniciar la Base de Datos en modo: "open", utilizando el siguiente comando:
Startup open pfile='\init.ora';
c. Utilizar la siguiente instrucción para mover el elemento seleccionado al subgrupo
correspondiente:
ALTER DATABASE RENAME FILE
'/ruta_original/nombre_archivo', '/ruta_original/nombre_archivo' TO
'/ruta_nueva/nombre_archivo', '/ruta_nueva/nombre_archivo';
d. Para finalizar, se debe registrar correctamente.
Nombre archivo/grupo Fecha
Origen Destino
Redo Log File traslado
Veremos el contenido del archivo tnsnames.ora. Para crear un nuevo servicio pulsamos en Crear.
Aquí seleccionamos el protocolo de red, que será TCP/IP, el puerto, que será 1521 o el que elijamos en la
instancia remota y el host, que será el nombre de dominio o la IP de la máquina a la que se va a conectar.
Aceptamos.
Escribimos también el nombre se dervicio de red que será el que usemos para crear el enlace
También tenemos que indicar el nombre del servicio o el SID remoto. Para terminar, aceptamos.
Si abrimos el archivo tnsnames.ora veremos que se ha introducido un nuevo servicio de red que en la
prueba se ha usado orcl2:
Práctica Recomendada: Utilice las tareas automáticas de mantenimiento para recopilar las estadísticas
del optimizador. Para activar la tarea de recopilación de estadísticas del optimizador, se debe asegurar de
que el parámetro de inicialización STATISTICS_LEVEL está definido en TYPICAL o ALL.
Las estadísticas del sistema describen las características del hardware del sistema, como el rendimiento y
el uso de E/S y de CPU, al optimizador de consulta.
Al seleccionar el menú Gather Optimizer Statistics, se inicia un asistente que permite seleccionar el
ámbito, los objetos, las opciones y la programación del trabajo que recopilará las estadísticas del
optimizador. El asistente ejecuta un trabajo DBMS_STATS.GATHER_*_STATS en el ámbito especificado:
tabla, esquema o base de datos. En este asistente, defina las preferencias para los valores por defecto que
utiliza el paquete DBMS_STATS y programe la ejecución del trabajo para el momento que determine.
Gestión de AWR
La configuración de AWR incluye el período de retención, el intervalo de recopilación y el nivel de
recopilación. Recuerde que la disminución de cualquier valor de esta configuración afecta a la
funcionalidad de los componentes que dependen de AWR, incluso a los asesores.
El aumento de los valores de la configuración puede ofrecer mejores recomendaciones de los asesores,
pero a costa del espacio necesario para almacenar las instantáneas y el rendimiento utilizado para
recopilar la información de instantáneas.
Plantéese la opción de definir el nivel de recopilación en ALL cuando ajuste una aplicación nueva. El valor
ALL recopila los planes de ejecución SQL y las estadísticas de temporización que mejoran las
recomendaciones de los asesores SQL. Una vez terminado el ajuste, esta configuración debe volver al
valor TYPICAL
Niveles de Estadísticas
El parámetro de inicialización STATISTICS_LEVEL controla la captura de diversas estadísticas y diversos
asesores, incluidas las tareas de mantenimiento automáticas. Las tareas automáticas de mantenimiento
incluyen la recopilación de las estadísticas del optimizador. El parámetro STATISTICS_LEVEL se puede
definir en los siguientes niveles:
• BASIC: desactiva el cálculo de estadísticas y métricas de AWR. La tarea automática de estadísticas
del optimizador está desactivada, igual que todos los asesores y todas las alertas generadas por el
servidor.
• TYPICAL: se recopilan las estadísticas principales necesarias para la autogestión de la base de
datos. Representan lo que normalmente se necesita para supervisar el comportamiento de Oracle
Database. Esto incluye la recopilación automática de estadísticas para reducir la posibilidad de
sentencias SQL de rendimiento bajo, debido a estadísticas anticuadas o no válidas.
• ALL: se capturan todas las estadísticas posibles. Este nivel de captura agrega estadísticas de
tiempo del sistema operativo y estadísticas de ejecución de planes. Estas estadísticas no son
necesarias en la mayoría de los casos, por lo que no se deben activar para conseguir un
rendimiento óptimo; en ocasiones, se necesitan para pruebas de diagnóstico concretas.
Oracle recomienda que se defina el valor por defecto TYPICAL para el parámetro de inicialización
STATISTICS_LEVEL. Al definir el valor en BASIC, se desactiva la recopilación automática de estadísticas
del optimizador
3. Los resultados le proporcionan un corto resumen de lo que descubrió ADDM como áreas ajustables.
Al hacer clic en un problema concreto, pasará a la página Performance Finding Details.
Si hace clic en el botón View Report, podrá acceder a información detallada sobre el análisis
derendimiento en forma de informe de texto
La página Performance Finding Details le proporciona recomendaciones para solucionar los problemas
encontrados. Las recomendaciones se agrupan en categorías, entre ellas categorías de esquema, de ajuste
SQL y de configuración de la base de datos. La columna Benefit(%) muestra la reducción máxima de
tiempo transcurrido en la base de datos al implantar la recomendación.
ADDM considera la posibilidad de aplicar varios cambios a un sistema. Entre sus recomendaciones se
incluyen:
- Cambios de hardware: agregar CPU o cambiar la configuración del subsistema de E/S.
- Configuración de la base de datos: cambiar la configuración de parámetros de inicialización.
- Cambios de esquema: crear particiones hash de tablas o índices, o bien utilizar la Gestión
- Automática de Espacio de Segmento (ASSM).
- Cambios de aplicación: utilizar la opción de caché para secuencias o usar variables de enlace.
- Utilizar otros asesores: ejecutar el Asesor de Ajustes SQL en SQL con mucha carga o ejecutar el
Asesor de Segmentos en objetos activos.
MARCO DE ASESORAMIENTO
Los asesores proporcionan información de gran utilidad acerca de la utilización y el rendimiento de los
recursos para sus respectivos componentes de servidor. Por ejemplo, el Asesor de Memoria proporciona
un valor recomendado para el parámetro de inicialización MEMORY_TARGET, que controla la cantidad
total de memoria que utiliza la instancia de Oracle Database.
Al contar con los datos capturados por AWR, ADDM permite a Oracle Database diagnosticar su propio
rendimiento y determinar cómo se pueden resolver los problemas identificados. ADDM se ejecuta
automáticamente después de cada una de las capturas de estadísticas AWR. Puede llamar a otros
asesores.
Las principales ventajas que proporciona la infraestructura de asesores son las siguientes:
• Todos los asesores utilizan una interfaz uniforme.
• Todos los asesores disponen de un origen de datos común y un almacén de resultados al utilizar el
repositorio de carga de trabajo.
Algunos de los asesores se describen con mayor detalle en las lecciones tituladas “Gestión de Datos de
Deshacer”, “Gestión de Rendimiento” y “Conceptos de Copia de Seguridad y Recuperación”.
Nota: utilice la página Change Default Parameters para cambiar el tiempo de caducidad por defecto (en
días) para todas las tareas futuras. También puede utilizar esta página para cambiar los parámetros de
algunos asesores importantes.
Paquete DBMS_ADVISOR
El paquete DBMS_ADVISOR contiene todas las declaraciones de procedimiento y constantes para todos
los módulos de asesor. Puede utilizar este paquete para ejecutar tareas desde la línea de comandos.
Para poder ejecutar los procedimientos de asesor, es necesario disponer del privilegio ADVISOR. El
privilegio ADVISOR permite acceder plenamente a las vistas y los procedimientos del asesor.
Nota: para obtener más información sobre todos los procedimientos del paquete DBMS_ADVISOR,
consulte Oracle Database PL/SQL Packages and Types Reference (Referencia de Tipos y Paquetes PL/SQL
de Oracle Database).
1. Automated Maintenance Tasks / Tareas de Mantenimiento Automáticas
Mediante el análisis de la información almacenada en AWR, la base de datos puede identificar la
necesidad de realizar tareas de mantenimiento rutinarias como, por ejemplo, refrescar las estadísticas del
optimizador. La infraestructura de las tareas de mantenimiento automáticas permite a la base de datos
Oracle realizar de manera automática tales operaciones. Utiliza el programador para ejecutar las tareas
en ventanas de mantenimiento predefinidas.
Por defecto, las ventanas de mantenimiento de los días laborables empiezan a las 10:00 p.m. y duran 4
horas. Los sábados y los domingos, la ventana de mantenimiento empieza a las 6:00 a.m. y dura 20 horas.
Todos los atributos de las ventanas de mantenimiento se pueden personalizar, entre los que se incluyen
la hora de inicio y finalización, la frecuencia, los días de la semana, etc. Asimismo, para poder limitar el
impacto de las tareas de mantenimiento automáticas en operaciones habituales de la base de datos, se
tiene que asociar un plan de recursos del Gestor de Recursos de la Base de Datos a una ventana de
mantenimiento.
Ejemplos de mantenimiento:
- Las estadísticas del optimizador se refrescan automáticamente mediante el uso de la infraestructura
de tareas de mantenimiento automáticas.
- El Asesor de Segmentos Automático tiene trabajos por defecto, que se ejecutan en la ventana de
mantenimiento.
- Al crear una base de datos con DBCA, puede iniciar la realización de copias de seguridad periódicas de
bases de datos.
Haga clic en Automated Maintenance Tasks, en la cabecera Scheduler de la página Server, para acceder a
la página Automated Maintenance Tasks, en la que se visualizan el programa de las tareas de
mantenimiento automáticas, así como el historial reciente. Desde aquí, puede aumentar los detalles de
algunas tareas. Haga clic en Configure para ir a la página Automated Maintenance Tasks Configuration.
Una tarea se ejecuta en una ventana. El gráfico muestra la última ventana en la que se ha ejecutado una
tarea y la siguiente ventana en la que está programada su ejecución.
Nota: en el ejemplo se muestran las ventanas por defecto para las tareas. Cuando se cierra la ventana de
mantenimiento, el programador termina el trabajo de recopilación de estadísticas del optimizador por
defecto. Los objetos restantes se procesan en la próxima ventana de mantenimiento.
En la página Automated Maintenance Tasks Configuration se pueden activar y desactivar las tareas de
mantenimiento automáticas todas a la vez, de manera individual o según ventanas concretas.
También se pueden configurar los valores utilizados para la recopilación de estadísticas del optimizador y
los parámetros de control de los trabajos del Asesor de Ajustes SQL automático.
Seleccione el nombre de la ventana para visualizar o editar su programa.
Haga clic en Edit Window Group para agregar y eliminar ventanas del grupo de ventanas
5. Notificación de Alertas
El mecanismo de notificación utiliza la interfaz de usuario de Enterprise Manager. Se basa en el concepto
de una regla de notificación que establece el mecanismo de notificación adecuado para un juego de
próximas alertas.
Database Control permite editar las reglas de notificación. En la página inicial, haga clic en el enlace
Preferences para mostrar la página General, en la que especifica la dirección de correo electrónico en la
que desea recibir las notificaciones.
En la página General, haga clic en el enlace Rules de la región Notification. Seleccione la regla “Database
Availability and Critical States” y haga clic en el botón Edit. Aparecerá la página “Edit Notification Rule
Database Availability and Critical States”, donde podrá hacer clic en el separador Metrics y editar las
métricas para las que desee recibir notificación
Como opción, puede especificar si desea que Enterprise Manager le proporcione una notificación directa
cuando se produzcan determinadas alertas. Por ejemplo, si especifica que desea una notificación por
correo electrónico de las alertas críticas y tiene definido un umbral crítico para el tiempo de respuesta del
sistema de cada métrica de llamada, puede enviar un mensaje de correo electrónico que contenga un
mensaje similar al siguiente:
Host Name=mydb.us.mycompany.com
Metric=Response Time per Call
Timestamp=08-NOV-2005 10:10:01 (GMT -7:00)
Severity=Critical
Message=Response time per call has exceeded the threshold. See
the latest ADDM analysis.
Rule Name= Rule
Owner=SYSMAN
El correo electrónico contiene un enlace al nombre del host y el último análisis de ADDM.
Por defecto, está configurada la notificación de alertas en estado crítico (como en el caso de que la base de
datos esté inactiva, estado de error del log de alertas genéricas y tablespace usado). Sin embargo, para
recibir estas notificaciones, debe configurar la información de correo electrónico realizando los siguientes
pasos:
1. En cualquier página de Database Control, haga clic en el enlace Setup de la cabecera o del pie de
página.
2. En la página Setup, seleccione Notification Methods.
3. Introduzca la información necesaria en la región Mail Server de la página Notifications Methods.
Existen otros métodos de notificación, entre los que se incluyen scripts e interrupciones SNMP
(Simplified Network Management Protocol). Este último se puede utilizar para comunicarse con
aplicaciones de terceros.
Para recibir notificaciones:
1. En cualquier página de Database Control, haga clic en el enlace Preferences de la cabecera o del pie de
página.
2. En la página Preferences, seleccione General. Introduzca la dirección de correo electrónico en la
región E-mail Addresses.
3. De manera opcional, puede editar las reglas de notificación (por ejemplo, para cambiar el estado de
gravedad necesario para recibir una notificación). Para ello, haga clic en Notification Rules. Aparece la
página Notification Rules.
Nota: para obtener más información sobre la configuración de las reglas de notificación, consulte la
documentación Oracle Enterprise Manager Advanced Configuration (Configuración Avanzada de Oracle
Enterprise Manager)
6. Reacción ante Alertas
Al recibir una alerta, siga las recomendaciones que se le proporcionan. También se puede plantear
ejecutar ADDM (o cualquier otro asesor adecuado) para obtener un diagnóstico más detallado del
comportamiento del sistema o del objeto.
Se generan alertas e incidentes para los errores críticos. Los errores críticos suelen generan incidentes
que se recopilan en problemas. Utilice Support Workbench para investigar y, posiblemente, informar del
problema a los Servicios de Soporte Oracle.
La mayoría de las alertas (como, por ejemplo, “Out of Space”) se borra automáticamente cuando
desaparece la causa del problema. Sin embargo, con otras alertas (como, por ejemplo, el error del log de
alertas genéricas), se envía al usuario una notificación y el usuario deberá confirmarla. Después de tomar
las medidas correctivas necesarias, confirme una alerta borrándola o depurándola. Al borrar una alerta,
ésta se envía al historial de alertas, que se puede visualizar desde la página inicial en Related Links. Al
depurarla, se elimina del historial de alertas.
Para borrar una alerta como, por ejemplo, el error del log de alertas genéricas, haga clic en el enlace Alert
Log de la página inicial bajo Diagnostic Summary. Aparece la página Alert Log Errors.
Seleccione la alerta que desea borrar y, a continuación, haga clic en Clear. Para depurar una alerta,
selecciónela y haga clic en Purge. También puede hacer clic en los botones Clear Every Open Alert o Purge
Every Alert.
Crear Roles: Al manejar varios usuarios, e incontable número de privilegios que este puede llegar
a tener, es útil manejar roles; así, podremos dar los mismos privilegios a distintos usuarios que
cumplen con el mismo rol.
Modificar Roles: Un rol también puede ganar o perder privilegios a lo largo de su vida útil.
Eliminar Roles o inactivarse: Cuando un rol deja de ser útil, este debe de eliminarse.
Asignar roles a un Usuario o a un role: Una vez creado algún rol, este no será útil hasta que se le
asigne a algún usuario.
3. Autenticación en Oracle
Cuando los usuarios desean conectarse a la base de datos Oracle para realizar sus funciones, esta se
asegura de que están autorizados a acceder, por medio del proceso de autenticación. La autenticación
puede ser realizada de varias maneras, podemos definir el usuario en la base de datos y autenticarlo, o
definirlo en otro lugar, como por el ejemplo el sistema operativo o un servidor LDAP como Oracle
Internet Directory, y pasarle los credenciales como validos a la base de datos.
Hay dos maneras por las cuales las base de datos autentica usuarios: Por contraseña; Por autenticación
por parte del sistema operativo (OS authentication).
Veamos las diferencias entre estos dos tipos de autenticación.
– Autenticación por medio de contraseña:
create user Scott identified by tiger;
Con esta instrucción creamos el usuarios “scott” autenticado el nuestra base de datos por medio de la
contraseña “tiger”. Esto nos crea la entrada de este usuario en el diccionario de datos en la tabla USERS$
propiedad del usuario SYS. Cuando el usuario se conecta por medio de alguna aplicación cliente este
comprobara en el diccionario de datos si los datos introducidos son correctos.
– Autenticación por medio del Sistema Operativo:
La autenticación por medio de sistema operativo son realizadas por las que en Oracle se denominan
cuentas de usuarios OPS$.
Create user ops$jesus Identified externally;
Con esta instrucción creamos en Oracle el usuario “jesus” y le indicamos a la base de datos de que este
usuario se autenticará por parte del sistema operativo. Este usuario se conectara a la base de datos
usando la siguiente sentencia: connect /
Ahora Oracle comprobará si el usuario “jesus” se encuentra autenticado en el sistema operativo y por lo
tanto podrá conectarse al a base de datos sin necesidad de que se le pida la contraseña.
La autentificación contra bases de datos Oracle también posee de otras vulnerabilidades que el
administrador debe controlar después de la instalación de una base de datos Oracle:
Autenticación como SYSDBA sin contraseña. Algunos administradores después de instalar una base
de datos Oracle en sistemas Windows se olvidan de que en la instalación se crea el grupo ora_dba y
se añade automáticamente el usuario que creo la base de datos. Esto provoca que el usuario del
sistema operativo que creo la base de datos pueda tener acceso a todos los datos entrando como
SYSDBA y sin necesidad de introducir contraseña alguna. Para evitar esto debemos sacar del grupo
ora_dba al usuario correspondiente.
Usuarios y contraseñas por defecto. Oracle trae por defecto numerosos usuarios por defecto con
contraseñas ya establecidas que se pueden encontrar por toda la red. Para ver los usuarios con
password por defecto podemos usar la vista del diccionario de datos siguiente:
SELECT * FROM dba_users_with_defpwd;
Debemos desactivar aquellas cuentas que no usemos y que se encuentren habilitadas y cambiar el
password de aquellas que aparecen en la vista.
Si hay acceso físico estas vendido. Si el atacante tiene acceso directo físico a nuestro servidor de
base de datos o logro entrar remotamente puede atacarnos de diferente manera usando la aplicación
cliente de nuestros usuarios. Un atacante podría modificar el fichero
%ORACLE_HOME%\sqlplus\admin\glogin.sql o %ORACLE_HOME%\sqlplus\admin\login.sql y
insertar código SQL o comandos de la consola de SQL * Plus que le permita obtener datos y copiarlos
a una base de datos remota o como veremos a continuación crearse un usuario automáticamente.
Si el atacante accede y nos modifica el fichero glogin.sql de la siguiente manera:
CREATE USER hacker identified by hackchack1;
grant connect to hacker;
grant dba to hacker;
CLEAR SCREEN
Esto provocará la creación de un usuario para el atacante en el momento en el que algún usuario con
los privilegios correspondientes se loguee en Sql*plus sin que se de cuenta aparentemente.
Contraseñas en claro por los clientes y servicios. Una vulnerabilidad no propia de Oracle pero
igualmente importante es que las contraseñas de nuestros usuarios se manden en claro o
permanezcan en claro en ficheros de configuración o ficheros de código fuente de sus aplicaciones.
Por ejemplo para realizar una conexión desde una aplicación PHP a Oracle la contraseña y el usuario
debe estar indicado en el código PHP de la aplicación. Por lo tanto debemos proteger y adecuar los
permisos correspondientes a ficheros que contengan datos de identificación contra la base de datos.
Otros métodos para proteger nuestra base de datos seria cifrar todo el contenido de la BD, el uso de
identificación biométrica vía reconocimiento facial, dactilar, vocal y otros métodos.
Si tenemos en cuenta todas estas vulnerabilidades y seguimos todos los pasos necesarios para corregirlas
e impedir al atacante el acceso del sistema tendremos nuestros datos más seguros.
1) Seguridad de Accesos
a. Obtener el diagrama de la Base de Datos, en caso de que no exista proceda a crearlo.
b. Aplicar los criterios de seguridad establecidos por la empresa a cada campo de las tablas de la
Base de Datos.
c. Clasificar los resultados obtenidos para determinar así el nivel de acceso de la información
d. Proceda a llenar el registro
Clasificación de la información:
Nivel Color Significado
Como podemos observar, en esta pantalla aparecen las cuentas de usuario de la BD y otras
características como el tablespace por defecto, el perfil, la fecha de creación, etc.
Para añadir un usuario nuevo basta con pulsar sobre el botón "Crear".
Nos enviará a otra pantalla donde introduciremos los credenciales.
En la pestaña "General" introducimos nombre y contraseña del nuevo usuario, además de añadirlo a
un tablespace por defecto y temporal. Se puede también seleccionar el perfil que tendrá el usuario.
En la pestaña "Roles" podemos seleccionar el rol que tendrá el usuario simplemente añadiendolos a
la lista. Los añadimos pulsando en el botón "Editar lista", y elegimos los roles de los que dispone la
BD.
De la misma forma añadimos los privilegios de objetos y del sistema, esta vez pulsando sobre el botón
"Agregar" y pasando los permisos desde la ventana izquierda, que son los disponibles en la BD, a la
derecha que son los que se les dará al usuario.
En la pestaña "Quotas" observaremos los tablespaces que existen en el sistema. Para que el usuario
pueda escribir en ellos seleccionamos una quota en el menú desplegable, donde podemos elegir entre
ninguna, que no tendrá quota, ilimitada, que no tendrá límite de escritura, y valor, que será el valos
que le asignemos en la siguiente columna.
Para crear el usuario definitivamente con la opciones configuradas pulsamos el botón "Aceptar"
Una vez creado tenemos distintas opciones, como por ejemplo bloquearlo, borrarlo, editarlo, etc.
Editar al usuario es la misma función que tiene "ALTER USER".
Cabe destacar que al atribuirle los privilegios al usuario, sean de sistema o sobre objetos, existe la
opción de pasar a otros usuarios ese mismo permiso. En el caso de que sea provilegios de sistema,
activamos "Opción Admin" para que este pueda pasar esos mismos permisos. Es equivalente a "WITH
ADMIN OPTION", usado cuando se añaden permisos al usuario desde la línea de comandos, al usar
"GRANT". En el caso de los permisos sobre objetos, de la misma forma, podemos activar la opción
"Opción Otorgar", que permite al usuario pasar esos permisos de objetos a otros usuarios.
Equivalente a "WITH GRANT OPTION", en línea de comandos al usar "GRANT".
Para eliminar privilegios de un usuario, accedemos a la configuración del usuario y lo editamos. Al
pasar a las pestañas de privilegios, sean de sistema o de objetos, podremos editar la lista de
privilegios y eliminarlos de ella.
C. Modificar un Perfil
Los perfiles tienen la función de limitar los recursos o configurar la forma de logearse en el sistema
mediante la contraseña. Se usan para aplicarselos a numerosos usuarios, ya que aplicar los límites
usuario por usuario es una tarea engorrosa. Crear perfiles y otorgarlos a usuarios en el interfaz web
es muy intuitivo y no precisa dificultad.
Para ver los perfiles disponibles en la BD accedemos a la pestaña "Servidor", sección "Seguridad",
"Perfiles". Aquí vemos los perfiles disponibles.
Si queremos ver que usuario tiene que perfil, seleccionamos cualquier perfil con la columna
"Seleccionar" y en "Acciones" elegimos "Mostrar dependencias". A continuación pulsamos en "Ir".
Se nos mostrará dos pestañas que serán "Dependencias" y "Dependientes". En la primera se
mostrarán los objetos de los que depende el perfil, y el segundo son los objetos a los que se le han
concedido el perfil. En el caso del perfil "Default" en la pestaña "Dependientes" veremos los usuarios
que tienen dicho perfil.
En la lista de los perfiles, si seleccionamos en "Acciones" la opción "Generar DDL", veremos la
sentencia con la que se creó el perfil:
Podemos ver las limitaciones que contiene el perfil "Default", que es el que se asigna por defecto al
crear un usuario. Pero si queremos ver esos límites de forma mas clara solo basta con seleccionar el
perfil y pulsar sobre el botón "Ver". Aquí veremos de forma ordenada las limitaciones. Para modificar
el perfil está el botón "Editar" y para eliminarlo el botón "Suprimir". Si queremos crear un nuevo
perfil, pulsamos sobre "Crear". Aquí escribimos el nombre del nuevo perfil y ponemos las
limitaciones. También tenemos la ayuda del icono de la derecha de cada bloque para buscar los
límites disponibles en la BD, que son ejemplos. En caso de que queramos ver la sentencia SQL
resultante antes de crear el perfil solo tenemos que pulsar en "Mostrar SQL". Veremos la sentencia
con la que se va a crear el perfil que estamos creando en la interfaz web.
En la pestaña "Contraseña" podemos configurar los límites referidos a las contraseñas, así como el
tiempo en días de bloqueo al intentar acceder erroneamente, la complejidad de la contraseña, etc.
Para asignar los perfiles a los usuarios, tenemos que editar los usuarios y seleccionar el perfil elegido.
D. Eliminar Usuario
a. Conectarse a la base de datos como un administrador de base de datos del sistema.
b. Ejecutar la sentencia sql para eliminar usuarios:
drop user username [cascade];
Donde: username #Es el nombre del usuario a eliminar.
CASCADE # Elimina todos los objetos creados por el usuario (opcional).
c. Llenar el registro correspondiente
Motivo de la eliminación de usuario: Referencia a la solicitud:
Fecha y hora de eliminación: Fecha y hora de petición:
Nombre de usuario: Observaciones generales:
E. Modificar Usuario
a. Conectarse a la base de datos como un administrador de base de datos del sistema.
b. Ejecutar la sentencia sql para modificar usuarios:
alter user username options;
Donde: username #Es el nombre del usuario a modificar.
options # Son las diferentes opciones que puede llegar a modificar como:
IDENTIFIED BY password[REPLACE old_password] Cambiar la contraseña
IDENTIFIED EXTERNALLY La cuenta es externa y tiene que ser validada con el sistema operativo.
IDENTIFIED GLOBALLY AS external_name La cuenta se autentica globalmente
DEFAULT TABLESPACE tablespace Tablespace por defecto
TEMPORARY TABLESPACE tablespace tablespace temporal
QUOTA int {K | M} ON tablespace Asigna un espacio en megabites o kilobites en el tablespace por defecto
QUOTA UNLIMITED ON tablespace Asigna un espacio ilimitado en el tablespace por defecto
PROFILE profile_name Asignacion de un perfil
DEFAULT ROLE role [,role,...] Hace que el usuario tenga algun rol por defecto
DEFAULT ROLE ALL [EXCEPT role,...] Hace que el usuario tenga todos los privilegios
DEFAULT ROLE NONE Hace que el usuario no tenga rol por defecto
Establece que el password del usuario expirará en forma automática y, por
PASSWORD EXPIRE
lo tanto, deberá cambiarlo al iniciar su próxima sesión.
ACCOUNT {LOCK|UNLOCK} Permite establecer si la cuenta debe permanecer bloqueada o no.
c. Llenar el registro correspondiente
Motivo de la modificación de usuario: Referencia a la solicitud:
Fecha y hora de odificación: Fecha y hora de petición:
Nombre de usuario: Observaciones generales:
F. Dar privilegios a un Usuario
a. Conectarse a la base de datos como un administrador de base de datos del sistema.
b. Ejecutar la sentencia sql para dar privilegios usuarios:
grant privileges on object to username;
Donde:
username # Es el nombre del usuario al cuál le daremos un privilegio
privileges # Distintos privilegios posibles
object # Objeto sobre el cual actúan los privilegios.
c. Llenar el registro correspondiente
Motivo de la asignación de privilegios: Responsable de la asignación de privilegios:
Fecha y hora de asignación: Fecha y hora de petición:
Privilegios asignados:
G. Quitar privilegios a un Usuario
a. Conectarse a la base de datos como un administrador de base de datos del sistema.
b. Ejecutar la sentencia sql para quitar privilegios usuarios:
revoke privileges on object to username;
Donde: username # Es el nombre del usuario al cuál le quitaremos un privilegio
privileges # Distintos privilegios posibles, en Oracle existen 81 diferentes privilegios.
object # Objeto sobre el cual actúan los privilegios.
Desde Oracle Enterprise Manager, los roles se crean accediendo a la pestaña "Servidor" y a
continuación, en la sección "Seguridad", a "Roles". Una vez dentro, veremos los roles que se encuentran
en la base de datos del sistema, viendo algunos conocidos como el rol DBA, RESOURCE o CONNECT
Aquí podemos configurar cada rol simplemente seleccionandolo en la colúmna "Seleccionar" y después
pulsando sobre "Editar".
Si pulsamos sobre el rol RESOURCE, veremos los privilegios que contiene.
En la imagen aparecen los privilegios que posee el rol, en este caso tiene los necesarios para los
programadores. No se le ha asignado ningún rol y ninguno de los permisos tiene la opción para pasarlo a
otros usuarios. No tiene privilegios de objetos y no tiene asignado ningún grupo de consumidores. Si
queremos crear uno desde cero, solo basta con pulsar el botón "Crear" en la pantalla "Roles". Aquí, le
damos un nombre y le asignamos los privilegios y roles de la misma forma que si fuera un usuario. Ahora,
el nuevo rol que creamos podemos asignarselo a cualquier usuario de la BD.
I. Modificar un Rol
a. Conectarse a la base de datos como un administrador de base de datos del sistema.
b. Ejecute la siguiente sentencia con el nombre del role que va a modificar:
alter role nombre_role
[NOT IDENTIFIED] | [IDENTIFIED [BY password_role]
[EXTERNALLY] | [GLOBALLY]
c. Llenar el registro correspondiente
Nombre creador:
Nombre solicitante: Fecha de solicitud:
Lista de roles modificados:
Tipo
Nombre Rol Clave Externally (Si o No) Globally (Si o No)
(Not Identified o Identified)
J. Eliminar un Rol
a. Conectarse a la base de datos como un administrador de base de datos del sistema.
b. Si se desea eliminar por completo un role digite la siguiente instrucción:
drop role role_nombre
c. Si se desea desactivar un role digite la siguiente instrucción:
set role role_nombre
3) Autenticación de Usuarios
A. Autenticación por medio del SO Linux XE
a. Creamos el usuario en el sistema operativo
# useradd lucas
# passwd lucas
Changing password for lucas.
b. Configuramos los parámetros siguientes:
La autenticación por sistema operativo no esta activada por defecto en Oracle XE. Para permitir el
uso de usuarios del sistema operativo, llamados por Oracle OPS$ users, abrimos SQL Plus o algún
cliente SQL y ejecutamos el siguiente comando:
alter system set os_authent_prefix=OPS$ scope=spfile;
Nos modifica el fichero binario:
cat /usr/lib/oracle/xe/app/oracle/product/10.2.0/server/dbs/spfileXE.ora
Este contiene parámetros de configuración de la instancia que se esta ejecutando.
Reiniciamos la DB:
shutdown immediate
Startup
Creamos el usuario en nuestra base de datos:
CREATE USER OPS$lucas IDENTIFIED EXTERNALLY DEFAULT;
Le aplicamos los roles y privilegios como cualquier otro usuario:
GRANT CONNECT, RESOURCE TO lucas;
c. Reiniciamos la base de datos:
/etc/init.d/oracle-xe restart
d. A continuación, tratamos de conectarnos a Oracle como un usuario del sistema operativo
autenticado. Esperamos que falle! Quizás sea necesario configurar algunas variable de entorno
para que SQL * PLUS funcione correctamente.
Vemos la configuración actual de SQL * PLUS
#cat
/usr/lib/oracle/xe/app/oracle/product/10.2.0/server/config/scripts/sqlplus.sh
# su - tim_hall
$ export ORACLE_HOME=”Dato Obtenido del cat enterior”
$ export PATH=”Dato Obtenido del cat enterior”
$ export ORACLE_SID=”Dato Obtenido del cat enterior” , XE
$ sqlplus /
En el ejemplo:
$export:ORACLE_HOME=/usr/lib/oracle/xe/app/oracle/product/10.2.0/server
$export PATH=$PATH:$ORACLE_HOME/bin:$PATH
$export ORACLE_SID=XE
$sqlplus /
Para que se coloquen automáticamente al iniciar sesion un usuario, editar el archivo
/home/lucas/.bashrc y añadir las lineas 1, 2 y 3. y para que esta configuración la tengan usuario
que creemos en el sistema las añadimos al fichero /etc/skel/.bashrc .
B. Autenticación por medio del SO Windows
a. Creamos un usuario en el sistema operativo.
b. Configuramos los parámetros siguientes:
alter system set os_authent_prefix =OPS$ scope=spfile;
Nota: El valor por defecto es “OPS$”
Si el usuario del sistema operativo es miembro de un grupo de dominio entonces también
configuramos el siguiente parámetro:
alter system set remote_os_authent=TRUE scope=spfile;
Nota: El valor por defecto del parámetro es FALSE,
c. Editamos el fichero sqlnet.ora y cambiamos el valor de la siguiente linea a NTS:
Sqlnet.authentication_services=(NTS)
d. Reiniciamos la base de datos:
shutdown immediate
startup
Vemos que los parámetros se hayan modificado correctamente usando :
SQL> show parameter authen
NAME TYPE VALUE
----------------------- ----------- -------------
os_authent_prefix string OPS$
remote_os_authent boolean TRUE
e. Creamos un usuario Oracle para autenticación mediante OS
Primero comprobamos el nombre del usuario del sistema operativo.
SQL> select UPPER(sys_context('userenv','os_user')) from dual;
-------------------------------------------------------------------
NOMBREDELAMAQUINA\LUCAS
Ahora creamos el usuario con el mismo nombre que vimos con la sentencia anterior, incluido el
nombre de la máquina, añadiendo la clausula identified by EXTERNALLY.
create user OPS$NOMBREDELAMAQUINA\LUCAS identified EXTERNALLY;
Nota: El nombre del usuario de Oracle debe tener obligatoriamente el mismo nombre que el usuario y el
nombre de máquina del sistema operativo y al crearlo debe comenzar con “OPS$”.
Damos privilegios como a cualquier otro usuario :
SQL> grant dba to "OPS$MACHINENAME\TOM";
f. Testeamos la conexión a través del usuario del sistema operativo.
Sqlplus /
SQL> show user;
USER is "OPS$NOMBREDELAMAQUINA\LUCAS"
C. Funciones de verificación de contraseñas.
Una de las medidas de seguridad que podemos tomar en para proteger nuestra base de datos Oracle
es asignarle una función de verificación a las contraseñas de nuestros usuario para requerirles una
contraseña lo suficientemente segura; como por ejemplo de una longitud determinada, que contenga
caracteres especiales, números, que no sea igual que el nombre de usuario, etc.
En Oracle 11g podemos definir una función de verificación de contraseñas a los perfiles para ello
primero debemos crear una función de verificación de contraseñas, aunque Oracle trae esta
funcionalidad en el archivo $ORACLE_HOME/rbms/admin/utlpwdmg.sql.
Debemos ejecutar dicho script SQL con SQLplus como sysdba, esto nos creara la función
verify_function_11G y nos alterara el perfil por defecto de la siguiente manera:
ALTER PROFILE DEFAULT LIMIT
PASSWORD_LIFE_TIME 180
PASSWORD_GRACE_TIME 7
PASSWORD_REUSE_TIME UNLIMITED
PASSWORD_REUSE_MAX UNLIMITED
FAILED_LOGIN_ATTEMPTS 10
PASSWORD_LOCK_TIME 1
PASSWORD_VERIFY_FUNCTION verify_function_11G;
La función verify_function_11G comprobará que el password cumpla los siguientes requisitos:
- Comprueba que el password no es igual que el nombre de usuario
- Comprueba que el password tenga una longitud mínima de 4 caracteres.
- Comprueba que el password no sea una palabra simple de las dadas en una lista de palabras.
- Comprueba que el password contenga al menos una letra, un dígito y un signo de puntuación.
- Comprueba que el nuevo password se diferencie del anterior al menos en tres caracteres.
Esta función proporcionada por Oracle ya nos proporciona que nuestros passwords sean lo
suficientemente seguros, aunque también podemos crear nuestra propia función de verificación.
A continuación crearemos una función de verificación personalizada verifica_contra para que los
passwords cumplan las siguientes condiciones:
– Password diferente al nombre de usuario.
– Password de al menos 8 caracteres.
– Password fuera de la lista de passwords simples.
Script SQL:
create or replace
FUNCTION verifica_contra
(nombreusuario varchar2,
passwordnuevo varchar2,
passwordviejo varchar2)
RETURN BOOLEAN IS
BEGIN
/*Comprueba que el password no sea igual que el nombre de usuario
La función NLS_LOWER pasa a minúsculas la variable dada
raise_application_error lanza una excepción personalizado*/
IF NLS_LOWER(passwordnuevo) = NLS_LOWER(nombreusuario)
THEN raise_application_error(-20001, 'Password Igual que el usuario');
END IF;
/*Comprueba que la longitud mínima sea 8 caracteres */
IF length(passwordnuevo) < 8 THEN
raise_application_error(-20002, 'Password menor de 8 caracteres');
END IF;
/*Comprobación para que el password no este en la lista de passwords
simples*/
IF NLS_LOWER(passwordnuevo) IN ('welcome', 'database', 'account', 'user',
'password', 'oracle', 'computer', 'abcd', 'admin', '1234', '123456', 'tiger',
'administrador', 'asdasd', 'abc123abc' ,'contraseña')
THEN raise_application_error(-20003, 'Password demasiado simple');
END IF;
/*Si no ha habido errores devuelve TRUE*/
RETURN(TRUE);
END;
/
/*Creamos un perfil personalizado */
CREATE OR REPLACE PROFILE contra_dura LIMIT
PASSWORD_LIFE_TIME 30
PASSWORD_GRACE_TIME 7
FAILED_LOGIN_ATTEMPTS 4
PASSWORD_LOCK_TIME 1
PASSWORD_VERIFY_FUNCTION verifica_contra;
Con este script ejecutado como SYS crearemos la función y el perfil correspondiente que podremos
asignar a los usuarios de la base de datos.
Las ventajas de limitar los password a ciertas condiciones supondrá para los atacantes un mayor
esfuerzo para poder encontrar el HASH que corresponde con el password mediante ataque de
diccionario, a su vez aplicando FAILED_LOGIN_ATTEMPTS 4 evitamos los ataques de fuerza bruta
sobre nuestros usuarios aunque se les bloquerá la cuenta si se intentan realizar dicho ataque, pero
eso no supondrá un problema ya que nosotros como DBA podremos desbloquear la cuenta.
1.2 Codificación de respaldos. La codificación de los respaldos se basará en los siguientes aspectos:
- Se codificarán los respaldos haciendo uso de un algoritmo de encriptación que brinde la mayor
seguridad a los datos.
- La clave para desencriptar la codificación de los respaldos será guardada bajo estrictas normas de
seguridad para evitar el plagio.
- La codificación seguirá un estándar preestablecido que facilite la búsqueda de respaldos en caso de
que se llegasen a necesitar.
- La empresa designará al personal correspondiente para que lleve a cabo la codificación de los
respaldos y los capacitará para que cumplan sus funciones de manera adecuada.
- Una vez que se hayan codificado los datos se procederá a llenar el correspondiente registro que haya
establecido la empresa.
2) Backups en frio:
El primer paso es parar la BD con el comando shutdown normal. Si la BD se tiene que parar con
inmediate o abort debe rearrancarse con el modo RESTRICT y vuelta a parar en modo normal.
Después se copian los ficheros de datos, los de redo log y los de control, además de los redo log
archivados y aún no copiados.
Una buena idea es automatizar todo este proceso con los scripts correspondientes, de modo que no
nos olvidemos de copiar ningún fichero. Pero ahora nos centraremos en realizar la copia
manualmente para analizar cada procedimiento. Como este tipo de backup es una copia de los
ficheros de la BD, si estos contienen algún tipo de corrupción, la traspasaremos a la copia de
seguridad sin detectarla. Por esto es importante comprobar las copias de seguridad.
Los pasos que hay que seguir para realizar un backup en frió serían:
a. Conocer y listar la ubicación de los datafiles, controlfiles, redo log y redo log archivados:.
Esto se puede hacer ejecutando:
select file_name from dba_data_files;
select name from v$controlfile;
select member from v$logfile;
select name from v$archived_log;
b. Tirar la base de datos mediante shutdown normal o shutdown inmediate.
c. Copiar los archivos datafiles, controlfiles y logfiles a un medio de backup preferido como
cinta, disco duro, otra máquina, etc.
Además, si nos interesa podemos hacer una copia de init.ora.
$>COPY E:\oracle\app\Administrador\product\11.1.0\db_1\database\INITorcl.ORA
E:\backups_oracle\binit.ora
Mediante símbolo de sistema podemos exportar la variable ORACLE_FICHEROS para no tener que
trabajar con rutas tan largas ya que en este caso los ficheros de los que necesitamos hacer copia
estan en la misma ruta.
$>SET ORACLE_FICHEROS=E:\ORACLE\APP\ADMINISTRADOR\ORADATA\ORCL\
DATAFILES:
$>COPY %ORACLE_FICHEROS%\USERS01.DBF E:\backups_oracle\bUSERS01.DBF
$>COPY %ORACLE_FICHEROS%\UNDOTBS01.DBF E:\backups_oracle\bUNDOTBS01.DBF
$>COPY%ORACLE_FICHEROS%\SYSAUX01.DBF E:\backups_oracle\bSYSAUX01.DBF
$>COPY%ORACLE_FICHEROS%\SYSTEM01.DBF E:\backups_oracle\bSYSTEM01.DBF
$>COPY%ORACLE_FICHEROS%\EXAMPLE01.DBF E:\backups_oracle\bEXAMPLE01.DBF
CONTROLFILE:
$>COPY %ORACLE_FICHEROS%\CONTROL01.CTL E:\backups_oracle\bCONTROL01.CTL
$>COPY %ORACLE_FICHEROS%\CONTROL02.CTL E:\backups_oracle\bCONTROL02.CTL
$>COPY %ORACLE_FICHEROS%\CONTROL02.CTL E:\backups_oracle\bCONTROL02.CTL
LOGFILE:
$>COPY %ORACLE_FICHEROS%\REDO01.LOG E:\backups_oracle\bREDO01.LOG
$>COPY %ORACLE_FICHEROS%\REDO02.LOG E:\backups_oracle\bREDO02.LOG
$>COPY %ORACLE_FICHEROS%\REDO03.LOG E:\backups_oracle\bREDO03.LOG
LOG ARCHIVED FILE:
A este tipo de log se le puede especificar varios destinos por lo que no hace falta estar copiandolos
de un sitio a otro, solo definirle el destino deseado al activar el modo archive log.
3) Backups en caliente:
Este método es prácticamente igual que el anterior, a diferencia de que; no necesita parar la base de
datos, tan solo deberemos desactivar los tablespaces de los que se estén haciendo copia en ese
momento, y tener activado el modo Archive Log
a. Respaldo de los datafiles.
Ver que datafiles tenemos en nuestra base de datos, para ellos podemos realizar la siguiente
consulta a la tabla dba_data_files.
select tablespace_name,file_name from dba_data_files order by tablespace_name;
d. Asigne los privilegios necesarios al usuario creado para realizar los respaldos mediante la
siguiente sentencia:
GRANT connect, resource, recovery_catalog_owner
TO [nombre de usuario para respaldar la base de datos];
e. Ejecute a través de la línea de comandos de su sistema operativo la sentencia para iniciar el
administrador de recuperación. La sentencia para Windows es la siguiente:
rman catalog [nombre de usuario para respaldos]
/[contraseña]@[base de datos del tablespace de catalogo]
target internal/oracle@[nombre de la base de datos a respaldar]
f. Digite la sentencia para efectuar el respaldo:
‘run { ‘allocate channel ch1 type disk;’
‘backup format [Ubicacion del respaldo de la base de datos] (database)’;
‘release channel ch1’; ‘}’
g. Verifique que el respaldo de la base de datos fue realizado de forma exitosa.
h. Llenar el registro correspondiente
Fecha de respaldo: ¿Exitoso? Observaciones
Como vemos nos da 2 opciones a elegir. En este documento analizaremos la opción personalizada con
toda la la base de datos. Dedeberemos conectarnos con los credenciales de host para realizar esta tarea.
Como es la primera copia que realizamos deberiamos elegir “Copia de Seguridad Completa”
Para el modo de copia elegiremos si deseamos hacer la copia con la base de datos abierta o cerrada.
En las opciones avanzadas tan solo añadiremos que realize copia tambien de los archive logs.
En este paso elegiremos el destino de la copia. Como no dispongo de dispositivo de cintas paso a
continuar explicando la opción “Disco”. (La ubicación que ha tomado para la opción “Disco” esta asignada
desde RMAN).
Introducimos nombre si lo deseamos y la descripción, y lo planificamos para que se realize una vez y de
forma inmmediata.
Revisamos que todo esté correcto y ejecutamos el trabajo. Si todo ha ido bien debería aparecer esto:
1) Recuperación de la BD
Para recuperar la base de datos a un estado anterior esta tiene que estar puesta en modo archivelog y
tener los archivelog correspondientes a las transacciones que queramos recuperar para poder volver al
punto en el tiempo indicado.
Teniendo en cuenta que nuestra base de datos está levantada los pasos a seguir son los siguientes:
a. Nos conectamos a la base de datos
b. Bajamos la instancia de base de datos SQL > shutdown immediate
c. Levantamos la instancia en modo mount SQL > startup mount
d. Recuperamos la base de datos hasta la fecha indicada (punto en el tiempo al cual queremos
retroceder)
SQL > recover database until time '2009-02-10:22:59:04'
Con esto hemos conseguido recuperar la instancia en el momento indicado en la fecha ('2007-01-
10:22:59:04' à 10 de enero de 2007 a las 22 horas 59 minutos y 4 segundos) Con relación a la fecha
el formato por defecto es el siguiente: 'YYYY-MMDD: HH24:MI:SS'
La sintaxis de este comando:
RECOVER [AUTOMATIC] [FROM 'localizacion'] [BD]
[UNTIL CANCEL]
[UNTIL TIME fecha]
[UNTIL CHANGE entero]
[USING BACKUP CONTROLFILE]
Las opciones entre corchetes son opcionales:
AUTOMATIC hace que la recuperación se haga automáticamente sin preguntar al DBA por el
nombre de los ficheros redo log. También se puede utilizar para este cometido el comando set
autorecovery on/off. Los ficheros redo log deben estar en la localización fijada en
LOG_ARCHIVE_DEST y el formato del nombre de los ficheros debe ser el fijado en
LOG_ARCHIVE_FORMAT.
FROM se utiliza para determinar el lugar donde están los ficheros redo log, si es distinto del fijado
en LOG_ARCHIVE_DEST.
UNTIL sirve para indicar que se desea realizar una recuperación incompleta, lo que implica perder
datos. Solo se dará cuando se han perdido redo log archivados o el fichero de control. Cuando se
ha realizado una recuperación incompleta la BD debe ser abierta con el comando alter database
open resetlogs, lo que produce que los redo log no aplicados no se apliquen nunca y se inicialice la
secuencia de redo log en el fichero de control. Existen tres opciones para parar la recuperación:
- UNTIL CANCEL permite recuperar un redo log cada vez, parando cuando se teclea CANCEL.
- UNTIL TIME permite recuperar hasta un instante dado dentro de un fichero de redo log
- UNTIL CHANGE permite recuperar hasta un SCN dado.
- USING BACKUP CONTROLFILE utiliza una copia de seguridad del fichero de control para
gobernar la recuperación.
2) Recuperación de un Tablespace
La BD debe estar abierta, pero con el tablespace a recuperar offline.
a. Carga de la base de datos
Invocar al Server Manager y conectarse así a la base de datos como sysdba.
CONNECT INTERNAL
Password: ORACLE
Levantar la Base de Datos sobre la cual vamos a trabajar, ejecutando el siguiente comando.
STARTUP MOUNT <nombre de la base de datos> PFILE=<dirección del archivo init<SID>.ora de
nuestra base de datos> EXCLUSIVE RESTRICT
b. Identificación de los datafiles que produjeron el error.
Ejecute la siguiente consulta: SELECT * FROM V$RECOVER_FILE;
3) Recuperación de un Datafile
La BD debe estar abierta o cerrada, dependiendo del fichero a recuperar. Si el fichero a recuperar es de un
tablespace de usuario la BD puede estar abierta, pero con el fichero a recuperar offline. Si el fichero es del
tablespace SYSTEM la BD debe estar cerrada, ya que no puede estar abierta con los ficheros del SYSTEM
offline.
a. Apertura de la base de datos en modo exclusivo.
Ejecute la siguiente instrucción:
STARTUP MOUNT <nombre de la base de datos> PFILE=<dirección del archivo
init<SID>.ora de nuestra base de datos>
b. Identificación del datafile que produce el error.
Ejecute la siguiente consulta: SELECT * FROM V$RECOVER_FILE;
c. Ubicación del datafile en la unidad de disco.
Ejecute la siguiente consulta: SELECT FILE#, NAME FROM V$DATAFILE;
d. Restauración del datafile.
1. Restauración del datafile que produjo el error a partir del backup más reciente.
Ejecute la siguiente instrucción:
HOST COPY <’DIRECCIÓN DONDE SE ENCUENTRA EL BACKUP’>
<’DIRECCIÓN DEL DATAFILE QUE PRODUJO EL ERROR‘>;
Recuperación del datafile a partir del respaldo. Ejecute la siguiente instrucción:
RECOVER DATAFILE <’DIRECCIÓN DEL DATAFILE QUE ACABAMOS DE RESTAURAR‘>;
Recuperación del datafile a partir de los ARCHIVE.
Si la base de datos aún no se ha podido recuperar se nos pedirán los ARCHIVE, si estos se
encuentran en la dirección predefinida ejecutamos la siguiente instrucción: AUTO
Si no se encuentran en dicha dirección ejecutamos las siguientes instrucciones:
ALTER SYSTEM SET LOG_ARCHIVE_DEST = <’UBICACIÓN DE LOS ARCHIVE’>;
Repetimos el paso 5 y damos AUTO.
En ambitos de recuperación podemos seleccionar toda o parte de la base de datos para recuperar.
Para el ejemplo hemos borrado el datafile USERS01.DBF(OFFLINE) despues de realizar el backup y
ahora vamos a intentar recuperarlo. Para ello usaremos la copia que acabamos de realizar.
Iniciamos oracle en modo mount y arrancamos EM.
Al no poder iniciar nos encontramos con esto una vez logueados.
En el ambito de recuperación elegimos Archivos de Datos y en el tipo de operación restaurar hasta hora
actual. Pinchamos en recuperar.
También podemos definir el destino de la restauración. Para el ejemplo nos interesa que se ubiquen en el
mismo directorio.
Podemos revisar los parámetros RMAN para ver y comprender las acciones realizadas por debajo de EM.
Una vez todo revisado procedemos a ejecutar. Esto lo que hará será tomar del backup el fichero y llevarlo
al destino aplicándole los cambios hasta el momento de la perdida permitiendo así el inicio normal de la
BD con tablespace online.
Una vez finalizado podemos pinchar en Abrir Base de Datos y esta se reiniciara y se abría
automáticamente después de ver insertado nuestros credenciales.
Conexión a RMAN
Por defecto la conexión es a catalog, si colocáramos nocatalog RMAN debe obtener la información del
ControlFile de la base de datos target.
2
RMAN: Recovery Manager – Gestor de Recuperación.-
3
Metadata: se los describe como datos que definen otros datos. Se los puede relacionar con el concepto de índice ya que
un metadato se puede utilizar para referenciar un conjunto de datos.
CESARI M. PROYDESA – DBA2 pág. 69
PRACTICO FINAL. AR-UTNME-DBA2.11g-183-LNCISCO
Creación Tablespace
b. Creamos el Propietario del catalogo de recuperación.
Creamos el usuario rman el cual va a ser el propietario del catalogo creado anteriormente.
Creación de Usuario
A continuación asignamos los privilegios CONNECT y RECOVERY_CATALOG_OWNER al usuario.
CONNECT le permite al usuario conectarse a la base de datos mientras que
RECOVERY_CATALOG_OWNER le permite ejecutar consultas y realizar mantenimientos al catalogo
de recuperación.
Otorgando privilegios.
c. Creando el catalogo de recuperación.
La creación de un catalogo de recuperación se realiza mediante el empleo del comando CREATE
CATALOG. Como nombramos anteriormente un catalogo de recuperación o base de datos de catalogo
es un esquema de base de datos que contiene metadatos de RMAN para un conjunto de base de datos
de destino. Empleamos el comando para crear nuestro catalogo:
Si la versión del cliente es anterior a Oracle 11g se deberá ejecutar la siguiente sentencia:
e. Copias de Seguridad.
A continuación veremos cómo hacer un backup en una base de datos 11g.
Nos conectamos a la base de datos contra el catálogo.
PARAMETRO DESCRIPCION
%a Especifica el ID de activación de la base d datos
Especifica el número de copia de seguridad dentro de un conjunto de copias de
%c
seguridad dúplex
%d Especifica el nombre de la base de datos
%s Especifica el número de la copia de seguridad
%t Especifica la marca de tiempo de la copia de seguridad
%p Especifica el número de pieza dentro del conjunto de copias de seguridad
5. Borrar Copia de Seguridad. Para eliminar una copia de seguridad ejecutamos el siguiente
comando:
6. Borrar copias de seguridad obsoletas. Ejecutamos el siguiente comando para eliminar las copias
de seguridad obsoletas.
f. Nos conectamos a RMAN , con la instancia primaria , la base de datos debe estar abierta.
g. Nos conectamos a través de RMAN a la instancia auxiliar.
h. Se deben generar todos los directorios nuevos que vamos a utilizar en nuestra nueva instancia
i. Ahora podemos ejecutar nuestro comando DUPLICATE DATABASE mediante RMAN , de la siguiente
forma.
run {
set newname for datafile '/u01/app/oracle/oradata/orcl/users01.dbf' to
'/u01/app/oracle/oradata/copia1/users01.dbf';
set newname for datafile '/u01/app/oracle/oradata/orcl/undotbs01.dbf' to
'/u01/app/oracle/oradata/copia2/undotbs01.dbf';
set newname for datafile '/u01/app/oracle/oradata/orcl/sysaux01.dbf' to
'/u01/app/oracle/oradata/copia3/sysaux01.dbf';
set newname for datafile '/u01/app/oracle/oradata/orcl/system01.dbf' to
'/u01/app/oracle/oradata/copia4/system01.dbf';
duplicate target database to copia from active database
db_file_name_convert '/u01/app/oracle/oradata/orcl' ,
'/u01/app/oracle/oradata/copia'
spfile parameter_value_convert = '/u01/app/oracle/admin/orcl' ,
'/u01/app/oracle/admin/copia'
set log_file_name_convert =
'/u01/app/oracle/oradata/orcl','/u01/app/oracle/oradata/copia'
set audit_file_dest='/u01/app/oracle/admin/copia/adump'
set log_archive_dest_1=''
set memory_target='183001600'
set dispatchers='(PROTOCOL=TCP) (SERVICE=copia)'
set control_files='/u01/app/oracle/oradata/copia1/control01.ctl','/u01/app/oracle/
oradata/copia2/control02.ctl','/u01/app/oracle/oradata/copia3/control03.ctl'
set db_recovery_file_dest_size = '2294967296';
}
F. Gestión de Transacciones
Las operaciones de acceso a una BD se organizan en transacciones.
Una transacción es una Secuencia de operaciones de acceso a la base de datos que constituyen una
unidad lógica de ejecución
Puede aumentar el tamaño con posterioridad aumentando el valor del campo Total Memory Size o el
parámetro de inicialización MEMORY_TARGET. Sin embargo, no puede definirlo en un valor más alto que
el especificado en el campo Maximum Memory Size o el parámetro MEMORY_MAX_TARGET. Para obtener
más información, consulte Oracle Database Administrator’s Guide (Guía del Administrador de Oracle
Database).
Después de activar AMM, está disponible el asesor de tamaño de memoria para ayudarle a ajustar los
tamaños máximo y objetivo de memoria.
Nota: Oracle le recomienda utilizar la Gestión Automática de Memoria para simplificar las tareas de
gestión de la memoria.
Los parámetros de inicialización que hay que tener en cuenta son los siguientes:
• SHARED_POOL_SIZE
• LARGE_POOL_SIZE
• JAVA_POOL_SIZE
• DB_CACHE_SIZE
• STREAMS_POOL_SIZE
Para ajustar estos parámetros con ASMM activada, debe utilizar el comando ALTER SYSTEM.
Podríamos examinar cada una de estas vistas y anotar sus valores para conseguir información sobre
como afectan los cambios de configuración al rendimiento. Por suerte, Oracle proporciona una serie de
scripts agrupados bajo el nombre de Statspack que se encargarán de hacer la mayor parte del trabajo
sucio en nuestro lugar.
Si queremos ver los datos de la vista solo tenemos que buscar la vista en el esquema del usuario y pulsar
sobre el nombre de la vista. A continuación en "Acciones" seleccionamos "Ver datos" y pulsamos en "Ir".
Nos aparecerá los datos de la vista.
STATSPACK
Statspack es un conjunto de scripts para medir la productividad de la base de datos. Es una herramienta
que contiene Oracle, que recopila información de las vistas más importantes del rendimiento. Este
además analiza dichas estadísticas y genera un reporte con el diagnóstico global de rendimiento. Además
muestra la información recopilada en un formato legible para el administrador de la Base de Datos.
El término 'snapshot' describe un conjunto de estadísticas tomadas en un momento concreto,
almacenadas con un identificador único. No confundir con Oracle Snapshot Replication.
¿Cómo es el reporte que genera?
El reporte que genera cuenta con una estructura definida:
1. En primer lugar nos muestra el diagnóstico en sí, en el cual se encuentran los indicadores de
desempeño (medición de las principales variables), y a continuación, los eventos que inciden en el
rendimiento.
2. En segundo lugar el reporte nos presenta todos los eventos de la base de datos.
3. Luego las sentencias SQL más consumidoras de recursos ordenadas de 4 formas:
-SQL ordenadas por llamadas.
-SQL ordenadas por lecturas.
-SQL ordenadas por ejecuciones.
-SQL ordenadas por llamadas analizadas.
4. A continuación, un listado de todas las estadísticas de la base de datos.
5. Continúa con un listado de las tablespaces y los datafiles ordenados por la suma de lecturas y
escrituras.
6. Las siguientes estadísticas son las de uso de :
-Buffer pool
-PGA
-Undo Segments
-Latches
-Shared pool
7. Por último nos enseña parámetros del init.ora
1) ¿Cómo se instala?
El proceso de instalación crea un usuario, de nombre PERFSTAT propietario de todos los objetos
necesarios por este paquete. Después se le conceden únicamente privilegios de consulta sobre las vistas
dinámicas necesarias para recopilar la información.
Una snapshot tiene como identificador único la combinación de su snap_id (generada automáticamente
en el momento de la creación de dicha snapshot), el dbid, y el número de instancia.
Una vez hemos tomados varias snapshots, es posible generar un informe de rendimiento, proporcionando
las id de las dos snapshots que queremos comparar.
Requisitos: Antes de instalar Statspack, es recomendable la creación de un tablespace de un mínimo de
500M, ya que al instalarlo nos pedirá un tablespace que designar para la utilización de Statspack. Para ser
consistentes, Oracle recomienda llamarlo PERFSTAT. Es importante mantener vigilado el tamaño del
tablespace para que no se llene.
SQL> CREATE TABLESPACE perfstat
DATAFILE 'C:\app\Usuario\oradata\orcl\perfstat.dbf' SIZE 1000M REUSE
EXTENT MANAGEMENT LOCAL UNIFORM SIZE 512K
SEGMENT SPACE MANAGEMENT AUTO PERMANENT ONLINE;
Proceso: Para instalar Statspack, tan solo tendremos que ejecutar en sql plus, con cualquier usuario que
funcione como sysdba, el siguiente script: /rdbms/admin/spcreate.sql
1. Nos conectamos como algún usuario con privilegios de SYSDBA
SQL> @?/rdbms/admin/spcreate.sql
SQL>[password para el usuario perfstat]
2. Nombre del tablespace a utilizar:
SQL>PERFSTAT
3. Que tablespace temporal usara el usuario PERFSTAT
SQL>TEMP
4. Revisar los archivos de log spcusr.lis, spctab.lis, spcpkg.lis en busca de “ORA-”, por si ha habido algún
error. En ese caso, hay que corregir el error, desinstalar Statspack y volver a iniciar el proceso de
instalación.
SQL> @?/rdbms/admin/spdrop.sql
SQL> @?/rdbms/admin/spcreate.sql
Este script creará también el usuario perfstat. En la instalación se nos pedirá que elijamos el
password del usuario perfstat, así como el tablespace por defecto, y el tablespace temporal.
2) ¿Cómo se recopilan las estadísticas?
Para tomar una foto en un momento determinado se debe de ejecutar el siguiente comando como usuario
perfstat en sql plus: exec statspack.snap;
Sin embargo es recomendable automatizar la ejecución anterior, de forma que se fija la ejecución del
statspack cada hora exacta (7:00,8:00,9:00,....).
Para ello se debe ejecutar el siguiente script: /rdbms/admin/spauto.sql
3) ¿Cómo se genera un reporte?
Para generar un reporte hay que ejecutar el siguiente script como usuario perfstat:
/rdbms/admin/spreport.sql
Se pedirá que indiques la instantánea inicial y la final de la que quieres hacer el reporte. También la
ubicación del fichero.
4) Tomar nuestra primera snapshot.
Nos conectamos como perfstat y ejecutamos la siguiente consulta: SQL>exec statspack.snap;
Nos conectamos como perfstat y ejecutamos la siguiente consulta: SQL>exec statspack.snap;
5) Listar todas las snapshots de nuestra base de datos.
select name,snap_id,to_char(snap_time,'DD.MM.YYYY:HH24:MI:SS')
"Date/Time" from stats$snapshot,v$database;
CESARI M. PROYDESA – DBA2 pág. 82
PRACTICO FINAL. AR-UTNME-DBA2.11g-183-LNCISCO
6) Borrar snapshots.
@?/rdbms/admin/sppurge;
7) Ajustar el nivel de detalle de las snapshots.
Nivel 0: Este nivel almacena estadísticas generales, incluyendo segmentos de rollback, caché de filas, SGA,
eventos de sistema, procesos de fondo, eventos de sesión, estadísticas de sistema, estadísticas de tiempos
de espera, bloqueos de objetos e información de cerrojos.
Nivel 5: Este nivel almacena datos sobre consultas SQL que consuman muchos recursos, junto con todos
los datos capturados por niveles inferiores.
Nivel 6: Este nivel almacena el plan de ejecución de consultas SQL que consuman muchos recursos, junto
con todos los datos capturados por niveles inferiores.
Nivel 7: Este nivel recoge estadísticas a nivel de segmento, incluyendo lecturas físicas y lógicas, bloqueos
de filas, tiempos de espera de buffers y todos los datos capturados por niveles inferiores.
Nivel 10: Este nivel almacena estadísticas sobre cerrojos hijos, junto con todos los datos capturados por
niveles inferiores.
Para modificar el nivel de detalle de nuestras snapshots futuras usamos el siguiente comando,
cambiando 6 por el nivel deseado.
exec statspack.snap(i_snap_level => 6, i_modify_parameter => 'true');
9) Creación de informes.
Nota: No deben compararse snapshots procedentes de diferentes ejecuciones de instancias. La instancia
no debe haber sido apagada entre la snapshot inicial y la final.
La razón es que los valores recopilados por Statspack proceden de vistas que residen en memoria, por lo
que apagar la instancia resetaría los valores a 0. Dado que Statspack resta los valores iniciales a los
finales, el resultado sería inválido.
SQL*PLUS>@?/rdbms/admin/spreport.sql
RESUMEN DE SCRIPS
Instalación (como usuario sysdba):
spcreate.sql: Instala Statspack ejecutando a su vez los scripts:
spcusr.sql: Crea el usuario PERFSTAT
spctab.sql: Crea las tablas
spcpkg.sql: Crea el paquete statspack
spdrop.sql: Desinstala STATSPACK ejecutando a su vez los scripts:
spdtab.sql: Borra las tablas
spdusr.sql: Borra el usuario PERFSTAT
Informes (como usuario perfstat):
spreport.sql: Genera un informe general del rendimiento de la instancia
sprepins.sql: Genera un informe para la BD y la instancia indicados
sprepsql.sql: Genera un informe para la sentencia SQL que se indique.
spauto.sql: Permite automatizar la recolección de estadísticas.
Mantenimiento (como usuario perfstat):
sppurge.sql -> Permite borrar un rango de snapshots
sptrunc.sql -> Vacía todas las tablas, borrando todos los snapshots
spuexp.par -> Es un fichero de parámetros para exportar el usuario perfstat
- BUFFER NOWAIT: % de veces que se acceden a los buffers de datos sin tiempos de espera (Buffer
Nowait).
- BUFFER HIT: % de veces que los bloques de buffer se encontraban en la memoria, sin tener que
ejecutar una operación de lectura.
- LIBRARY HIT: % de ocasiones en el que las sentencias sql se encontraban en la shared pool.
- EXECUTE TO PARSE: % de utilización de sentencias sql ya analizadas.
- PARSE CPU TO PARSE ELAPS: Proporción de CPU dedicado a analizar las sentencias sql.
- REDO NOWAIT: % de tamaño suficiente en los buffers de redo.
- SOFT PARSE: % de sesiones en las que se utilizó sentencias sql que ya estaban en la shared pool.
- LATCH HIT: Frecuencias de uso de latches sin esperas.
- NON-PARSE CPU: % de cantidad de recursos de la CPU destinados a la ejecución de sql.
Las estadísticas de la Sahred Pool, nos indican la memoria usada, y porcentaje de sentencias sql
ejecutadas más de una vez.
2. El informe de Statspack trae la información de los 5 eventos que tienen un mayor peligro de
constituir un posible cuello de botella en la base de datos, ya que son los que tienen un mayor número
de esperas.
4. En la siguiente estadística también podremos ver en que gasta el tiempo la base de datos.
En este caso vemos que lo que más se hace en la base de datos (en lo que más tiempo emplea) es el
la ejecución de las sentencias sql) .
5. Podemos ver los eventos de procesos, tanto los que están en primer plano, como los que están en
segundo plano, para los que ha habido más esperas.
6. Statspack tambíén nos da información de como ha actuado y operado la instancia durante el periodo
que va entre fotografía y fotografía
7. Estudiamos las sentencias sql en el informe. Podremos ver las sentencias que consumen más cpu.
8. Sentencias que tienen un mayor tiempo de ejecución
9. Sentencias con un mayor número de lecturas lógicas.
10. Sentencias con un mayor número de lecturas de disco físicas
11. Sentencias con un mayor número de ejecuciones.
12. Sentencias que han sido más veces analizadas.
13. Otro de los apartados importante son los de las estadísticas de entrada/salida de las tablespaces y de
los ficheros de datos. Este punto también incluye las estadísticas del buffer pool
14. También reporta información sobre la memoria de los procesos.
15. Por supuesto también nos da información sobre los latches. Recordamos que habrá contención de
latches cuando haya fallos con esperas (Slps/Miss).
16. Tambíén nos ofrece detalles de como está funcionando la caché de datos
17. Con la siguiente tabla, podremos ver si es aconsejable ampliar el tamaño de la Shared Pool, ya que nos
ofrece algunas estadísticas por cada tamaño de la Shared Pool.
En la diapositiva, se aprecia que ha habido un aumento reciente en las esperas Concurrency y Other.
Durante cada uno de estos picos, también ha habido un ligero aumento en el uso de E/S del sistema y de
CPU. Haga clic en estas categorías para obtener más información sobre las esperas. Los datos de E/S se
dividen en tipos de E/S (por ejemplo, lectura de archivo log, escritura de archivo de control, etc.).
El ejemplo de la diapositiva muestra los resultados del aumento de detalle de la categoría Concurrency
desde el gráfico Active Session de la diapositiva anterior
En la página Top Consumers, haga clic en el separador Top Sessions para visualizar las estadísticas
críticas de las sesiones que utilizan más recursos.
CPU
Memoria PGA
Lecturas lógicas
Lecturas físicas
Recuento de análisis pesados
Recuento de ordenación
Haga clic en el nombre de una columna para ordenar los resultados por el valor de dicha columna.
En la tabla de esta página se enumeran las sesiones ordenadas según las lecturas lógicas. Aquí se muestra
que el usuario INVENTORY de la sesión 36 produce el mayor número de lecturas lógicas en este momento
concreto
4) Supervisión del Rendimiento: Top Services
En sistemas de varios niveles en los que hay un servidor de aplicaciones que agrupa en pools las
conexiones a la base de datos, puede que la visualización de sesiones no proporcione la información
necesaria para analizar el rendimiento.
La agrupación de las sesiones en nombres de servicio permite supervisar el rendimiento de forma más
precisa.
El informe presenta lo mas utilizado, o lo que mas consume en cada una de las partes de la base de datos
(eventos mas frecuentes, secuencias SQL ejecutadas con mayor frecuencia,etc). Es una herramienta
fundamental para intentar detectar posibles casos de cuellos de botella.
A nivel de sistema, de sesión y de servicio, se calculan tanto los eventos de espera como las estadísticas
acumulativas. En la diapositiva, la fila superior de las vistas muestra las estadísticas acumulativas. La fila
inferior muestra las vistas de eventos de espera.
Cuando se analiza un problema de rendimiento en cualquiera de estos ámbitos, normalmente se observa
el cambio producido en las estadísticas (valor delta) durante el período de tiempo que le interesa.
Todos los eventos de espera posibles están catalogados en la vista V$EVENT_NAME. Todas las
estadísticas están catalogadas en la vista V$STATNAME. Dispone de alrededor de 480 estadísticas en
Oracle Database.
Las vistas dinámicas más importantes que nos dan información sobre el rendimiento de la instancia son:
V$SYSTEM_EVENT. Recoge información sobre las esperas totales por evento y el tiempo de estas
esperas.
V$SYSSTAT. Recoge las estadísticas básicas acumuladas de la instancia, como el uso total de commits
o de rollbacks, o los bloques totales de redo leídos.
V$SGAINFO. Recoge información sobre el tamaño (en bytes) de todos los elementos componentes de
la SGA (Shared pool, Large pool, etc). Además nos dice cuál de estos elementos son redimensionables.
Un ejemplo de redimensionable sería el Shared Pool y un ejemplo de no redimensionable sería el
tamaño máximo de la SGA.
V$SGASTAT. Recoge la información detallada de los elementos que componen la SGA. Si V$SGAINFO
nos mostraba el tamaño total de cada uno de estos componentes, V$SGASTAT nos muestra el tamaño
de todos los elementos que componen cada uno de los componentes.
V$BUFFER_POOL_STATISTICS. Recoge información sobre las estadísticas de la caché de datos, como
el número de buffers escritos o el número de buffers escaneados.
V$LIBRARYCACHE. Proporciona información sobre el rendimiento de la libary cache (caché de
secuencias SQL). Por ejemplo nos da información de cuantas veces se solicitaron las sentencias sql y
cuantas fueron rechazadas.
V$FILESTAT. Contiene información acerca de las estadísticas de los ficheros de datos escritos y leídos,
como el número de veces que es requerido el DBWR en ese fichero.
V$LATCH. Proporciona información sobre los latches. Los latches son un mecanismo que protege la
estructura de datos de la SGA contra los accesos simultáneos. Limitan la cantidad de tiempo y espacio
en los que un proceso puede mantener un recurso en un instante dado.
V$WAITSTAT. Muestra estadísticas relacionadas con la contención de bloques de la base de datos .
V$SQL. Recoge información sobre las sentencias SQL en ejecución, incluyendo el consumo de
memoria.
V$PROCESS. Recoge información acerca de los procesos que se encuentran activos en ese momento,
como el usuario que lo está usando, con el programa que se está utilizando, en que archivo, o el
tamaño de la memoria de pga usado.
V$BGPROCESS. Recoge información sobre los procesos en segundo plano, como la descripción de
estos y los errores encontrados en ellos
Por defecto, la métrica Owner’s Invalid Object Count se comprueba cada 24 horas. Si el número de objetos
de un propietario individual supera dos, se emite una alerta.
Si encuentra objetos PL/SQL con un estado INVALID, la primera pregunta que debe responder es si “este
objeto ha tenido alguna vez el estado VALID”. A menudo, un desarrollador de aplicaciones no realiza la
limpieza del código que no funciona. Si el objeto PL/SQL no es válido debido a un error de código, poco se
puede hacer hasta que se resuelve el error. Si el procedimiento fue válido en algún momento del pasado y
se ha convertido en no válido recientemente, tiene dos opciones para resolver el problema:
• No haga nada. La mayor parte de los objetos PL/SQL se recompilará automáticamente si es necesario
cuando se les llame. Los usuarios experimentarán un breve retraso mientras se recompilan los
objetos. (En la mayor parte de los casos, apenas se advierte este retraso.)
• Recompile el objeto no válido manualmente.
Los objetos PL/SQL no válidos se pueden recompilar manualmente con Enterprise Manager o a través de
comandos SQL: ALTER PROCEDURE HR.add_job_history COMPILE;
La recompilación manual de paquetes PL/SQL necesita dos pasos:
ALTER PACKAGE HR.maintainemp COMPILE;
ALTER PACKAGE HR.maintainemp COMPILE BODY;
Índices no utilizables: para encontrar los índices no válidos, consulte la vista del diccionario de datos
DBA_INDEXES:
SELECT index_name, table_name FROM DBA_INDEXES
WHERE status = 'UNUSABLE';
En el caso de los índices particionados, el estado se mantiene en la vista DBA_IND_PARTITIONS.
Los índices no utilizables se convierten en válidos reconstruyéndolos para volver a calcular los punteros.
La reconstrucción de un índice no utilizable vuelve a crear el índice en una nueva ubicación y después
borra el índice no utilizable. Este proceso se puede llevar a cabo con Enterprise Manager o a través de
comandos SQL:
ALTER INDEX HR.emp_empid_pk REBUILD;
ALTER INDEX HR.emp_empid_pk REBUILD ONLINE;
ALTER INDEX HR.email REBUILD TABLESPACE USERS;
Si se omite la cláusula TABLESPACE, el índice se vuelve a crear en el mismo tablespace en el que ya
existe. La cláusula REBUILD ONLINE permite a los usuarios seguir actualizando la tabla de índices
mientras tiene lugar la reconstrucción. (Sin la palabra clave ONLINE, los usuarios deben esperar a que
termine la reconstrucción antes de llevar a cabo DML en la tabla afectada. Si el índice no es utilizable, no
se utiliza durante la reconstrucción aunque se utilice la palabra clave ONLINE.)
Enterprise Manager utiliza la acción de reorganización para reparar un índice UNUSABLE.
Nota: la reconstrucción de un índice necesita espacio libre disponible para el proceso. Compruebe que
haya espacio suficiente antes de intentar la reconstrucción. Enterprise Manager comprueba
automáticamente los requisitos de espacio.
En la página SQL Details, aparecen los detalles de la última sentencia SQL ejecutada en esa sesión, que es
la que está en duda. Haga clic en el separador Plan para ver el plan de ejecución de la consulta. Si aparece
una opción para ver el gráfico o la tabla, seleccione el botón de radio Table. La opción Graph no está
soportada en Firefox.