Как инвентаризировать набор Базы данных и все Ваши объекты?

Я хотел бы знать, есть ли способ доставать информацию (число подмостков, соответствующего размера, сколько реестров, и т.д.), но из-за каждой базы данных внутри инстанции. Я знаю, что консультация, чтобы определять базы данных внутри сервера:

USE master  
GO  
SELECT name, database_id, create_date FROM sys.databases  
GO

... и что консультация, чтобы определять детали таблицы внутри базы данных:

use database
go
SELECT * FROM information_schema.tables
go

Но я не знаю, как делать оба в одной ни одну консультацию, и который я как оказанный немного, как которое я показываю в нижней таблице. И если бы были возможными также stores и JOBS, они просят меня, чтобы делать инвентарь, проблема состоит в том, что у них есть более 450 оснований данных, разделенных на 20 серверах. Он бы это не закончил делая когда бы то ни было консультации наверху основания из-за основания. Я представляю себе то, что возможно осуществлять SP, но этого не добился еще.

introducir la descripción de la imagen aquí

Любая идея или подсказка была бы много помощи, или возможно уже существовала какая-то процедура, хранившаяся и т.д.

1
задан 24.01.2017, 22:41
0 ответов

Пробуй используя утилиту sp_msforeachdb следующего способа. То, что делается здесь, состоит в том, чтобы создавать временную таблицу, где будет храниться собранная информация, сначала получается информация о подмостках и потом таблица процедур, в конце концов его делается ему одним SELECT во временную таблицу:

SET NOCOUNT ON

IF OBJECT_ID('tempdb..#Inventory') IS NOT NULL
  DROP TABLE #Inventory 

CREATE TABLE #Inventory
(
    DatabaseName nvarchar(1024)
    ,ObjectType nvarchar(1024)
    ,ObjectName nvarchar(1024)
    ,SchemaName nvarchar(1024)  
    ,RowCounts int
    ,TotalSpaceKB int
    ,UsedSpaceKB int
    ,UnusedSpaceKB int
)
INSERT INTO #Inventory
EXEC sp_msforeachdb 
'
SELECT  
    ''?'' AS DatabaseName,
    ''Table'' AS ObjectType,
    t.NAME AS ObjectName,
    s.Name AS SchemaName,
    p.rows AS RowCounts,
    SUM(a.total_pages) * 8 AS TotalSpaceKB, 
    SUM(a.used_pages) * 8 AS UsedSpaceKB, 
    (SUM(a.total_pages) - SUM(a.used_pages)) * 8 AS UnusedSpaceKB
FROM 
    [?].sys.tables t
INNER JOIN      
    [?].sys.indexes i ON t.OBJECT_ID = i.object_id
INNER JOIN 
    [?].sys.partitions p ON i.object_id = p.OBJECT_ID AND i.index_id = p.index_id
INNER JOIN 
    [?].sys.allocation_units a ON p.partition_id = a.container_id
LEFT OUTER JOIN 
    sys.schemas s ON t.schema_id = s.schema_id
WHERE 
    t.NAME NOT LIKE ''dt%'' 
    AND t.is_ms_shipped = 0
    AND i.OBJECT_ID > 255 
GROUP BY 
    t.Name, s.Name, p.Rows
ORDER BY 
    t.Name
'

INSERT INTO #Inventory
EXEC sp_msforeachdb 
'SELECT 
    ''?'' AS DatabaseName
    ,''Procedure'' As ObjectType
    , SPECIFIC_NAME As ObjectName
    , SPECIFIC_SCHEMA AS SchemaName
    , 0 As RowCounts
    , 0 As TotalSpaceKB
    , 0 As UsedSpaceKB
    , 0 As UnusedSpaceKB
FROM information_schema.routines 
WHERE routine_type = ''PROCEDURE'''

SET NOCOUNT OFF
SELECT * FROM #Inventory ORDER BY DatabaseName, ObjectType DESC, ObjectName
1
ответ дан 03.12.2019, 17:31
  • 1
    спасибо за informació n, относительно результата консультации, у меня выходят два временных подмостков, первая, которая является созданной таблицей #Inventory и второй #qtemp, эта ú ltima я не помню что увидел ее. [1]: i.stack.imgur.com/q4c1i.png ¿ generó с ejecució n рукописного шрифта (#qtemp)? ¿ tendrí от которого отказываться tambié n? Хотя верное состоит в том, что, когда я делаю последующие консультации по поводу одинокого tempdb, он фигурирует #inventory. привет. –  25.01.2017, 19:39
  • 2
    Эта таблица, на которую ты ссылаешься, не принадлежит этому рукописному шрифту. Внезапно может создавать ее хранившаяся процедура sp_msforeachdb, но у меня нет достоверности этого. –  25.01.2017, 20:22
  • 3
    Tambié n он важен, чтобы ты пометил, восполняет запас как правильная, в случае, который стоил тебе для того, чтобы решить твой вопрос. Привет –  25.01.2017, 20:23
  • 4
    Просвет, что sí рукописный шрифт наверху ejecuté на локальном сервере доказательства, и очевидно listó базы данных внутри нее, включая BD системы (степень магистра, tempdb, model, и т.д...) Внутри tempdb фигурирует временная таблица #inventory созданная для конца консультации и добавочной другой (#qtemp), что не sé из-за которого он это делает. Хотя, поскольку я повторяю тебе эту ú ltima он не фигурирует, когда я стараюсь помещать ее в tempdb, только появляется в результате рукописного шрифта, но я думаю, что он не является значимым, уже quité с WHERE. –  25.01.2017, 21:47
  • 5
    Веймар, encontré недостаток в списке хранившихся процедур, повторяется во всех базах данных. ¿ Podrí схвати проверять их? То, что я сделал, состояло в том, чтобы комментировать часть рукописного шрифта, относящегося к inserció n подмостков, и меня dí расскажи, что stores, которые заносятся в список каждой базой данных, повторяются. –  26.01.2017, 17:31

Теги

Похожие вопросы