viernes, 20 de febrero de 2015

Obtener la cuenta de servicio de Microsoft SQL Server con T-SQL

Descripción:
La información de la cuenta del servicio de SQL Server es almacenada en la base de datos del Registro de Windows. Usted puede acceder a dicha información desde la Consola de Servicios (Services Console) o el Administrador de Configuración de SQL Server (SQL Server Configuration Manager).

Solución:
Para obtener la información de la cuenta desde la Consola de Servicios:
  1. Ir a Inicio > Ejecutar > services.msc
  2. Click derecho sobre el Servicio SQL Server, ej. "SQL Server (InstanceName) e ir a Propiedades
  3. La información de la cuenta esta disponible en la pestaña Log On:

También podemos obtener esta información usando T-SQL, podemos utilizar el procedimiento almacenado extendido del sistema xp_instance_regread para leer el Registro de Windows. Utilice el código siguiente para obtener la información de las cuentas del los servicios SQL Server y SQL Server Agent:

DECLARE       @sql_server_service_account         SYSNAME;DECLARE       @sql_server_agent_service_account   SYSNAME;
EXECUTE       MASTER.dbo.xp_instance_regread
              
@rootkey      = N'HKEY_LOCAL_MACHINE',
              
@key          = N'SYSTEM\CurrentControlSet\Services\MSSQLServer',
              
@value_name   = N'ObjectName',
              
@value        = @sql_server_service_account OUTPUT
EXECUTE       MASTER.dbo.xp_instance_regread
              
@rootkey      = N'HKEY_LOCAL_MACHINE',
              
@key          = N'SYSTEM\CurrentControlSet\Services\SQLServerAgent',
              
@value_name   = N'ObjectName',
              
@value        = @sql_server_agent_service_account OUTPUT
SELECT [SQL Server Service Account] = @sql_server_service_account,
      
[SQL Server Agent Service Account] = @sql_server_agent_service_account;GO


Desde Microsoft SQL Server 2008 R2 SP1 y superior una nueva vista de administración dinámica (DMV) esta disponible sys.dm_server_services la cual retorna la información de las cuentas de servicio de todas las instancia. Esta vista también retorna información adicional acerca de cada servicio como tipo de inicio, process id actual, nombre físico del ejecutable. Para consultar espec&iacuteficamente las cuentas de los servicios SQL Server y SQL Server Agent con esta vista podemos utilizar la siguiente consulta:

SELECT servicename, service_accountFROM   sys.dm_server_services
GO


Referencias

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