A continuación se presentan algunas
utilidades que no merecen un artículo por si mismas pero que conviene tener en
cuenta.
Utilidades de SQL Server
Ver quien está utilizando la base de datos
Con las nuevas versiones no hay manera de ver quien está
conectado a la base de datos.
Pero existe un procedimiento
almacenado llamado sp_who que
muestra quien está utilizando la bbdd.
En el campo status se
muestra el estado actual de la sesión, en hostname el equipo desde el que se
entró, en dbName el nombre del usuario que accedió a la base de datos
Cambiar una base de datos de modo usuario múltiple a usuario simple y viceversa
Pasar una base de datos a modo single_user a través de código:
USE master
GO
ALTER DATABASE
dbDesarrollo1802 SET SINGLE_USER
WITH ROLLBACK IMMEDIATE
GO
Pasar una base de datos a modo
multi_user a través de código:
USE master
GO
ALTER DATABASE
dbDesarrollo1802 SET MULTI_USER WITH ROLLBACK IMMEDIATE
GO
De forma gráfica:
Situados sobre la
base de datos correspondiente pulsamos con el botón derecho del ratón y elegimos la opción Propiedades
Esto abre la pantalla
que se muestra debajo donde en la pestaña opciones elegiremos Restringir acceso
desde donde se desplegará un combo con las tres opciones mostradas.
Matar un proceso de SQL Server
La opción de “matar”
los procesos, consiste en hacer uso de la instrucción “Kill”, que se encarga de
“Matar” o terminar los procesos y/o las conexiones “normales”.
La instrucción “Kill”
debe recibir como parámetro los ID’s de las sesiones de cuyos procesos se van a
cerrar, podemos hacer una consulta a la tabla “SysProcesses” de la base de
datos “Master” para tener la lista de procesos activos de la base de datos. Para
filtrar los resultados de la consulta para matar solamente los procesos de
nuestra base de datos,utilizaremos el campo “DBId” (el id de la base de datos).
Para extraer el nombre como tal de la base de datos, podemos hacer uso de la
función DB_NAME() que recibe como parámetro el Id de la base de datos. Como
para matar los procesos solo necesitamos el Id del proceso, este se encuentra
en el campo spid de la tabla “SysProcesses”. Al final, la lista de procesos a
“matar” la obtendremos del siguiente query:
select * from master..SysProcesses WHERE DB_NAME(DBId)='dbDesarrollo'
Esto
devuelve algo así:
Ahora, sólo hay que hacer
KILL 57;
GO
Poner un proyecto de SQL
Server en Compatibilidad SQL Server 2005
Optimizar una consulta
Esto depende
de cada consulta en particular, pero he encontrado un ejemplo concreto de una
consulta que tarda más de 8 horas en ejecutarse en una base de datos muy
grande.
select * From dbo.tbTabla where strtipoid='DOC' and strCodigo +
strCodigoInstalacion + strNumeroEnvio + strTUI
not in (
select strCodigo +
strCodigoInstalacion + strNumeroEnvio + strTUI
from dcae.tbTabla2
)
El problema de ralentización está en los signos +
empleados para unir diferentes campos para montar los criterios de búsqueda, la
consulta siguiente es equivalente a la anterior pero como contrapartida su tiempo
de ejecución es inmediato a pesar de realizarse sobre la misma base de datos
para que tardaba más de 8 horas.
SELECT dcae.tbTabla where strTUI='DOC' and strCodigo
not in (
select strCodigo
from dcae.tbTabla2
) and strCodigoInstalacion
not in (
select strCodigoInstalacion
from dcae.tbTabla2
) and strNumeroEnvio
not in (
select strNumeroEnvio
from dcae.tbTabla2
) and strTUI
not in (
select strTUI
from dcae.tbTabla2)
Funciones útiles en Visual Basic .net
Obtener un número aleatorio
'Esta
funcion obtiene un número aleatorio entre el valor bajo (lower) y el alto
(upper)
Public Function BuscaNumeroAleatorio(ByVal Lower As Integer, ByVal Upper As Integer)
'
Initialize the random-number generator.
Randomize()
BuscaNumeroAleatorio = CInt(Math.Floor((Upper - Lower + 1) *
Rnd())) + Lower
End Function
Hacer una búsqueda
genérica en una base de datos
La siguiente función realiza una select sobre una tabla y un campo dados
por parámetro para una condición numérica. Si la condición fuera texto hay que
cambiar la definición del parámetro por string.
'Esta
función genera una búsqueda genérica en una base de datos con una condición
numérica.
EL resultado se almacena en un array lo devuelve como salida de la función
Public Function BusquedaGenerica(ByVal Nombre_Tabla As String, ByVal Nombre_Campo As String, ByVal strConexion As Object, Optional ByVal idCondicion As Integer = 0) As String
'Variable
que contiene la select a ejecutar sobre la base de datos
Dim strSQL As String
Dim i As Integer = 0
Dim Salida() As String = ""
Dim cmd As New OleDb.OleDbCommand(strSQL, strConexion)
'Objeto
conexión para conectarse a una base de datos de Access
Try
strSQL =
CuentaRegistros(strConexion, "Select *
from " & Nombre_Tabla & " where " & Nombre_Campo
& " = " & idTipo)
Dim reader As OleDb.OleDbDataReader = cmd.ExecuteReader
i = 0
While reader.Read
Redim Preserve Salida (i)
Salida(i) = reader.Item(0)
i = i + 1
End While
reader.Close()
BusquedaGenerica = Salida(i)
Catch ex As Exception
MessageBox.Show(ex.Message)
BusquedaGenerica = "Error en BuscaGenerica"
End Try
End Function
'Devuelve
un entero que representa el número de registros de una SELECT de entrada Query de tipo select COUNT(*) from
Private Function CuentaRegistros(ByVal strConexion As Object, ByVal Query As String) As Integer
'Busca
la cantidad de registros
Dim cmd1 As New OleDb.OleDbCommand(Query, strConexion)
CuentaRegistros = cmd1.ExecuteScalar()
'Fin de
busca cantidad de registros
End Function
No hay comentarios:
Publicar un comentario