|
Luego de varias semanas de espera, por fin he recibido el {Heroes Community Launch Kit} y asi poder ser un {Heroe} mas de las comunidades Microsoft. Dicho Kit contiene: 1 {Exclusive} Windows Server 2008 Deep technical “event-in-a-box” – 5 Windows Server 2008 Enterprise Edition DVDs – 5 Visual Studio Standard DVDs – 5 SQL Server 2008 CTP5 DVDs and a NFR voucher for SQL Server 2008 Enterprise redeemable when SQL Server 2008 is Generally Available (GA) – 2 Full bit DVDs of Vista Ultimate SP1 NFR – 3 Vouchers for a Free 1 year subscription to TechNet Plus – 1 WS08 Application Readiness Resource kit enhanced with Solutions Accelerator modules – Microsoft Learning Solutions 40% off Exam Vouchers – 1 SQL Server 2008 Technical Readiness kit – 1 .NET 3.5 Dev Resource Kit – 1 AMD “Virtualization for Dummies” Handbook – 40% off TechNet Plus Subscriptions with Full Bit/No Technical Time Bomb Product Download/Eval for All of your attendees – Heroes {Community} Launch Poster – CPLS Certification Poster
Luego publicaremos los lugares en la Republica Dominicana donde se daran los eventos para poder repartir el material, dichos eventos seran impartidos por la nueva comunidad de desarrollo que vamos a lanzar que se llamara DotNetLab. Saludos |
Mes: marzo 2008
¿Estas contento con Windows Vista SP1? Pues elimina los archivos basura
Agregar un simple Trigger para auditar tu base de datos SQL Server
Despues de pasar muchas horas pensando, debuggiando y buscandole la vuelta a una solucion que consistia en hacerle una auditoria a una base de datos SQL 2005, pudimos desarrollar una herramienta llamada SQLTableHistory esta herramienta nos da la facilidad de que podemos seleccionar las tablas que queremos auditar.
Pero navegando me encontre con una excelente solucion hecha por Jon Galloway, en la cual consiste en crear un solo script y que este se encarge de crear los triggers necesarios para cada tabla de la base de datos seleccionada, la diferencia con SQLTableHistory es que con nuestra herramienta podemos seleccionar las tablas que queremos que se le haga su respectiva auditoria y con la solucion presentada en este blog.
Aqui un ejemplo de como se verian los datos con la solucion de Jon Galloway
Con esta informacion podemos hacer reportes de una manera sencilla tales como:
Con estas herramientas es posible volver al estado anterior de la tabla y volver en un punto especifico, claro esta ya depende de las nuevas extensiones que ustedes le hagan.
Aqui os dejo el script completo que crea la tabla de auditoria y corre el script para crear los triggers a todas las tablas de la base de datos.
USE MYDATABASE–Ponerle el nombre de la base de datos que va hacer auditada
GO
IF NOT EXISTS(SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME= ‘Audit’)
CREATE TABLE Audit
(
AuditID [int]IDENTITY(1,1) NOT NULL,
Type char(1),
TableName varchar(128),
PrimaryKeyField varchar(1000),
PrimaryKeyValue varchar(1000),
FieldName varchar(128),
OldValue varchar(1000),
NewValue varchar(1000),
UpdateDate datetime DEFAULT (GetDate()),
UserNamevarchar(128)
)
GO
DECLARE @sql varchar(8000), @TABLE_NAMEsysname
SET NOCOUNT ON
SELECT @TABLE_NAME= MIN(TABLE_NAME)
FROM INFORMATION_SCHEMA.Tables
WHERE
TABLE_TYPE= ‘BASE TABLE’
AND TABLE_NAME!= ‘sysdiagrams’
AND TABLE_NAME!= ‘Audit’
WHILE @TABLE_NAMEIS NOT NULL
BEGIN
EXEC(‘IF OBJECT_ID (»’ + @TABLE_NAME+ ‘_ChangeTracking», »TR») IS NOT NULL DROP TRIGGER ‘ + @TABLE_NAME+ ‘_ChangeTracking’)
SELECT @sql =
‘
create trigger ‘ + @TABLE_NAME+ ‘_ChangeTracking on ‘ + @TABLE_NAME+ ‘ for insert, update, delete
as
declare @bit int ,
@field int ,
@maxfield int ,
@char int ,
@fieldname varchar(128) ,
@TableName varchar(128) ,
@PKCols varchar(1000) ,
@sql varchar(2000),
@UpdateDate varchar(21) ,
@UserName varchar(128) ,
@Type char(1) ,
@PKFieldSelect varchar(1000),
@PKValueSelect varchar(1000)
select @TableName = »’ + @TABLE_NAME+ »’
— date and user
select @UserName = system_user ,
@UpdateDate = convert(varchar(8), getdate(), 112) + » » + convert(varchar(12), getdate(), 114)
— Action
if exists (select * from inserted)
if exists (select * from deleted)
select @Type = »U»
else
select @Type = »I»
else
select @Type = »D»
— get list of columns
select * into #ins from inserted
select * into #del from deleted
— Get primary key columns for full outer join
select@PKCols = coalesce(@PKCols + » and», » on») + » i.» + c.COLUMN_NAME + » = d.» + c.COLUMN_NAME
fromINFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,
INFORMATION_SCHEMA.KEY_COLUMN_USAGE c
where pk.TABLE_NAME = @TableName
andCONSTRAINT_TYPE = »PRIMARY KEY»
andc.TABLE_NAME = pk.TABLE_NAME
andc.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
— Get primary key fields select for insert
select @PKFieldSelect = coalesce(@PKFieldSelect+»+»,»») + »»»» + COLUMN_NAME + »»»»
fromINFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,
INFORMATION_SCHEMA.KEY_COLUMN_USAGE c
where pk.TABLE_NAME = @TableName
andCONSTRAINT_TYPE = »PRIMARY KEY»
andc.TABLE_NAME = pk.TABLE_NAME
andc.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
select @PKValueSelect = coalesce(@PKValueSelect+»+»,»») + »convert(varchar(100), coalesce(i.» + COLUMN_NAME + »,d.» + COLUMN_NAME + »))»
from INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,
INFORMATION_SCHEMA.KEY_COLUMN_USAGE c
where pk.TABLE_NAME = @TableName
and CONSTRAINT_TYPE = »PRIMARY KEY»
and c.TABLE_NAME = pk.TABLE_NAME
and c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
if @PKCols is null
begin
raiserror(»no PK on table %s», 16, -1, @TableName)
return
end
select @field = 0, @maxfield = max(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName
while @field < @maxfield
begin
select @field = min(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION > @field
select @bit = (@field – 1 )% 8 + 1
select @bit = power(2,@bit – 1)
select @char = ((@field – 1) / 8) + 1
if substring(COLUMNS_UPDATED(),@char, 1) & @bit > 0 or @Type in (»I»,»D»)
begin
select @fieldname = COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION = @field
select @sql = »insert Audit (Type, TableName, PrimaryKeyField, PrimaryKeyValue, FieldName, OldValue, NewValue, UpdateDate, UserName)»
select @sql = @sql + » select »»» + @Type + »»»»
select @sql = @sql + »,»»» + @TableName + »»»»
select @sql = @sql + »,» + @PKFieldSelect
select @sql = @sql + »,» + @PKValueSelect
select @sql = @sql + »,»»» + @fieldname + »»»»
select @sql = @sql + »,convert(varchar(1000),d.» + @fieldname + »)»
select @sql = @sql + »,convert(varchar(1000),i.» + @fieldname + »)»
select @sql = @sql + »,»»» + @UpdateDate + »»»»
select @sql = @sql + »,»»» + @UserName + »»»»
select @sql = @sql + » from #ins i full outer join #del d»
select @sql = @sql + @PKCols
select @sql = @sql + » where i.» + @fieldname + » <> d.» + @fieldname
select @sql = @sql + » or (i.» + @fieldname + » is null and d.» + @fieldname + » is not null)»
select @sql = @sql + » or (i.» + @fieldname + » is not null and d.» + @fieldname + » is null)»
exec (@sql)
end
end
‘
SELECT @sql
EXEC(@sql)
SELECT @TABLE_NAME= MIN(TABLE_NAME) FROM INFORMATION_SCHEMA.Tables
WHERE TABLE_NAME> @TABLE_NAME
AND TABLE_TYPE= ‘BASE TABLE’
AND TABLE_NAME!= ‘sysdiagrams’
AND TABLE_NAME!= ‘Audit’
END
Para mas informacion:
Jon Galloway
SQL Server 2005’s DDL triggers
Nigel Rivett’s SQL Server Auditing triggers
Espero que les sea de utilidad!!!
What’s new in Internet Explorer 8 Beta 1
Ayer Microsoft anuncio al mundo en la conferencia MIX08 en las vegas la publicacion del primer Beta de Internet explorer 8 para desarrolladores y diseñadores Web. Este primer Beta no trae muchos cambios en la apariencia pero si introduce un nuevo motor de renderizado basado en normas y estandares de la industria entre otras caracteristicas. Entre la que se destacan nuevas herramientas para los desarrolladores , activities y webslides.
Como pueden ver la UI del explorer no han habido cambios significativos, la primera vez que corremos el explorer nos saldra la ventana de Setup para configurar nuestro explorer.
Activities
Activities son nuevas vias que nos brinda internet explorer 8 a los desarrolladores para usar servicios de otros portales web eliminando asi la necesidad de copiar y pegar informacion hacia otro website, me explico anteriormente uno necesitaba copiar una direccion y encontrar la localizacion de dicha direccion en live maps, ahora con activities en IE8 simplemente seleccionamos el texto que contiene la direccion, entonces nos saldra un menu donde estaran las opciones posibles que podriamos hacer con el texto seleccionado, en este caso seleccionamos "Map with live maps" y esta nos brinda un preview del resultado de la opcion seleccionada. Microsoft nos brinda tambien la posibilidad de agregar nuevos activity providers para mas info http://ie.microsoft.com/activities/en-en/Default.aspx
Video
Webslides
Los Webslides es otra de las nuevas caracteristicas de IE8 permitiendo esta suscribirse a las actualizaciones de un website. Una de los casos donde es bastante util es en ebay. Con los webslides podemos ver de manera facil y si estar actualizando la ventana de ebay los cambios que esta teniendo el producto al cual nos hemos suscribido. La misma caracteristica tambien se puede usar en facebook y otros portales.
Video
Este primer beta del internet explorer esta orientado mas como dije al principio a diseñadores y desarrolladores web, muchos portales no se podran ver de manera correcta debido a los cambios en el motor de renderizacion que nos trae IE8. Gracias a Dios y a Microsoft se creo la opcion para emular el IE7 y usar el motor anterior al IE8. Asi que hay que esperar los nuevos cambios y retos que nos traera microsoft con el internet explorer y no desesperarze y juzgar antes de tiempo como han hechos muchos que ya han catalogado al internet explorer 8 como una decepcion total, al parecer se les ha olvidado el significado de Beta y se dejan llevar por el odio despiadado hacia microsoft dejando asi de ser objectivos :P, espero que tambien analizen otras compañias donde a mi entender tienen una pecera de Pez Beta estando casi todos sus productos por mas de 2 y 3 años en fase beta.
Saludos y bendiciones!!! 😉