<object data="data:application/x-silverlight-2" type="application/x-silverlight-2" width="864" height="468">
<object data="data:application/x-silverlight-2," type="application/x-silverlight-2" width="864" height="468">
marzo 23rd, 2011
admin <object data="data:application/x-silverlight-2" type="application/x-silverlight-2" width="864" height="468">
<object data="data:application/x-silverlight-2," type="application/x-silverlight-2" width="864" height="468">
marzo 21st, 2011
admin
marzo 17th, 2011
admin Type t = typeof(System.Windows.Media.Brushes); PropertyInfo[] colors = t.GetProperties();
List<Border> colores = new List<Border>();
foreach (PropertyInfo pColor in colors)
{
BrushConverter conversor = new BrushConverter();
Brush brocha = (Brush)conversor.ConvertFromString(pColor.Name);
Border borde = new Border();
borde.Width = 20;
borde.Height = 20;
borde.Background = brocha;
colores.Add(borde);
}
listBox1.ItemsSource=colores;
febrero 11th, 2011
admin
febrero 11th, 2011
admin
diciembre 13th, 2010
admin Se encuentran en las dll
POdemos utilizar el programa Anolis Resource para extraer los iconos
diciembre 10th, 2010
admin Los alumnos serán de los primeros en certificarse en .NET 4
Comienzo el 10 de enero de 2011
Final el 27 de julio de 2011
Acceso Gratuito a 5 exámenes de certificación:
septiembre 9th, 2010
admin 1.- Resetear el estado “Sospechosa” de una base de datos.
use master
go
– Restablece el estado de una base de datos sospechosa.
exec sp_resetstatus pruebatraking
2.- Reparar Tablas
ALTER DATABASE pruebatraking SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
DBCC CHECKTABLE (‘tabla’,’REPAIR_ALLOW_DATA_LOSS’) WITH TABLOCK
ALTER DATABASE pruebatraking SET MULTI_USER;
3.- Reparar la Base de Datos
ALTER DATABASE pruebatraking SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
DBCC CHECKDB (‘pruebatraking’,’REPAIR_ALLOW_DATA_LOSS’)
ALTER DATABASE pruebatraking SET MULTI_USER;
1.- Ejecutar diariamente
DBCC CHECKDB (bd) with NO_INFOMSGS
Si la BD es muy grande y la ejecución anterior tarda mucho:
DBCC CHECKDB (bd) With PHYSICAL_ONLY
Esto hará que sólo se haga un control físico de la estructura del disco.
2.- Qué hacer ante un problema.
Sin duda, lo mejor es restaurar desde una copia de seguridad.
3.- Investigar páginas afectadas.
DBCC CHECKDB (‘bd’)
Object ID 2088535921, Id. de índice 0, ID de la partición 72345201021503994, unidad Alloc ID 72345201051571606 (tipo A-fila de datos): Página (1:94299) no pudo ser procesada. See other errors for details. Ver otros errores para más detalles.
Msg 8939, Level 16, State 98, Line 1 Mensaje 8939, Nivel 16, Estado 98, Línea 1
Table error: Object ID 2088535921, index ID 0, partition ID 72345201021503994, alloc unit ID 72345201051571606 (type In-row data), page (1:94299). Error de tabla: Id. de objeto 2088535921, Id. de índice 0, ID de la partición 72345201021503994, unidad Alloc ID 72345201051571606 (tipo A-fila de datos), página (1:94299). Test (IS_OFF (BUF_IOERR, pBUF->bstat)) failed. Test (IS_OFF (BUF_IOERR, pBUF-> BSTAT)) ha fallado.
CHECKDB found 0 allocation errors and 2 consistency errors in table ‘yourtable’ (object ID 2088535921). CHECKDB encuentra 0 errores de asignación y 2 errores coherencia en la tabla ‘yourtable’ (identificador de objeto 2088535921).
CHECKDB found 0 allocation errors and 2 consistency errors in database ‘yourdb’. CHECKDB encuentra 0 errores de asignación y 2 errores coherencia en base de datos ‘yourdb.
repair_allow_data_loss is the minimum repair level for the errors found by DBCC CHECKDB (yourdb). REPAIR_ALLOW_DATA_LOSS es el nivel mínimo para reparar los errores encontrados por DBCC CHECKDB (yourdb).
Sabemos que la página con errores es 1:94299
Lo primero es ver si se tratan de datos en un montón, en un índice agrupado o e uno no agrupado.
En el texto se puede ver que es el índice con Id 0
Tambien podriamos examinar la página asÍ:
DBCC TRACEON (3604, – 1) // Errores por pantalla
GOGO
DBCC PAGE ( ‘yourdb’ , 1 , 94299 , 3 )DBCC PAGE (bd, 1, 94299, 3)
GOGO
En la salida podrás ver algo como:
Metadata: IndexId = n Metadatos: = n IndexId
If n is greater than 1 it is a non-clustered index and can safely be dropped and recreated. Si n es mayor que 1 es un índice no agrupado y con seguridad se puede quitar y volver a crear. If n is 0 or 1 you have data corruption and need to perform one of the options described below. Si n es 0 ó 1 usted tiene daños en los datos y la necesidad de realizar una de las opciones descritas a continuación.
4.- Restaurar a partir de una copia
Si sólo unas pocas páginas que se ven afectados tienen la opción de restaurar de forma selectiva sólo las páginas mal, de la siguiente manera.
RESTORE DATABASE yourdb PAGE = ’1:94299′
FROM DISK = ‘C:\yourdb.bak’
WITH NORECOVERY
Si el modelo de recuperación es simple no tiene esa opción
5.- Opciones de Restauración Automática (Cuando no hay otra posibilidad)
Haremos una copia de seguridad antes de nada.
En la información de DBCC CHECKDB (‘bd’) nos indicará el nivel mínimo de reparación.
Si el nivel de reparación mínima es REPAIR_REBUILD hemos tenido suerte.:
DBCC CHECKDB (‘Nombre de DB’, REPAIR_REBUILD)
Sino:
DBCC CHECKDB (‘Nombre de DB, REPAIR_ALLOW_DATA_LOSS)The syntax is
En este caso se pueden perder datos y es probable que haya problemas de Integridad Referencial. Se recomienda ejecutar después:
DBCC CHECKCONSTRAINTS
6.- Resumen
La acción correcta frente a la corrupción es casi siempre de restaurar desde una copia de seguridad. Only use the automatic repair options as a last resort, and with full understanding of the damage this may do. Sólo use las opciones de rep
septiembre 5th, 2010
admin
La captura de datos modificados registra la actividad de inserción, actualización y eliminación que se aplica a las tablas de SQL Server. Esto hace que los detalles de estos cambios estén disponibles en un formato relacional de fácil uso. La información de las columnas y los metadatos que se necesitan para aplicar los cambios a un entorno de destino se capturan para las filas modificadas y se almacenan en tablas de cambios que reflejan la estructura de columnas de las tablas de origen sometidas a seguimiento. Se proporcionan funciones con valores de tabla para permitir el acceso sistemático a los datos modificados por los consumidores.
El origen de datos modificados para la captura de datos modificados es el registro de transacciones SQL. A medida que se aplican las inserciones, actualizaciones y eliminaciones a las tablas de origen sometidas a seguimiento, se agregan al registro las entradas que describen esos cambios. El registro actúa como entrada para el proceso de captura de datos modificados. Así, se lee el registro y se agrega información sobre un cambio a la tabla de cambios asociada de la tabla sometida a seguimiento. Se proporcionan funciones para enumerar los cambios que aparecen en las tablas de cambios sobre un intervalo especificado, que devuelven la información en forma de un conjunto de resultados filtrado. Un proceso de aplicación utiliza normalmente el conjunto de resultados filtrado para actualizar una representación del origen en algún entorno externo.
Al habilitar una base de datos para CDC se crea en esa base de datos un esquema denominado cdc y un usuario con el mismo nombre, así como las tablas de metadatos necesarios para el funcionamiento.
Usaremos el siguiente procedimiento almacenado:
sys.sp_cdc_enable_db
De esta forma:
USE AdventureWorks;
GO
EXECUTE sys.sp_cdc_enable_db;
GO
A continuación, y tras haber comprobado que el servicio Sql Server Agent está iniciado, será el momento de habilitar las tablas que queremos auditar.
Las tablas de origen se pueden identificar como tablas sometidas a seguimiento mediante el uso del procedimiento almacenado sys.sp_cdc_enable_table .
Cuando una tabla se habilita para la captura de datos modificados, se crea una instancia de captura asociada para admitir la diseminación de los datos modificados en la tabla de origen. La instancia de captura está compuesta de una tabla de cambios y de dos funciones de consulta, como máximo. Los metadatos que describen los detalles de configuración de la instancia de captura se conservan en las siguientes tablas de metadatos de captura de datos modificados: cdc.change_tables, cdc.index_columns y cdc.captured_columns.
USE pruebacdc;
GO
EXECUTE sys.sp_cdc_enable_table
@source_schema = N’dbo’
, @source_name = N’tabla’
, @role_name = null;
GO
Se crean dos trabajos en el Agente, uno para la captura y otro para la limpieza de los datos
Se crean dos funciones para obtener la información de los cambios
Devuelve una fila para cada cambio aplicado a la tabla de origen dentro del intervalo del número de secuencia de registro (LSN) especificado. Si una fila de origen ha tenido muchos cambios durante el intervalo, cada cambio se representa en el conjunto de resultados devuelto. Además de devolver los datos del cambio, cuatro columnas de metadatos proporcionan la información que necesita aplicar los cambios a otro origen de datos. Las opciones de filtrado de filas rigen el contenido de las columnas de metadatos y de las filas devueltas en el conjunto de resultados. Cuando se especifica la opción de filtro de filas ‘all’, cada cambio tiene exactamente una fila para identificar el cambio. Cuando se especifica la opción ‘all update old’, las operaciones de actualización se representan como dos filas: una que contiene los valores de las columnas capturadas antes de la actualización y otra que contiene los valores de las columnas capturadas después de la actualización.
select * from cdc.fn_cdc_get_all_changes_dbo_tabla(0x0000001C0000014C003E,0×00000021000001650004,’all’)
En el resultado obtenemos las modificaciones, especial atención a la columna operation
1 = eliminar
2 = insertar
3 = actualizar (valor antes de la operación de actualización). Este valor sólo se aplica cuando la opción de filtro de filas ‘all update’ se especifica.
4 = actualizar (valor después de la operación de actualización)
Devuelve una fila de cambio de red para cada fila de origen cambiada dentro del intervalo de LSN especificado. Es decir, cuando una fila de origen tiene varios cambios durante el intervalo de LSN, la función devuelve una fila única que refleja el contenido final de la fila. Por ejemplo, si una transacción inserta una fila en la tabla de origen y una transacción subsiguiente dentro de intervalo de LSN actualiza una o más columnas en esa fila, la función devuelve solo una fila, que incluye los valores de columna actualizados.
Como estas dos funciones utilizan los lsn del archivo de log para marcar un rango de petición de datos, nos podemos ayudar de estas funciones
Devuelve el número de secuencia de registro mínimo (LSN) de la columna start_lsn en la tabla del sistema cdc.change_tables para la instancia de captura especificada. Puede utilizar esta función para devolver el extremo inferior de la escala de tiempo de captura de los datos del cambio para una instancia de captura.
select sys.fn_cdc_get_min_lsn(‘dbo_tabla’);
go
Devuelve el número de secuencia de registro máximo (LSN) de la columna start_lsn en la tabla del sistema de cdc.lsn_time_mapping. Puede utilizar esta función para devolver el extremo alto de la escala de tiempo de captura de los datos del cambio para cualquier instancia de captura.
select sys.fn_cdc_get_max_lsn();
go
Devuelve el valor del número de secuencia de registro (LSN) desde la columna start_lsn en la tabla del sistema cdc.lsn_time_mapping para la fecha y hora especificadas. Puede usar esta función para asignar sistemáticamente los intervalos de fecha y hora en el intervalo basado en LSN
sys.fn_cdc_map_time_to_lsn ( ‘<relational_operator>‘ , tracking_time )
<relational_operator> ::=
{ largest less than
| largest less than or equal
| smallest greater than
| smallest greater than or equal
}
select sys.fn_cdc_map_time_to_lsn(‘largest less than’,’2010-05-09 18:20:00.000′);
FORMATO: ‘año-dia-mes’
select name from sys.databases where is_cdc_enabled=1
use pruebacdc
go
select name from sys.tables where is_tracked_by_cdc=1
go
Deshabilita la captura de datos modificados para la tabla de origen especificada y la instancia de captura en la base de datos actual. La captura de datos modificados sólo está disponible en las ediciones Enterprise, Developer y Evaluation de SQL Server 2008.
use pruebacdc
go
exec sys.sp_cdc_disable_table ‘dbo’,'tabla’,'all’
Deshabilita la captura de datos modificados en la base de datos actual. La captura de datos modificados solo está disponible en las ediciones Enterprise, Developer y Evaluation de SQL Server 2008.
–Creamos la base de datos de prueba
CREATE DATABASE [pruebacdc] ON PRIMARY
( NAME = N’pruebacdc’, FILENAME = N’C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\pruebacdc.mdf’ , SIZE = 3072KB , MAXSIZE = UNLIMITED, FILEGROWTH = 1024KB )
LOG ON
( NAME = N’pruebacdc_log’, FILENAME = N’C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\pruebacdc_log.ldf’ , SIZE = 2048KB , MAXSIZE = 2048GB , FILEGROWTH = 10%)
GO
– Creamos la tabla
USE [pruebacdc]
GO
/****** Object: Table [dbo].[tabla] Script Date: 09/05/2010 16:53:45 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[tabla](
[id] [int] IDENTITY(1,1) NOT NULL,
[nombre] [nvarchar](50) NULL,
[apellidos] [nvarchar](50) NULL,
CONSTRAINT [PK_tabla] PRIMARY KEY CLUSTERED
(
[id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
– Activamos CDC a nivel de base de datos
USE pruebacdc;
GO
EXECUTE sys.sp_cdc_enable_db;
GO
– Activamos CDC para la tabla
USE pruebacdc;
GO
EXECUTE sys.sp_cdc_enable_table
@source_schema = N’dbo’
, @source_name = N’tabla’
, @role_name = null;
GO
– Obtenemos información sobre los metadatos de captura
select * from cdc.change_tables
go
select * from cdc.captured_columns
go
select * from cdc.index_columns
go
–Obtenemos el lsn inicial para tabla
select sys.fn_cdc_get_min_lsn(‘dbo_tabla’);
go
– obtenemos el ultimo lsn de captura
select sys.fn_cdc_get_max_lsn();
go
– lsn de todas las confirmaciones
select * from cdc.lsn_time_mapping
– obtenemos todos los cambios (estará vacio)
select * from cdc.fn_cdc_get_all_changes_dbo_tabla(0x000000190000034A003A,0x000000190000034A003A,’all’)
– insertamos 2 registros
insert into tabla (nombre,apellidos) VALUES(‘nombre1′,’apellido1′)
insert into tabla (nombre,apellidos) VALUES(‘nombre2′,’apellido2′)
insert into tabla (nombre,apellidos) VALUES(‘nombre3′,’apellido3′)
–Obtenemos el lsn inicial para tabla
select sys.fn_cdc_get_min_lsn(‘dbo_tabla’);
go
– obtenemos el ultimo lsn de captura
select sys.fn_cdc_get_max_lsn();
go
– lsn de todas las confirmaciones
select * from cdc.lsn_time_mapping
select * from cdc.fn_cdc_get_all_changes_dbo_tabla(0x000000190000034A003A,0x0000001B000003060004,’all’)
– Hacemos actualización
update tabla set nombre=’nombre11′ where id=1;
–Obtenemos el lsn inicial para tabla
select sys.fn_cdc_get_min_lsn(‘dbo_tabla’);
go
– obtenemos el ultimo lsn de captura
select sys.fn_cdc_get_max_lsn();
go
select * from cdc.fn_cdc_get_all_changes_dbo_tabla(0x000000190000034A003A,0x0000001B000003200004,’all update old’)
go
select * from cdc.fn_cdc_get_all_changes_dbo_tabla(0x000000190000034A003A,0x0000001B000003200004,’all’)
go
– Miramos la hora. (18:20)
– Esperamos un min. Hacemos un cambio
update tabla set nombre=’nombre22′ where id=2;
– (18:21)
–Obtenemos el lsn inicial para tabla
select sys.fn_cdc_get_min_lsn(‘dbo_tabla’);
go
– obtenemos el ultimo lsn de captura
select sys.fn_cdc_get_max_lsn();
go
select * from cdc.fn_cdc_get_all_changes_dbo_tabla(0x000000190000034A003A,0x0000001B000003780004,’all’)
go
– Obtenemos el lsn correspondiente a las 18:20
select sys.fn_cdc_map_time_to_lsn(‘largest less than’,’2010-05-09 18:20:00.000′);
– buscamos desde el lsn de las 18:20 hasta el final
select * from cdc.fn_cdc_get_all_changes_dbo_tabla(0x0000001B000003600001,0x0000001B000003780004,’all’)
go
– obtenemos información de las bases de datos con cdc habilitado
select name from sys.databases where is_cdc_enabled=1
– obtenemos info de las tablas con cdc habilitado
use pruebacdc
go
select name from sys.tables where is_tracked_by_cdc=1
go
– deshabilitar cdc en una tabla
use pruebacdc
go
exec sys.sp_cdc_disable_table ‘dbo’,'tabla’,'all’
go
– deshabilitar cdc en la base de datos
use pruebacdc
go
exec sys.sp_cdc_disable_db
go
abril 16th, 2010
admin <
mobile:Form id=”Form1″ runat=”server”>
<mobile:ObjectList id=”CustomerList” runat=”server”LabelField=”nombre” AutoGenerateFields=”true” TableFields=”nombre”>
<DeviceSpecific Runat=”server”><Choice><ItemDetailsTemplate><mobile:Label ID=”Label1″ Runat=”server” text=’<%#((ObjectListItem)Container)["nombre"] %>‘></mobile:Label><mobile:Label ID=”Label2″ Runat=”server” text=’<%#((ObjectListItem)Container)["precio"] %>‘></mobile:Label><mobile:Label ID=”Label3″ Runat=”server” text=’<%#((ObjectListItem)Container)["categoria"] %>‘></mobile:Label><mobile:Image ID=”imagen” Runat=”server” ImageUrl=’<%# “~/Imagenes/”+((ObjectListItem)Container)["imagen"] %>‘></mobile:Image></ItemDetailsTemplate></Choice></DeviceSpecific></mobile:ObjectList></mobile:Form>