Even though I have direct access to the physical database machine, I have to specify
dbmachine\sql in the connection field, rather than just the instance name. Why is that?
Quite simply, client tools need to know explicitly which machine you're trying to connect to. This is like trying to access
http://localhost/test_site by typing
test_site into your browser.
For SQL Server you can indicate the local machine in a variety of ways:
This is possibly because you have named instance installed instead or apart from Default instance.
So the default instance looks like
While the named instance in you're case is
Client applications connect to an instance of Microsoft SQL Server 2005 to work with a SQL Server database. Each SQL Server instance is made up of a distinct set of services that can have unique settings. The directory structure, registry structure, and service name all reflect the specific instance name you identify during setup.
An instance is either the default, unnamed instance, or it is a named instance. When SQL Server 2005 is in installed in the default instance, it does not require a client to specify the name of the instance to make a connection. The client only has to know the server name.
A named instance is identified by the network name of the computer plus the instance name that you specify during installation. The client must specify both the server name and the instance name when connecting.
By default, SQL Server installs in the default instance unless you specify an instance name. SQL Server Express, however, always installs in a named instance unless you force a default installation during setup.
Just to add in case you want to understand more of difference between two :
@noxetrox, I would like to say that if you will mention
Definitely you shall get error as per MSDN BOL naming convention rule Here
Embedded spaces of other special characters are not allowed in instance names, nor are the backslash (), comma (,), colon (:), semi-colon (;), single quotation mark ('), ampersand (&), number sign (#), or at sign (@).
As your question like Why do we need this instance access?
Because an instance of the Database Engine is a copy of the
sqlservr.exeexecutable that runs as an operating system service. Each instance manages several system databases and one or more user databases