Instalar asmlib en oel9

Version de SO: Oracle Linux Server 9.6

Descargar las librerias de oracleasmlib y oracleasm-support

oracleasmlib-3.1.1-1.el9.x86_64.rpm

oracleasm-support-3.1.0-10.el9.x86_64.rpm

Configurar e inicializar el oracleasm

Despues de crear los discos el el fdisk y crear los discos asm con el comando

oracleasm createdisk DISCO1 /dev/sdb1

oracleasm createdisk DISCO1 /dev/sdd1

Validamos los discos creados:

oracleasm listdisks

Roles en base de datos

Una buena práctica en Oracle es crear roles para los usuarios y de esta manera facilitar la administracion de usuarios y permisos.

En mi caso yo inicialmente creo 3 roles :

Administracion de datos: Este aplica para las personas que brindan soporte, que requieren modificar datos mas no estructuras de base de datos

CREATE ROLE ROLE_ADMDATOS;
— ROLES
GRANT «RESOURCE» TO ROLE_ADMDATOS ;
GRANT «CONNECT» TO ROLE_ADMDATOS ;
— SYSTEM PRIVILEGES
GRANT UPDATE ANY TABLE TO ROLE_ADMDATOS ;
GRANT INSERT ANY TABLE TO ROLE_ADMDATOS ;
GRANT SELECT ANY SEQUENCE TO ROLE_ADMDATOS ;
GRANT SELECT ANY TABLE TO ROLE_ADMDATOS ;
GRANT EXECUTE ANY PROCEDURE TO ROLE_ADMDATOS ;
GRANT UNDER ANY TABLE TO ROLE_ADMDATOS ;
GRANT UNDER ANY VIEW TO ROLE_ADMDATOS ;
GRANT DELETE ANY TABLE TO ROLE_ADMDATOS ;

Desarrollo de Aplicaciones: Este se le asigna a los desarrolladores que requieren la creacion de objetos y modificacion de los mismos, tienen permisos de consulta sobre diferentes vistas del sistema que les permiten ver la estructura de los objtetos de la base de datos.

CREATE ROLE ROLE_DLLO NOT IDENTIFIED
GRANT SELECT ON SYS.ALL_ALL_TABLES TO ROLE_DLLO;
GRANT SELECT ON SYS.ALL_ARGUMENTS TO ROLE_DLLO;
GRANT SELECT ON SYS.ALL_CATALOG TO ROLE_DLLO;
GRANT SELECT ON SYS.ALL_COL_COMMENTS TO ROLE_DLLO;
GRANT SELECT ON SYS.ALL_CONS_COLUMNS TO ROLE_DLLO;
GRANT SELECT ON SYS.ALL_CONSTRAINTS TO ROLE_DLLO;
GRANT SELECT ON SYS.ALL_ENCRYPTED_COLUMNS TO ROLE_DLLO;
GRANT SELECT ON SYS.ALL_EXTERNAL_TABLES TO ROLE_DLLO;
GRANT SELECT ON SYS.ALL_OBJECTS TO ROLE_DLLO;
GRANT SELECT ON SYS.ALL_OBJECT_TABLES TO ROLE_DLLO;
GRANT SELECT ON SYS.ALL_QUEUE_TABLES TO ROLE_DLLO;
GRANT SELECT ON SYS.ALL_SNAPSHOTS TO ROLE_DLLO;
GRANT SELECT ON SYS.ALL_SYNONYMS TO ROLE_DLLO;
GRANT SELECT ON SYS.ALL_TAB_COLUMNS TO ROLE_DLLO;
GRANT SELECT ON SYS.ALL_TAB_COMMENTS TO ROLE_DLLO;
GRANT SELECT ON SYS.ALL_TABLES TO ROLE_DLLO;
GRANT SELECT ON SYS.ALL_TAB_PRIVS TO ROLE_DLLO;
GRANT SELECT ON SYS.ALL_TRIGGERS TO ROLE_DLLO;
GRANT SELECT ON SYS.ALL_USERS TO ROLE_DLLO;
GRANT SELECT ON SYS.SESSION_PRIVS TO ROLE_DLLO;
GRANT SELECT ON SYS.SESSION_ROLES TO ROLE_DLLO;
GRANT SELECT ON SYS.USER_OBJECTS TO ROLE_DLLO;
GRANT SELECT ON SYS.USER_ROLE_PRIVS TO ROLE_DLLO;
GRANT SELECT ON SYS.V_$OPTION TO ROLE_DLLO;
GRANT SELECT ON SYS.V_$PARAMETER TO ROLE_DLLO;
GRANT SELECT ON SYS.V_$SESSION TO ROLE_DLLO;
GRANT SELECT ANY DICTIONARY TO ROLE_DLLO;
GRANT CREATE SESSION TO ROLE_DLLO;
GRANT DROP ANY TABLE TO ROLE_DLLO;
GRANT ALTER ANY TABLE TO ROLE_DLLO;
GRANT CREATE ANY TABLE TO ROLE_DLLO;
GRANT DELETE ANY TABLE TO ROLE_DLLO;
GRANT INSERT ANY TABLE TO ROLE_DLLO;
GRANT SELECT ANY TABLE TO ROLE_DLLO;
GRANT UPDATE ANY TABLE TO ROLE_DLLO;
GRANT CREATE ANY PROCEDURE to ROLE_DLLO;
GRANT UNDER ANY VIEW TO ROLE_DLLO;
GRANT EXECUTE ANY PROCEDURE TO ROLE_DLLO;
GRANT EXECUTE ON UTL_FILE TO ROLE_DLLO;
GRANT RESOURCE TO ROLE_DLLO;
GRANT CONNECT TO ROLE_DLLO;
GRANT ROLE_DLLO TO SYS WITH ADMIN OPTION;

El último es el rol de consulta: Este  se le asigna a quienes solo necesitan realizar consultas en la base, y ver la estructura de los objetos, adicional a este rol, a este tipo de usuarios se les dan permisos de consulta sobre tablas o vistas especificas segun la necesidad, para evitar la modificacion o consulta de informacion sensible en la empresa

create role ROLE_CONSULTA;
grant select on ALL_COL_COMMENTS to ROLE_CONSULTA;
grant select on ALL_CONS_COLUMNS to ROLE_CONSULTA;
grant select on ALL_CONSTRAINTS to ROLE_CONSULTA;
grant select on ALL_INDEXES to ROLE_CONSULTA;
grant select on ALL_TAB_COLS to ROLE_CONSULTA;
grant select on ALL_TAB_COLUMNS to ROLE_CONSULTA;
grant select on ALL_TAB_COMMENTS to ROLE_CONSULTA;
grant select on ALL_TABLES to ROLE_CONSULTA;
grant select on ALL_TRIGGERS to ROLE_CONSULTA;
grant select on ALL_VIEWS to ROLE_CONSULTA;
grant select on DUAL to ROLE_CONSULTA;
grant select on USER_INDEXES to ROLE_CONSULTA;
grant select on USER_OBJECTS to ROLE_CONSULTA;
grant select on USER_ROLE_PRIVS to ROLE_CONSULTA;

monitoreo de tablespaces oracle

con este procedimiento se configura desde linux que nos envie un correo informando cuando un tablespace ha superado el 80% de uso, de esta manera tomar las medidas correspondientes.

En la base de datos creee un procedure que muestra el nombre del tablespace y el porcentaje usado y si el porcentaje es mayor a 80% saca por pantalla el mensaje.

PROCEDURE MONITOREA_TABLSP AS

CURSOR c1 is
select SYSDATE AS FECHA, u.tblspc as TABLSPC,(a.fbytes/1024/1024) as ASIGNADO_MB,(u.ebytes/1024/1024) as USADO_MB,ROUND((u.ebytes/a.fbytes)*100,2) as PORC_USADO
from (select tablespace_name tblspc, sum(bytes) ebytes
from sys.dba_extents
group by tablespace_name) u,
(select tablespace_name tblspc, sum(bytes) fbytes
from sys.dba_data_files
group by tablespace_name) a
where u.tblspc = a.tblspc;
mensaje varchar2(200);
BEGIN

for reg in c1 loop
if reg.porc_usado >= 80 then
mensaje := mensaje || ‘  Tablespace: ‘|| reg.TABLSPC || ‘ Usado:’|| reg.porc_usado||’%’;
end if;
end loop;
dbms_output.put_line(mensaje);

END MONITOREA_TABLSP;

Luego se crea la shell en linux que ejecuta el procedimiento  periódicamente, y si el procedure genera información, envia un correo con esta información.

#!/bin/bash
. /home/oracle/var_entorno
Para=pachita8002@yahoo.com
Fecha=$(date +»%Y%m%d»)
Asunto=Monitoreo_$Fecha
valor=$(sqlplus -s usuario/*******@BD @/home/oracle/scripts/espacio_tblsp.sql)
if [ -z «$valor» ]; then
echo «Reporte vacio: «$valor
else
echo $valor| mailx -s $Asunto $Para
fi

Esta shell se programó para ejecutarse cada 15 minutos, y si hay algun tablespace que supere el 80% de uso, se envia un correo.

Espero sea de utilidad