jueves, 19 de febrero de 2015

Crecimiento del tamaño de la base de datos como una lista

Descripción:

Este script de Transact-SQL usa la historia de copias de respaldo para analizar el crecimiento del tamaño de las bases de datos sobre un periodo determinado de tiempo. También se calcula adicionalmente el mínimo, máximo y promedio de crecimiento de tamaño mensual en relación al mes anterior. Estos valores son útiles para el planeamiento futuro de recursos de almacenamiento y sistemas de copias de seguridad. Este script trabaja en Microsoft SQL Server 2005 y versiones superiores en todas las ediciones.


Requerimientos:

  • Este script requiere acceso y permiso de lectura sobre la base de datos del sistema msdb.


Solución:

-- Script T-SQL para analizar el crecimiento de tamaño de la base de datos utilizando la historia de copias de respaldo.
DECLARE @endDate DATETIME, @months smallint;
SET @endDate = GETDATE();    -- Incluir las estadísticas de las copias de respaldo de hoy.
SET @months = 6;            -- hasta 6 meses atrás.

;WITH HIST AS
  
(SELECT BS.database_name AS DatabaseName
          
,YEAR(BS.backup_start_date) * 100
          
+ MONTH(BS.backup_start_date) AS YearMonth
          
,CONVERT(numeric(10, 1), MIN(BF.file_size / 1048576.0)) AS MinSizeMB
          
,CONVERT(numeric(10, 1), MAX(BF.file_size / 1048576.0)) AS MaxSizeMB
          
,CONVERT(numeric(10, 1), AVG(BF.file_size / 1048576.0)) AS AvgSizeMB
    
FROM msdb.dbo.backupset AS BS
        
INNER JOIN
        
msdb.dbo.backupfile AS BF
            
ON BS.backup_set_id = BF.backup_set_id
    
WHERE NOT BS.database_name IN
              
('master', 'msdb', 'model', 'tempdb')
          AND
BF.file_type = 'D'
          
AND BS.backup_start_date BETWEEN DATEADD(mm, - @months, @endDate) AND @endDate
    
GROUP BY BS.database_name
            
,YEAR(BS.backup_start_date)
            ,
MONTH(BS.backup_start_date))SELECT MAIN.DatabaseName
      
,MAIN.YearMonth
      
,MAIN.MinSizeMB
      
,MAIN.MaxSizeMB
      
,MAIN.AvgSizeMB
      
,MAIN.AvgSizeMB
      
- (SELECT TOP 1 SUB.AvgSizeMB
          
FROM HIST AS SUB
          
WHERE SUB.DatabaseName = MAIN.DatabaseName
                
AND SUB.YearMonth < MAIN.YearMonth
          
ORDER BY SUB.YearMonth DESC) AS GrowthMBFROM HIST AS MAINORDER BY MAIN.DatabaseName
        
,MAIN.YearMonth;
GO    



Referencias

Mover los archivos de base de datos de SQL Server a otra ubicación vía T-SQL.

SQL Server 2000

-- Cambiar al contexto de la base de datos master
USE MASTER;
GO

-- Llevar la base de datos a single user mode
-- Esto termina todas las conexiones a la base de datos
ALTER DATABASE dbTest SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
GO

-- Desacoplar la base de datos
EXEC MASTER.dbo.sp_detach_db @dbname = N'dbTest'
GO

--
-- Mover el o los archivos físicos de la base de datos manualmente a la nueva ruta.
-- ej.: x:\move e:\dbTest.mdf e:\NuevaRuta\dbTest.mdf
--

-- Re-acoplar la base de datos
CREATE DATABASE [TestDB] ON
(FILENAME = N'E:\RutaNueva\dbTest.mdf' ),
(
FILENAME = N'E:\RutaNueva\dbTest_log.ldf' )
FOR ATTACH
GO

SQL Server 2005, 2008, 2008 R2 o superior (Misma instancia)

-- Cambiar al contexto de la base de datos master
USE MASTER;
GO

-- Cambiar el estado de la base de datos a modo de usuario único
ALTER DATABASE dbTest SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
GO

-- Cambiar el estado de la base de datos a fuera de línea
ALTER DATABASE dbtest SET OFFLINE;
GO

--
-- Mover el o los archivos físicos de la base de datos manualmente a la nueva ruta.
-- ej.: x:\move e:\dbTest.mdf e:\NuevaRuta\dbTest.mdf
--

-- Re-apunta la ruta del archivo mdf a la nueva ubicación
ALTER DATABASE dbTest
MODIFY
FILE
  
(NAME='dbTest', FILENAME='E:\NuevaRuta\dbTest.mdf');

-- Re-apunta la ruta del archivo ldf a la nueva ubicación
ALTER DATABASE dbTest
MODIFY
FILE
  
(NAME='dbTest_Log', FILENAME='E:\NuevaRuta\dbTest_log.ldf');
GO

-- Cambiar el estado de la base de datos a en-línea
ALTER DATABASE TEMP SET ONLINE;
GO

-- Cambiar el estado de la base de datos a modo multi-usuario
ALTER DATABASE TEMP SET MULTI_USER;
GO

SQL Server 2005, 2008, 2008 R2 o superior (Instancia diferente)

-- Cambiar al contexto de la base de datos master
USE MASTER;
GO

-- Desacoplar la base de datos
EXEC sp_detach_db @dbname = N'dbTest';

--
-- Mover el o los archivos físicos de la base de datos manualmente a la nueva ruta.
-- ej.: x:\move e:\dbTest.mdf e:\NuevaRuta\dbTest.mdf
--

-- Reacoplar la base de datos con los archivos en la nueva instancia y nueva ubicación
CREATE DATABASE dbTest
      
ON(NAME='dbTest',
            
FILENAME='e:\NuevaRuta\dbTest.mdf')
      
LOG ON(NAME='MyDatabase_Log',
            
FILENAME='e:\NuevaRuta\dbTest_log.ldf')
      
FOR ATTACH
      
WITH ENABLE_BROKER;
GO

Referencias

martes, 5 de noviembre de 2013

Creando un Servidor Vinculado de SQL Server a SQLite para Importar Datos

Problema

En la actualidad utilizamos y desarrollamos un sinnúmero de aplicaciones basadas en tecnologías móviles y el motor de base de datos por excelencia para este tipo de aplicaciones es SQLite, líder indiscutible en este segmento de tecnológico. En ocasiones nos veremos obligados a importar datos desde SQLite hacia SQL Server, y este artículo tiene como finalidad mostrar una guía paso a paso de cómo realizar esta tarea que ha cobrado tanta importancia en estos momentos donde el auge de las aplicaciones para dispositivos móviles crece a un ritmo muy acelerado.

Solución

Existen varias formas alternativas de como importar los datos desde SQLite hacia SQL Server, nosotros como solución implementaremos un Linked Server hacia SQLite.

Dividiremos esta solución en los siguientes pasos:

  1. Descargar un controlador ODBC para SQLite
  2. Instalar el controlador
  3. Crear un DSN a nivel de sistema para la base de datos en SQLite
  4. Crear el Linked Server en SQL Server
  5. Seleccionar los datos de la fuente e insertarlos en nuestra tabla en SQL Server

  1. Descargar un controlador ODBC para SQLite
  2. Ir a esta página donde se encuentra el controlador ODBC para SQLite. Configurar el controlador correcto es algunas veces la parte más difícil, por lo que recomendamos descargar ambos controladores tanto el de 32 como el de 64 bits.

  3. Instalar el controlador
  4. Elija el controlador que le corresponda dependiendo de si su sistema operativo es de 32 o 64 bits y ejecute el archivo ejecutable (.exe) correspondiente.















  5. Crear un DSN a nivel de sistema para la base de datos en SQLite

  6. Presione Inicio -> Ejecutar y luego digite odbcad32 y presione retorno (enter) para el administrador odbc de 64 bits.


    Presione Inicio -> Ejecutar y luego digite C:\Windows\SysWOW64\odbcad32.exe y presione retorno (enter) para el administrador odbc de 32 bits.


    Haga click en la pestaña DSN de Sistema (System DSN).


    Haga click en agregar (add).

    Seleccione el controlador apropiado.


    Enter your SQLite database path. Note that some of the options are documented at the driver site. I suggest leaving them as they are initially. Introduzca la ruta a su base de datos de SQLite. Note que las opciones estan documentadas en sitio web del controlador.


    Notice the 32 bit driver is only editable from a 32 bit administrator and the 64 bit driver is only editable from the 64 bit administrator. Note que el controlador de 32 bits solo es editable desde el administrador de 32 bit, así como el controlador de 64 bits solo es editable desde el administrador de 64 bits.


    Note que los botones remover (remove) y configurar (configure) estan deshabilitados.


  7. Crear el Linked Server en SQL Server

  8. A continuación mostramos el código T-SQL para crear el Linked Server a nuestra base de datos SQLite. Este tipo de Linked Server no necesita cuenta de acceso (Login) ni tampoco ningún contexto de seguridad.

    USE [master]
    GO
    EXEC sp_addlinkedserver
      
    @server = 'Mobile_Phone_DB_64', -- Nombre con el que identificaras el Link Server en SSMS
      
    @srvproduct = '', -- Puede estar en blanco pero no puede ser NULL
      
    @provider = 'MSDASQL',
      
    @datasrc = 'Mobile_Phone_DB_64' -- El nombre de la conexión DSN de Sistema
    GO

  9. Seleccionar los datos de la fuente e insertarlos en nuestra tabla en SQL Server

  10. Ahora haga click sobre el Linked Server y navegue hasta encontrar las tablas, luego simplemente ejecute sus consultas sobre las tablas.

    SELECT *
    FROM OPENQUERY(Mobile_Phone_DB_64 , 'select * from db_notes')
    GO


    Ahora usted puede utilizar una consulta con la clausula INTO para crear tablas con los datos que usted requiera en SQL Server.

    SELECT * INTO SQLite_Data -- Esto crea una tabla nueva con los datos seleccionados
    FROM OPENQUERY(Mobile_Phone_DB_64 , 'select * from db_notes')
    GO


    Luego verifique los tipos de datos en su tabla destino en SQL Server y cambie por los tipos correspondientes.

Referencias