2009-11-02 2 views
0

Я создал кластер SQL Server 2008 (TestMachine1 -> Имя компьютера). И я написал программу C# для извлечения всех n/w экземпляров в lan.Что не так в кластере sql2k8? SMO не получает экземпляры сети в кластерной машине ...?

Когда я запускаю exe из TestMachine1 (где установлен SQLCluster), я не получаю экземпляры. Когда я отлаживаю, я получаю Null в строках таблицы данных.

тот же exe, когда я запускаю TestMachine2 (машина в том же н/д, но автономная машина, где есть отдельная установка Sql), я получаю результат?

Я не знаю, что Z в кластере? Кластер успешно установлен без ошибок и SQL также установлено без ошибок ...

Вот код:

 DataTable dt1 = SmoApplication.EnumAvailableSqlServers(false); 
     Console.WriteLine("Total Rows in DataTable " + dt1.Rows.Count); 
     foreach (DataRow dr in dt1.Rows) 
     { 
      foreach (DataColumn dc in dt1.Columns) 
      { 
       Console.WriteLine("{0} = {1}", dc.ColumnName, dr[dc]); 
      } 
      Console.WriteLine("============================"); 
     } 

     Console.Read(); 

для установки кластера я получаю «Всего строки в DataTable = 0», где, как в не кластере машина я получаю «7». что не так ???

Любая помощь очень ценится.

ответ

1

Экземпляр кластера будет отвечать на имя виртуального ресурса, а не на любом узле, составляющем кластер.

+0

Yah.But в сети он должен показывать детали na на основе кода? Но он ничего не дает – Cute

+0

Ваш брандмауэр может заблокировать пакет обнаружения имени UDP-экземпляра, см. Http://blogs.msdn.com/sql_protocols/archive/2006/02/27/unable-to-connect-to-a-sql-server -named-instance-on-a-cluster.aspx –

+0

я отключил брандмауэр. Затем все порты открыты правильно? – Cute

1

как у Ремуса, он найдет только локальный локальный SQL-файл ... в основном его использование локального имени хоста, потому что вы не указали ему имя, а под именем локального хоста SQL-кластер не будет отвечать. так что вам нужно для подключения к виртуальному имени непосредственно ... вы можете найти имя виртуального кластера из реестра ..

HKLM: \ SOFTWARE \ Microsoft \ Microsoft SQL Server \ Instance Names \ SQL

если вы установлены по умолчанию, вы увидите, что это будет что-то вроде (в зависимости от версии) MSSQL10_50.MSSQLSERVER

если вы идете до HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Microsoft SQL Server

вы увидите есть узел, вызываемый этим именем экземпляра (в данном случае MSSQL10_50.MSSQLSERVER) там вы найдете кластер, который имеет ClusterName ключ ... который имеет значение имени кластера ...

Edit: я просто сделал некоторые испытания в ...

PowerShell

[System.Reflection.Assembly ] :: LoadWithPartialName ("Microsoft.SqlServer.SMO") | Из-Null

microsoft.sqlserver.management.smo.smoapplication] :: enumavailablesqlservers ($ несовпадения)

(пс, отсутствует [выше, потому что StackOverflow в настоящее время странно) я получил кучу материала, который был сорт случайных ... состояние документов MSDN

Компьютер с экземпляром SQL Server может не получать ответы на метод EnumAvailableSqlServers своевременно. Возвращенный список может не отображать все доступные экземпляры SQL Server в сети. Когда вы вызываете метод EnumAvailableSqlServers в последующих попытках, в сети может появляться больше серверов.

http://msdn.microsoft.com/en-us/library/ms210334.aspx

я должен сказать, что я вероятно не использовать этот метод, если вы не просто пытается отобразить результаты для конечных пользователей ... я Wouldnt использовать его, чтобы найти имя кластера.