ho la necessità di elencare tutte le istanze di sql server presenti in rete,
fin qui nulla di speciale ... se c'è il nome dell'istanza predefinita,
ma se io ho un'istanza
SERVER\INSTANCENAME
riesco solo a farmi restituire
SERVER
non sono quindi riuscito a trovare un modo per elencare, per ogni server,
tutte le istanze.
Spero di essermi spiegato.
Per completezza di esposizione, io uso questo codice:
**********************
Dim i As Integer
Dim oNames As SQLDMO.NameList
Dim oSQLApp As SQLDMO.Application
Set oSQLApp = New SQLDMO.Application
Set oNames = oSQLApp.ListAvailableSQLServers()
For i = 1 To oNames.Count
Debug.Print oNames.Item(i)
Next i
**********************
Qualcuno saprebbe darmi una dritta?
Uno spunto?
Grazie 1000 a tutti.
Ciao
Stefano
il codice e' corretto, e "potrebbe" restituire tutte le istanze disponibili,
comprese le named instances..
ListAvailableServer utilizza la funzione ODBC SQLBrowseConnect(), provvista
dalle librerie ODBC dell'installazione di Mdac;
e' un meccanismo che funziona in BroadCast, ed il risultato non e' mai
conclusivo, nel senso che il risultato e' sempre influenzato dalle risposte
dei vari Server sulla rete, dai loro tempi di risposta, etc.
fino a Mdac 2.5 il meccanismo di broadcast avveniva sul protocollo NetBios
(default per le installazioni di SQL Server 7.0), ed e' stato cambiato sul
protocollo TCP/IP UDP, (default per le installazioni di SqlServer 2000), in
ascolto sulla porta 1434: se i server non ascoltano sulla porta o non
risponono in tempo, non verranno inlistati.
Alcune regole base riguardo SQL Server 7.0:
- SQL Server deve esssere attivo ed in ascolto su Named Pipes (Win9x non e'
provvisto di Named Pipes, percui SQL Server su Win9x non e' mai in ascolto
su questo protocollo e non potra' mai essere inlistato);
- SQL Server deve essere chiaramente in funzione per rispondere alle
chiamate di BroadCast; esiste una finestra grigia di circa 15 minuti dopo lo
ShutDown del server che, alla richiesta di Browse Master nel dominio puo'
rispondere comunque positivamente alle richieste;
- La presenza di un router sulla rete interrompe le chiamate NetBIOS
broadcast, cio' chiaramente limita la visibilita' delle chiamate Broadcast;
- Solamente i server appartenenti al dominio saranno enumerati.
Con SQL Server 2000, usando Mdac 2.6 e superiori, le cose cambiano un poco,
in quanto il protocollo di default e' stato cambiato nei sockets TCP/IP e,
al posto di una chiamata broadcast NetBios, viene utilizzato TCP UDP per
rilevare i server.
La logica di relevazione precedente resta influenzata:
- SQL Server deve esssere attivo ed in ascolto;
- SQL Server deve esssere attivo ed in ascolto sui sockets TCP/IP;
- SQL Server deve esssere attivo ed in ascolto su computer
WinNT/Win2000/WinXP o Win9x;
- La presenza di un router sulla rete interrompe le broadcast se
quest'ultimo e' configurato in modo da non passare le chiamate UDP
broadcast, diversamente solo i server installati sullo stesso subnet
verranno inlistati;
E' necessario l'upgrade almeno al Service Pack 2 di SQL Server 2000 perche'
il metodo .ListAvailableServer funzioni correttamente, in quanto le versioni
precedenti dei Componenti Sql-DMO di SQL Server 2000 sono bacate in questa
area.
Cortesemente da Gert E.R. Drapers
maggiori informazioni su
http://sqldev.net/misc.htm
Il service pack 3a ha introdotto alcune novita' per prevenire futuri
problemi derivanti da worms simili a Slammer e virus tipo Safhire di
origine, proliferazione e contagio via Internt che hanno indotto Microsoft a
disabilitare di default i protocolli di rete SuperSockets Network Protocols
per nuove installazioni di MSDE 2000. Istanze di SQL Server 2000 sp3a e/o
MSDE 2000 sp3a non saranno in ascolto sulla porta UDP 1434 quando
configurate di non 'ascoltare' alcun protocollo di rete, termimando di
inlistare tali istanze.
l'unica cosa che puoi verificare e' che l'istanza abbia correttamente i
protocolli di rete abilitati, ma non potrai mai essere sicuro che la lista
ritornata sia "completa"...
personalmente ho visto che se talvolta .ListAvailableServer non inlista
istanze nominate, .ListInstalledInstances(NomeServer) riesce a recuperare
anche quelle "nascoste" vista probabilmente una diversa calibrazione di
ricerca forse implementata...
presso http://sqldev.net/misc.htm trovi almeno altre 3 metodologie di
recupero delle istanze, basate su NetServerEnum esposto dalle api
LanManager, OleDbEnum esposto dal provider OLE DB e SQLBrowseConnect esposto
dalle api ODBC...
saluti
--
Andrea Montanari (Microsoft MVP - SQL Server)
http://www.asql.biz http://italy.mvps.org
DbaMgr2k ver 0.19.0 - DbaMgr ver 0.63.0 and further SQL Tools
--------- remove DMO to reply
> saluti
> --
> Andrea Montanari (Microsoft MVP - SQL Server)
> http://www.asql.biz http://italy.mvps.org
> DbaMgr2k ver 0.19.0 - DbaMgr ver 0.63.0 and further SQL Tools
> --------- remove DMO to reply
>
Ciao Andrea,
in primis grazie per avermi risposto,
in seconda battuta approfitto di questo post per farti i complimenti per
l'ottimo DBA Manager.
Sto leggendo con attenzione il post e i link segnalati che mi saranno
utilissimi.
Grazie 1000 e ancora complimenti.
Ciao
Stefano
grazie a te per il tuo interessamento...