Свойства базы данных - PullRequest
0 голосов
/ 02 января 2019

В сети компании имеется несколько экземпляров SQL Server, все из которых имеют уникальные имена, однако каждый из них имеет одно и то же имя базы данных, как ClientDB. Я знаю, что для каждого из них есть идентификатор базы данных, но мне было интересно, существует ли уникальный идентификатор, который будет работать между экземплярами? Теперь, когда я пишу это, это звучит глупо, как новый экземпляр узнает имена баз данных уже там? Я спрашиваю, потому что я собираю информацию о всех наших базах данных, таких как имя, создатель, размер, последнее резервное копирование и т. Д. В таблицу, и это сбивает с толку, потому что многие записи имеют одно и то же имя базы данных. Возможно, где-то есть идентификатор экземпляра или GUID базы данных, или мне просто нужно отслеживать как экземпляр, так и имя базы данных, чтобы идентифицировать запись? Спасибо за вашу помощь.

Ответы [ 3 ]

0 голосов
/ 03 января 2019

Это называется composite key. Поскольку одного имени базы данных недостаточно, чтобы однозначно идентифицировать его среди ваших активов, необходимо добавить в таблицу дополнительные атрибуты.

  • @@server_name для идентификации экземпляра MS SQL Server в блоке вместе с именем блока;
  • db_name() или выберите из sys.databases, чтобы получить имена баз данных для этого экземпляра.

Вместе они составляют ключ, достаточно уникальный для большинства случаев. Однако учтите, что вы все равно можете столкнуться, если:

  • В вашей сети несколько доменов AD, и некоторые серверы имеют повторяющиеся имена в разных доменах. Плохое решение по проектированию сети само по себе; Я попытался бы переключиться с имен экземпляров на IP-адреса здесь или добавить функцию default_domain(), если ваши версии SQL Server поддерживают ее;
  • У вас есть кластеризованные экземпляры SQL. Не коллизия как таковая, а дубликат в ваших записях; просто убедитесь, что вы не используете имена узлов кластера, или ведите отдельный список кластеров / экземпляров AlwaysOn, чтобы обойти это. Сам на самом деле не проверял это, может быть, здесь не так.
0 голосов
/ 03 января 2019

Свойство service_broker_guid, назначенное каждой базе данных (кроме master и model) при создании в SQL Server, может удовлетворить ваши потребности.service_borker_guid - это Глобальный уникальный идентификатор , также известный как UUID.

Страница Википедии говорит о том, что вы можете найти два одинаковых значения в и из вашей сети:

В то время каквероятность того, что UUID будет продублирован, не равна нулю, он достаточно близок к нулю, чтобы его можно было пренебречь

В приведенном ниже запросе будет выбран нужный GUID.

select @@servername as host_nm, name as db_nm, service_broker_guid
from master.sys.databases
where name in ('ClientDB')

Вывод:

+----------------+----------+--------------------------------------+
| host_nm        | db_nm    | service_broker_guid                  |
+----------------+----------+--------------------------------------+
| MY_SERVER_NAME | ClientDB | 9B7C1BF1-022D-423D-9780-88B555459868 |
+----------------+----------+--------------------------------------+

В этом вопросе на сайте DBA уточняется GUID, если вы хотите получить более подробную информацию по этому вопросу.

0 голосов
/ 03 января 2019

Вам необходимо добавить имя базы данных перед "хостом".Хост также известен как:

  • "имя компьютера", "имя хоста", "имя хоста".
  • "сервер" или "имя сервера", "имя компьютера".
  • "box".
  • "vm" или "vm name".
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...