miércoles, 17 de noviembre de 2010

Versiones de SQL Server: Base de datos

Creo conviene tener a mano este enlace donde se recogen las diferentes versiones de Ms SQL Server.

Muchas gracias a la gente de sqlsecurity.com por mantenerla y actualizarla !!

SQL Server setup media does not support the language of the OS


SQL Server 2008R2 no puede instalarse sobre un sistema operativo en distinto idioma o localización (salvo la versión de SQL en inglés que vale para todos los lenguajes)

Por ejemplo, SQL 2008R2 en español dará este fallo si trata de instalarse en un Windows Server 2003 en Español- Argentina. Es un poco sorprendente, pero así lo han decidido en Micorosot.

Para solventarlo, debe modificarse  la 'configuración regional y de idioma ' (en panel de control) a Español de España. Una vez instalado SQL, ya se puede volver a cambiar


Si lo anterior no aplica, entonces probablemente el problema sea con los ficheros de instalación que pudieran estar corruptos

lunes, 15 de noviembre de 2010

Outlook: Problema con reglas de usuario corruptas

Al crear una nueva regla en Oulook puede aparecer este error:

Una o más reglas no se podrían cargar al servidor de Exchange y que han desactivado. Es posible que algunos de los parámetros no son compatibles o no hay espacio suficiente para almacenar todas sus reglas

Parece ser que Exchange limita a  32K el espacio de almacenamiento para reglas y alertas (a partir de Exchange 2007 hay otros 32 K extra)


Microsoft ofrece un KB con varias solucciones

No sé si fue porque las reglas que habia creado estaban coruuptas o que (igual tras la migración a 2007) pero a  mi lo único que e me funcionó fue eliminar todas las reglas  y volver a recrearlas. No es el tipo de solucción más profesional, pero...

Ir a
inicio - ejectuar -  y ahi escribir  outlook /cleanrules

Outlook se abrirá limpio de reglas  Igual es buena idea exportarlas primero




miércoles, 10 de noviembre de 2010

SQL Server "Denali" CTP1

Microsoft anunció ayer en el marco del Pass Submit 2010, su nuevo proyecto de SQL Server  llamado "Denali". La primera versión ya está disponible para descargar y probar. La versiones disponibles para este "Communitiy Technology Preview 1 son Evaluation y Datacenter.


Habrá que probarlo

martes, 9 de noviembre de 2010

Changing the status to PAUSE/ RESUME for full-text catalog

Si el "Full-Text" search está activo y funcionando en una bbdd veréis en el log de sql entradas similares a estas:

11/09/2010 11:54:22,Backup,Unknown,Database backed up. Database:BBDD creation date(time): 2010/03/22(14:47:32) pages dumped: 2319 first LSN: 627:533:37 last LSN: 627:549:1 number of dump devices: 1 device information: (FILE=1 TYPE=DISK: {'PATH\bbdd201011091151.bak'}). This is an informational message only. No user action is required.

11/09/2010 11:54:20 spid54,Unknown,Changing the status to RESUME for full-text catalog "CATALOGO" (5) in database "BBDD" (49). This is an informational message only. No user action is required.

11/09/2010 11:54:20,spid54,Unknown,Changing the status to PAUSE for full-text catalog "CATALOGO" (5) in database "BBDD" (49). This is an informational message only. No user action is required.


Esto es debido a que SQL hace también copia de seguridad del  catálogo 'full-text' cuando realiza un backup normal de la base de datos. Si el tiempo entre 'pause-resume' es mínimo no hay que preocuparse

( De todas formas, para evitar problemas IO (vamos, que la pausa exceda de lo normal)  es recomendable que los ficheros de full-text no se encuentren en el mismo disco que los backups)

Según la ayuda en línea, SQL lleva, normalmente, estas operaciones a cabo cuando realiza un backup:

  1. Suspende temporalmente el servicio Motor de texto completo de Microsoft para SQL Server (MSFTESQL) y vacía en el disco todos los cambios pendientes en el catálogo de texto. Además, SQL Server detiene cualquier actividad de escritura en el catálogo y pone en cola todos los cambios que todavía no se han procesado al iniciar la copia de seguridad en el registro de notificaciones, de forma que puedan confirmarse estos cambios en los catálogos de texto cuando finalice la copia de seguridad.
    El estado del catálogo se conserva en el disco. En este punto todavía es posible realizar consultas en el catálogo.
  2. Realiza copias de seguridad de todos los datos de tablas y catálogos de texto, registros de seguimiento de cambios y metadatos.
  3. Realiza copias de seguridad de todos los datos, en el registro de transacciones, que han tenido lugar desde el inicio del proceso de copia de seguridad.
  4. Reanuda el servicio MSFTESQL y el llenado de los índices de texto.
Un poco más de información sobre full-text en este enlace (en inglés)
Sobre la propiedad FULLTEXTCATALOGPROPERTY en los libros en linea o aquí tenéis la info

viernes, 5 de noviembre de 2010

SP4 para SQL Server 2005

Microsoft liberó  anteayer  la versión beta  del   Service Pack  4 ( CTP -Customer Technology Preview- en lenguaje Redmon :-)
En esta página   tenéis el anuncio oficial  con  enlaces para descargaros los nuevos SP

jueves, 4 de noviembre de 2010

Trabajos que no pueden ser borrados?

Los trabajos asociados a un plan de mantenimiento continúan ahí una vez borrado el plan. Al tratar de eliminarlos manualmente (ratón, botón derecho) SQL nos muestra:

Attempt to retrieve data for object failed for Server 'XXXXXX'.
(Microsoft.SqlServer.Smo)

The Job 'xxxxxx for DB Maintenance Plan 'xxxxxxx'
  does not exist on the server. (Microsoft.SqlServer.Smo)


SQL Server nos dice que estamos tratando de borrar algo que ya ha sido borrado cuando eliminamos el plan de mantenimiento. EM o Management Studio no refrescan automáticamente. F5 y habrán volado.


Un compañero estuvo hoy dándole vueltas toda la mañana. a este 'problema'  Ay si hubiera preguntado primero al dba!

lunes, 25 de octubre de 2010

Examen SQL Server 70-433

Exámenes gratuitos para preparar la certificación.
Están en inglés

Mover la Tempdb

La tempdb se crea por defecto en el mismo directorio que los binarios de SQL. Una buena (y recomendable) práctica  es separar la tempdb del resto de bbdd.

(en el ejemplo se mueve el archivo mdf a G:\MSSQL\DATA\ y el log  a H:\MSSQL\LOGS\. Los directorios deben existir)

jueves, 14 de octubre de 2010

Seminarios gratuitos online

PragmaticWorks ofrece unos interesantes seminarios online gratuitos (en inglés)
 Más información aquí

jueves, 30 de septiembre de 2010

WZCSVC Error 1068

 Al tratar de iniciar el servicio de Wireless Zero Configuration (WZCSV) salió este error:

Las dependencias a las que hace referencia son RPC (el cual estaba corriendo) y  NDISUIO , que no era capaz de encontrar en la consola


pero si en el registro: 
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\NDISUIO  (HKLM\SYSTEM\... es donde el registro de windows guarda la configuración  los distintos servicios y drivers)

La DWWord  Start tenía valor 4 (deshabilitado)
Una vez cambiado a 1 (autostart), reiniciar el sistema y mi WIFI volvió  a funcionar

SQL Server 2008 Service Pack 2 disponible

En el siguiente blog del equipo de Ms SQL Server tenéis detalles y enlaces
El paquete es sólo para SQL 2008 no SQL 2008 R2

jueves, 23 de septiembre de 2010

Recuperar archivos de CDs, DVDs, discos duros...

JFileRecovery es un magnífico (y gratuito)  programa para recuperar archivos de CDs, DVDs o discos dañados.
Muy recomendable

lunes, 20 de septiembre de 2010

T-SQL y Algoritmos Genéticos

Os pongo  este script como ejemplo de la utilización de T-SQL para programar algoritmos genéticos

Ttrata de calcular la siguiente  función (típico ejemplo):

Maximizar f(x1, x2) = 21.5 + x1 sin(4πx1) + x2 sin(20πx2)
Sujeto a:
-3.0  <- x1 <- 12.1
4.1 <- x2 <- 5.8


Este script está basado en  la solución que Willian Talada aporta  en  “A Genetic Algorithm Sample in T-SQL" para el problema del robot y las latas que plantea Melanie Mitchell en su libro “Complexity: A Guided Tour”, 2009

Para convertir los valores binarios a base 10, el algoritmo utiliza una simple  función definida
de usuario llamada ConvertFromBase

/* Función que convierte cualquier base a base 10
http://dpatrickcaldwell.blogspot.com/2009/05/converting-hexadecimal-or-binary-to.html*/
CREATE FUNCTION ConvertFromBase  
(  
    @value AS VARCHAR(MAX),  
    @base AS BIGINT  
) RETURNS BIGINT AS BEGIN  
  
    -- just some variables  
    DECLARE @characters CHAR(36),  
            @result BIGINT,  
            @index SMALLINT;  
  
    -- initialize our charater set, our result, and the index  
    SELECT @characters = '0123456789abcdefghijklmnopqrstuvwxyz',  
           @result = 0,  
           @index = 0;  
  
    -- make sure we can make the base conversion.  there can't  
    -- be a base 1, but you could support greater than base 36  
    -- if you add characters to the @charater string  
    IF @base < 2 OR @base > 36 RETURN NULL;  
  
    -- while we have characters to convert, convert them and  
    -- prepend them to the result.  we start on the far right  
    -- and move to the left until we run out of digits.  the  
    -- conversion is the standard (base ^ index) * digit  
 WHILE @index < LEN(@value)  
        SELECT @result = @result + POWER(@base, @index) *   
                         (CHARINDEX  
                            (SUBSTRING(@value, LEN(@value) - @index, 1)  
                            , @characters) - 1  
                         ),  
               @index = @index + 1;  
  
    -- return the result  
    RETURN @result;  
  
END  




Debido a las particularidades del lenguaje T-SQL, para simplificar elegí la selección
elitista (sólo los dos mejores)  como mecanismo para obtener los distintos padres. 
El resultado final son dos listas: una que incluye todos los padres, con todos los detalles y otra 
con el valor- número de generación más alto

SET nocount on 
-- declarar tabla variable  que albergará resultados 
DECLARE @results table (secuencia int identity, NumGeneracion int, DNA varchar(33), x1 float, x2 float, valor float) 
 
DECLARE 
  @i int, 
  @dna varchar(33),      -- hijo que estará siendo testeado 
  @loop int, 
  @dna1 varchar(33),    -- mejor hijo 
  @dna2 varchar(33),    -- segundo mejor hijo 
  @Poblacion int,      -- Población que se está evaluando 
  @k1 int, 
  @k2 int, 
  @NumGeneraciones int, 
  @NumDescendencias int 
 
-- Número de generaciones  a evaluar 
SET @NumGeneraciones = 1000    -- generaciones 
SET @NumDescendencias = 1000   -- descendencias 
 
-- Test rápido  
--SET @NumGeneraciones = 100 
--SET @NumDescENDencias = 100 
 
 
-- generar primera población 
SET @loop = @NumDescENDencias 
SET @Poblacion = 1 
 
WHILE @loop > 0 
BEGIN 
  SET @dna=''  
  SET @i=0  
  WHILE @i < 33 -- ya que el cromosoma tendrá una longitud de 33 bits       
    BEGIN  
   
      SET @dna = @dna + CAST(CAST(RAND() * 2 as int) as varchar(1)) -- generamos uno a uno cada bit 
      SET @i = @i+1  
    END 
-- Una vez generado el cromosoma, pasamos a calcular x1, x2 y el valor de f 
 
      DECLARE @valor float 
      DECLARE @var1 dec 
      DECLARE @x1 float 
      DECLARE @x2 float 
      DECLARE @var2 dec 
      SET @var1 = CAST(SUBSTRING(@dna, 1, 18)as dec) -- extraemos 18 primeros bits 
      SET @var2 = CAST (SUBSTRING (@dna,19,15)as dec) -- extraemos restantes 15 
 
-- Convertimos a decimal. Usamos Función personal (código adjunto) 
      SET @x1= CAST( dbo.convertfromBase(@var1,2)as float)  
      SET @x2= CAST( dbo.convertfromBase(@var2,2)as float)  
      SET @x1 = -3+( @x1 * 0.00005760 ) 
      SET @x2 = 4.1+( @x2 * 0.0000518) 
 
      SET @valor = (SELECT 21.5 +( @x1 *sin(4*3.14159*@x1))+(@x2* SIN(20*3.14159*@x2))) 
 
  INSERT INTO @results (NumGeneracion, DNA, x1, x2, valor) SELECT @Poblacion, @dna, @x1, @x2,@valor 
   
  SET @loop = @loop -1 
   
END 
 
 
  
--Loop Generaciones 
WHILE @Poblacion <= @NumGeneraciones 
BEGIN 
  --Aplicamos una selección elitista: salvamos los mejores padres 
   
SELECT @k1 = secuencia FROM @results WHERE NumGeneracion=@Poblacion AND valor = (SELECT max(valor) FROM @results 
WHERE NumGeneracion=@Poblacion) 
 
SELECT @k2 = secuencia FROM @results WHERE NumGeneracion=@Poblacion AND secuencia <> @k1 AND valor = (SELECT 
max(valor) FROM @results WHERE NumGeneracion=@Poblacion AND secuencia <> @k1) 
 
SELECT @dna1 = DNA FROM @results WHERE NumGeneracion=@Poblacion AND valor = (SELECT max(valor) FROM @results WHERE 
NumGeneracion=@Poblacion) 
 
SELECT @dna2 = DNA FROM @results WHERE NumGeneracion=@Poblacion AND DNA <> @dna1 AND valor = (SELECT max(valor) FROM 
@results WHERE NumGeneracion=@Poblacion AND DNA <> @dna1) 
 
  -- Borramos el resto 
  DELETE FROM @results  
  WHERE NumGeneracion = @Poblacion 
  AND secuencia not in (@k1, @k2) 
 
  SET @Poblacion = @Poblacion + 1 
 
  -- hijos loop 
  SET @loop = @NumDescendencias 
     
WHILE @loop > 0 
     
BEGIN 
    -- aproximadamente mitad padre1 -mitad padre2  
    SET @i = CAST(RAND()* 33 as int)+1 
    SET @dna = left(@dna1,@i) + right(@dna2, 33 - @i) 
 
    -- + 5 mutaciones 
    SET @dna=STUFF(@dna,CAST(RAND()* 33 as int)+1,1, CAST(CAST(RAND() * 2 as int) as varchar(1))) 
    SET @dna=STUFF(@dna,CAST(RAND()* 33 as int)+1,1, CAST(CAST(RAND() * 2 as int) as varchar(1))) 
    SET @dna=STUFF(@dna,CAST(RAND()* 33 as int)+1,1, CAST(CAST(RAND() * 2 as int) as varchar(1))) 
    SET @dna=STUFF(@dna,CAST(RAND()* 33 as int)+1,1, CAST(CAST(RAND() * 2 as int) as varchar(1))) 
    SET @dna=STUFF(@dna,CAST(RAND()* 33 as int)+1,1, CAST(CAST(RAND() * 2 as int) as varchar(1))) 
 
    -- hijos nuevos y salvar resultados    
    SET @var1 = CAST(SUBSTRING(@dna, 1, 18)as dec) 
    SET @var2 = CAST (SUBSTRING (@dna,19,15)as dec) 
 
    SET @x1= CAST( dbo.convertFrombase(@var1,2)as float) 
    SET @x2= CAST( dbo.convertFrombase(@var2,2)as float) 
 
    SET @x1 = -3+( @x1 * 0.00005760 ) 
    SET @x2 = 4.1+( @x2 * 0.0000518) 
 
--21.5 + x1 sin(4πx1) + x2 sin(20πx2) 
    SET @valor = (SELECT 21.5 +( @x1 *sin(4*3.14159*@x1))+(@x2* sin(20*3.14159*@x2))) 
 
    INSERT INTO @results (NumGeneracion, DNA, x1, x2, valor) SELECT @Poblacion, @dna, @x1, @x2,@valor 
 
    SET @loop = @loop - 1 
    END 
END 
 
-- Sumario 
SELECT *  
FROM @results 
WHERE NumGeneracion <= @NumGeneraciones 
ORDER BY NumGeneracion asc, valor desc 
 
-- Resultado Final 
SELECT NumGeneracion,(valor)  
FROM @results  
WHERE valor in (SELECT max(valor) FROM  @results) 
ORDER BY NumGeneracion DESC 

viernes, 17 de septiembre de 2010

Error 1053 al instalar SQL Server 2005

El problema de instalar SQL 2005 en una máquina con procesador multinúcleo. Microsoft lo explica aqui.
En mi caso, sólo funcionó copiar  los ficheros Sqlos.dll y sqlservr.exe de otra máquina con SP3 actualizado a la carpeta BINN

Viene todo en el enlace (y en castellano)

:

viernes, 23 de abril de 2010

Failed:(-1073548784)




Failed:(-1073548784) Executing the query "EXECUTE master.dbo.xp_delete_file 0,N'',N'',N'YYY-MM-DD00-006T00:00:00' " failed with the following error: "Error executing extended stored procedure: Invalid Parameter". Possible failure reasons: Problems with the query, "ResultSet" property not set correctly, parameters not set correctly, or connection not established correctly.

Revisar que no dejasteis en blanco la carpeta/path y la extensión cuando creasteis el plan de mantenimiento.