Ideia é disponibilizar catálogo dos bancos de dados sob gestão da unidade, e unidades subordinadas, consolidando cultura de Data Science Analytics
Last active
March 30, 2020 06:37
-
-
Save rogeriopradoj/528b64a1bba45cbb128196f77e7d6ee1 to your computer and use it in GitHub Desktop.
CRIA catálogo de objetos servidores de banco de dados - sql server
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
* CATALOGO OBJETOS BANCO DE DADOS SUFUG/GERFU e vinculadas | |
* | |
* Objetivo é criar estrutura para tabela de catálogo de objetos | |
* | |
* Parte 1: cria catálogo temporário | |
*/ | |
/* | |
* define unidade que vai ficar gravada referente esse servidor | |
*/ | |
DECLARE @nome_unidade VARCHAR(100) = 'GERFU'; | |
/* | |
* cria estrutura do catálogo (objetos e colunas) | |
*/ | |
IF OBJECT_ID('tempdb..##TB_001_CATALOGO_OBJETOS_E_COLUNAS') IS NOT NULL | |
DROP TABLE ##TB_001_CATALOGO_OBJETOS_E_COLUNAS | |
; | |
CREATE TABLE ##TB_001_CATALOGO_OBJETOS_E_COLUNAS | |
( | |
NO_UNIDADE VARCHAR(100) | |
, NO_SERVIDOR NVARCHAR(128) | |
, DE_SERVIDOR NVARCHAR(300) | |
, DE_CURRENT_USER NVARCHAR(128) | |
, DE_SYSTEM_USER NVARCHAR(128) | |
, DE_ORIGINAL_LOGIN NVARCHAR(128) | |
, DE_SUSER_SNAME NVARCHAR(128) | |
, DH_GRAVACAO DATETIME2 | |
, TABLE_CATALOG NVARCHAR(128) | |
, TABLE_SCHEMA NVARCHAR(128) | |
, TABLE_NAME NVARCHAR(128) NOT NULL | |
, COLUMN_NAME NVARCHAR(128) NOT NULL | |
, ORDINAL_POSITION INT | |
, COLUMN_DEFAULT NVARCHAR(4000) | |
, IS_NULLABLE VARCHAR(3) | |
, DATA_TYPE NVARCHAR(128) | |
, CHARACTER_MAXIMUM_LENGTH INT | |
, CHARACTER_OCTET_LENGTH INT | |
, NUMERIC_PRECISION TINYINT | |
, NUMERIC_PRECISION_RADIX TINYINT | |
, NUMERIC_SCALE INT | |
, DATETIME_PRECISION SMALLINT | |
, COLLATION_NAME NVARCHAR(128) | |
, DATABASE_DESCRIPTION SQL_VARIANT | |
, SCHEMA_DESCRIPTION SQL_VARIANT | |
, TABLE_DESCRIPTION SQL_VARIANT | |
, COLUMN_DESCRIPTION SQL_VARIANT | |
, ROW_COUNT BIGINT | |
, RESERVED_SIZE_KB BIGINT | |
, DATA_SIZE_KB BIGINT | |
, INDEX_SIZE_KB BIGINT | |
, UNUSED_SIZE_KB BIGINT | |
, RESERVED_SIZE_MB NUMERIC(36, 2) | |
, DATA_SIZE_MB NUMERIC(36, 2) | |
, INDEX_SIZE_MB NUMERIC(36, 2) | |
, UNUSED_SIZE_MB NUMERIC(36, 2) | |
, RESERVED_SIZE_GB NUMERIC(36,2) | |
, DATA_SIZE_GB NUMERIC(36,2) | |
, INDEX_SIZE_GB NUMERIC(36,2) | |
, UNUSED_SIZE_GB NUMERIC(36,2) | |
) | |
; | |
/* | |
* guarda catálogo de todos os objetos acessíveis em tabela temporária | |
*/ | |
DECLARE @sql_command VARCHAR(MAX); | |
SELECT @sql_command = ' | |
--SELECT has_dbaccess(SD.name) = 1; | |
-- SAIR SE FOR DATABASE DE SISTEMA | |
if ''?'' in (''master'',''model'',''msdb'',''tempdb'') return | |
USE ? | |
BEGIN TRY | |
INSERT INTO ##TB_001_CATALOGO_OBJETOS_E_COLUNAS | |
SELECT | |
''' + @nome_unidade + ''' NO_UNIDADE | |
, @@SERVERNAME NO_SERVIDOR | |
, @@VERSION DE_SERVIDOR | |
, CURRENT_USER DE_CURRENT_USER | |
, SYSTEM_USER DE_SYSTEM_USER | |
, ORIGINAL_LOGIN() DE_ORIGINAL_LOGIN | |
, SUSER_SNAME() DE_SUSER_SNAME | |
, GETDATE() DH_GRAVACAO | |
, isc.TABLE_CATALOG | |
, isc.TABLE_SCHEMA | |
, isc.TABLE_NAME | |
, isc.COLUMN_NAME | |
, isc.ORDINAL_POSITION | |
, isc.COLUMN_DEFAULT | |
, isc.IS_NULLABLE | |
, isc.DATA_TYPE | |
, isc.CHARACTER_MAXIMUM_LENGTH | |
, isc.CHARACTER_OCTET_LENGTH | |
, isc.NUMERIC_PRECISION | |
, isc.NUMERIC_PRECISION_RADIX | |
, isc.NUMERIC_SCALE | |
, isc.DATETIME_PRECISION | |
, isc.COLLATION_NAME | |
, sep_database.value DATABASE_DESCRIPTION | |
, sep_schema.value SCHEMA_DESCRIPTION | |
, sep_table.value TABLE_DESCRIPTION | |
, sep_column.value COLUMN_DESCRIPTION | |
, a1.rows AS ROW_COUNT | |
, (a1.reserved + ISNULL(a4.reserved, 0)) * 8 AS RESERVED_SIZE_KB | |
, a1.data * 8 AS DATA_SIZE_KB | |
, ( | |
CASE | |
WHEN (a1.used + ISNULL(a4.used, 0)) > a1.data | |
THEN (a1.used + ISNULL(a4.used, 0)) - a1.data | |
ELSE 0 | |
END | |
) * 8 AS INDEX_SIZE_KB | |
, ( | |
CASE | |
WHEN (a1.reserved + ISNULL(a4.reserved, 0)) > a1.used | |
THEN (a1.reserved + ISNULL(a4.reserved, 0)) - a1.used | |
ELSE 0 | |
END | |
) * 8 AS UNUSED_SIZE_KB | |
, CAST(ROUND(((a1.reserved + ISNULL(a4.reserved, 0)) * 8) / 1024.00, 2) AS NUMERIC(36, 2)) AS RESERVED_SIZE_MB | |
, CAST(ROUND(a1.data * 8 / 1024.00, 2) AS NUMERIC(36, 2)) AS DATA_SIZE_MB | |
, CAST(ROUND(( | |
CASE | |
WHEN (a1.used + ISNULL(a4.used, 0)) > a1.data | |
THEN (a1.used + ISNULL(a4.used, 0)) - a1.data | |
ELSE 0 | |
END | |
) * 8 / 1024.00, 2) AS NUMERIC(36, 2)) AS INDEX_SIZE_MB | |
, CAST(ROUND(( | |
CASE | |
WHEN (a1.reserved + ISNULL(a4.reserved, 0)) > a1.used | |
THEN (a1.reserved + ISNULL(a4.reserved, 0)) - a1.used | |
ELSE 0 | |
END | |
) * 8 / 1024.00, 2) AS NUMERIC(36, 2)) AS UNUSED_SIZE_MB | |
, CAST(ROUND(((a1.reserved + ISNULL(a4.reserved, 0)) * 8) / 1024.00 / 1024.00, 2) AS NUMERIC(36, 2)) AS RESERVED_SIZE_GB | |
, CAST(ROUND(a1.data * 8 / 1024.00 / 1024.00, 2) AS NUMERIC(36, 2)) AS DATA_SIZE_GB | |
, CAST(ROUND(( | |
CASE | |
WHEN (a1.used + ISNULL(a4.used, 0)) > a1.data | |
THEN (a1.used + ISNULL(a4.used, 0)) - a1.data | |
ELSE 0 | |
END | |
) * 8 / 1024.00 / 1024.00, 2) AS NUMERIC(36, 2)) AS INDEX_SIZE_GB | |
, CAST(ROUND(( | |
CASE | |
WHEN (a1.reserved + ISNULL(a4.reserved, 0)) > a1.used | |
THEN (a1.reserved + ISNULL(a4.reserved, 0)) - a1.used | |
ELSE 0 | |
END | |
) * 8 / 1024.00 / 1024.00, 2) AS NUMERIC(36, 2)) AS UNUSED_SIZE_GB | |
FROM | |
sys.schemas ss | |
INNER JOIN sys.tables st | |
ON 1 = 1 | |
AND ss.schema_id = st.schema_id | |
INNER JOIN sys.columns sc | |
ON 1 = 1 | |
AND st.object_id = sc.object_id | |
INNER JOIN INFORMATION_SCHEMA.COLUMNS isc | |
ON 1 = 1 | |
AND isc.TABLE_NAME = st.NAME | |
AND isc.COLUMN_NAME = sc.NAME | |
LEFT JOIN sys.extended_properties sep_database | |
ON 1 = 1 | |
AND sep_database.class = 0 | |
AND sep_database.major_id = 0 | |
AND sep_database.minor_id = 0 | |
AND sep_database.NAME = ''MS_Description'' | |
LEFT JOIN sys.extended_properties sep_schema | |
ON 1 = 1 | |
AND sep_schema.class = 3 | |
AND ss.schema_id = sep_schema.major_id | |
AND sep_schema.minor_id = 0 | |
AND sep_schema.NAME = ''MS_Description'' | |
LEFT JOIN sys.extended_properties sep_table | |
ON 1 = 1 | |
AND sep_table.class = 1 | |
AND st.object_id = sep_table.major_id | |
AND sep_table.minor_id = 0 | |
AND sep_table.NAME = ''MS_Description'' | |
LEFT JOIN sys.extended_properties sep_column | |
ON 1 = 1 | |
AND sep_column.class = 1 | |
AND st.object_id = sep_column.major_id | |
AND sc.column_id = sep_column.minor_id | |
AND sep_column.NAME = ''MS_Description'' | |
LEFT JOIN | |
(SELECT | |
ps.object_id, | |
SUM (CASE WHEN (ps.index_id < 2) THEN row_count ELSE 0 END) AS [rows], | |
SUM (ps.reserved_page_count) AS reserved, | |
SUM (CASE | |
WHEN (ps.index_id < 2) THEN (ps.in_row_data_page_count + ps.lob_used_page_count + ps.row_overflow_used_page_count) | |
ELSE (ps.lob_used_page_count + ps.row_overflow_used_page_count) | |
END | |
) AS data, | |
SUM (ps.used_page_count) AS used | |
FROM sys.dm_db_partition_stats ps | |
--===Remove the following comment for SQL Server 2014+ | |
--WHERE ps.object_id NOT IN (SELECT object_id FROM sys.tables WHERE is_memory_optimized = 1) | |
GROUP BY ps.object_id) AS a1 | |
ON ( a1.object_id = st.object_id ) | |
LEFT JOIN | |
(SELECT | |
it.parent_id, | |
SUM(ps.reserved_page_count) AS reserved, | |
SUM(ps.used_page_count) AS used | |
FROM sys.dm_db_partition_stats ps | |
INNER JOIN sys.internal_tables it ON (it.object_id = ps.object_id) | |
WHERE it.internal_type IN (202,204) | |
GROUP BY it.parent_id) AS a4 | |
ON (a4.parent_id = a1.object_id) | |
ORDER BY isc.TABLE_CATALOG | |
, isc.TABLE_SCHEMA | |
, isc.TABLE_NAME | |
, isc.ORDINAL_POSITION | |
END TRY | |
BEGIN CATCH | |
--SELECT NULL WHERE 1 = 0 | |
END CATCH | |
' | |
; | |
/* | |
* CURSOR PARA EXECUTAR A QUERY EM TODOS OS DATABASES | |
*/ | |
SET NOCOUNT ON; | |
DECLARE @database_name VARCHAR(300) | |
DECLARE @sql_command_to_execute NVARCHAR(MAX) | |
DECLARE @database_names TABLE | |
(database_name VARCHAR(100)) | |
INSERT INTO @database_names | |
( database_name ) | |
--SELECT SD.name AS database_name FROM sys.databases SD; | |
SELECT SD.name AS database_name FROM sys.databases SD WHERE has_dbaccess(SD.name) = 1; -- apenas databases com acesso do usuário | |
DECLARE db_cursor CURSOR FOR SELECT database_name FROM @database_names | |
OPEN db_cursor | |
FETCH NEXT FROM db_cursor INTO @database_name | |
WHILE @@FETCH_STATUS = 0 | |
BEGIN | |
SET @sql_command_to_execute = REPLACE(@sql_command, '?', @database_name) | |
EXEC sp_executesql @sql_command_to_execute | |
FETCH NEXT FROM db_cursor INTO @database_name | |
END | |
CLOSE db_cursor; | |
DEALLOCATE db_cursor; | |
/* | |
* | |
--DF7436SR659 | |
Finish time Wed Nov 13 20:37:05 GMT-03:00 2019 | |
1 row(s) fetched - 15.994s | |
Finish time Thu Nov 14 19:22:37 BRT 2019 | |
1 row(s) fetched - 14.365s | |
--DF7436SR626 | |
Finish time Thu Nov 14 19:23:16 BRT 2019 | |
1 row(s) fetched - 564ms | |
*/ | |
/* | |
* CATALOGO OBJETOS BANCO DE DADOS SUFUG/GERFU e vinculadas | |
* | |
* Objetivo é criar estrutura para tabela de catálogo de objetos | |
* | |
* Parte 2: consulta catálogo temporário | |
*/ | |
--- CONSULTA CATÁLOGO | |
SELECT | |
* | |
FROM | |
##TB_001_CATALOGO_OBJETOS_E_COLUNAS WITH(NOLOCK) | |
WHERE 1 = 1 | |
ORDER BY | |
NO_UNIDADE | |
, NO_SERVIDOR | |
, TABLE_CATALOG | |
, TABLE_SCHEMA | |
, TABLE_NAME | |
, COLUMN_NAME | |
; | |
/* | |
--DF7436SR659 | |
66.603 row(s) fetched - 405ms (+7.74s) | |
14/11/2019 19h20 | |
65.165 row(s) fetched - 545ms (+6.781s) | |
30/03/2020 19h20 | |
68.678 - 1min04s | |
--DF7436SR626 | |
14/11/2019 19h21 | |
857 row(s) fetched - 11ms (+63ms) | |
30/03/2020 03h33 | |
9.058 - 7s | |
*/ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
* CATALOGO OBJETOS BANCO DE DADOS SUFUG/GERFU e vinculadas | |
* | |
* Objetivo é criar estrutura para tabela de catálogo de objetos | |
* | |
* Parte 2: consulta catálogo temporário | |
*/ | |
--- CONSULTA CATÁLOGO | |
SELECT | |
* | |
FROM | |
##TB_001_CATALOGO_OBJETOS_E_COLUNAS WITH(NOLOCK) | |
WHERE 1 = 1 | |
ORDER BY | |
NO_UNIDADE | |
, NO_SERVIDOR | |
, TABLE_CATALOG | |
, TABLE_SCHEMA | |
, TABLE_NAME | |
, COLUMN_NAME | |
; | |
/* | |
--DF7436SR659 | |
66.603 row(s) fetched - 405ms (+7.74s) | |
14/11/2019 19h20 | |
65.165 row(s) fetched - 545ms (+6.781s) | |
--DF7436SR626 | |
14/11/2019 19h21 | |
857 row(s) fetched - 11ms (+63ms) | |
*/ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
* CATALOGO OBJETOS BANCO DE DADOS SUFUG/GERFU e vinculadas | |
* | |
* Objetivo é criar estrutura para tabela de catálogo de objetos | |
* | |
* Parte 3: inserir descrições (DATABASE, SCHEMA, TABLE/VIEW e COLUMN) | |
*/ | |
--INSERE DESCRIPTION DO DATABASE | |
EXECUTE sp_addextendedproperty | |
@name = N'MS_Description' | |
, @value = 'Informações compartilhadas de forma pública no servidor' | |
--ATUALIZA DESCRIPTION DO DATABASE | |
EXEC sp_updateextendedproperty | |
@name = N'MS_Description' | |
, @value = 'Novos detalhes' | |
--INSERE DESCRIPTION DE SCHEMA | |
EXECUTE sp_addextendedproperty | |
@name = N'MS_Description' | |
, @value = 'Agrupamento padrão do DATABASE' | |
, @level0type = N'SCHEMA' | |
, @level0name = 'dbo' | |
--ATUALIZA DESCRIPTION DO SCHEMA | |
EXEC sp_updateextendedproperty | |
@name = N'MS_Description' | |
, @value = 'Novos detalhes' | |
, @level0type = N'SCHEMA' | |
, @level0name = 'dbo' | |
--INSERE DESCRIPTION DE OBJETO (TABELA, VIEW) | |
EXECUTE sp_addextendedproperty | |
@name = N'MS_Description' | |
, @value = 'Armazenar informações de metadados das tabelas no nosso servidor' | |
, @level0type = N'SCHEMA' | |
, @level0name = 'dbo' | |
, @level1type = N'TABLE' | |
, @level1name = 'INFOTB001_METADADOS' | |
--ATUALIZA DESCRIPTION DO OBJETO (TABELA, VIEW) | |
EXEC sp_updateextendedproperty | |
@name = N'MS_Description' | |
, @value = 'Novos detalhes' | |
, @level0type = N'SCHEMA' | |
, @level0name = 'dbo' | |
, @level1type = N'TABLE' | |
, @level1name = 'INFOTB001_METADADOS' | |
--INSERE DESCRIPTION DE COLUNA | |
EXECUTE sp_addextendedproperty | |
@name = N'MS_Description' | |
, @value = 'Data e horário da informação desse registro' | |
, @level0type = N'SCHEMA' | |
, @level0name = 'dbo' | |
, @level1type = N'TABLE' | |
, @level1name = 'INFOTB001_METADADOS' | |
, @level2type = N'COLUMN' | |
, @level2name = 'DH_ALTERACAO_REGISTRO' | |
--ATUALIZA DESCRIPTION DA COLUNA | |
EXEC sp_updateextendedproperty | |
@name = N'MS_Description' | |
, @value = 'Novos detalhes' | |
, @level0type = N'SCHEMA' | |
, @level0name = 'dbo' | |
, @level1type = N'TABLE' | |
, @level1name = 'INFOTB001_METADADOS' | |
, @level2type = N'COLUMN' | |
, @level2name = 'DH_ALTERACAO_REGISTRO' |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment