sql-server - tengo - sql server instancias instaladas
¿Cómo puedo determinar las instancias de SQL Server instaladas y sus versiones? (18)
Estoy tratando de determinar qué instancias de sql server / sql express he instalado (ya sea manualmente o mediante programación) pero todos los ejemplos me dicen que ejecute una consulta SQL para determinar esto, lo que supone que ya estoy conectado a una instancia en particular .
- T-SQL Query para encontrar la lista de instancias instaladas en una máquina
DECLARE @GetInstances TABLE
( Value nvarchar(100),
InstanceNames nvarchar(100),
Data nvarchar(100))
Insert into @GetInstances
EXECUTE xp_regread
@rootkey = ''HKEY_LOCAL_MACHINE'',
@key = ''SOFTWARE/Microsoft/Microsoft SQL Server'',
@value_name = ''InstalledInstances''
Select InstanceNames from @GetInstances
Acabo de instalar el servidor SQL 2008, pero no pude conectarme a ninguna instancia de la base de datos. Los comandos @G Mastros publicados no enumeran instancias activas.
Así que busqué en servicios y descubrí que el agente del servidor SQL estaba deshabilitado. Lo arreglé configurándolo en automático y luego lo inicié.
Desde la línea de comandos de Windows, escriba:
SC //server_name query | find /I "SQL Server ("
Donde "nombre_servidor" es el nombre de cualquier servidor remoto en el que desee mostrar las instancias de SQL.
Esto requiere suficientes permisos, por supuesto.
En una línea de comando:
SQLCMD -L
o
OSQL -L
(Nota: debe ser una L mayúscula)
Esto mostrará una lista de todos los servidores SQL instalados en su red. Hay opciones de configuración que puede configurar para evitar que aparezca un servidor SQL en la lista. Para hacer esto...
En la línea de comando:
svrnetcn
En la lista de protocolos habilitados, seleccione ''TCP / IP'', luego haga clic en propiedades. Hay una casilla de verificación para ''Ocultar servidor''.
Esta consulta debe obtener el nombre del servidor y el nombre de la instancia:
SELECT @@SERVERNAME, @@SERVICENAME
Este es un método simple: vaya a Inicio, luego Programas y luego a Microsoft SQL Server 2005, luego a Herramientas de configuración, luego a SQL Server Configuration Manager, luego a SQL Server 2005, Configuración de red y aquí. Aquí puede ubicar todas las instancias instaladas en su máquina.
Puede consultar este valor de registro para obtener la versión de SQL directamente:
HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Microsoft SQL Server/90/Tools/ClientSetup/CurrentVersion
Alternativamente, puede consultar su nombre de instancia y luego usar sqlcmd con el nombre de su instancia que le gustaría:
Para ver el nombre de su instancia:
HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Microsoft SQL Server/Instance Names
Luego ejecuta esto:
SELECT SERVERPROPERTY(''productversion''), SERVERPROPERTY (''productlevel''), SERVERPROPERTY (''edition'')
Si está utilizando C ++, puede usar este código para obtener la información de registro.
Sé que es una publicación antigua, pero encontré una buena solución con PoweShell en la que puedes encontrar instancias de SQL instaladas en una máquina local o remota, incluida la versión, y también obtener otras propiedades.
$MachineName = ‘.’ # Default local computer Replace . with server name for a remote computer
$reg = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey(‘LocalMachine’, $MachineName)
$regKey= $reg.OpenSubKey("SOFTWARE//Microsoft//Microsoft SQL Server//Instance Names//SQL" )
$values = $regkey.GetValueNames()
$values | ForEach-Object {$value = $_ ; $inst = $regKey.GetValue($value);
$path = "SOFTWARE//Microsoft//Microsoft SQL Server//"+$inst+"//MSSQLServer//"+"CurrentVersion";
#write-host $path;
$version = $reg.OpenSubKey($path).GetValue("CurrentVersion");
write-host "Instance" $value;
write-host "Version" $version}
Sé que este hilo es un poco viejo, pero lo encontré antes de encontrar la respuesta que estaba buscando y pensé que iba a compartir. Si está utilizando SQLExpress (o localdb), hay una forma más sencilla de encontrar los nombres de sus instancias. En un tipo de línea de comando:
> sqllocaldb i
Esto mostrará una lista de los nombres de instancia que ha instalado localmente. Por lo tanto, el nombre completo de su servidor debe incluir (localdb) / delante del nombre de la instancia para conectarse. Además, sqllocaldb le permite crear nuevas instancias o eliminarlas, así como configurarlas. Ver: Utilidad SqlLocalDB .
SQL Server permite que las aplicaciones encuentren instancias de SQL Server dentro de la red actual. La clase SqlDataSourceEnumerator expone esta información al desarrollador de la aplicación, proporcionando una DataTable que contiene información sobre todos los servidores visibles. Esta tabla devuelta contiene una lista de instancias de servidor disponibles en la red que coincide con la lista proporcionada cuando un usuario intenta crear una nueva conexión y expande la lista desplegable que contiene todos los servidores disponibles en el cuadro de diálogo Propiedades de la conexión. Los resultados mostrados no siempre están completos. Para recuperar la tabla que contiene información sobre las instancias de SQL Server disponibles, primero debe recuperar un enumerador, utilizando la propiedad Instancia compartida / estática:
using System.Data.Sql;
class Program
{
static void Main()
{
// Retrieve the enumerator instance and then the data.
SqlDataSourceEnumerator instance =
SqlDataSourceEnumerator.Instance;
System.Data.DataTable table = instance.GetDataSources();
// Display the contents of the table.
DisplayData(table);
Console.WriteLine("Press any key to continue.");
Console.ReadKey();
}
private static void DisplayData(System.Data.DataTable table)
{
foreach (System.Data.DataRow row in table.Rows)
{
foreach (System.Data.DataColumn col in table.Columns)
{
Console.WriteLine("{0} = {1}", col.ColumnName, row[col]);
}
Console.WriteLine("============================");
}
}
}
de msdn http://msdn.microsoft.com/en-us/library/a6t1z9x2(v=vs.80).aspx
Servicio de navegador de SQL Server http://msdn.microsoft.com/en-us/library/ms181087.aspx
Si está dentro de SSMS, le resultará más fácil de usar:
SELECT @@Version
Si está interesado en determinar esto en un script, puede intentar lo siguiente:
sc //server_name query | grep MSSQL
Nota: grep es parte de las herramientas gnuwin32
Si solo desea ver lo que está instalado en la máquina en la que está conectado actualmente, creo que el proceso manual más sencillo es abrir el Administrador de configuración de SQL Server (desde el menú Inicio), que muestra todos los servicios SQL (y solo servicios SQL) en ese hardware (en ejecución o no). Esto supone SQL Server 2005, o mayor; La recomendación de dotnetengineer para usar la Consola de administración de servicios le mostrará todos los servicios y siempre debería estar disponible (por ejemplo, si está ejecutando versiones anteriores de SQL Server).
Sin embargo, si está buscando un proceso de descubrimiento más amplio, puede considerar herramientas de terceros como SQLRecon y SQLPing, que analizarán su red y generarán un informe de todas las instancias del Servicio SQL que se encuentren en cualquier servidor al que tengan acceso. Ha pasado un tiempo desde que usé herramientas como esta, pero me sorprendió lo que encontraron (es decir, un puñado de casos que no sabía que existían). YMMV. Puede Google para obtener más información, pero creo que esta página tiene las descargas relevantes: http://www.sqlsecurity.com/Tools/FreeTools/tabid/65/Default.aspx
Todas las instancias instaladas deben aparecer en el complemento de servicios en la Consola de administración de Microsoft. Para obtener los nombres de instancia, vaya a Inicio | Correr | escriba Services.msc y busque todas las entradas con "Servidor SQL (Nombre de instancia)".
Tuve este mismo problema cuando estaba evaluando más de 100 servidores, tenía un script escrito en C # para explorar los nombres de los servicios consisten en SQL. Cuando se instalan instancias en el servidor, SQL Server agrega un servicio para cada instancia con el nombre del servicio. Puede variar para diferentes versiones como 2000 a 2008, pero seguro que hay un servicio con nombre de instancia.
Tomo el nombre del servicio y obtengo el nombre de la instancia del nombre del servicio. Aquí está el código de ejemplo utilizado con el resultado de la consulta WMI:
if (ServiceData.DisplayName == "MSSQLSERVER" || ServiceData.DisplayName == "SQL Server (MSSQLSERVER)")
{
InstanceData.Name = "DEFAULT";
InstanceData.ConnectionName = CurrentMachine.Name;
CurrentMachine.ListOfInstances.Add(InstanceData);
}
else
if (ServiceData.DisplayName.Contains("SQL Server (") == true)
{
InstanceData.Name = ServiceData.DisplayName.Substring(
ServiceData.DisplayName.IndexOf("(") + 1,
ServiceData.DisplayName.IndexOf(")") - ServiceData.DisplayName.IndexOf("(") - 1
);
InstanceData.ConnectionName = CurrentMachine.Name + "//" + InstanceData.Name;
CurrentMachine.ListOfInstances.Add(InstanceData);
}
else
if (ServiceData.DisplayName.Contains("MSSQL$") == true)
{
InstanceData.Name = ServiceData.DisplayName.Substring(
ServiceData.DisplayName.IndexOf("$") + 1,
ServiceData.DisplayName.Length - ServiceData.DisplayName.IndexOf("$") - 1
);
InstanceData.ConnectionName = CurrentMachine.Name + "//" + InstanceData.Name;
CurrentMachine.ListOfInstances.Add(InstanceData);
}
Una opción más sería ejecutar el informe de descubrimiento de SQLSERVER ... ir a los medios de instalación de sqlserver y hacer doble clic en setup.exe
y en la siguiente pantalla, vaya a herramientas y haga clic en informe de descubrimiento como se muestra a continuación
Esto le mostrará todas las instancias presentes junto con características completas ... a continuación hay una instantánea en mi PC
Yo tuve el mismo problema. El comando "osql -L" solo mostraba una lista de servidores pero sin nombres de instancia (solo se mostraba la instancia de mi SQL Server local). Con Wireshark, sqlbrowser.exe (que puede encontrarse en la carpeta compartida de su instalación de SQL) encontré una solución para mi problema.
La instancia local se resuelve por entrada de registro. Las instancias remotas se resuelven mediante difusión UDP (puerto 1434) y SMB. Utilice "sqlbrowser.exe -c" para enumerar las solicitudes.
Mi configuración utiliza 1 adaptadores de red físicos y 3 virtuales. Si usé el comando "osql -L", el sqlbrowser mostró una solicitud de uno de los adaptadores virtuales (que está en otro segmento de la red), en lugar del físico. osql selecciona el adpater por su métrica. Puede ver la métrica con el comando "imprimir ruta". Para mi configuración, la tabla de enrutamiento mostró una métrica más baja para el adaptador virtual que para el físico. Así que cambié la métrica de la interfaz en las propiedades de la red al deseleccionar la métrica automática en la configuración de red avanzada. osql ahora usa el adaptador físico.