Enumerating SQL Server 2005 Servers From The Network
Mar 6, 2008
Hi,
I need to find out whether SQL Server client components are installed on a machine through my application.
For that I was expecting "SOFTWARE\Microsoft\Microsoft SQL Server\90" registry key. BUT If I install just native client drivers, this key is not getting created.
What could be another approch to determine whether system has required client components.
Also I need to list all the SQL Server 2005 servers available in the network. (Similar to the Servers combo box being populated while DSN creation in ODBC Admin tool). There are several approches.
1) Use NetServerEnum API
2) Use SQLBrowseConnect ODBC API
3) Use SQLDMO Object
4) OSQL utility.
We have (after several weeks of testing in all kind of environments) send out a new version of our application to several of our customers. Within days problems where drippin in; After looking for the problem on various customer situations we found a problem which I think is rather disturbing and very odd. I'll describe the situation, on which we finally managed to recreate the problem, here.
In my problem I use the following configuration:
Windows 2003 (standard edition) AD network with 2 domain controllers, multiple Windows XP workstations, some without SQL instances, some with SQL 2000 instances, some with SQL 2005 instances and even one with SQL 7 running. All run a 32 bit OS.
Tools to reproduce:
ListSQLSvr application (found on SQLDev.net) to enumerate the instances.
Problem description: -------------------------------------------------- I am running the machine called DEV001, which has SQL 2000 (instancename DRUMIS) and SQL 7.0 (has no instancename so this is the root instance) installed.
In any 'normal' situation all the runnings SQL instances are visible on the network like this:
Notice that the browser service might be off on DEV002, you can still see the EXPRESS instance and a new root instance has appeared (though it doesn't exist!)??
After restarting the Browser service all is OK again.
When I turn on Hide Server in the SQL 2000 TCP/IP properties (or turn it on in the registry [HKEY_LOCAL_MACHINESOFTWAREMicrosoftMicrosoft SQL ServerDRUMISMSSQLServerSuperSocketNetLibTcp] "TcpHideFlag"=dword:00000001) on the DEV002 computer something real scary is happening.. The list looks as follows:
When someone has entered a database (for example the backoffice database on INSADBACKOFFICEEXACT) the list looks as follows (for a short moment; 5 secs or so):
Notice now that ALL instances are gone and no extended information is available. In the Query Analyser and in the SQL Management Studio when browsing you'll see this as well! When someone is accessing a database instance it appears for a few seconds again.
Since our installation and applications rely on selecting a existing instance it will fail in the above situations (or at least not showing all available instances).
In my opinion this is a bug somewhere! Note that even when the SQL Services are stopped on DEV002 (leaving the Browser service running) it still seems to block out ALL instance on the ENTIRE network!
I don't mind that one INSTANCE or even the entire MACHINE is hidden from the network, but ALL instances on ALL machines??
And the SQL Browser issue also worries me a bit since it does not stop the possibily to browse the SQL instances; it removes the SQL2000 instances but adds a root instance which doesn't even exist! Also the extended info is stripped.
Can anyone help me solve this/advise?
Also mind that in any situation there might run a lot of computers with a lot of SQL instances and I cannot tell our customers to find which machine has the SQL TCP/IP properties set to Hide... It even seems that in some situations SBS 2003 does the hiding automatically on Install? And if so, when and why?
Regards,
Albert van Peppen Senior System Engineer Insad Grafisch b.v.
Hi Friend, Is there any way in SQL Server by which I can locate the names of all the SQL-servers on the network. I was wondering if I can execute some query on Master database to find the above info??? Any clues??
I recently installed SQL Server 2005 Management Studio Express along with SQL Server 2005 Express in my Win2K Pro m/c. The installation went off smoothly.
My server name is "ADSQLEXPRESS" where "AD" is my m/c name. When I open Management Studio Express for the first time, the "Connect to Server" dialog opens up wherein the "Server name" under the "General" tab shows "ADSQLEXPRESS". When I click the dropdown list & click the "Browse for more" option to browse for more servers, the dialog titled "Browse for Servers" opens up. This dialog shows 2 tabs - "Local Servers" & "Network Servers". Under the "Local Servers" tab, "Database Engine" is listed. When I expand it, the server name "ADSQLEXPRESS" is listed.
Under the "Network Servers" tab again "Database Engine" is listed but when I expand it, I always find 2 more than 2 network servers listed where one of them is my ISP (Internet connection provider) but where from are the other servers getting listed? I just don't have any connection with those servers. This is the first time I am seeing those server names.
Moreover the problem is after installing SQL Server 2005, my m/c is getting affected with Trojans now & then. Fortunately my anti-virus (AVG 7.0) takes care of it but I did like to just get rid of those extra network servers since I am pretty sure that one of these network servers (not the one which is my ISP) is the source of Trojans in my m/c since the Trojan attack began only after I installed SQL Server 2005 in my m/c.
Can someone please guide me how do I delete the offending network servers from the list?
Another strange thing is that the names of the network servers (except for the one which is my ISP) listed when "Database Engine" is expanded under the "Network Servers" tab in the "Browse for Servers" dialog go on changing everyday but the Trojans are always named in this format: eraseme_XXXXX.exe.
where X is any integer which goes on changing. For e.g., they will be named as erase_63728.exe or eraseme_23709.exe or eraseme_35412.exe etc..
Hi, Is there any function/API in vb to retrieve all the sql servers that are avaiable on a network? Basically, i wanted to implement this facility in my application where users can select a server from list of all avaiable servers on LAN.
Please excuse my niavety on this subject, But I have a simple question. When you have more than one SQl server 7 installation on the same network, each using different machines, does one automatically have the ability/authority to be able to stop the other server at will??
Hi,We have an ODBC/Visual-C++-6 -bases application (currently working with both MS-Access and Postgres)and want it to also cooperate with MS-SQL-server and MSDE. Since we don't want theuser to wade through the ugly ODBC-setup, we have our own dialogs (e.g. the usualfile dialog for MS-Access) and build the ODBC-connection string from the information providedby them. Now, the MS-SQL-Driver dialog has the nice feature to browse the network foravailable SQL-server instances and I like to have it, too. Is there somefunction for retrieving a list of available SQL-servers anywhere?Georg
I am working on a computer connected to a network. I am using SQL 2000/XP on my computer so I can manage other sql servers on our network (I'll call them S1 and S2, both running SQL 2000)
I recently received a new computer running SQL 2005 Standard/Vista. When I try to connect to S1 and S2, I can’t find them anywhere. Am I overlooking some settings in 2005/vista?
I am a little inexperienced at this, so please let me know if any additional information would be helpful.
Hi. I would like to enumerate all the databases in a given Sql Server instance. I've searched and found no information. Would somebody post a piece of VB code to do that? Thanks in advance Rafael
My application is running fine, as i can login to it and also able to view pages. But when i open Order management(having 3K records) its give me error,
General Network Error. Check your network documentation
I have also searched many articles and tried following solutions but nothing working
- connectiontimeout = 0, max pool size = 7500/100, pooling = false
- SSL disabling enforce security false as mentioned in microsoft kb article.
And there's nothing any issue with hardware/firewall as my application's login and other forms are working fine(which use same database with same connection string)
I have a question regarding the nature of virtual sql servers, specificially what protocol is used to communicate to the server when a request is made by a client.
For example, if a scheduled job is run on the virtual sql server, what determines the protocol used (e.g. TCP/IP, named pipes etc.) by SQL Server agent? Is it the client network alias set up on the virtual server?
I am asking because currently the client aliases on some of our virtual sql servers are using named pipes and I think this is causing a problem with our backups.
I have a system log with NULL gaps between a sequence of numbers...see "BEFORE" sample below.
The number of gaps between the Sequence_ID's are arbitrary, but generally less then 50 records.
I'd like enumerate the gaps to produce the "AFTER" result, but do it with a single query or view, not through procedures.
I've been playing with windowed functions and groupings with no success. I'm guessing it'll need some recursive CTE logic, but I haven't been able to figure it out the correct loop.
I have a problem enumerating SQL server instances on a 64 bits server W2K3 R2 SP2, running SQL 2000 sp4 (32 bits), SQL 2005 Express sp2 (32 bits) and SQL 2005 Developer sp2 (64 bits). I am using the same way as the sample (found on SQLDev.net) ListSQLSvr application to enumerate the instances.
In my case i have the following instances defined:
When i enumerate the SQL instances for the entire network like this:
ListSQLSvr -X All instances appear (including the instances from other machines in the network, as expected)
When i enumerate the SQL instances on my local machine like this: ListSQLSvr -S MYPC -X Only the 32 bits instances appear..
When compiling the ListSQLSvr application to target 64 bit, the result on the local macine shows only the 64 bits instances !?!?
I am using this enumerating code in my installer to fill a listbox and depending on what kind of SQL instance (32 or 64 bits) is selected by the user, I install the correct extended stored procedure and register accourdingly (note the difference between a 32 extended Proc and a 64 bit extended Proc). In this case I only need the local SQL instances since i want to install the correct extended proc.
Since the installer (MSI file) is one-for-all (32 and 64 bits OS's) it runs the code from a Custom Action DLL in 32 bits. Resulting in showing only the 32 bits instances. When I would use the 64 bit installer and make my CA DLL to target 64 bits, I would only see the 64 bits instances. But i would like to see and use all instances in my 32 bit installer and take the appropriate action to install the correct extended Proc.
I think it has to do with some internals of ODBC (SQLBrowseConnect() most likely); When using a local enumeration it uses Shared Memory and when enumerating the entire network (or any other machine) it uses TCP/IP? If this is true, is there a way to bypass this someway? Or if this isn't true, does anyone know any solution to the problem described?
Regards,
Albert van Peppen Senior System Engineer Insad Grafisch b.v.
I can't map other sql servers without creating alias with proper port number on client network utility. Other users using same version of the client tools, MMC, SQL DMF etc. I need to map 70 sql servers on using my client tools. Any help is appreciated.
I am in the middle of a major migraton project, moving from x86 SQL 2000 to IA64 SQL 2005. I have a business need to link to several legacy servers. I have a number of problems I am trying to solve.
1) Linking a Kerberos server to a non-Kerberos server. 2) Linking x64 or IA64 servers to x86 servers. 3) Linking SQL 2005 to SQL 2000.
Two of the errors I am encountering are: ------------------------------ TCP Provider: An existing connection was forcibly closed by the remote host. Login failed for user '(null)'. Reason: Not associated with a trusted SQL Server connection. OLE DB provider "SQLNCLI" for linked server "SCDC250DB" returned message "Communication link failure". (Microsoft SQL Server, Error: 10054) ------------------------------ And ------------------------------ The OLE DB provider "SQLNCLI" for the linked server "SCDC250DB" reported an error. Authentication failed. Cannot initialize the data source object of OLE DB provider "SQLNCLI" for linked server "SCDC250DB". OLE DB provider "SQLCLI" for linked server "SCDC250DB" returned message "Invalid authorization specification". (Microsoft SQL Server, Error: 7399)
If someone has worked through these problems before, I would appreciate it if you could direct me to the relevant documentation to resolve these issues.
Thanks!
Brandon Forest
Database Administrator
Data & Web Services Team
Sutter Connect Information Technologyforesb@sutterhealth.org
I have recently upgraded my databases from SQL 2000 to 2005. In 2000, I could set the network affinity so that sql server was only accessible from one of the two network cards. I cannot find how to do this in sql 2005. Is there a way?
In my installation, I have two network cards in each server. The "A" network adapter connects to the "A" hub, and the "B" adapter connected to the "B" hub. Traffic on trhe "B" hub is my private, non-routable network, This is where I want the SQL Server traffic to run. The A hub traffic is the public network. This gives me the ability to isolate SQL Server from the outside world.
I have done a bit of searching around and cant find a clear answer to this question.
Current Setup Desktop application (c#) that connects to a SQL Server 2005 express database on the same local network as the application (currently 3 users)
It is only a very small company and has just taken on their first remote worker, but expects to take on another 6-8 over the next few months. They have asked for the database to be moved online.
The application was written in such a way that everything has been done using no stored procs, or views, it is all native SQL.
This will be my first DB hosted online and before I go ahead and do anything I just wanted to make sure what I have to do is correct, sorry if this is a very basic question, although I have been programming for a long time, I have never had the chance to do any online databases before.
Will this work. 1.Find a SQL Server 2005 Hosting company. 2.Move the database to the server. 3.Setup the users permissions. 3.Alter the connection string in the application to point to the new location.
So the only thing that would change would be a new connection string in the application preferences?
Or am I living in a dream world, because nothing is ever that simple.
One thing I am worried about is the security/visiblity of the database and data as it travels from the server to the client and back.
I have 2 networked PC's both running vista ultimate
1st is Laptop and is running its own SQL Server at laptoplaptopSQL 2nd is Desktop and is running its own SQL Server at desktopdesktopSQL
Now both machines have seperate windows login accounts.
When I go SQL Server management studio I go to browse and each machine can see the other machines SQL Server, but when I go to login I get SQL Login falied for users" The user is not associaed with a trusted SQL server connection".
So I then go to logins new login and try to add my other pc's user account. The problem I see is that when I go to search and then location it only shows its own PC's location and not the location of my other networked pc? So if I am on Desktop and in my theory want to add laptopuser to the desktop SQL Server logins I get:
"create failed for login laptopuser
An exception occurred while executing Transact SQL statement laptopuser is not a valid windows NT name. give the complete name
Say that I have 100,000 attributes/feature selections for my SQL Server Neural Network Algorithm.
Customer Attr1 Attr2 Attr3 ..... Atr100000 ============================== Jack 1 0 1 ..... 1 Sam 0 1 1 ...... 0 Mary 1 1 0 ...... 1
Knowing the fact I can't fit those info on a table and SQL Server's Neural Network does not support table prediction . What's an alternative to use Neural Network in SQL Server 2005 to solve my problem?
I am new to SQL Server and I am trying to install SQL Server 2005 Express or Stnadard Edition on a computer runing XP pro on a XP's workgroup network using a router. Can I access the the database from another computer running XP pro on the same network? If I can, what setting do I need when installing SQL 2005 in order to do this?
I get the following error and have been trying to figure out why I keep getting it. Initially, I had placed my project under wwwroot folder and ran it under IIS and it gave this error. Then I moved it to my local C drive and same thing. I am sharing this project with two other co-workers and all our config files and code files are same...they don't get this error but I do. I checked that SQL Server Client Network Utility has TCP/IP and the 'Named Pipes' enabled. I thought maybe I have setting in the Visual Studio 2005 that I'm not aware of that's causing this problem...it can't be the server since my co-workers aren't having this error and can't be anything in the code since all of us are sharing this project through vss. I dont' think using different version of .net framework can create this error. I changed the version from 2.0 to use 1.1x and it gave same error... Any help would be greatly appreciated. Thanks in advance.
Server Error in '/RBOdev' Application.
An error has occurred while establishing a connection to the server. When connecting to SQL Server 2005, this failure may be caused by the fact that under the default settings SQL Server does not allow remote connections. (provider: SQL Network Interfaces, error: 26 - Error Locating Server/Instance Specified) Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. Exception Details: System.Data.SqlClient.SqlException: An error has occurred while establishing a connection to the server. When connecting to SQL Server 2005, this failure may be caused by the fact that under the default settings SQL Server does not allow remote connections. (provider: SQL Network Interfaces, error: 26 - Error Locating Server/Instance Specified)Source Error:
An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below. Stack Trace:
[SqlException (0x80131904): An error has occurred while establishing a connection to the server. When connecting to SQL Server 2005, this failure may be caused by the fact that under the default settings SQL Server does not allow remote connections. (provider: SQL Network Interfaces, error: 26 - Error Locating Server/Instance Specified)] System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection) +739123 System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj) +188 System.Data.SqlClient.TdsParser.Connect(ServerInfo serverInfo, SqlInternalConnectionTds connHandler, Boolean ignoreSniOpenTimeout, Int64 timerExpire, Boolean encrypt, Boolean trustServerCert, Boolean integratedSecurity, SqlConnection owningObject) +685966 System.Data.SqlClient.SqlInternalConnectionTds.AttemptOneLogin(ServerInfo serverInfo, String newPassword, Boolean ignoreSniOpenTimeout, Int64 timerExpire, SqlConnection owningObject) +109 System.Data.SqlClient.SqlInternalConnectionTds.LoginNoFailover(String host, String newPassword, Boolean redirectedUserInstance, SqlConnection owningObject, SqlConnectionString connectionOptions, Int64 timerStart) +383 System.Data.SqlClient.SqlInternalConnectionTds.OpenLoginEnlist(SqlConnection owningObject, SqlConnectionString connectionOptions, String newPassword, Boolean redirectedUserInstance) +181 System.Data.SqlClient.SqlInternalConnectionTds..ctor(DbConnectionPoolIdentity identity, SqlConnectionString connectionOptions, Object providerInfo, String newPassword, SqlConnection owningObject, Boolean redirectedUserInstance) +170 System.Data.SqlClient.SqlConnectionFactory.CreateConnection(DbConnectionOptions options, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningConnection) +130 System.Data.ProviderBase.DbConnectionFactory.CreatePooledConnection(DbConnection owningConnection, DbConnectionPool pool, DbConnectionOptions options) +28 System.Data.ProviderBase.DbConnectionPool.CreateObject(DbConnection owningObject) +424 System.Data.ProviderBase.DbConnectionPool.UserCreateRequest(DbConnection owningObject) +66 System.Data.ProviderBase.DbConnectionPool.GetConnection(DbConnection owningObject) +496 System.Data.ProviderBase.DbConnectionFactory.GetConnection(DbConnection owningConnection) +82 System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory) +105 System.Data.SqlClient.SqlConnection.Open() +111 System.Web.DataAccess.SqlConnectionHolder.Open(HttpContext context, Boolean revertImpersonate) +84 System.Web.DataAccess.SqlConnectionHelper.GetConnection(String connectionString, Boolean revertImpersonation) +197 System.Web.UI.WebControls.WebParts.SqlPersonalizationProvider.GetConnectionHolder() +16 System.Web.UI.WebControls.WebParts.SqlPersonalizationProvider.LoadPersonalizationBlobs(WebPartManager webPartManager, String path, String userName, Byte[]& sharedDataBlob, Byte[]& userDataBlob) +195 System.Web.UI.WebControls.WebParts.PersonalizationProvider.LoadPersonalizationState(WebPartManager webPartManager, Boolean ignoreCurrentUser) +95 System.Web.UI.WebControls.WebParts.WebPartPersonalization.Load() +105 System.Web.UI.WebControls.WebParts.WebPartManager.OnInit(EventArgs e) +497 System.Web.UI.Control.InitRecursive(Control namingContainer) +321 System.Web.UI.Control.InitRecursive(Control namingContainer) +198 System.Web.UI.Control.InitRecursive(Control namingContainer) +198 System.Web.UI.Control.InitRecursive(Control namingContainer) +198 System.Web.UI.Control.InitRecursive(Control namingContainer) +198 System.Web.UI.Control.InitRecursive(Control namingContainer) +198 System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +692
Version Information: Microsoft .NET Framework Version:2.0.50727.832; ASP.NET Version:2.0.50727.832
Hello. I am called Narsiste. I have a problem of configuration in SQL server 2005 express train. In fact, I do not know how to make the configuration to tackle the databases SQL server 2005 express train which are on a station has starting from a station B (both being in a network LAN). But I read in the module of €œconfiguration of the surface of exposure for the services and connections - localhost€? that €œBy defect, the editions Express train, Evaluation and Developer SQL SERVER 2005 authorize only local connections.€?. As it is BY DEFECT, I said myself that it will have to be changed a parameter so that access TCP/IP can go on this version of SQL SERVER.
Here is the message which I have: €œAn error occurred during the establishment of a connection to the waiter. At the time of connection to SQL Server 2005, this failure can be due to the fact that the default settings of SQL Server do not authorize remote connections. (Provider: Interfaces network SQL, error: 26 - Error during the localization of the waiter/the authority specified) (Microsoft SQL Server, Error: -1)€?.
If somebody encountered this problem in the past, that he wants to inform well me of the solution which he found for this last. Thank you.
I have a clustered environment where I have virtual servers running and I have SQL 2005 on one of the virtual servers. Is there any way to have multiple SQL instances running on one virtual server, if so how? If this is not possible than what are some of my options? Thank you, Kern Probation
I have 2 different servers that run nightly backup jobs to a network drive using the UNC format. I am noticing the larger databases encountering the following errors on a regular basis
Error: 18210, Severity: 16, State: 1. '\fnfssql3SQLBackupsMNSQL05<database>.BAK'. Operating system error 64(The specified network name is no longer available.). BACKUP failed to complete the command BACKUP DATABASE <database>. Check the backup application log for detailed messages.
There are 5 databases on this server all backed up by the same job and 3 of them wortk fine and 2 of them fail so it is not a permissions problem. Have there been any problems with backing up to a network drive in 2005?
I'm green on this networking stuff so any help is greatly appreciated.
I have setup my home computer as a server and assigned a static IP to it. I installed SQL Server 2005 Developer and allowed remote connections to it through the Surface Area Config tool, added port 1433 TCP and 1434 UDP to firewall's exception list, and started the SQL Server Browser service.
Now I can't seem to remote connect to this SQL Server from my office network. Is there something I'm doing wrong here?
I am trying to restore database from network drive but sql server 2005 express is giving error "system.data.sqlclient.sqlErroratabase <dbname> cannot be opened due to inaccessible files or insufficient memory or disk space (microsoft.sqlserver.express.smo)." But when I restore database from "C:" or local drive it alows to do so. Can anyone help.
Hi, i´m new to SQL SERVER, I've been using Oracle and MySql without problems so far. I'm having problems to connect to SQL SERVER on my local machine. **UPDATE I can connect via command line, but from Visual Studio can´t connect to SQL SERVER Sometimes I got this error: [DBNETLIB][ConnectionOpen (Connect()).]SQL Server does not exist or access denied. And sometimes something about enabling remote connections in SQL SERVER , but the server is in the local machine. what´s suppose to be the name of my server? localhost? what am I doing wrong, ? I have no problems to connect to Oracle and mysql with Visual Studio. Thanks in advance
I was wondering whether it is possible to query linked servers in SQL Server Management Studio Express 2005 if those servers linked to are SQL Server 2000 machines?
I have added some linked servers to express and queried them, however the login timeout is expiring. I thought it might be because of an incompatability.