Las Tablespace ses un lugar de almacenamiento donde los datos reales que subyacen a la base de datos de objetos se pueden cumplir. Proporciona una capa de abstracción entre los datos físicos y lógicos.
Cuando instalamos la base de datos, se instalan junto a todo el paquete las tablespace por default, pero nosotros como administradores podemos crear las tablespace que consideremos necesarias para la buena administración de nuestra base de datos.
A su vez, es importante tener en cuenta el tamaño que le asignaremos a cada una de ellas.
Una tablespace, puede tener varios data files, de una buena administración depende tener nuestros datafiles correspondientes de modo UNLIMITED.
Aquí les dejo el código para verificar los tablespace de sus bases, sus tamaños y espacio ocupado.
Luego, el código lo pueden ir modificando, yo sugiero que este el modo de incremento, es decir el crecimiento que va tendiendo mis tablespace por porcentaje.
Tablespace de mi base y sus características:
select tablespace_name "Tablespace_Name",
username "Username",
bytes/1024/1024 "Megabytes",
(case when max_bytes = -1 then null
else max_bytes/1024/1024 end) "Max_Megabytes",
(case when max_bytes = -1 then 'UNLIMITED'
else null end) "Quota"
from sys.dba_ts_quotas
where (:TABLESPACE_NAME is null or
instr(lower(tablespace_name),lower(:TABLESPACE_NAME)) > 0)
order by tablespace_name, username
Agrego el incremento en %
SELECT T.TABLESPACE_NAME "TABLESPACE", T.STATUS "ESTADO",
ROUND(MAX(D.BYTES)/1024/1024,2) "MB TAMAÑO", ROUND((MAX(D.BYTES)/1024/1024) -
(SUM(DECODE(F.BYTES, NULL,0, F.BYTES))/1024/1024),2) "MB USADOS",
ROUND(SUM(DECODE(F.BYTES, NULL,0, F.BYTES))/1024/1024,2) "MB LIBRES",
ROUND((100* ROUND((MAX(D.BYTES)/1024/1024) -
(SUM(DECODE(F.BYTES, NULL,0, F.BYTES))/1024/1024),2))/ROUND(MAX(D.BYTES)/1024/1024,2))"% INCREMENTO", SUBSTR(D.FILE_NAME,1,80) "FICHERO DE DATOS" FROM DBA_FREE_SPACE F,
DBA_DATA_FILES D, DBA_TABLESPACES T WHERE T.TABLESPACE_NAME = D.TABLESPACE_NAME
AND F.TABLESPACE_NAME(+) = D.TABLESPACE_NAME AND F.FILE_ID(+) = D.FILE_ID GROUP BY
T.TABLESPACE_NAME, D.FILE_NAME, T.PCT_INCREASE, T.STATUS ORDER BY 1,3 DESC;
Este blog esta hecho con la intención de ayudar. Aportes sobre realización de backups y recovery. Métodos de administración de bases, dblinks y migraciones, tablas, indices, estadísticas, etc. Diseño web y plantillas en php.
Mi lista de blogs
martes, 22 de septiembre de 2015
lunes, 21 de septiembre de 2015
Permisos y Privilegios
Visualizar permisos y privilegios en ORACLE
Consideraciones al momento de crear un usuario o cuenta en Oracle, y los privilegios y roles que le podemos asignar.
- El nombre de usuario no debe superar 30 caracteres.
- Un método de autentificación. El mas común es una clave o password, pero Oracle 10g soporta otros métodos (como biometric, certificado y autentificación por medio de token).
- Un Tablespace default, el cual es donde el usuario va a poder crear sus objetos por defecto, sin embargo, esto no significa que pueda crear objetos, o que tenga una cuota de espacio. Estos permisos se asignan de forma separada, salvo si utiliza el privilegio RESOURCE el que asigna una quota unlimited, incluso en el Tablespace SYSTEM! Sin embargo si esto ocurre, ud. puede posteriormente mover los objetos creados en el SYSTEM a otro Tablespace.
- Un Tablespace temporal, donde el usuario crea sus objetos temporales y hace los sort u ordenamientos.
- Un perfil o profile de usuario, que son las restricciones que puede tener su cuenta.
Permisos de Objetos:
select grantor "Grantor",
grantee "Grantee",
table_name "Table_Name",
privilege "Privilege",
initcap(grantable) "Grantable"
from sys.all_tab_privs
where grantor = user
or grantee = user
order by grantor, grantee, table_name
Privilegios de Columnas:
select grantor "Grantor",
grantee "Grantee",
table_name "Table_Name",
column_name "Column_Name",
privilege "Privilege",
initcap(grantable) "Grantable"
from sys.all_col_privs
where grantor = user
or grantee = user
order by grantor, grantee, table_name, column_name
Privilegios de Rol:
select username "User",
granted_role "Granted_Role",
initcap(admin_option) "Admin_Option",
initcap(default_role) "Default_Role"
from user_role_privs
order by username, granted_role
Privilegios del sistema:
select privilege "Privilege",
initcap(admin_option) "Admin_Option"
from user_sys_privs
order by privilege
Seguridad - Políticas de Auditoria
Políticas de seguridad:
Es sumamente importante tener en nuestra base de datos las políticas de seguridad, donde podamos encontrar entre otras cosas, las funciones/procesos/usuarios, que acceden a nuestra base. Como así también tener un control sobre la misma.
Aquí veremos algunas sentencias donde podemos registrar donde guardar esta información que es de gran importancia.
Hay varias opciones, nosotros consultaremos una. Cada negocio lo puede guarda en otra tabla o crear vistas para que estas vayan acumulando y registrando la información.
Políticas de auditoria:
select OBJECT_SCHEMA,
OBJECT_NAME,
POLICY_NAME,
POLICY_TEXT,
POLICY_COLUMN,
PF_SCHEMA,
PF_PACKAGE,
PF_FUNCTION,
ENABLED
from sys.all_audit_policies
order by 1,2,3
select OBJECT_SCHEMA,
OBJECT_NAME,
POLICY_NAME,
POLICY_TEXT,
POLICY_COLUMN,
PF_SCHEMA,
PF_PACKAGE,
PF_FUNCTION,
ENABLED,
SEL,
INS,
UPD,
DEL,
AUDIT_TRAIL,
POLICY_COLUMN_OPTIONS
from sys.all_audit_policies
order by 1,2,3
Políticas:
select object_owner "Object_Owner",
object_name "Object_Name",
policy_group "Policy_Group",
policy_name "Policy_Name",
pf_owner "Policy_Function_Owner",
package "Package",
function "Policy_Function",
sel "Sel",
ins "Ins",
upd "Upd",
del "Del",
chk_option "Chk_Option",
enable "Enable",
static_policy "Static_Policy"
from sys.all_policies
where object_owner = user
or pf_owner = user
order by object_owner, object_name, policy_group
select object_owner "Object_Owner",
object_name "Object_Name",
policy_group "Policy_Group",
policy_name "Policy_Name",
pf_owner "Policy_Function_Owner",
package "Package",
function "Policy_Function",
sel "Sel",
ins "Ins",
upd "Upd",
del "Del",
idx "Idx",
chk_option "Chk_Option",
enable "Enable",
static_policy "Static_Policy",
policy_type "Policy_Type"
from sys.all_policies
where object_owner = user
or pf_owner = user
order by object_owner, object_name, policy_group
Es sumamente importante tener en nuestra base de datos las políticas de seguridad, donde podamos encontrar entre otras cosas, las funciones/procesos/usuarios, que acceden a nuestra base. Como así también tener un control sobre la misma.
Aquí veremos algunas sentencias donde podemos registrar donde guardar esta información que es de gran importancia.
Hay varias opciones, nosotros consultaremos una. Cada negocio lo puede guarda en otra tabla o crear vistas para que estas vayan acumulando y registrando la información.
Políticas de auditoria:
select OBJECT_SCHEMA,
OBJECT_NAME,
POLICY_NAME,
POLICY_TEXT,
POLICY_COLUMN,
PF_SCHEMA,
PF_PACKAGE,
PF_FUNCTION,
ENABLED
from sys.all_audit_policies
order by 1,2,3
select OBJECT_SCHEMA,
OBJECT_NAME,
POLICY_NAME,
POLICY_TEXT,
POLICY_COLUMN,
PF_SCHEMA,
PF_PACKAGE,
PF_FUNCTION,
ENABLED,
SEL,
INS,
UPD,
DEL,
AUDIT_TRAIL,
POLICY_COLUMN_OPTIONS
from sys.all_audit_policies
order by 1,2,3
Políticas:
select object_owner "Object_Owner",
object_name "Object_Name",
policy_group "Policy_Group",
policy_name "Policy_Name",
pf_owner "Policy_Function_Owner",
package "Package",
function "Policy_Function",
sel "Sel",
ins "Ins",
upd "Upd",
del "Del",
chk_option "Chk_Option",
enable "Enable",
static_policy "Static_Policy"
from sys.all_policies
where object_owner = user
or pf_owner = user
order by object_owner, object_name, policy_group
select object_owner "Object_Owner",
object_name "Object_Name",
policy_group "Policy_Group",
policy_name "Policy_Name",
pf_owner "Policy_Function_Owner",
package "Package",
function "Policy_Function",
sel "Sel",
ins "Ins",
upd "Upd",
del "Del",
idx "Idx",
chk_option "Chk_Option",
enable "Enable",
static_policy "Static_Policy",
policy_type "Policy_Type"
from sys.all_policies
where object_owner = user
or pf_owner = user
order by object_owner, object_name, policy_group
martes, 15 de septiembre de 2015
Informa AWR - AWR en Oracle Database 10g
El informe AWR nos permite extraer informes del estado de nuestra base de datos para poder relizar tareas de Tuning:
declare
dbid number;
instance_id number;
start_id number;
end_id number;
begin
dbms_output.enable(1000000);
select max(snap_id)-1,max(snap_id) into start_id,end_id from dba_hist_snapshot;
select dbid into dbid from v$database;
select instance_number into instance_id from v$instance;
dbms_output.put_line('<PRE>');
for rc in ( select output from
table(dbms_workload_repository.awr_report_text(dbid,instance_id,start_id,end_id))
) loop
-- dbms_output.put_line('<BR>');
dbms_output.put_line(rc.output);
end loop;
dbms_output.put_line('</PRE>');
end;
viernes, 11 de septiembre de 2015
VERIFICAR BLOQUEOS POR USUARIO
Verificar bloqueos por usuario en la base de datos ORACLE.
Esto nos va a servir para poder identificar los bloqueos que cada usuario esta produciendo en el online de la base operativa.
select /*+ ORDERED */
blocker.sid blocker_sid
, waiting.sid waiting_sid
, TRUNC(waiting.ctime/60) min_waiting
, waiting.request
from (select *
from v$lock
where block != 0
and type = 'TX') blocker
, v$lock waiting
where waiting.type='TX'
and waiting.block = 0
and waiting.id1 = blocker.id1
Esto nos va a servir para poder identificar los bloqueos que cada usuario esta produciendo en el online de la base operativa.
select /*+ ORDERED */
blocker.sid blocker_sid
, waiting.sid waiting_sid
, TRUNC(waiting.ctime/60) min_waiting
, waiting.request
from (select *
from v$lock
where block != 0
and type = 'TX') blocker
, v$lock waiting
where waiting.type='TX'
and waiting.block = 0
and waiting.id1 = blocker.id1
COMO VERIFICAR LAS ESTADISTICAS !!!!
Con este select podremos visualizar las estadísticas de nuestra base de datos.
select owner "Owner",
table_name "Table_Name",
last_analyzed "Last_Analyzed",
num_rows "Rows",
avg_row_len "Average_Row_Length",
decode(iot_type,'YES','IOT','HEAP')||
decode(temporary,'N',null,'-Temporary')||
decode(trim(cache),'N',null,'-Cached')||
decode(partitioned,'NO',null,'-Partitioned')||
decode(compression,'DISABLED',null,'-Compressed') "Table_Type",
owner sdev_link_owner,
table_name sdev_link_name,
'TABLE' sdev_link_type
from sys.dba_tables
where (:OWNER is null or instr(owner,upper(:OWNER)) > 0)
and substr(table_name,1,4) != 'BIN$'
and substr(table_name,1,3) != 'DR$'
and (:TABLE_NAME is null or
instr(upper(table_name),upper(:TABLE_NAME))>0)
order by owner, table_name
INDICES NO UTILIZADOS
Verificar los indices no utilizados, es muy importante a la hora de preocuparnos por la performance de nuestra base de datos. No obstante, es necesario tener periódicamente una reconstrucción de nuestros indices y cálculos de estadisticas. Para optimizar todo tipo de demora de nuestra base es importante contar con varios de estos querys que iremos colocando en el blog.
select owner "Owner",
index_name "Index Name",
index_type "Index Type",
table_name "Table Name",
owner sdev_link_owner,
index_name sdev_link_name,
'INDEX' sdev_link_type
from sys.dba_indexes
where status = 'UNUSABLE'
order by index_name
Suscribirse a:
Entradas (Atom)