SQL Server 多instance问题。

hzf005 2008-07-06 05:49:59
最近测试机器上安装了SQL Server2000, 用的是default instance: MSSQLSERVER.
然后再在同一机器上安装了SQL Server 2005, 创建了两个instances: SQLTEST01, SQLTEST02.
所有的服务起来。
我用 osql -E -Q"select @@SERVERNAME" -h-1 只能查到default instance: MSSQLSERVER,怎样才能查到其他的instances: SQLTEST01, SQLTEST02?
我试图去注册表查询: reg query "hklm\software\Microsoft\Microsoft SQL Server\"
可以看到 MSSQLSERVER\0SQLTEST01\0SQLTEST02 三个值,估计\0代表空格。我拷贝了一个grep程序,进行解析,奇怪的是还是只能看到MSSQLSERVER,
后面两个值就丢失啦。郁闷啊?
我的问题是:1.如果用osql来查询,怎样查到多个instance的值,且知道该instance是正在running?
2.如果用注册表查询,怎样察看多个instance值,且判断该instance是running状态?
3.另外,sql 7可以通过"hklm\software\microsoft\Microsoft SQL server 7.0"判断其安装; sql 2005可以通过"hklm\software\microsoft\Microsoft SQL server 2005 redist"或者"SQL 2005 - “HKLM\SOFTWARE\Microsoft\Microsoft SQL Server\90"判断其安装。 那么sql2000呢?因为我发现如果只安装sql2000,可以在注册表里找到"hklm\software\microsoft\Microsoft SQL Server". 但是只安装sql 7或者sql 2005也可以发现这个注册表键。也许有人说可以查"HKLM\SOFTWARE\Microsoft\Microsoft SQL Server\80",但是我发现只安装sql 2005,也有这个键。那位高手能给个详细说明否?多谢啦。
...全文
718 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
hery2002 2008-07-12
  • 打赏
  • 举报
回复
LZ不错,
实践+总结,
赞一个 :)
hzf005 2008-07-12
  • 打赏
  • 举报
回复
该问题已经解决:
1.如果看注册表
sql7 "hklm\software\microsoft\Microsoft SQL server 7.0"
sql2000 "HKLM\SOFTWARE\Microsoft\Microsoft SQL Server\80.00"
sql2005 "hklm\software\microsoft\Microsoft SQL server 2005 redist"
然后通过osql -E -Q "select @@SERVERNAME" -h -l 查default instance.
可以遍历"hklm\software\microsoft\Microsoft SQL Server"下的子结点,named instance 都在这里.用 osql -S.\InstanceName -Q"select @@SERVERNAME" -h -l 可以查出运行的instances.

2.方法二:
net start | find /i "sql"可以看出所有运行的instance. (基本如下:)
sql7 只有默认的instance MSSQLSERVER
sql2000 default instacne SQL Server <MSSQLSERVER>
sql2000 named instance SQL Server<XXXXXX>
sql2005 default instance SQL SERVER <MSSQLSREVER>
sql2005 named instance SQL SERVER <XXXXXXXXXXXX>
hery2002 2008-07-06
  • 打赏
  • 举报
回复
附一个:
osql 实用工具
http://msdn.microsoft.com/zh-cn/library/ms162806.aspx
hery2002 2008-07-06
  • 打赏
  • 举报
回复
1.如果用osql来查询,怎样查到多个instance的值,且知道该instance是正在running?
osql 提供了-S参数来指定联接的实例名称,
-S server_name[\instance_name] 
指定要连接到的 Microsoft SQL Server 实例。指定 server_name 将连接到该服务器上 SQL Server 的默认实例。指定 server_name\instance_name 将连接到该服务器上 SQL Server 的某个命名实例。如果未指定服务器,osql 将连接到本地计算机上的 SQL Server 默认实例。从网络上的远程计算机执行 osql 时,此选项是必需的。


2.如果用注册表查询,怎样察看多个instance值,且判断该instance是running状态?
注册表判断实例是否运行,这个还真没有注意过.

3.
也许有人说可以查"HKLM\SOFTWARE\Microsoft\Microsoft SQL Server\80",但是我发现只安装sql 2005,也有这个键。那位高手能给个详细说明否?多谢啦。

应该是这个键值 HKLM\SOFTWARE\Microsoft\Microsoft SQL Server\80,
2005是为了保证向后兼容,所有有些键值还没有去掉,在安装2005的时候也会有对应的80版本的键值出现,
但是大部分键值都在90下面....
hzf005 2008-07-06
  • 打赏
  • 举报
回复
多谢回复.你们可能没有理解我的意思.
我不是通过人工来看服务.
如果被管理的服务器无人值守,我想通过脚本查到相关信息,然后上报到报表系统.
现在我遇到的问题是,脚本每次只能查到默认的实例,有没有好的方法自动搜索到非默认实例!
tianhuo_soft 2008-07-06
  • 打赏
  • 举报
回复
1.如果用osql来查询,怎样查到多个instance的值,且知道该instance是正在running?

默认情况下 只能看见 默认实例


3.另外,sql 7可以通过"hklm\software\microsoft\Microsoft SQL server 7.0"判断其安装; sql 2005可以通过"hklm\software\microsoft\Microsoft SQL server 2005 redist"或者"SQL 2005 - “HKLM\SOFTWARE\Microsoft\Microsoft SQL Server\90"判断其安装。 那么sql2000呢?因为我发现如果只安装sql2000,可以在注册表里找到"hklm\software\microsoft\Microsoft SQL Server". 但是只安装sql 7或者sql 2005也可以发现这个注册表键。也许有人说可以查"HKLM\SOFTWARE\Microsoft\Microsoft SQL Server\80",但是我发现只安装sql 2005,也有这个键。那位高手能给个详细说明否?多谢啦。


完全可以不通过注册表判断 ,可以通过服务来判断~!
中国风 2008-07-06
  • 打赏
  • 举报
回复
用连接时—服务器—选择浏览可见到本机的所有实例

默认实例只存在一个可用./用机器名/IP连接

其它新增实例格式为"机器名\SQLTEST01"/"机器名IP\SQLTEST01"

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧