Proyecto fin de curso BBDD ORACLE - CICE · Web viewSe ha preparado 4 discos SCSI en la máquina...
Transcript of Proyecto fin de curso BBDD ORACLE - CICE · Web viewSe ha preparado 4 discos SCSI en la máquina...
Proyecto fin de curso BBDD ORACLE
Curso 2016-2017
Francisco Cabrero Torres[Nombre de la compañía] | [Dirección de la compañía]
Proyecto BBDD 2016- 2017Autor: Francisco Cabrero Torres
Indice1. Objetivo................................................................................................................................3
2. Instalación de CENTOS 7.......................................................................................................3
a) Creación de usuarios........................................................................................................3
b) Desactivar hugepages.......................................................................................................3
c) Definición de variables de entorno Oracle:......................................................................5
3. Configuración Grid Infraestructure......................................................................................5
a) Añadir discos....................................................................................................................6
b) Instalación discos.............................................................................................................6
4. Instalación de Oracle............................................................................................................7
a) Definición de Diskgroup...................................................................................................8
b) Creación de BBDD............................................................................................................8
c) Comprobación parámetros BBDD...................................................................................10
5. Creación de esquema.........................................................................................................13
6. Creación de usuarios..........................................................................................................14
a) Creación de roles............................................................................................................14
7. Backup................................................................................................................................14
a) Completo físico...............................................................................................................15
b) Copias incrementales.....................................................................................................15
c) Backup archives..............................................................................................................16
d) Export dump...................................................................................................................16
8. Paso a histórico..................................................................................................................17
9. Estimación tamaño de los tablespaces..............................................................................19
10. Auditoria.........................................................................................................................20
11. Notas finales...................................................................................................................21
Proyecto BBDD 2016- 2017Autor: Francisco Cabrero Torres
1. ObjetivoEste trabajo va a constar de generar una BBDD en ASM, con las especificaciones indicadas en el documento Proyecto fin de curso Curso oficial en administración de BBDD Oracle.
Para el desarrollo del proyecto se va a utilizar el software de virtualización Oracle Virtualbox 5.1.8 con las siguientes características:
1 disco principal de 40 GB 4 discos auxiliares SCSI 8 GB de RAM Sistema operativo Linux CentOS 7
La decisión de elegir Linux, es para implantar un proyecto desde 0 con el sistema más común que he observado en mi trayectoria profesional, además que en la práctica es mucho más seguro que otros sistemas.
2. Instalación de CENTOS 7No se va a realizar una guía, sobre como instalar el sistema operativo si no se va a centrar en detallar los pasos posteriores que hay que realizar en el Sistema operativo antes de realizar la instalación del software de Oracle.
a) Creación de usuariosAntes de generar los usuarios, se deben generar a nivel de sistema operativo los grupos, uno para cada rol para tenerlos separados.
Se han creado los siguientes grupos:
DBA: /usr/sbin/groupadd -g 54322 dba
OSBACKUPDBA: /usr/sbin/groupadd -g 54324 backupdba
OSDGDBA: /usr/sbin/groupadd -g 54325 dgdba
OSASMDBA: /usr/sbin/groupadd -g 54327 asmdba
OSASMADMIN: /usr/sbin/groupadd -g 54329 asmadmin
ORACLE INVENTORY GROUP: groupadd oinstall
Se va a crear un usuario para cada rol
Oracle para las BBDD
useradd -u 54321 -g oinstall -G dba,backupdba,dgdba oracle
Proyecto BBDD 2016- 2017Autor: Francisco Cabrero Torres
b) Desactivar hugepagesOracle recomienda desactivar esta función en los servidores, antes de realizar la instalación. (https://docs.oracle.com/database/122/CWLIN/disabling-transparent-hugepages.htm#CWLIN-GUID-02E9147D-D565-4AF8-B12A-8E6E9F74BEEA) Para realizarlo en la distribución de CENTOS, se comprueba que efectivamente lo tenemos habilitado
Para deshabilitarlo:
c) Definición de variables de entorno Oracle:Antes de lanzar la instalación se deberá crear las variables con las rutas recomendadas, para ello se definen las siguientes
[root@srvoracle12 ~]# cat/sys/kernel/mm/transparent_hugepage/enabled
[always] madvise never
[root@srvoracle12 ~]# Grubby --default-kernel
/boot/vmlinuz-3.10.0-327.el7.x86_64
[root@srvoracle12 ~]# grubby --args="transparent_hugepage=never" --update-kernel /boot/vmlinuz-3.10.0-327.el7.x86_64
Reinicio
[root@srvoracle12 ~]# cat /sys/kernel/mm/transparent_hugepage/enabled
always madvise [never]
TMP=/tmp; export TMP
TEPDIR=$TMP; export TEPDIR
ORACLE_BASE=/softOracle/app/oracle; export ORACLE_BASE
ORACLE_HOME=$ORACLE_BASE/product/12.1.0/dbhome_1; export ORACLE_HOME
GRID_HOME=/softOracle/app/oragrid/product/12.1.0/grid; export GRID_HOME
PATH=/usr/sbin:$PATH; export PATH
PATH=$ORACLE_HOME/bin:$PATH; export PATH
LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib; export LD_LIBRARY_PATH
CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib;
export CLASSPATH
Proyecto BBDD 2016- 2017Autor: Francisco Cabrero Torres
3. Configuración Grid InfraestructureAntes de ejecutar la instalación, se debe preparar los dispositivos de almacenamiento para que puedan ser utilizados por ASM. Para la versión de Centos existen unas librerías (asmlib) que permiten marcar el hardware para poder ser utilizado por ASM.
Estas librerías se encuentran disponibles en la siguiente dirección:
http://www.oracle.com/technetwork/server-storage/linux/asmlib/rhel7-2773795.html
Previamente se tiene que instalar los prerrequisitos, con la utilidad
yum install kmod-oracleasm
yum install oracleasm-support-2.1.8-3.el7.x86_64.rpm
yum install oracleasmlib-2.0.12-1.el7.x86_64.rpm
Una vez que se haya instalado, se debe arranca la librería asmlib, con los siguientes valores:
a) Añadir discos Se ha preparado 4 discos SCSI en la máquina virtual para poder dar de alta DG en ASM. Como fines didácticos se va a utilizar Redundancia Externa, pero en la vida real el sistema operativo solo verá una unidad lógica pero la redundancia lo realizará las cabinas en sistemas RAID.
[root@srvoracle12 ~]# oracleasm configure -i
Configuring the Oracle ASM library driver.
This will configure the on-boot properties of the Oracle ASM library
driver. The following questions will determine whether the driver is
loaded on boot and what permissions it will have. The current values
will be shown in brackets ('[]'). Hitting <ENTER> without typing an
answer will keep that current value. Ctrl-C will abort.
Default user to own the driver interface []: oragrid
Default group to own the driver interface []: asmadmin
Scan for Oracle ASM disks on boot (y/n) [y]: y
Writing Oracle ASM library driver configuration: done
Proyecto BBDD 2016- 2017Autor: Francisco Cabrero Torres
Se crearían los siguientes discos con los siguientes comandos:
oracleasm createdisk DATA1 /dev/sda1
oracleasm createdisk DATA2 /dev/sdb1
oracleasm createdisk DATA3 /dev/sdc1
oracleasm createdisk DATA4 /dev/sdd1
Proyecto BBDD 2016- 2017Autor: Francisco Cabrero Torres
b) Instalación discosCon todos los preparativos, ya esta preparado el servidor para realizar la instalación, a continuación se indican las opciones que se han seleccionado para llevar a cabo la instalación.
El disco principal donde se almacenaran los datos serán en +DG_DATA que estará constituido solo por el disco DATA1
Proyecto BBDD 2016- 2017Autor: Francisco Cabrero Torres
4. Instalación de OraclePara la instalación de Oracle, se elige solo instalar software de Base de datos, la creación de la BBDD se indicará a continuación con el asistente
a) Definición de DiskgroupSe debe crear los diskgroups para almacenar cada componente de la base de datos. Para realizarlo se ha utilizado la utilidad asmca y se han creado 4 grupos:
DATA_ASM Donde se encuentran los datos de la BBDD DG_DATA_HIST Donde se guardaran los datos de la BBDD histórico DG_FRA Zona de la Fast Recovery Area. DG_REDO Localización donde se guardarán los redos
Proyecto BBDD 2016- 2017Autor: Francisco Cabrero Torres
b) Creación de BBDDPara la creación de BBDD se usará el asistente de creación de Base de datos
Se elige personalizarlo ya que las otras plantillas no cumplen todos los requisitos que indican en la practica.
Para evitar excesivo consumo de memoria no se monta el Enterprise Manager
Proyecto BBDD 2016- 2017Autor: Francisco Cabrero Torres
Aquí se especifica los 4 gb de la FRA que es un requisito de la practica
Se asigna los 700 MB y se utiliza gestión automática de memoria que es otro punto requisito de la practica
En esta pantalla se define el tamaño de bloque en 16K
Proyecto BBDD 2016- 2017Autor: Francisco Cabrero Torres
Los scripts de creación se encuentran en crear TB y tablas, créate_DB_proyecto
c) Comprobación parámetros BBDDAntes de avanzar con la creación de la BBDD, se debe comprobar que los parámetros se han guardado correctamente. Analicemos una a una las características que debe tener:
Tamaño de bloque 16k
4 grupos de redo con 2 miembros de cada uno. Este paso no se realiza en la creación de BBDD para habilitarlo
SQL> show parameter db_block_size
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_block_size integer 16384
ALTER DATABASE
ADD LOGFILE GROUP 4 ('+DATA_ASM/PROYECTO/ONLINELOG/', '+DG_FRA/PROYECTO/ONLINELOG/') SIZE 50M;
Proyecto BBDD 2016- 2017Autor: Francisco Cabrero Torres
4 ficheros de control
Esta parte se ha realizado generando un pfile desde el spfile, parando la BBDD, copiando los controlfile a otra ruta e indicando en el pfile la ubicación de los controlfile copiados adicionales a los que ya existen.
Se genera el spfile del pfile y se arranca la BBDD.
SQL> select group#,bytes from v$log;
GROUP# BYTES
---------- ----------
1 52428800
2 52428800
3 52428800
4 52428800
1* select group#,member from v$logfile
GROUP# MEMBER
---------- ------------------------------------------------------------
1 +DATA_ASM/PROYECTO/ONLINELOG/group_1.258.931188957
1 +DG_FRA/PROYECTO/ONLINELOG/group_1.268.931188957
2 +DATA_ASM/PROYECTO/ONLINELOG/group_2.264.931188959
2 +DG_FRA/PROYECTO/ONLINELOG/group_2.261.931188959
3 +DATA_ASM/PROYECTO/ONLINELOG/group_3.257.931188959
3 +DG_FRA/PROYECTO/ONLINELOG/group_3.260.931188959
4 +DATA_ASM/PROYECTO/ONLINELOG/group_4.262.931190789
4 +DG_FRA/PROYECTO/ONLINELOG/group_4.267.931190789
Proyecto BBDD 2016- 2017Autor: Francisco Cabrero Torres
Tamaño de SGA 4g
Tamaño de la SGA 700M
SQL> show parameter sga_max_size
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
sga_max_size big integer 700M
SQL> select name, value from v$parameter
2 where name like 'contro%'
3 ;
NAME VALUE
-------------------- ----------------------------------------------------------------------------------------------------
control_files +DATA_ASM/PROYECTO/CONTROLFILE/current.266.931188957, +DG_FRA/PROYECTO/CONTROLFILE/current.269.931188957, +DATA_ASM/PROYECTO/CONTROLFILE/current, +DG_FRA/PROYECTO/CONTROLFILE/currentbkp_fra
1* SELECT * FROM V$RECOVERY_FILE_DEST
NAME SPACE_LIMIT SPACE_USED SPACE_RECLAIMABLE NUMBER_OF_FILES CON_ID
-------------------------------------------------- ----------- ---------- ----------------- --------------- ----------
+DG_FRA 4294967296 942669824 0 7 0
Proyecto BBDD 2016- 2017Autor: Francisco Cabrero Torres
Gestión automática de la memoria
5. Creación de esquemaEn el fichero crear esquema.txt se encuentran los comandos SQL para la creación del esquema indicado en la documentación del proyecto.
Se han creado dos tablespaces, uno para datos y otro para los índices. El esquema esta creado totalmente en el tablespace de datos.
El usuario propietario del esquema será el usuario OE, de el colgará toda la estructura del proyecto
6. Creación de usuariosEn el proyecto indica la creación de varios usuarios englobados en distintos grupos con permisos diferentes. Para ello se utilizaran los roles y una vez creados, se asignaran los
Segun la docu de ORACLE, está activa si los siguientes valores estan así
ALTER SYSTEM SET MEMORY_TARGET = nM;
ALTER SYSTEM SET SGA_TARGET = 0;
ALTER SYSTEM SET PGA_AGGREGATE_TARGET = 0;
SQL> show parameter memory_target
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
memory_target big integer 700M
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
sga_target big integer 0
SQL> show parameter pga_aggregate_target
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
pga_aggregate_target big integer 0
Proyecto BBDD 2016- 2017Autor: Francisco Cabrero Torres
usuarios al rol correspondiente.
a) Creación de rolesSe crearan dos roles uno que permita el borrado y otro que no.
Las asignaciones de permisos se detallan en el fichero grants.txt, para crear un usuario y asignárselo al rol se deberá asignar de la siguiente manera
Grant sin_delete to user1
Se ha elegido dar permisos individualmente por cada tabla y por cada acción para evitar que se cree una tabla en el esquema y que por defecto estos usuarios no puedan acceder a ella. Si se quiere dar acceso bastaría con modificar y añadirlo al rol correspondiente.
7. BackupAl ser una base de datos de producción no se puede permitir perdida de servicio o minimizarla lo máximo posible. Antes de planificar los scripts se ha decidido poner la BBDD en archivelog, debido a que las opciones de recuperación son mucho más rápidas que en modo noarchivelog.
a) Completo físicoSe utilizará la utilidad RMAN, y este backup estará programado diariamente de madrugada. Se copiara toda la BBDD, los archives, controlfile y el spfile actual. También se borran los archivelogs copiados y las copias de seguridad obsoletas.
CREATE ROLE SIN_DELETE_OE;
CREATE ROLE MODIFICACION_OE;
rman target / <<EOF >salida.txt
run {
allocate channel c1 type disk;
allocate channel c2 type disk;
backup database;
backup archivelog all delete input;
backup current controlfile;
backup spfile;
delete noprompt obsolete;
}
EOF
Proyecto BBDD 2016- 2017Autor: Francisco Cabrero Torres
b) Copias incrementalesEn el caso de BBDD grandes se puede utilizar las copias incrementales desde la utilidad RMAN, si no se especifica todas las copias están en el nivel 0 y copian todo. Si se quiere realizar una copia con los ficheros modificados desde la ultima completa se utilizara el siguiente script.
La opción level 1 indicara que solo se copiaran los archivos modificados desde el ultimo backup level 0 que se realizó.
c) Backup archivesEl FS donde se guardan los archives es limitado, y en las BBDD de producción se suelen generar por ello y para evitar un mal mayor se tiene que sanear este FS. Para ello con un periodo mas corto se deberá lanzar este backup, donde se copiaran los archives y se borraran del FS del servidor.
d) Export dumpPara realizar copias y transportarlas se optará por este método de exportación de datos a otros entornos que se consideren oportunos.
Previamente antes de generar los exports debemos crear un directorio en el sistema operativo y añadirlo a la entrada de directorios en Oracle.
LOG=`date +%d%m%H%M`_incr1.log
rman target / <<EOF >$LOG
run {
backup incremental level 1 database;
backup archivelog all delete input;
}
EOF
LOG=`date +%d%m%H%M`_archives.log
rman target / <<EOF >$LOG
run {
backup archivelog all delete input;
}
EOF
create directory EXPORTS AS '/softOracle/app/oracle/exports'
Proyecto BBDD 2016- 2017Autor: Francisco Cabrero Torres
El export será del schema OE que es el objeto de backup. Para ello se utilizará el siguiente parfile:
Y el script que ejecutara el export
El fichero de password estará oculto en el home de Oracle y solo tendrá permisos el usuario Oracle para verlo. Con este fichero se podrá conectar a la BBDD sin que un usuario que no sea el original del script pueda verlo.( permiso 600)
8. Paso a históricoSe ha diseñado una BD con igual esquema que la base de datos original para guardar los datos obsoletos y asi agilizar las consultas con el año en curso. El pase a histórico se hará una vez por año por lo que los criterios que se han elegido para pasar de la base de datos proyecto a la histórico son :
Pedidos de ese año Productos que estén descatalogados
Estas tablas estarán en modo solo lectura y solo se habilitaran la escritura una vez al año, cuando se realice la carga.
Para que el traspaso de información sea transparente y se ejecute de manera automática, el usuario que ejecute deberá tener permisos adicionales que permitan crear job, procedures y database link. Se asignan al usuario OE de histórico estos permisos.
DIRECTORY=EXPORTS
SCHEMAS=OE
DUMPFILE=EXPORT_OE.DMP
LOGFILE=EXPORT_OE.LOG
PASS=`cat ~/.pass`
export ORACLE_SID=proyecto
expdp userid=system/$PASS parfile=export.parfile
grant create any job to OE;
grant create any procedure to OE;
grant create database link to OE;
Proyecto BBDD 2016- 2017Autor: Francisco Cabrero Torres
El paso de información se realizará con un dblink de la BD historico a las tablas de la BBDD principal:
Siendo PROYECTO una entrada del tnsnames.ora
Ahora bien, como va a ser un proceso desatendido se deberá dejar una traza con los posibles errores que se hayan producido. Para ello se generará una tabla LOG donde se almacenará los errores del proceso.
Para el desarrollo del script se ha fijado en las tablas que se estiman un crecimiento acusado:
Tabla pedidos. Se pasarán todos los pedidos anteriores a este año. Tabla detalle de pedidos. Se pasarán todos los registros asociados a los pedidos
anteriores a este año. Tabla inventarios. Se pasarán todos los registros que no tengan en stock y que su
producto este descatalogado.
Para las demás tablas el purgado será manual, al no tener un criterio por el que realizarlo.
El job se realizará cada 1 de enero a las 03:00, para que la BBDD esté listo para su uso este año
El script completo se encuentra en el anexo “script paso a histórico.sql”
PROYECTO =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = proyecto)
)
)
create database LINK link_proyecto connect to oe identified by oe using 'PROYECTO';
Proyecto BBDD 2016- 2017Autor: Francisco Cabrero Torres
Proyecto BBDD 2016- 2017Autor: Francisco Cabrero Torres
9. Estimación tamaño de los tablespaces
Teniendo en cuenta las previsiones de crecimiento de los registros se ha estimado el tamaño de las tablas utilizando el método sys.create_table_cost_columns. Con este método, indicando todas las columnas de la tabla y el número de registros junto con el PCTUSED que por defecto es el 10% nos muestran los siguientes resultados. Cálculos indicados en el fichero “estimación tamaño”
ESTIMACION TAMAÑO TABLAS (MB)
Tabla TAMAÑO CARGA INICIAL CRECIMIENTO ANUALFILAS INICIALES FILAS INCREMENTAL AÑO PESO MEDIO TABLA
CUSTOMERS 43 3 150000 15000 10ALMACENES 0,25 0,06 4000 400 19INVENTARIOS 9 9 450000 450000 11DETALLE DE PEDIDOS 1792 2240 50000000 63360000 11PEDIDOS 1152 448 220000 792000 10PRODUCT DESCRIPTIONS 336 34 150000 15000 346INFORMACION DE PRODUCTOS 392 40 150000 15000 11TOTAL 3724,25 2774,06 51124000 64602000 418
Tamaño total 6498,31
Para realizar una estimación de lo que crecerán las tablas clientes, almacenes, descripciones de productos e información de productos, ya que no existe una estimación a priori, se hará una estimación de que crecerán un 10 % al año. Con estas indicaciones se tiene que generar el tablespace de datos en este año unos 6,4 GB.
Proyecto BBDD 2016- 2017Autor: Francisco Cabrero Torres
10. AuditoriaSe pide saber que usuarios han realizado las acciones select, insert, update y delete sobre las tablas orders y orders_items. Para realizar la auditoria de select no se puede realizar mediante triggers. Se ejecuta el comando
audit select on oe.orders;
audit select on oe.order_items;
Para consultar los valores de auditoria seleccionados en estas auditoria se puede consultar con el comando:
SELECT USERNAME, SQL_TEXT, TIMESTAMP FROM DBA_AUDIT_TRAIL WHERE SQL_TEXT LIKE 'SELECT %';
Para las operaciones de audición de insert,update y delete sobre las tablas indicadas se realizara mediante un trigger que insertara los valores en la tabla de oe.auditar
En el campo tabla se almacenará el nombre de la tabla afectada, en el caso será orders o orders_items.
En el campo operación se indicará si es INSERT, DELETE o UPDATE.
En campos se indicarán los valores insertados, borrados o anteriores al UPDATE.
En valor, se guardará los valores actualizados con el nuevo valor.
En usuario, se introducirá el usuario que ha realizado la operación
Fecha: el momento que se produce el evento.
Los scripts, se encuentran en el anexo auditoria.txt
create table oe.auditar
( tabla varchar2(50),
operacion varchar2(30),
campos varchar2(1000),
valor varchar2(2000),
usuario varchar2(30),
fecha date
);
Proyecto BBDD 2016- 2017Autor: Francisco Cabrero Torres
11. Lista de anexos Comprobación requisitos BD
o Sql_test_BD.txt. Txt con los scripts utilizados para comprobar los requisitos iniciales de la BBDD
Backupo Bkp_archives.txt. Script para ejecutar backup de ficheros de archivadoo Crear directorio.txt. Sentencia para definir el directorio donde Oracle guardará
los dumpo Parfile.txt. Archivo que se utiliza para coger los parámetros usados en los data
pumpo Rman completa.sh. Script para backup full de BBDD, los logs de archives,
controlfile y spfile. Ademas borra las copiaso Rman_inc_0.sh. Script incremental 0 con la utilidad RMANo Rman_inc_1.sh. Script incremental 1 con la utilidad RMANo Sh export.txt. Ejecutable que lanza un pump utilizando el archivo par.
Permisoso Sentencias utilizadas para crear los perfiles de acceso de usuarios
Estadísticaso Sentencias utilizadas para pasar las estadísticas
Crear TB y tablaso CREATE_DB_proyecto. Scripts generados en el dbca para la creación de BBDD
principalo Crear esquema.txt Scripts para crear tablespaces y tablas.
Estimación tamañoo Estimación tamaño.txt. Sentencias y razonamiento de espacio que ocupará la
BBDDo Resumen espacio.xlsx. En esta hoja se resumen todos los datos del
crecimiento. Auditoria
o Auditoria.txt. Desarrollo de triggers y scripts para Paso a histórico
o Crear esquema histórico.txt Scripts para crear el esquema de la BBDD histórico
o Créate dblink.txt. Entrada del tnsnames.ora y sentencia para crear el database link.
o script paso a historico.sql. Procedimiento y programación para traspasar la información de la BBDD online a la histórico.
12. Notas finalesUna vez realizado la carga, se deberá pasar las estadísticas en las tablas para que Oracle pueda ejecutar planes de ejecución óptimos para recuperar la información. Para pasar las estadísticas al esquema OE se harán el siguiente comando:
SQL> show parameter statistics_level
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
statistics_level string TYPICAL
Proyecto BBDD 2016- 2017Autor: Francisco Cabrero Torres
SQL> show parameter statistics_level
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
statistics_level string TYPICAL