Oracle, Script, conceptos y chunches
Empezaremos a recolectar información acerca de Oracle de acuerdo como se nos va presentando las cosas en el proyecto JDA, la primera situación que se nos presento es el manejo de espacio para los TableSpace
Este script nos informa de los tamaños y objetos por bloque que contiene los TableSpaces
-- SELECT tablespace_name, ROUND(sum(bytes)/1024/1024,0) FROM dba_free_space WHERE tablespace_name NOT LIKE 'TEMP%' GROUP BY tablespace_name; SELECT TABLESPACE_NAME "TABLESPACE", FILE_ID, COUNT(*) "PIECES", MAX(blocks) "MAXIMUM", MIN(blocks) "MINIMUM", AVG(blocks) "AVERAGE", SUM(blocks) "TOTAL" FROM DBA_FREE_SPACE GROUP BY TABLESPACE_NAME, FILE_ID; --
Para ver el tamaño de un Tablespace
SELECT tablespace_name, file_name, bytes/(1024*1024) AS "[Mb]" FROM dba_temp_files WHERE tablespace_name like 'TEMP%';
Tamaño de los Volumens donde esta las basedata
select name,state,total_mb,free_mb from v$asm_diskgroup; select group_number, name, path, os_mb, total_mb, free_mb from v$asm_disk; select * from v$asm_disk;
Para ver cuantos TableSpace existen
SELECT * FROM V$TABLESPACE
Para crear TableSpaces
-- CREATE TABLESPACE TS_SSIDATA DATAFILE '+DATA1/SSCALDEV/69F98A6850942F46E053B60110ACC7DF/DATAFILE/TS_SSIDATA.dbf' SIZE 500M; CREATE TABLESPACE TS_SSIIDX DATAFILE '+DATA1/SSCALDEV/69F98A6850942F46E053B60110ACC7DF/DATAFILE/TS_SSIIDX.dbf' SIZE 500M; --
Para modificar tableSpaces
-- ALTER DATABASE datafile '+DATA1/SSCALDEV/69F98A6850942F46E053B60110ACC7DF/DATAFILE/TS_SSIDATA.dbf' resize 2048M; ALTER DATABASE datafile '+DATA1/SSCALDEV/69F98A6850942F46E053B60110ACC7DF/DATAFILE/TS_SSIIDX.dbf' resize 2048M; commit --
La forma más exacta de saber lo que “realmente” está consumido de los data files es sumando los bytes de la DBA_EXTENTS:
-- Select Tablespace_name, Sum(bytes) total From Dba_extents Group by Tablespace_name; Select Tablespace_name, Sum(bytes) total From Dba_data_files Group by Tablespace_name; --
Mostrar los nombres de las tablas que están en un TableSpace
-- select owner,TABLE_NAME,TABLESPACE_NAME from dba_tables where TABLESPACE_NAME = 'TS_SSIDATA' select TABLE_NAME from dba_tables where TABLESPACE_NAME = 'TS_SSIDATA' --
Tu puedes utiliza el siguiente código para recuperar el tamaño por tabla en un esquema, para un tamaño total retira la condición que el objeto sea tabla
SELECT segment_name AS "TABLE_NAME", SUM (BYTES) AS "[Bytes]", SUM (BYTES) / 1024 AS "[Kb]", SUM (BYTES) / (1024*1024) AS "[Mb]", SUM (BYTES) / (1024*1024*1024) AS "[Gb]" FROM user_segments WHERE segment_type = 'TABLE' GROUP BY segment_name; select owner, sum(bytes) / (1024*1024) AS "[Mb]" from dba_segments group by owner order by "[Mb]"
Sesiones
-- SET LINESIZE 100 COLUMN spid FORMAT A10 COLUMN username FORMAT A10 COLUMN program FORMAT A45 SELECT s.inst_id, s.sid, s.serial#, --s.sql_id, p.spid, s.username, s.program FROM gv$session s JOIN gv$process p ON p.addr = s.paddr AND p.inst_id = s.inst_id WHERE s.type != 'BACKGROUND'; --
Kill sesiones
alter system kill session '404,25431, @2' immediate; ALTER SYSTEM DISCONNECT SESSION '31,58911' immediate;
Espacio en discos
select group_number, name, path, os_mb, total_mb, free_mb from v$asm_disk; select name,state,total_mb,free_mb from v$asm_diskgroup;
Activar/Desactivar Archivelog de Oracle
El tener activado el Archivelog es el primer paso para poder realizar una copia en caliente de nuestra Base de Datos mediante Rman, a continuación explicaremos como activar/desactivar esta opción para tener otra opción más de realizar copias de seguridad de nuestra Base de Datos, aquí una pequeña explicación del modo archivelog.
El modo archivelog de una base de datos Oracle protege contra la pérdida de datos cuando se produce un fallo en el medio físico.
- Se puede realizar una copia de seguridad mientras la base de datos está levantada.
- Con este modo de base de datos se puede restaurar una copia de seguridad de los archivos dañados utilizando estos archivos para actualizar los archivos mientras nuestra base de datos está levantada.
- Se puede recuperar la base de datos en un número de cambio del sistema específico.
- Se puede restaurar la base de datos en un punto específico en el tiempo.
- Teniendo en cuenta estas características básicas del modo archivelog de base de datos ORACLE, vamos a exponer en este documento cómo se activa y cómo se desactiva.
Alguna de las consecuencias que tiene desactivarlo son las siguientes:
- Las copias de seguridad ya no se pueden hacer on-line (habría que aplicar otro tipo de copias de seguridad).
- No se podrá recuperar la base de datos en un tiempo concreto.
Lo primero que tenemos que saber si nuestra base de dato tiene activo o no el Archivelog, para verlo:
– Entramos en la consola de sqlplus e introducimos el siguiente comando archive log list, lo que nos dirá si tenemos o no activado el archivelog y si el archivado automático está funcionando
DESACTIVACIÓN DEL MODO ARCHIVELOG
Para desactivar el modo archivelog, realizamos los siguientes pasos:
– Nos conectamos a la base de datos y la paramos, despues de pararla la montamos
shutdown immediate
startup mount
– Desactivamos el modo archivelog
alter database noarchivelog
– Abrimos la base de datos
alter database open
– Desactivamos el archivado automático
alter system archive log stop
ACTIVACIÓN DEL ARCHIVELOG
– Para activar el modo archivelog, el init.ora debe de estar arrancado con los siguientes parámetros.
log_archive_start = true
log_archive_dest_1 = “location=/database/archivelog/bbdd REOPEN=5”
log_archive_format = arch_%t_%s.arc
– Si la base de datos está funcionando y esos parámetros están en el init.ora, nos conectamos a la base de datos y la paramos con un
shutdown immediate
– A continuación montamos la base de datos:
startup mount
– Cuando montamos la base de datos ejecutamos el siguiente comando:
alter database archivelog
– Despues abrimos nuestra base de datos y activamos el archivado automático
alter database open
alter system archive log start
Links de Interes
Administración de usuarios en Oracle Database
Gestión de Base de Datos
Cursores
show parameter pga_aggregate_limit; select * from V$SESSTAT select * from v$open_cursor show parameter cursor alter system set open_cursors=600; select s.username, max(a.value) from v$sesstat a, v$statname b, v$session s where a.statistic# = b.statistic# and s.sid (+)= a.sid and b.name = 'opened cursors current' group by s.username