jueves, 10 de mayo de 2018

Listar las tablas de una base de datos, su tamaño en disco, de los datos e indices

Para listar las tablas de una base de datos con información de su tamaño en disco, de los datos e indices y del número de filas se puede hacer uso del siguiente script:
--
--

--

--Cursor que contiene todos los objetos que ocupan espacio
DECLARE objects_cursor CURSOR LOCAL FAST_FORWARD READ_ONLY for
      SELECT s.name + '.' + o.name from sys.schemas s
      INNER JOIN sys.objects o
      ON o.schema_id = s.schema_id
      WHERE
            o.type = 'S' or --Tablas de sistema
            o.type = 'U' or --Tablas de usuario
            o.type = 'V' or --Vistas (solo las indexadas devuelven tamaño)
            o.type = 'SQ' or --Cola de servicio
            o.type = 'IT' -- Tablas internas usadas p.e. por el Service Broker o los indices XML
--Tabla temporal para albergar los resultados
CREATE TABLE #results
      (name_with_schema SYSNAME,
   name SYSNAME, rows CHAR(11),
      reserved VARCHAR(18), data VARCHAR(18),
      index_size VARCHAR(18),Unused VARCHAR(18))

DECLARE @resultado AS TABLE
      (name SYSNAME, rows CHAR(11),
      reserved VARCHAR(18), data VARCHAR(18),
      index_size VARCHAR(18),Unused VARCHAR(18))
--Recorremos el cursor obteniendo la información de espacio ocupado
DECLARE @object_name AS SYSNAME
OPEN objects_cursor
FETCH NEXT FROM objects_cursor
INTO @object_name;
WHILE @@FETCH_STATUS = 0
BEGIN
      INSERT INTO @resultado
            EXEC sp_spaceused @object_name
   
   INSERT INTO #results
   SELECT @object_name, x.* 
   from @resultado as x

   delete from @resultado
   
      FETCH NEXT FROM objects_cursor
            INTO @object_name;    
END;
CLOSE objects_cursor;
DEALLOCATE objects_cursor;
-- Quitamos "KB" para poder ordenar
UPDATE
  #results
SET
  reserved = LEFT(reserved,LEN(reserved)-3),
  data = LEFT(data,LEN(data)-3),
  index_size = LEFT(index_size,LEN(index_size)-3),
  Unused = LEFT(Unused,LEN(Unused)-3)
--Ordenamos la información por el tamaño ocupado
SELECT
  name_with_schema,
  Name,
  reserved AS [Tamaño en Disco (KB)],
  data AS [Datos (KB)],
  index_size AS [Indices (KB)],
  Unused AS [No usado (KB)],
  Rows AS Filas FROM #results
ORDER BY
    name_with_schema,
 name,
  CONVERT(bigint, reserved) DESC

drop table #results


indices sql server
Posted by InfoTacticas Soluciones  |  No comments

5/10/2018 12:11:00 a. m. Share:

0 comentarios:

lunes, 7 de mayo de 2018

Deshabilitar o Habilitar todos los triggers de la base de datos sql server

A continuación muestro un procedimiento almacenado que permite habilitar o deshabilitar todos los triggers de una base de datos, de acuerdo al parámetro booleano: HABILITAR
--
--

CREATE PROCEDURE [dbo].[PROC_HABILITAR_DESHABILITAR_TRIGGERS_BASE]
@HABILITAR bit = 1
AS

 DECLARE @string VARCHAR(8000)
 DECLARE @NombreTabla NVARCHAR(500)
 DECLARE @NombreEsquema NVARCHAR(500)
 DECLARE @instruccion NVARCHAR(500)
 SET @instruccion = CASE WHEN @HABILITAR = 1 THEN 'ENABLE' ELSE 'DISABLE' END

 DECLARE cur CURSOR
 FOR SELECT DISTINCT  sch.name AS nombre_esquema, ta.name as 'nombre_tabla'
 FROM    sys.objects tr
 INNER JOIN sys.schemas sch ON tr.schema_id = sch.schema_id
 inner join  sys.objects ta on tr.parent_object_id = ta.object_id
 where tr.type = 'TR'
 order by sch.name, ta.name

 
 OPEN cur
 FETCH next FROM cur INTO @NombreEsquema, @NombreTabla 
 WHILE @@fetch_status = 0
 BEGIN
 SET @string ='Alter table '+ @NombreEsquema + '.'+@NombreTabla + ' ' + @instruccion + ' trigger all'
 EXEC (@string)
 FETCH next FROM cur INTO @NombreEsquema, @NombreTabla 
 END
 CLOSE cur
 DEALLOCATE cur 
GO


Posted by InfoTacticas Soluciones  |  No comments

5/07/2018 01:55:00 p. m. Share:

0 comentarios:

sábado, 5 de mayo de 2018

Scripts utiles para listar triggers, procedimientos, esquemas

A continuación mostramos varias instrucciones en SQL SERVER que pueden resultar útiles para listar triggers, procedimientos almacenados, vistas, esquemas, etc. Las pruebas siguientes se realizan sobre la base de datos ADVENTUREWORKS.
  • Listar las tablas que tienen triggers
    --
    --
    SELECT name AS tbname, * 
    FROM sysobjects WHERE id IN(SELECT parent_obj FROM sysobjects WHERE xtype='tr')
    
    -- o
    SELECT ta.name AS tbname, * 
    FROM sys.objects ta
    inner join sys.objects tr on ta.object_id = tr.parent_object_id
    WHERE tr.type = 'TR'
    
    

  • Obtener metadata con la definición del esquema de una tabla.
    --
    --
    select * 
    from Information_schema.Columns
    where table_name = 'WorkOrder'
    
    

  • Listar el esquema, la tabla y sus triggers.
    --
    --
    SELECT   sch.name AS nombre_esquema, ta.name as 'nombre_tabla', tr.name as nombre_trigger, tr.object_id, *
    FROM    sys.objects tr
    INNER JOIN sys.schemas sch ON tr.schema_id = sch.schema_id
    inner join  sys.objects ta on tr.parent_object_id = ta.object_id
    where tr.type = 'TR'
    order by sch.name, ta.name
    
    

  • Listar los triggers y si están deshabilitados o no.
    --
    --
    
    SELECT  
           TAB.name as Table_Name 
         , TRIG.name as Trigger_Name
         , TRIG.is_disabled  
    FROM [sys].[triggers] as TRIG 
    inner join sys.tables as TAB on TRIG.parent_id = TAB.object_id 
    --where TRIG.is_disabled = 1
    --t.name in ('WorkOrder', 'Vendor');
    

  • La definición de los triggers de unas tablas.
    --
    --
    
    select so.name, text
    from sysobjects so, syscomments sc
    where type = 'TR'
    and so.id = sc.id
    and so.name like '%WorkOrder%'
    
    

  • Listar los nombres de tablas y su esquema de base de datos.
    --
    --
    SELECT  o.name AS tbname, s.name AS schema_name
    FROM    sys.objects o 
    INNER JOIN sys.schemas s ON o.schema_id = s.schema_id
    WHERE type='U' ORDER BY schema_name,o.name
    
    

  • Listado de objetos según su tipo.
    --
    --
    SELECT schema_Name(schema_id)  as  Nombre_Esquema,
           [name] as Nombre_Objeto,  --  Nombre de la tabla, procedimiento almacenado, vista o función
           [type] as Tipo_Objeto              --  'V' para Vistas, 'U' para Tablas, 'P' para Procedimientos Almacenados, 'FN' para funciones
    FROM sys.objects 
    WHERE [type_desc] IN ( 'USER_TABLE', 'SQL_STORED_PROCEDURE', 'VIEW', 'SQL_SCALAR_FUNCTION')
    AND [name] NOT LIKE 'sp_%'
    AND [name] NOT LIKE 'fn_%'
    ORDER BY 3 DESC,        --  primero el tipo de objeto
            1 ASC,          --  luego el esquema
            2 ASC           --  luego el nombre de la tabla /  función
    
    

  • Listado de triggers y su definición.
    --
    --
    SELECT * FROM SYS.SYSCOMMENTS 
    WHERE TEXT LIKE '%CREATE TRIGGER%'
    
    

  • Listado los indices de todas las tablas de una base de datos.
    --
    --
    SELECT 
          s.name,tab.name as tablename,
                ind.name as indexname  
    FROM 
         sys.indexes ind 
    INNER JOIN 
         sys.tables tab ON ind.object_id = tab.object_id
    INNER JOIN sys.schemas s on tab.schema_id = s.schema_id
    ORDER BY  s.name,tab.name
    
    

sql server
Posted by InfoTacticas Soluciones  |  No comments

5/05/2018 01:59:00 p. m. Share:

0 comentarios:

Listado de Procedimientos Almacenados creados o modificados en cierta fecha

Para listar los procedimientos almacenados listados o modificados a partir de cierta fecha se debe usar el siguiente script:
--
--
SELECT name, o.create_date, o.modify_date, * 
FROM AdventureWorks2012.sys.objects o
WHERE type = 'p' AND name NOT LIKE 'sp_%'
and (convert(date, modify_date) >= '2012-02-01'
or convert(date, create_date) >= '2012-02-01')
ORDER BY o.modify_date DESC


Y si lo que se quiere listar son las vistas, entonces habrá que cambiar type='p' por type='v', y para listar funciones escalares usar type = 'fn' y para funciones de tabla: type = 'tf'
sql server
Posted by InfoTacticas Soluciones  |  No comments

5/05/2018 08:22:00 a. m. Share:

0 comentarios:

Crear Bases de Datos, Modificar y Adjuntar

  1. Crear la base de datos Marketing ubicada en D:\SQL SERVER - practicas, con dos archivos Marketing.mdf y Marketing.ldf
    --
    --
    create database Marketing
    on primary
    (Name= ‘Marketing′, Filename=’D:\SQL SERVER - practicas\Marketing.mdf’,
    Size= 4Mb, MaxSize= 30MB, FileGrowth=10%)
    log on
    (Name=’Marketing_LDF’, Filename=’D:\SQL SERVER - practicas\Marketing.ldf’,
    Size= 4Mb, MaxSize= 30MB, FileGrowth=10%)
    go
    

  2. Crear la base de datos AdventureWorks2012 adjuntando los archivos mdf y ldf
    --
    --
    -- Crear una base de datos AdventureWorks2012 en base al archivo AdventureWorks2012_Data.MDF y AdventureWorks2012_Log.LDF
    
    CREATE DATABASE [AdventureWorks2012] ON (FILENAME = N'D:\SQL SERVER - practicas\BD_AdventureWorks\AdventureWorks2012_Data.mdf') 
    LOG ON (FILENAME = [D:\SQL SERVER - practicas\BD_AdventureWorks\AdventureWorks2012_Log.ldf]) FOR ATTACH
    
    

  3. Cambiar el nombre lógico de un archivo mdf o ldf
    --
    --
    -- Cambiar el nombre lógico de un archivo
    
    ALTER DATABASE AdventureWorks2012  MODIFY FILE
    (NAME='AdventureWorks2012_Data', NEWNAME='AdventureWorks_Data')
    GO
    
    ALTER DATABASE AdventureWorks2012  MODIFY FILE
    (NAME='AdventureWorks2012_Log', NEWNAME='AdventureWorks_Log')
    GO
    

sql server
Posted by InfoTacticas Soluciones  |  No comments

5/05/2018 06:27:00 a. m. Share:

0 comentarios:

PONER OFFLINE Y ONLINE UNA BASE DE DATOS SQL SERVER

Para colocar OFFLINE una base de datos hacer lo siguiente:
--
-- 

alter database AdventureWorks set restricted_user with rollback IMMEDIATE

alter database AdventureWorks set MULTI_USER

alter database AdventureWorks set offline with rollback immediate


Para colocar ONLINE una base de datos hacer lo siguiente:
--
--
alter database AdventureWorks set online


sql server
Posted by InfoTacticas Soluciones  |  No comments

5/05/2018 06:21:00 a. m. Share:

0 comentarios:

viernes, 4 de mayo de 2018

Listar las tablas y las columnas identity de una base de datos sql server

Cuando necesitamos saber cuáles tablas de una base de datos tienen campos identity y cuáles son esos campos, podemos usar el siguiente script:
--
--
SELECT
distinct TABLE_SCHEMA,TABLE_NAME,COLUMN_Name
FROM INFORMATION_SCHEMA.COLUMNS,
sys.Objects so
WHERE
--TABLE_SCHEMA = 'dbo' and
 COLUMNPROPERTY(object_id(TABLE_NAME), COLUMN_NAME, 'IsIdentity') = 1 and
so.Type = 'U' 
ORDER BY TABLE_NAME
sql server
Posted by InfoTacticas Soluciones  |  No comments

5/04/2018 02:30:00 p. m. Share:

0 comentarios:

Revisar contenido de archivos Backup de SQL SERVER

SQL Server ofrece algunos comandos que puedes utilizar con los archivos de copia de seguridad de base de datos para determinar su contenido. Estas opciones incluyen HEADERONLY, FILELISTONLY y LABELONLY.
A continuaciòn se muestra como usar estos comandos para ver el contenido del archivo de backup: AdventureWorksDW2012.bak.
--
--

RESTORE HEADERONLY FROM DISK='D:\SQL SERVER - practicas\BD_AdventureWorks\AdventureWorksDW2012.bak'

RESTORE FILELISTONLY FROM DISK='D:\SQL SERVER - practicas\BD_AdventureWorks\AdventureWorksDW2012.bak'

RESTORE LABELONLY FROM DISK='D:\SQL SERVER - practicas\BD_AdventureWorks\AdventureWorksDW2012.bak'


Se puede utilizar la salida de FILELISTONLY para determinar donde podrían estar las ubicaciones por defecto para los archivos de datos y de registro, los valores de LogicalName y PhysicalName muestran el directorio donde se almacena la base de datos que por defecto puede ser el directorio "C:\Program Files\Microsoft SQLServer\MSSQL.1\MSSQL\Data\". Si el directorio no existe o si deseas especificar otro directorio o nombre de archivo, necesitas utilizar la opción WITH MOVE del comando RESTORE. Esto se puede hacer de la siguiente manera:
--
--
RESTORE DATABASE AdventureWorksDW2012 FROM DISK='D:\SQL SERVER - practicas\BD_AdventureWorks\AdventureWorksDW2012.bak'
WITH FILE = 1,
RECOVERY,
MOVE 'AdventureWorksDW2012' TO 'D:\SQL SERVER - practicas\DATA\AdventureWorksDW2012.mdf',
MOVE 'AdventureWorksDW2012_log' TO 'D:\SQL SERVER - practicas\DATA\AdventureWorksDW2012_Log.ldf'

Para más detalle se puede consultar el siguiente enlace:
http://blog.jmacoe.com/gestion_ti/base_de_datos/que-hay-dentro-archivos-copia-seguridad-sql-server/
sql server
Posted by InfoTacticas Soluciones  |  No comments

5/04/2018 02:17:00 p. m. Share:

0 comentarios:

Get updates in your email box
Complete the form below, and we'll send you the best coupons.

Deliver via FeedBurner
back to top