2010-06-02 7 views
7

Czy istnieje sposób na jednoznaczną identyfikację bazy danych?Czy jest jakiś sposób w SQL Server, aby jednoznacznie zidentyfikować bazę danych?

Jeśli mamy skopiować bazę danych na inny komputer, zakłada się, że ta instancja jest inna. Sprawdziłem na tabelach głównych, ale nie mogłem zidentyfikować żadnych informacji, które mogłyby to zidentyfikować.

+0

Szukam tego samego - żadna z tych odpowiedzi nie działa również dla mnie, ponieważ celem jest, aby identyfikator nie był poprawny, jeśli baza danych zostanie przeniesiona na inny komputer. –

+0

To jest stary post, ale szukałem tego samego i znalazłem sumę kontrolną (wygenerowaną podczas instalacji), która jest unikalna dla każdego serwera SQL i działa, nawet jeśli jest to wydanie ekspresowe. Jest na HKLM \ SOFTWARE \ Microsoft \ Microsoft SQL Server \ 100 \ Tools \ Setup. JEDNAK NIE WIEM, czy zmiana tej sumy kontrolnej zaszkodzi SQL Server ... –

Odpowiedz

3

Można utworzyć w nim tabelę o unikalnej nazwie i po prostu wykonać zapytanie na ten temat. Jest to bit hack, na pewno, ale że to działa ...

+0

+1. Piękno hack: o) –

+0

Jeśli mogę skopiować bazę danych, nie jestem pewien, czy możemy określić, czy baza danych się zmieniła. Nie jestem pewien, czy czegoś brakuje, czy możesz jeszcze trochę bardziej rozwinąć? – sraj

+0

, który zmienia formułę tekstu. Czy chodzi ci o sposób rozpoznawania bazy danych na innej maszynie, czy sposób zmiany bazy danych podczas kopiowania na inną maszynę lub sposób potwierdzenia, że ​​db zmienił się w jakiś sposób na innym komputerze? –

1

Utwórz funkcję skalarną, która zwraca numer ID/wersja:

create function fnGetThisDBID() returns varchar(32) as begin 
    return ('v1.1,origin=server1') 
end 

select 'version is: ' + dbo.fnGetThisDBID() 
3

można umieścić informacje w majątku związanego rozszerzonym z samej bazy danych:

USE AdventureWorks2008R2; 
GO 
EXEC sys.sp_addextendedproperty 
@name = N'MS_DescriptionExample', 
@value = N'AdventureWorks2008R2 Sample OLTP Database'; 
GO 

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

W twoim przypadku, chciałbym użyć czegoś takiego:

EXEC sys.sp_addextendedproperty 
@name = N'UniqueID', 
@value = N'10156435463'; 

select objname, [name], [value] 
from fn_listextendedproperty (null, null, null, null, null, null, null) 
3

service_broker_guid w sys.databases jest dość blisko tego, o co prosisz. Jest to uniqueidentfier generowany podczas tworzenia bazy danych i jest zachowywany podczas przenoszenia bazy danych (odłączanie i dołączanie, tworzenie kopii zapasowych i przywracanie, zmiana nazwy serwera itp.). Można go wyraźnie zmienić za pomocą ALTER DATABASE ... SET NEW_BROKER;.

+0

Potrzebuję dokładnie naprzeciwko tego, myślę. Jeśli baza danych jest kopiowana na nowy serwer, to musi być oznaczona jako unikalna. Jeśli połączę nazwę serwera z identyfikatorem, może to uczynić go wyjątkowym. – sraj

Powiązane problemy