Últimos artículos
Estas son las últimas entradas en el blog.
De todo un poco para solucionar los problemas diarios de un administrador de IT y DBA
Estas son las últimas entradas en el blog.
De todo un poco para solucionar los problemas diarios de un administrador de IT y DBA
¿Cómo saber en que puerto está corriendo nuestro motor SQL Server? Primero que nada es conveniente entender porque es que no esta en su puerto default. Si eres novato en el tema, seguramente tienes la instalación estándar del motor de Microsoft, y nunca te has preguntado porque debería cambiarlo de puerto. Si es tu caso te dejo este artículo donde te contamos como es la seguridad del MS SQL Server y que cosas debes tener en cuenta. (https://maurobernal.com.ar/blog/consejos-para-asegurar-tu-ms-sql-server/)
Para aquellos que entendemos el porqué debemos cambiarlo, y no sabemos como hacerlo, te dejo este otro artículo. (https://maurobernal.com.ar/blog/mssql/cambiar-el-puerto-del-ms-sql-server)
Y para aquellos que sabemos lo anterior, pero por diferentes motivos nos toca implementar una aplicación, y no sabemos en que puerto está corriendo, a continuación te damos una idea de como averiguarlo.
Por defecto el motor SQL Server trabaja en los siguientes puertos de manera predeterminada:
Pero puede ocurrir que esto al tener varias instancias, o por otros motivos que no vienen al caso, no sean los puertos en los que está funcionando nuestro Motor. Para averiguar el puerto podemos utilizar los siguientes 3 métodos:
USE master GO xp_readerrorlog 0, 1, N'Server is listening on' GO
Los parámetros que puede utilizar con XP_READERRRORLOG se mencionan a continuación para su referencia:
Se debe ir a INICIO \ Todos los Programas \ Microsoft SQL Server 200X \ Configuration Tools \ SQL Server Configuration Manager
Se deben filtrar los eventos cuyo ID es 26022
Video Explicando todo este proceso
La siguiente es una función en TSQL de MS SQL Server, la cúal permite saber la cantidad de días que existe en un período determinado sin contar los fines de semana (sábado y domingo).
--Primeramente declaramos que vamos a crear una funcion, en este caso se llama Dif Dias y recibe dos parámetros, la fecha inicial del período y la final*/ CREATE FUNCTION [dbo].[DifDias](@StartDate DATETIME,@EndDate DATETIME) RETURNS integer AS Begin DECLARE @DaysBetween INT --Con esta variable calculamos cuantos dias "normales" hay en el rango de fechas DECLARE @BusinessDays INT --Con esta variable acumulamos los dias totales DECLARE @Cnt INT --esta variable nos sirve de contador para saber cuando lleguemos al ultimo dia del rango DECLARE @EvalDate DATETIME --esta variable es la que comparamos para saber si el dia que esta calculando es sábado o domingo* /*Esta par de variables sirven para comparar las dos fechas, si son iguales, la funcion nos regresa un 0*/ DECLARE @ini VARCHAR(10) DECLARE @fin VARCHAR(10) --Inicializamos algunas variables SET @DaysBetween = 0 SET @BusinessDays = 0 SET @Cnt=0 --Calculamos cuantos dias normales hay en el rango de fechas SELECT @DaysBetween = DATEDIFF(DAY,@StartDate,@EndDate) + 1 /*Ordenamos el formato de las fechas para que no importando como se proporcionen se comparen igual*/ SELECT @ini = (SELECT CAST((CAST(datepart(dd,@StartDate)AS VARCHAR(2))+'/'+ CAST(datepart(mm,@StartDate)AS VARCHAR(2))+'/'+CAST(datepart(yy,@StartDate)AS VARCHAR(4))) as varchar(10))) SELECT @fin = (SELECT CAST((CAST(datepart(dd,@EndDate)AS VARCHAR(2))+'/'+ CAST(datepart(mm,@EndDate)AS VARCHAR(2))+'/'+ CAST(datepart(yy,@EndDate)AS VARCHAR(4)))as varchar(10))) --Se comparan las dos fechas IF @ini <>@fin BEGIN /*Si la diferencia de fechas es igual a dos, es porque solo ha transcurrido un dia, asi que solo se valida que no vaya a marcar dias de mas*/ IF @DaysBetween = 2 BEGIN SELECT @BusinessDays = 1 END ELSE BEGIN WHILE @Cnt < @DaysBetween BEGIN /*Se Iguala la fecha a que vamos a calcular para saber si es sabado o domingo en la variable @EvalDate sumandole los dias que marque el contador, el cual no debe ser mayor que el numero total de dias que hay en el rango de fechas*/ SELECT @EvalDate = @StartDate + @Cnt /*Utilizando la funcion datepart con el parametro dw que calcula que dia de la semana corresponde una fecha determinada, determinados que no sea sabado (7) o domingo (1)*/ IF ((datepart(dw,@EvalDate) <> 1) and (datepart(dw,@EvalDate) <> 7) ) BEGIN /*Si no es sabado o domingo, entonces se suma uno al total de dias que queremos desplegar*/ SELECT @BusinessDays = @BusinessDays + 1 END --Se suma un dia mas al contador SELECT @Cnt = @Cnt + 1 END END END ELSE BEGIN --Si fuese cierto que las fechas eran iguales se despliegue cero SELECT @BusinessDays = 0 END --Al finalizar el ciclo, la funcion regresa el numero total de dias return (@BusinessDays) END GO
Ejemplo de Uso:
SELECT dbo.DifDias('06/01/2015', '06/30/2015') as DiasAbril
Porque trabajas todo el día con un motor MS SQL Server, y te toca cambiar los formatos de visualización de las fechas, aquí te dejo una ayuda memoria:
De la siguiente manera es posible quitar las horas y los segundos a una fecha.
select getdate() -- La manera correcta (desde SQL Server 2008) select cast(getdate() As Date) -- La manera correcta(anterior a SQL Server 2008) select dateadd(dd, datediff(dd,0, getDate()), 0)
Últimamente me ha tocado quemarme las pestañas por casos de bases de datos dañadas. Una mala infraestructura, y/o un mal plan de backups termina provocando este tipo de post luego de sufrir por un rato…
El siguiente es un error común cuando se daña una base:
Msg 824, Level 24, State 2, Line 11
SQL Server detected a logical consistency-based I/O error: incorrect pageid (expected 1:49876; actual 17253:-991032068). It occurred during a read of page (1:49876) in database ID 15 at offset 0x000000185a8000 in file ‘E:\Bases\SBDAXXXX.MDF’. Additional messages in the SQL Server error log or system event log may provide more detail. This is a severe error condition that threatens database integrity and must be corrected immediately. Complete a full database consistency check (DBCC CHECKDB). This error can be caused by many factors; for more information, see SQL Server Books Online.
A continuación los pasos que se debería seguir:
ALTER DATABASE SBDAXXXX SET SINGLE_USER WITH ROLLBACK IMMEDIATE
DBCC CHECKDB(SBDAXXXX,REPAIR_ALLOW_DATA_LOSS)
DECLARE @Tabla VARCHAR(250) DECLARE @SQL VARCHAR(2000) CREATE TABLE #TablaTemp(ID INT IDENTITY(1,1),Tabla_Nombre VARCHAR(200),Cant_Registros INT) DECLARE TINFO_CUR CURSOR FOR SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE='BASE TABLE' OPEN TINFO_CUR FETCH NEXT FROM TINFO_CUR INTO @Tabla WHILE @@FETCH_STATUS =0 BEGIN SET @SQL='INSERT INTO #TablaTemp(Tabla_Nombre,Cant_Registros) SELECT '''+@Tabla+''',COUNT(*) FROM '+@Tabla+'' EXECUTE (@SQL) FETCH NEXT FROM TINFO_CUR INTO @Tabla END CLOSE TINFO_CUR DEALLOCATE TINFO_CUR SELECT * FROM #TablaTemp ORDER BY Tabla_Nombre DROP TABLE #TablaTemp
Si la base está muy dañada posiblemente no se repara, o se pierde información. En ese caso se puede recurrir a un software de 3ro para intentar reparar el .MDF.
Siempre es útil poder listar las triggers que tienes funcionando en tu server de producción.
Para ellos es que surge el siguente script:
SELECT O.name AS [Trigger] ,OBJECT_NAME(parent_obj) AS Tabla ,OBJECTPROPERTY( id,'ExecIsUpdateTrigger') AS Es_Update ,OBJECTPROPERTY( id,'ExecIsDeleteTrigger') AS Es_Delete ,OBJECTPROPERTY( id,'ExecIsInsertTrigger') AS Es_Insert ,OBJECTPROPERTY( id,'ExecIsAfterTrigger') AS Es_After ,OBJECTPROPERTY( id,'ExecIsInsteadOfTrigger') AS Es_insteadof ,OBJECTPROPERTY(id, 'ExecIsTriggerDisabled') AS Habilitado FROM sysobjects O INNER JOIN sysusers U ON O.uid = U.uid INNER JOIN sys.tables T ON O.parent_obj = T.object_id INNER JOIN sys.schemas S ON T.schema_id = S.schema_id WHERE O.type = 'TR'
Resultado en un Microsoft SQL Server 2008 R2 x64 con el Microsoft SQL Server Management Studio:

Restaurar backup es un proceso, que en algunos casos se debe desarrollar diariamente. Por ello es bueno optimizar los tiempos.
A continuación un Tips para que al buscar el backup con el Microsoft
SQL Server Management Studio les abra en un directorio que ustedes elijan.
En este caso estoy trabajando con SQL Server 2008 R2 x64 Enterprise. Al intentar levantar un backup siempre abre el «examinar» en el mismo lugar:
«C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\Backup»

Para modificar dicha ruta predeterminada realizamos lo siguiente:


Listo! Ahora la próxima vez que intentemos recuperar un backup, abrirá directamente en dicha carpeta:

IT CallCenters
Desarrollo de aplicaciones web y mobile
