Mi lista de blogs

martes, 22 de septiembre de 2015

Almacenamiento - Cuotas de tablespace

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;

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

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

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