jueves, 8 de febrero de 2018

Cambiar Autenticación windows, cambiar contraseña de usuario sa cuando no se puede conectar a través del Usuario de Windows

Me pasó que cuando instalé SQL SERVER 2012 en el trabajo, lo hice en modo de autenticación mixta, pero como más uso el Management Studio para conectarme a un Servidor de SQL SERVER remoto, entonces con el tiempo olvidé la clave del usuario sa, y lo que es peor no se porqué no podía conectarme con la autenticación de Windows. Entonces googleando, seguí unos pasos de una y otra fuente y llegue a resolver mi problema A continuación les indico que realicé para volver a habilitar el modo de autenticación mixta y cambiar la contraseña al usuario sa.
  1. Conectarse a SQL Server cuando los administradores no tienen acceso
  2. En este enlace detallan como hacer para Iniciar la instancia de SQL Server en modo de usuario único usando las opciones -m, para luego habilitar el modo de autenticación mixto y cambiar la contraseña al usuario sa.
    https://docs.microsoft.com/es-es/sql/database-engine/configure-windows/connect-to-sql-server-when-system-administrators-are-locked-out
    Para esto se tiene que cerrar Management Studio y luego acceder al Administrador de configuración de SQL Server . En el Administrador de configuración de SQL Server, en el panel izquierdo, seleccione Servicios de SQL Server. En el panel derecho, busque la instancia de SQL Server. Haga clic con el botón derecho en la instancia de SQL Server y, después, haga clic en Propiedades. En la pestaña Parámetros de inicio, en el cuadro Especifique un parámetro de inicio, escriba -m y, después, haga clic en Agregar. Haga clic en Aceptar y, después del mensaje para reiniciar, haga clic con el botón derecho en el nombre del servidor; luego, haga clic en Reiniciar. Después de que SQL Server se haya reiniciado, el servidor se encontrará en modo de usuario único.
    A continuación se debe iniciar el Management Studio como administrador.
  3. Cambiar el Modo de Autenticación de Seguridad y Habilitar el Inicio de Sesión sa
  4. En el siguiente enlace se detalla que pasos seguir: https://msdn.microsoft.com/es-es/library/ms188670(v=sql.120).aspx o en: https://es.slideshare.net/KevinFD/habilitacion-de-autentificaion-de-sql?next_slideshow=1
    Sin embargo, resumiré los pasos a seguir:
    Para Cambiar el Modo de Autenticación de Seguridad
    • En el Explorador de objetos de SQL Server Management Studio , haga clic con el botón derecho en el servidor y, después, haga clic en Propiedades.
    • En la página Seguridad , bajo Autenticación de servidor, seleccione el nuevo modo de autenticación del servidor y haga clic en Aceptar.
    • En el cuadro de diálogo SQL Server Management Studio , haga clic en Aceptar para confirmar el requisito de reiniciar SQL Server.
    • En el Explorador de objetos, haga clic con el botón derecho en el servidor y, después, haga clic en Reiniciar. Si el Agente SQL Server se está ejecutando, también debe reiniciarse.

    Para Habilitar el Inicio de Sesión sa
    • En el Explorador de objetos, expanda Seguridad, expanda Inicios de sesión, haga clic con el botón derecho en sa y después haga clic en Propiedades.
    • En la página General , quizás tenga que crear y confirmar una contraseña para el inicio de sesión.
    • En la página Estado , en la sección Inicio de sesión , haga clic en Habilitado y, a continuación, en Aceptar.

    Ambas acciones de Cambiar el Modo de Autenticación de Seguridad y Habilitar el Inicio de Sesión sa también se pueden realizar a través de TRANSACT SQL de la siguiente manera:
    --
    --
    ALTER LOGIN sa ENABLE ;  
    GO  
    ALTER LOGIN sa WITH PASSWORD = '' ;  
    GO  
    

  5. Cambiar SQL Server al modo multiusuario

  6. Primero es necesario Cerrar el Management Studio. Luego tenemos que abrir el Administrador de configuración de SQL Server. En el Administrador de configuración de SQL Server, en el panel izquierdo, seleccione Servicios de SQL Server. En el panel derecho, haga clic con el botón derecho en la instancia de SQL Server y, después, haga clic en Propiedades. En la pestaña Parámetros de inicio, en el cuadro Parámetros existentes, seleccione -m y, después, haga clic en Quitar. Luego, Haga clic con el botón derecho en el nombre del servidor y, después, haga clic en Reiniciar. Ahora debe poder conectarse normalmente con una de las cuentas que es miembro del rol fijo de servidor sysadmin .
Posted by InfoTacticas Soluciones  |  No comments

2/08/2018 09:51:00 a. m. Share:

0 comentarios:

martes, 6 de febrero de 2018

Devolver las entidades que hacen referencia a una entidad determinada, aunque se encuentre en SQL Dinámico

Para devolver las entidades que hacen referencia a una entidad determinada, como una tabla, se utiliza sp_depends en T-SQL. SP_DEPENDS muestra las dependencias de los objetos de la base de datos, tales como las vistas y procedimientos que dependen de una tabla o de una vista, y las tablas y vistas de las que depende la vista o el procedimiento. Las referencias a objetos que no se encuentran en la base de datos actual no se notifican. Sin embargo, se recomienda usar, en lugar de SP_DEPENDS, sys.dm_sql_referencing_entities y sys.dm_sql_referenced_entities.
En mi experiencia prefiero usar las vistas del sistema: syscomments y sysobjects para buscar los objetos que hacen referencia a una tabla o vista en cuestión, la ventaja de hacerlo de este modo es que encuentra las dependencias incluso si estas están en citadas en cadenas de texto a ser usadas en SQL Dinámico.
A continuación muestro ejemplos y resultados de usar las 3 alternativas mencionadas, para encontrar referencias a la tabla sp_depends MIGRACION_INCREMENTAL_TABLAS:
Usando sp_depends
--
--
sp_depends MIGRACION_INCREMENTAL_TABLAS

El Resultado:

Usando sys.dm_sql_referencing_entities
--
--
SELECT referencing_schema_name, referencing_entity_name, referencing_id, referencing_class_desc, is_caller_dependent
FROM sys.dm_sql_referencing_entities ('dbo.MIGRACION_INCREMENTAL_TABLAS', 'OBJECT');
GO


El Resultado:


Usando las vistas syscomments y sysobjects
--
--
select name, c.id, c.text, o.xtype, o.crdate
from syscomments c 
join sysobjects o on c.id = o.id 
where c.TEXT like '%MIGRACION_INCREMENTAL_TABLAS%' 


El Resultado:

Además, se puede apreciar que sp_depends no lista todos los procedimientos almacenados que dependen de la tabla de ejemplo, he tenido que borrar el procedimiento almacenado y volverlo a generar para que lo reconozca, como en el caso del procedimiento: PROC_MIGRACION_INCREMENTAL_CONSULTAR. El Procedimiento Almacenado: proc_prueba no es listado por sp_depends porque la referencia a la tabla está en una variable de texto.
--
--
create procedure proc_prueba
as
begin
 DECLARE @VARIABLE nvarchar(2000)
 set @VARIABLE = 'select * from MIGRACION_INCREMENTAL_TABLAS'
end 

Posted by InfoTacticas Soluciones  |  No comments

2/06/2018 06:09:00 a. m. Share:

0 comentarios:

domingo, 4 de febrero de 2018

Reorganizar y volver a generar índices - optimizar la consulta de datos - PARTE 1

Los indices de una tabla, por ejemplo la tabla Department del esquema HumanResources de la base de datos AdventureWorks2012, se pueden listar con la siguiente instrucción:
--
--
use AdventureWorks2012
GO;

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
where tab.name = 'Department' and s.name = 'HumanResources'
ORDER BY  s.name,tab.name

Cada vez que se realizan operaciones de inserción, actualización o eliminación de los datos de una tabla, el motor de base de datos de SQL Server da mantenimiento a los indices de dicha tabla. Sin embargo, con el tiempo la información del índice se dispersa por la base de datos, es decir, se fragmenta, ocasionando que la ordenación lógica que está basada en el valor de clave no coincida con la ordenación física dentro del archivo de datos. Cuando los índices están muy fragmentados hay mayor probabilidad de que las consultas a los datos de la tabla sean lentas. La fragmentación del índice se soluciona reorganizándolo o volviéndolo a generar. El proceso de volver a generar un índice quita y vuelve a crear el índice. Para saber si los índices de una tabla están fragmentados podemos usar la siguiente consulta:
--
--
SELECT a.index_id, name as nombre_indice, avg_fragmentation_in_percent  as porcentaje_fragmentacion
FROM sys.dm_db_index_physical_stats (DB_ID(N'BD_TRIBUTACION'), 
      OBJECT_ID(N'dbo.Cta_Corriente'), NULL, NULL, NULL) AS a  
JOIN sys.indexes AS b 
      ON a.object_id = b.object_id AND a.index_id = b.index_id;   
GO  

-- o en AdventureWorks2012
SELECT a.index_id, name, avg_fragmentation_in_percent  
FROM sys.dm_db_index_physical_stats (DB_ID(N'AdventureWorks2012'), 
      OBJECT_ID(N'HumanResources.Department'), NULL, NULL, NULL) AS a  
    JOIN sys.indexes AS b 
      ON a.object_id = b.object_id AND a.index_id = b.index_id;   
GO  



Para reorganizar un índice en una tabla se debe emplear la siguiente instrucción:
--
--
ALTER INDEX [NombreDelIndice] ON [schema].[TablaDondeEstaElIndice] REORGANIZE

Para reconstruir un índice en una tabla se debe emplear la siguiente instrucción:
--
--
ALTER INDEX [NombreDelIndice] ON [schema].[TablaDondeEstaElIndice] REBUILD

Para volver a reconstruir todos los índices de una tabla determinada usar:
--
--
USE BD_TRIBUTACION; 
GO
-- Reorganizar todos los índices de la tabla dbo.Cta_corriente.
ALTER INDEX ALL ON dbo.Cta_corriente
REBUILD; 
GO

Para obtener información más técnica acerca de la fragmentación de los índices, puede consultar el siguiente enlace: https://technet.microsoft.com/es-es/library/ms189858(v=sql.110).aspx. En esta página se menciona que la decisión de si se reorganiza o se reconstruye un índice de una tabla depende del porcentaje de fragmentación, si está entre un 5% y 30% es mejor REORGANIZARLO, en caso sea mayor al 30% de fragmentación entonces es mejor RECONSTRUIRLO, si es menor a un 5% no es conveniente aplicarle ningún tratamiento. A continuación he elaborado un script que permite reorganizar reconstruir o dejar intacto los índices de una tabla dada en función a la recomendación mencionada del porcentaje de fragmentación.
--
--

SELECT a.index_id, name as nombre_indice, OBJECT_name(a.object_id) as nombre_tabla,
avg_fragmentation_in_percent as porcentaje_fragmentacion, 
case when avg_fragmentation_in_percent <= 30 then 'RO' -- REORGANIZAR
else 'RI' -- REINDEXAR 
END as 'ACCION'
into #reorganizar_reindexar
FROM sys.dm_db_index_physical_stats (DB_ID('N'BD_TRIBUTACION'), OBJECT_ID(N'dbo.cta_corriente'), NULL, NULL, NULL) AS a
    JOIN sys.indexes AS b ON a.object_id = b.object_id AND a.index_id = b.index_id
where avg_fragmentation_in_percent >= 5 

--select * from #reorganizar_reindexar

DECLARE @i int = 1, @ix int
declare @nombre_indice varchar(200), @nombre_tabla varchar(200), @accion varchar(10)
declare @sql nvarchar(200)=''


select top 1 @i = index_id, @nombre_tabla = nombre_tabla, @nombre_indice = nombre_indice, @accion = accion
from #reorganizar_reindexar
order by index_id

while @i is not null
begin
 --RAISERROR(@i, 0, 1) WITH NOWAIT
 Print @i
 RAISERROR(N'', 0, 1) WITH NOWAIT

 if @accion = 'RO'
 begin
  set @sql = 'ALTER INDEX ' + @nombre_indice + ' ON dbo.' + @nombre_tabla + ' REORGANIZE' --WITH (ONLINE = ON);
 end 
 else
 begin
  set @sql = 'ALTER INDEX '+  @nombre_indice + ' ON dbo.' + @nombre_tabla + ' REBUILD' --WITH (ONLINE = ON);;
 end
 
 --RAISERROR(@sql, 0, 1) WITH NOWAIT
 Print @sql
 RAISERROR(N'', 0, 1) WITH NOWAIT
 execute sp_executesql @sql

 set @ix = null
 select top 1 @ix = index_id, @nombre_tabla = nombre_tabla, @nombre_indice = nombre_indice, @accion = accion
 from #reorganizar_reindexar
 where index_id > @i
 order by index_id

 set @i = @ix
 
end

drop table #reorganizar_reindexar


Utilizo RAISERROR tan solo para ver los mensajes durante la ejecución del WHILE, porque de otra manera los mensajes se muestran al final del while o después de cierto tiempo, por ello el RAISEERROR muestra el mensaje inmediatamente.
indices sql server
Posted by InfoTacticas Soluciones  |  No comments

2/04/2018 04:30: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