martes, 28 de diciembre de 2010

Backup Automático en Sql Server Express

El sql server express es una herramienta muy útil, desafortunadamente no cuenta con el sql server agent, asi que ¿como hacer para programar los backups automáticos?
 Lo haremos utilizando El programador de tareas de windows y el OSQL

1. Lo primero sera crear un dispositivo de backup para nuestra base de datos de prueba.


2.Lo segundo crear el script para realizar el backup a través de la utilidad OSQL (Object Structured Query Language), este script lo ponemos en un archivo con extension  .bat
 Osql -S Nombre_Servidor -U Login(p.ejemplo sa)  -P clave -Q "backup database Prueba to BKP_Pruebas WITH INIT,NOUNLOAD"

3.Finalmente ponemos en el programador de tareas de windows. :)




lunes, 27 de diciembre de 2010

Autonomous Transaction


Es una funcionalidad del PL/SQL en la cual un subprograma puede actuar independientepemente de la transacción que lo contiene.




Miremos como funciona con este ejemplo ....

CREATE TABLE tabla1 (campo int);
CREATE TABLE tabla2 (campo int);
CREATE SEQUENCE secuencia_s ;


/* Este es un trigger normal de inserción, si la transaccion se deshace,
se deshace la insercion en la tabla2 */

CREATE OR REPLACE TRIGGER pa_trigger
AFTER INSERT ON tabla1 FOR EACH ROW
DECLARE
 i PLS_INTEGER;
BEGIN
  select secuencia_s.nextval into i from dual;
  INSERT INTO tabla2
  VALUES
  (i);
END;
 

INSERT INTO tabla1 VALUES (1);
SELECT COUNT(*) FROM tabla1;
count(*)
1
SELECT COUNT(*) FROM tabla2;
count(*)
1
Rollback;
SELECT COUNT(*) FROM tabla1;
count(*)
0
SELECT COUNT(*) FROM tabla2;
count(*)
0


Ahora miremoslo con la transacción autónoma

CREATE OR REPLACE TRIGGER PA_trigger
AFTER INSERT ON tabla1 FOR EACH ROW
DECLARE
  PRAGMA AUTONOMOUS_TRANSACTION;
 i PLS_INTEGER;
BEGIN
  select secuencia_s.nextval into i from dual;
  INSERT INTO tabla2
  VALUES
  (i);
  COMMIT;
END;

/*Realizamos la inserción */
 INSERT INTO tabla1 VALUES (1);
SELECT COUNT(*) FROM tabla1;
count(*)
1
SELECT COUNT(*) FROM tabla2;
count(*)
1

/* si deshacemos la transacción  de la tabla1 */
Rollback;
SELECT COUNT(*) FROM tabla1;
count(*)
0


/* la transacción de la tabla2 quedara confirmada, Es ideal para  manejar logs */
SELECT COUNT(*) FROM tabla2;
count(*)
1

jueves, 16 de diciembre de 2010

Controlando el Acceso a los Datos A través de Vistas

A veces necesitamos controlar el acceso a los datos por columnas o filas, esto se puede realizar fácilmente a través de Vistas. 
En este caso asumiremos que no podemos crear la vista con el dueño del esquema,crearemos  dos usuarios, uno llamado us_consulta que contendrá una  vista del esquema scott y otro llamado us_con_clerk que tendrá solo permisos sobre la vista.

C:\oraclexe>sqlplus / as sysdba
SQL*Plus: Release 10.2.0.1.0 - Production on Wed Dec 15 13:38:44 2010
Copyright (c) 1982, 2005, Oracle.  All rights reserved.
Connected to:
Oracle Database 10g Express Edition Release 10.2.0.1.0 - Production

--- Creamos los dos usuarios ---
SQL> create user us_consulta identified by  consulta;
User created.
SQL> create user us_cons_clerk identified by consulta;
User created.

--- Asignamos Permisos ---
SQL> grant create session to us_consulta;
Grant succeeded.
SQL> grant create view to us_consulta,us_cons_clerk ;
Grant succeeded.   

--- Le damos permiso sobre la tabla emp al usuario us_consulta
--- ES muy importante otorgar el permiso con with grant option
--- Para que el usuario us_consulta pueda otorgar el permiso sobre la vista
--- a Otros usuarios
c:\> scott/tiger
SQL> grant select on emp to us_consulta with grant option;
Grant succeeded.

--- Creamos la vista, filtrada por donde necesitamos
SQL> connect us_consulta/consulta
Connected.
SQL> create view VW_CLERK as select * from scott.emp where job='CLERK';
View created.
-- Asignamos permiso
SQL> grant select on vw_clerk to us_cons_clerk;
Grant succeeded.

--- Ya el usuario tiene permiso sobre los datos pero filtrados
SQL> connect us_cons_clerk/consulta
Connected.
SQL> select empno, ename, job, hiredate, sal
  2  from us_consulta.vw_clerk;

     EMPNO ENAME      JOB       HIREDATE         SAL
---------- ---------- --------- --------- ----------
      7369 SMITH      CLERK     17-DEC-80        800
      7876 ADAMS      CLERK     23-MAY-87       1100
      7900 JAMES      CLERK     03-DEC-81        950
      7934 MILLER     CLERK     23-JAN-82       1300