Mi lista de blogs

miércoles, 23 de septiembre de 2015

Hace tu web vos mismo, en pocos pasos

Bueno, si bien este es un ejemplo, pero luego cada uno lo puede adaptar o consultar para modificarlo. Haremos una pequeña prueba, y para ello es necesario que me sigas. 

A empezar a diseñar

1-Bajar dreamweaver, entorno de desarrollo donde haremos la pagina. 
2-Ingresamos a dreamweaver.
3-Vamos a CREAR NUEVO HTML
4-En titulo ponemos el nombre que queremos que figure en el navegador, yo puse "Mi web".
5-Luego vamos a Insertar, Tabla y dentro de la misma escribimos lo que querramos o bien vamos a la solapa codigo e insertamos :
<table>
<tr>
 <td>Estamos trabajando en la web...</td></tr>
<tr>
 <td>Un cambio, una imagen, vos, tu propia pagina</td></tr>
<tr>
 <td>&nbsp;</td></tr>
<tr>
 <td style="font-size: 8pt">dba-mg.blogspot.com.ar</td></tr>
</table>
<br><br>
6- Damos f12 y nos mostrara un mensaje para que la guardemos con un nombre. Siempre a la pagina principal, referencial o home, le colocaremos index.html









¿Como crear una tabla en una base de datos en Mysql php para mi pagina Web?

Bueno, si nos encontramos con el diseño de una pagina web, en la cual es necesario que tengamos una conexión con una base de datos, para realizar por ejemplo el LOGIN, Es importante que contemos, primero con la creación de las tablas en donde iremos a guardar los datos. Como ser, la plantilla de datos de un usuario que se esta resgistrando en nuestra pagina. Haremos entonces la creación de la tabla, luego mostrare como conectar esta base con mi web.

1- Me conecto a la base de datos en la cual, voy a crear la tabla. En este caso a mi tabla la llame Usuarios y los campos que utilice son específicos para el tipo de pagina, ya que la web que diseñe es casi para una interacción de web social y se refiere al trueque, es por ello que contiene tantos campos de localidad. Dichos campos, estan pensados para que los usuarios tengan opciones para juntarse a concretar la operación.

Pero bien, el punto central aqui es que al ingresar a la base, le demos NUEVA para crear la tabla, Alli nos aparecera un campo en blanco que dice NOMBRE DE TABLA y el colocaremos el nombre al cual  haremos referencia, cada vez que lo necesitemos.

Luego completaremos los campos, con NOMBRE, nombre del campo como ser "apellido:", en tipo, colocaremos el tipo de dato a ingresar y así iremos completando todos los campos. Los mas importantes, ademas de los mencionados son: si queremos permitir NULOS es decir NULL, que el usuario pueda dejar vació ese campo, luego el del indice, indicar para esa tabla cual sera el campo id indice. Por ultimo, si queremos que sea incremental.

Una vez hecho esto, hacemos click en guardar y listo, tabla creada.

Les quedara algo así:




Problemas al compilar, herramientas de compilación, errores y formas de solucionar este problema -

Hace poco, sucedió en una complementación que realizo el área de producción, de hacer un cambio sobre algunas tablas. Estos cambios, realizaban insert y update de registros. Por lo tanto, adoptaron la teoría de que no habría ningún problema, pues en el ambiente de test no lo hubo y todo salio exitosamente. Cuando fueron a realizar la compilación de los objetos, se encontraron con algunos errores en la salida. Estos errores claramente mostraban que algunos insert los había realizado y otros no, lo mismo paso con los updates.

¿Que sucedió y porque?
Aquí es donde intervino mi gestión y se comunicaron conmigo. ¿Que paso? al compilar los objetos encontro lineas donde existian caracteres raros, es por ello que algunos registros ingresaron y otros no.
¿Porque sucede esto? en verdad por que paso en el pasaje a producción y no en testing, es por que en testing lo compilaron con una herramienta que difiere a la que utilizaron para aplicarlo en el ambiente productivo. Esto es SUMAMENTE importante que siempre los archivos sean compilados en la misma herramienta. Yo recomiendo que sea en SQLPLUS,

Los dba estamos acostumbrados a utilizar muchas herramientas, en mi caso uso mucho ademas del sqlplus, el toad y el sqldeveloper. Por eso es importante que al momento de compilar un cambio en producción se hagan con sqlplus.

Por otro lado, es fundamental que antes de hacer un cambio se haga un backup de los objetos, en este caso hacer un EXPORT de las tablas era la solución, pero los chicos de producción no lo hicieron :(

Paso que utilice:

Yo tenia un ambiente para probar, en un unix. Entonces lo que hice fue transferirme el backup full de la noche anterior. Yo en mi caso, hago backups full todas las noches luego de la corrida de los procesos batch. En el día, cada 30 minutos hago archive log.
¿Como lo solucione? restaure el backup full, aplique mis archive log previos a este cambio, y realice un export/import de las tablas afectadas. Esta claro, que me hubiese ahorrado todo esto si tenia un export de las tablas previo al cambio, como lo mencione anteriormente.

Entonces, es importante que antes de cualquier cambio:
1- Se tome BACKUP así sea EXPORT, de tablas, esquemas, store procedures, etc, pero tener un resguardo de los cambios sobre los componentes que se modificaran.
2 - Se utilice la misma herramienta de compilación para todos los ambientes.
3 - En caso de incidentes, con el punto 1, restaurar a tiempo los objetos corruptos.

martes, 22 de septiembre de 2015

A tener en cuenta - Puntos claves para la administración de base de datos

Algunos puntos a tener en cuenta para una administración de base de datos:
Es importante, controlar todos los procesos que se ejecutan en nuestra base, si bien por algunos en particular nos suelen llamar y decirnos "el sistema esta lento" y en ese momento hacemos un monitorio sobre la base. Es muy importante, como ejercicio hacer frecuente los controles sobre por ejemplo: cuanto me consumen los query en mi servidor, cuantas conexiones inactivas tengo, ya que esto es un gran problema, o algún bloqueo que se produce en determinados momentos. Tambien las full scan son un gran dolor de cabeza. Esto es frecuente en nuestros sistemas.
Algunas consideraciones a tener en cuenta son:

  • Tener habilitado el informe AWR
  • Colocar alarmas o hacer verificaciones sobre el tamaño de tu tablespace.
  • Validar el uso de recursos de tus procesos dentro del UNIX o de tu servidor.
  • Tener una buena metodología de backup. 
  • Analizar las query que  tienen mayor demora en devolver una salida.
  • Verificar la recreación de indices, como una tarea periódica. 
  • Realizar el calculo de estadísticas periódicamente.




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