Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 как получить список всех баз на сервере (кроме системных)?  [new]
temp-for-testing
Member

Откуда:
Сообщений: 384
Добрый день!

Подскажите, как можно получить список всех баз, но без системных?

В sys.databases не нашел параметра, по которому видно, что база системная или нет..
18 авг 09, 14:55    [7551822]     Ответить | Цитировать Сообщить модератору
 Re: как получить список всех баз на сервере (кроме системных)?  [new]
Glory
Member

Откуда:
Сообщений: 104760
temp-for-testing
Добрый день!

Подскажите, как можно получить список всех баз, но без системных?

В sys.databases не нашел параметра, по которому видно, что база системная или нет..

Системных баз всего 4 и их имена регламентированы
18 авг 09, 14:57    [7551844]     Ответить | Цитировать Сообщить модератору
 Re: как получить список всех баз на сервере (кроме системных)?  [new]
temp-for-testing
Member

Откуда:
Сообщений: 384
Glory,

а distribution не системная база?
18 авг 09, 14:59    [7551857]     Ответить | Цитировать Сообщить модератору
 Re: как получить список всех баз на сервере (кроме системных)?  [new]
Glory
Member

Откуда:
Сообщений: 104760
temp-for-testing
Glory,

а distribution не системная база?

А разве без этой базы сервер не сможет работать ?
18 авг 09, 15:00    [7551861]     Ответить | Цитировать Сообщить модератору
 Re: как получить список всех баз на сервере (кроме системных)?  [new]
temp-for-testing
Member

Откуда:
Сообщений: 384
Glory,

может.. но в Management Studio эта база находится в группе "Системные базы данных".. и вот именно эти базы мне нужно исключить из списка
18 авг 09, 15:02    [7551866]     Ответить | Цитировать Сообщить модератору
 Re: как получить список всех баз на сервере (кроме системных)?  [new]
Glory
Member

Откуда:
Сообщений: 104760
temp-for-testing
Glory,

может.. но в Management Studio эта база находится в группе "Системные базы данных".. и вот именно эти базы мне нужно исключить из списка

Все равно придется фильтровать по именам
18 авг 09, 15:10    [7551915]     Ответить | Цитировать Сообщить модератору
 Re: как получить список всех баз на сервере (кроме системных)?  [new]
temp-for-testing
Member

Откуда:
Сообщений: 384
Glory,

т.е. списка 'master','tempdb','model','msdb','distribution' достаточно? или еще есть какие-то другие системные БД, которые создаются только по мере необходимости?
18 авг 09, 15:14    [7551939]     Ответить | Цитировать Сообщить модератору
 Re: как получить список всех баз на сервере (кроме системных)?  [new]
Roman S. Golubin
Member

Откуда: 140002
Сообщений: 11541
Glory
Все равно придется фильтровать по именам

Ну почему. Если это сервер, к которому есть доступ, то можно для каждой системной базы добавить расширенное свойство и фильтровать по нему.
18 авг 09, 15:14    [7551940]     Ответить | Цитировать Сообщить модератору
 Re: как получить список всех баз на сервере (кроме системных)?  [new]
temp-for-testing
Member

Откуда:
Сообщений: 384
Roman S. Golubin,

нет, нужен универсальный метод, который на любом сервере даст список только пользовательских БД..
18 авг 09, 15:15    [7551951]     Ответить | Цитировать Сообщить модератору
 Re: как получить список всех баз на сервере (кроме системных)?  [new]
Roman S. Golubin
Member

Откуда: 140002
Сообщений: 11541
temp-for-testing
Roman S. Golubin,

нет, нужен универсальный метод, который на любом сервере даст список только пользовательских БД..


Понятно. Тогда ой! :)
18 авг 09, 15:16    [7551956]     Ответить | Цитировать Сообщить модератору
 Re: как получить список всех баз на сервере (кроме системных)?  [new]
temp-for-testing
Member

Откуда:
Сообщений: 384
вот нашел здесь еще какую-то неизвестную мне системную БД - Resource

ее тоже тогда придется отфильтровывать?
18 авг 09, 15:21    [7551993]     Ответить | Цитировать Сообщить модератору
 Re: как получить список всех баз на сервере (кроме системных)?  [new]
Glory
Member

Откуда:
Сообщений: 104760
temp-for-testing
вот нашел здесь еще какую-то неизвестную мне системную БД - Resource

ее тоже тогда придется отфильтровывать?

К ней можно обратиться только из Dedicated Administrator Connection
18 авг 09, 15:23    [7552020]     Ответить | Цитировать Сообщить модератору
 Re: как получить список всех баз на сервере (кроме системных)?  [new]
Roman S. Golubin
Member

Откуда: 140002
Сообщений: 11541
Глянул профайлером, что делает SSMS что бы получить список пользовательских баз данных с севера:

exec sp_executesql N'


SELECT
dtb.name AS [Database_Name],
''Server[@Name='' + quotename(CAST(
        serverproperty(N''Servername'')
       AS sysname),'''''''') + '']'' + ''/Database[@Name='' + quotename(dtb.name,'''''''') + '']'' AS [Database_Urn],

                case
                when DATABASEPROPERTY(dtb.name,''IsShutDown'') is null then 0x200
                else 0
                end |
                case
                when 1 = dtb.is_in_standby then 0x40
                else 0
                end |
                case
                when 1 = dtb.is_cleanly_shutdown then 0x80
                else 0
                end |
                case dtb.state
                when 1 then 0x2
                when 2 then 0x8
                when 3 then 0x4
                when 4 then 0x10
                when 5 then 0x100
                when 6 then 0x20
                else 1
                end
             AS [Database_Status],
dtb.compatibility_level AS [Database_CompatibilityLevel],
ISNULL(dmi.mirroring_role,0) AS [Database_MirroringRole],
ISNULL(dmi.mirroring_state + 1, 0) AS [Database_MirroringStatus],
dtb.recovery_model AS [RecoveryModel],
dtb.user_access AS [UserAccess],
dtb.is_read_only AS [ReadOnly],
dtb.name AS [Database_DatabaseName2]
FROM
master.sys.databases AS dtb
LEFT OUTER JOIN sys.database_mirroring AS dmi ON dmi.database_id = dtb.database_id

WHERE
(CAST(case when dtb.name in (''master'',''model'',''msdb'',''tempdb'') then 1 else dtb.is_distributor end AS bit)=@_msparam_0 and CAST(isnull(dtb.source_database_id, 0) AS bit)=@_msparam_1)
ORDER BY
[Database_Name] ASC',N'@_msparam_0 nvarchar(4000),@_msparam_1 nvarchar(4000)',@_msparam_0=N'0',@_msparam_1=N'0'

Может поможет :)
18 авг 09, 15:28    [7552052]     Ответить | Цитировать Сообщить модератору
 Re: как получить список всех баз на сервере (кроме системных)?  [new]
Roman S. Golubin
Member

Откуда: 140002
Сообщений: 11541
Roman S. Golubin
Глянул профайлером, что делает SSMS что бы получить список пользовательских баз данных


То есть, список, фактически, по именам + свойствам db.is_distributor и db.source_database_id
18 авг 09, 15:32    [7552085]     Ответить | Цитировать Сообщить модератору
 Re: как получить список всех баз на сервере (кроме системных)?  [new]
temp-for-testing
Member

Откуда:
Сообщений: 384
Roman S. Golubin,

спасибо.. теперь запрос должен выглядеть так

select	name 
from	sys.databases
where	name not in ('master','tempdb','model','msdb') 
	and is_distributor = 0
	and source_database_id is null
18 авг 09, 15:45    [7552199]     Ответить | Цитировать Сообщить модератору
 Re: как получить список всех баз на сервере (кроме системных)?  [new]
Roman S. Golubin
Member

Откуда: 140002
Сообщений: 11541
select	name 
from	sys.databases
where	name not in ('master','tempdb','model','msdb') 
	and is_distributor = 0
	and isnull(source_database_id,0) = 0
18 авг 09, 15:56    [7552312]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить