Database
 sql >> база данни >  >> RDS >> Database

Система за автоматично изпращане на имейл за изпращане на обобщен отчет на базата данни

Мониторингът на база данни е най-важната работа на всеки администратор на база данни. Големите организации и компании имат множество сървъри за бази данни, които се намират или в един и същ център за данни, или в географски различни центрове за данни. Има много стандартни инструменти за мониторинг на база данни. Тези инструменти използват динамичните изгледи за управление на SQL Server и системната съхранена процедура за попълване на данните. Използвайки тези DMV, можем да създадем нашата персонализирана автоматизирана система, за да попълним състоянието на базата данни и да изпратим отчета по имейл.

В тази статия ще демонстрирам как можем да използваме системната съхранена процедура и свързания сървър, за да попълним информацията от бази данни, разположени на различни сървъри, и да планираме заданието за изпращане на отчета.

В тази демонстрация ще изпълня следните задачи:

  1. Създайте задължителни съхранени процедури на TTI609-VM1 , TTI609-VM2, иTTI412-VM сървъри за попълване на информация за базата данни, обекти на база данни и SQL задания.
  2. Създайте съхранена процедура за попълване на обобщение на базата данни, обобщение на обект на база данни и резюме на SQL задание от TTI609-VM1 иTTI609-VM2 сървъри и ги съхранявайте в свързани таблици.
  3. Създайте пакет SSIS, който изпълнява следните задачи:
      • Изпълнява съхранена процедура с помощта на Изпълнение на SQL Script Task .
      • Експортирайте данни от SQL таблици, създадени на TTI412-VM и го съхранявайте в отделния раздел на файл на Excel.
  4. Създайте задание на SQL Server, за да изпълните пакета SSIS, за да попълните информацията за базата данни и съхранената процедура за изпращане на отчета по имейл.

Следното изображение илюстрира демонстрационната настройка:

Следва списъкът със съхранените процедури:

Следва списъкът с таблици:

Създайте съхранени процедури на двата сървъра на база данни

Както споменах, ще попълним данни от TTI609-VM1 иTTI609-VM2 сървъри. Съхранените процедури, използвани за попълване на базата данни, ще останат същите и на двата сървъра.
И така, първо създадох база данни с име DBATools на двата сървъра. Създадох съхранена процедура в тези бази данни. За да направите това, изпълнете следния код на TTI609-VM1 иTTI609-VM2 сървъри:

ИЗПОЛЗВАЙТЕ [главен] go /****** Обект:База данни [DBATools] Дата на скрипт:25.10.2018 11:25:27 ******/ СЪЗДАВАНЕ НА БАЗА ДАННИ [DBATools] съдържание =няма НА ОСНОВНИ (ИМЕ =N'DBATools', име на файл =N'C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\DATA\DBATools.mdf', размер =3264kb, максимален размер =неограничен, loggrowth =24kb1) ВКЛЮЧЕНО ( ИМЕ =N'DBATools_log', име на файл =N'C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\DATA\DBATools_log.ldf', размер =816 kb, максимален размер =2048 gb, растеж на файла =10% 

Създайте съхранена процедура с име Pull_Database_Information в DBATools база данни. Тази съхранена процедура попълва следната информация за всички бази данни, съществуващи на двата сървъра на бази данни.

  1. Име на базата данни.
  2. Ниво на съвместимост на базата данни.
  3. Състояние на базата данни (ОНЛАЙН/ОФЛАЙН/ВЪЗСТАНОВЯВАНЕ/ПРЕКРАЩАНЕ).
  4. Модел за възстановяване на база данни (ОСОБЕН/ПЪЛЕН/ОБЪВРЕМЕНЕН).
  5. Размер на базата данни в MB.
  6. Общ размер на файла с данни.
  7. Използван размер на файла с данни.
  8. Общ размер на регистрационния файл.
  9. Използван размер на регистрационния файл.

Изпълнете следния код в DBATools база данни на двата сървъра на база данни, за да създадете съхранената процедура:

ИЗПОЛЗВАЙТЕ DBAtools go CREATE PROCEDURE Pull_Database_Information КАТО BEGIN, АКО Object_id('tempdb.dbo.#DBSize') НЕ Е NULL DROP TABLE #dbsize CREATE TABLE #dbsize ( database_id INT PRIMARY KEY,seded data_file8,file_user_used data_file8_file_u (18, 2) ) DECLARE @SQLCommand NVARCHAR(max) SELECT @SQLCommand =Stuff((SELECT ' USE [' + d.NAME + '] INSERT INTO #DBSize (database_id, data_file_used_size, log_File_used_size) SELECT 'USE [' + d.NAME + '] INSERT INTO #DBSize (database_id, data_file_used_size, log_File_used_size) SELECT 'USE [' + d.NAME + '] INSERT INTO #DBSize) CASE WHEN [тип] =0 THEN space_used END) , SUM(CASE WHEN [type] =1 THEN space_used END) FROM ( SELECT s.[type], space_used =SUM(FILEPROPERTY(s.name, ''SpaceUsed'') * 8. / 1024) FROM sys.database_files s GROUP BY s.[type] ) t;' ОТ sys.databases d WHERE d.[state] =0 FOR xml pat. h(''), type).value('.', 'NVARCHAR(MAX)'), 1, 2, '') EXEC sys.Sp_executesql @SQLCommand SELECT d.database_id AS 'ID на базата данни', d.NAME AS 'Име на база данни', d.state_desc AS 'Състояние на базата данни', d.recovery_model_desc AS 'Модел за възстановяване', t.total_db_size AS 'Размер на базата данни', t.data_file_size AS 'Размер на файла с данни', s.daseda_size U_file AS ', t.log_file_size AS 'Размер на регистрационния файл', s.log_file_used_size КАТО 'Използван регистрационен файл' FROM (SELECT database_id, log_file_size =Cast(Sum(CASE WHEN [type] =1 THEN size END) * 8. / 1024 КАТО DECIMAL (18, 2) ), размер_на_файл_данни =Cast(Sum(CASE WHEN [type] =0 THEN размер END) * 8. / 1024 КАТО DECIMAL(18, 2)) , total_DB_size =Cast( Sum(size) * 8. / 1024 КАТО DECIMAL(18, 2)) ) FROM sys.master_files GROUP BY database_id) t JOIN sys.databases d ON d.database_id =t.database_id LEFT JOIN #dbsize s ON d.database_id =s.database_id ORDER BY t.total_dbEND_s> 

Второ, създайте съхранени процедури с име Pull_Database_Objects в DBATools база данни. Тази съхранена процедура итерира през всички бази данни в двата сървъра на бази данни и попълва броя на всички обекти на базата данни. Той попълва следните колони:

  1. Име на сървър/хост.
  2. Име на базата данни.
  3. Тип обект на база данни (Таблица / Съхранена процедура / SQL Scaler функции / ограничения и т.н...)
  4. Общ брой обекти на базата данни.

Изпълнете следния код в DBATools база данни на двата сървъра на база данни, за да създадете съхранената процедура:

ИЗПОЛЗВАЙТЕ dbatools go СЪЗДАВАТЕ ПРОЦЕДУРА [Pull_database_objects] КАТО ЗАПОЧВАТЕ СЪЗДАВАНЕ НА ТАБЛИЦА #finalsummery ( id INT IDENTITY (1, 1), име на база данни VARCHAR(350), тип обект VARCHAR(200), totalobjects INT ) DECLARE (DECLARE) (200), totalobjects INT (200) DECLARE @I INT=0 ДЕКЛАРИРАНЕ @DBName VARCHAR(350) ДЕКЛАРИРАНЕ @DBCount INT СЪЗДАВАНЕ НА ТАБЛИЦА #databases ( ИМЕ VARCHAR(350) ) INSERT INTO #databases (ИМЕ) ИЗБЕРЕТЕ ИМЕ ОТ sys.databases WHERE database_id> N 4 И'ИМЕ ReportServer', 'reportservertempdb' ) SET @DBCount=(SELECT Count(*) FROM #databases) WHILE ( @DBCount> @I ) BEGIN SET @DBName=(SELECT TOP 1 NAME FROM #databases) SET @SQLCommand=' Вмъкване в #FinalSummery (Име на база данни, Тип на обект, Общо обекти) Изберете ''' + @DBName + ''', случай, когато Type=''TR'', след това ''SQL DML тригер'', когато Type=''FN'', след това ''SQL скаларна функция'', когато Type='' D'', след това ''DEFAULT (ограничение или самостоятелен)'', когато Type=''PK'', след това ''PRIMARY KEY constraint'', когато Type=''P'', след това ''SQL Stored Procedure'', когато Type =''U'', след това ''Таблица (дефинирана от потребителя)'', когато Тип=''V'', след това ''Преглед'', когато Тип=''X'', след това ''Разширена съхранена процедура'' Край като ObjectType , Брой(име)Общо обекти от ' + @DBName + '.sys.all_objects група по тип' EXEC Sp_executesql @SQLCommand DELETE FROM #databases WHERE NAME =@DBName SET @[email protected] + 1 END ()SELECT AS Host' Име на сървъра“, име на база данни, тип обект , totalobjects, Getdate() КАТО 'ReportDate' ОТ #finalsummery КЪДЕТО обектният тип НЕ Е NULL DROP TABLE #finalsummery END

Създайте съхранени процедури с име Pull_SQLJob_Information в DBATools база данни. Тази съхранена процедура итерира през целия сървър на база данни и попълва информацията за всички SQL задания и техните състояния. Той попълва следните колони:

  1. Име на сървър/хост.
  2. Име на задание в SQL.
  3. Собственик на SQL задание.
  4. Категория работа.
  5. Описание на работата.
  6. Състояние на заданието (активирано/деактивирано)
  7. Дата на създаване на работа.
  8. Дата на промяна на работата.
  9. Състояние на насрочено задание.
  10. Име на графика.
  11. Дата и час на последното изпълнение
  12. Състояние на последното изпълнение.

Изпълнете следния код в DBATools база данни на двата сървъра на база данни, за да създадете съхранената процедура:

CREATE PROCEDURE Pull_sqljob_information AS BEGIN SELECT Host_name() AS 'Server Name', a.NAME AS 'Job Name', d.NAME AS Собственик, b.NAME AS Категория, a.description AS Описание, CASE a.enabled WHEN 1 СЛЕД 'Да' КОГАТО 0 СЛЕД 'Не' КРАЙ КАТО 'Enabled', a.date_created КАТО CreatedDate, a.date_modified КАТО ModifiedDate, CASE, КОГАТО f.schedule_uid Е NULL, ТОГАВА 'Не' ДРУГО 'Yes' END AS?' , f.NAME КАТО JobScheduleName, Max(Cast( Stuff(Stuff(Cast(g.run_date AS VARCHAR), 7, 0, '-'), 5, 0, '-') + ' ' + Stuff(Stuff(Replace (Str(g.run_time, 6, 0), ' ', '0'), 5, 0, ':'), 3, 0, ':') КАТО DATETIME)) КАТО [LastRun], CASE g.run_status WHEN 0 THEN 'Failed' WHEN 1 THEN 'Succe ss' КОГА 2 СЛЕД 'Повторно' КОГА 3 СЛЕД 'Отменено' КОГА 4 СЛЕД 'В ход' КРАЙ КАТО Състояние ОТ msdb.dbo.sysjobs КАТО ВЪТРЕШНО ПРИЕДИНЕНИЕ msdb.dbo.sysjobhistory g ON a.job_id =g.job_id msdb.dbo.syscategories AS b ON a.category_id =b.category_id LEFT JOIN msdb.dbo.sysjobsteps AS c ON a.job_id =c.job_id AND a.start_step_id =c.step_id b.step_id LEFT JOIN msdb.dbo.sysjobsteps AS c ON a.job_id =c.job_id И a.start_step_id =c.step_id b. a.owner_sid =d.sid LEFT JOIN msdb.dbo.sysjobschedules КАТО e ON a.job_id =e.job_id LEFT JOIN msdb.dbo.sysschedules КАТО f ON e.schedule_id =f.schedule_id GROUP BY a.NAME, d.NAME, d. , b.NAME, a.description, a.enabled, f.schedule_uid, f.NAME, a.date_created, a.date_modified, g.run_status ORDER BY a.NAME END

Създайте съхранени процедури, свързан сървър и таблици на централния сървър

След като процедурите са създадени на TTI609-VM1 иTTI609-VM2 сървъри на база данни, създайте необходимите процедури и таблици на централния сървър (TTI412-VM ).

Създадох отделна база данни, наречена MonitoringDashboard на TTI412-VM сървър. Изпълнете следния код, за да създадете база данни на централния сървър.

ИЗПОЛЗВАЙТЕ [главен] go /****** Обект:База данни [MonitoringDashboard] Дата на скрипт:25.10.2018 14:44:09 ******/ СЪЗДАВАНЕ НА БАЗА ДАННИ [MonitoringDashboard] задържане =няма НА ОСНОВНО (ИМЕ =N'MonitoringDashboard', име на файл =N'E:\MS_SQL\SQL2017_Data\MonitoringDashboard.mdf', размер =8192 kb, максимален размер =неограничен, filegrowth =65536 kb ) log N'MonitorDashboard ON (MonitoringDashboard) N'E:\MS_SQL\SQL2017_Log\MonitoringDashboard_log.ldf', размер =8192 kb, максимален размер =2048 gb, растеж на файла =65536 kb ) отидете

След като базата данни е създадена, създайте съхранена процедура, която използва LINKED сървър за изпълнение на процедура на TTI609-VM1 иTTI609-VM2 сървъри на база данни. Изпълнете следния код в „главната“ база данни на TTI412-VM сървър на база данни, за да създадете свързан сървър:

Скрипт 1:Създаване на свързан сървър TTI609-VM1

USE [master] go /****** Обект:LinkedServer [TTI609-VM1] Дата на скрипта:25.10.2018 14:49:28 ******/ EXEC master.dbo.Sp_addlinkedserver @server =N'TTI609-VM1', @srvproduct=N'SQL Server' /* От съображения за сигурност паролата за отдалечено влизане в свързания сървър се променя с ######## */ EXEC master.dbo.Sp_addlinkedsrvlogin @rmtsrvname =N'TTI609-VM1', @useself=N'False', @locallogin=NULL, @rmtuser=N'sa', @rmtpassword='########' отидете EXEC master.dbo.Sp_serveroption @ server=N'TTI609-VM1', @optname=N'съвместим с колекция', @optvalue=N'true' go EXEC master.dbo.Sp_serveroption @server=N'TTI609-VM1', @optname=N'достъп до данни' , @optvalue=N'true' отидете EXEC master.dbo.Sp_serveroption @server=N'TTI609-VM1', @optname=N'dist', @optvalue=N'false' отидете EXEC master.dbo.Sp_serveroption @server=N'TTI609-VM1', @optname=N'rpc', @optvalue=N'true' отидете EXEC master.dbo.Sp_serveroption @server=N'TTI609-VM1', @optname=N'rpc out', @optvalue =N'true' отидете на EXEC master.dbo.Sp_serverop tion @server=N'TTI609-VM1', @optname=N'connect timeout', @optvalue=N'0' go EXEC master.dbo.Sp_serveroption @server=N'TTI609-VM1', @optname=N'query timeout', @optvalue=N'0' отидете EXEC master.dbo.Sp_serveroption @server=N'TTI609-VM1', @optname=N'използвайте отдалечено съпоставяне', @optvalue=N'true' отидете EXEC master.dbo. Sp_serveroption @server=N'TTI609-VM1', @optname=N'промоция на транзакции от отдалечена процедура', @optvalue=N'false' go

Скрипт 2:Създаване на свързан сървър TTI609-VM2

USE [master] go /****** Обект:LinkedServer [TTI609-VM2] Дата на скрипта:25.10.2018 14:55:29 ******/ EXEC master.dbo.Sp_addlinkedserver @server =N'TTI609-VM2', @srvproduct=N'SQL Server' /* От съображения за сигурност паролата за отдалечено влизане в свързания сървър се променя с ######## */ EXEC master.dbo.Sp_addlinkedsrvlogin @rmtsrvname =N'TTI609-VM2', @useself=N'False', @locallogin=NULL, @rmtuser=N'sa', @rmtpassword='########' отидете EXEC master.dbo.Sp_serveroption @ server=N'TTI609-VM2', @optname=N'съвместим с колекция', @optvalue=N'true' go EXEC master.dbo.Sp_serveroption @server=N'TTI609-VM2', @optname=N'достъп до данни' , @optvalue=N'true' отидете EXEC master.dbo.Sp_serveroption @server=N'TTI609-VM2', @optname=N'dist', @optvalue=N'false' отидете EXEC master.dbo.Sp_serveroption @server=N'TTI609-VM2', @optname=N'rpc', @optvalue=N'true' отидете EXEC master.dbo.Sp_serveroption @server=N'TTI609-VM2', @optname=N'rpc out', @optvalue =N'true' отидете на EXEC master.dbo.Sp_serverop tion @server=N'TTI609-VM2', @optname=N'connect timeout', @optvalue=N'0' go EXEC master.dbo.Sp_serveroption @server=N'TTI609-VM2', @optname=N'collation name', @optvalue=NULL отидете EXEC master.dbo.Sp_serveroption @server=N'TTI609-VM2', @optname=N'време на изчакване на заявката', @optvalue=N'0' отидете EXEC master.dbo.Sp_serveroption @server=N'TTI609-VM2', @optname=N'използване на отдалечено съпоставяне', @optvalue=N'true' go EXEC master.dbo.Sp_serveroption @server=N'TTI609-VM2', @optname=N'промоция на отдалечена процедура за транзакция ', @optvalue=N'false' go

Създайте съхранена процедура и таблици

След като свързаният сървър бъде създаден, трябва да създадем три таблици с име Database_Object_Summery , Database_Summery иSQL_Job_List в MonitoringDashboard база данни. Тези таблици съхраняват информация, попълнена от Generate_Database_Information съхранената процедура и по-късно данните, съхранявани в тези таблици, които ще се използват за генериране на отчет в excel.

Изпълнете следния код, за да създадете SQL_Job_List таблица:

ИЗПОЛЗВАЙТЕ [MonitoringDashboard] go CREATE TABLE [dbo].[sql_job_list] ( [id] [INT] IDENTITY(1, 1) NOT NULL, [servername] [VARCHAR](250) NULL, [jobname] [VARCHAR] (250) NULL, [jobowner] [VARCHAR](250) NULL, [jobcategory] [VARCHAR](250) NULL, [описание на заданието] [VARCHAR](250) NULL, [jobstatus] [VARCHAR](50) NULL, [ createdate] [DATETIME] NULL, [modifieddate] [DATETIME] NULL, [isscheduled] [VARCHAR](5) NULL, [schedulename] [VARCHAR](250) NULL, [reportdate] [DATETIME] NULL ) ON [PRIMARY] go ALTER TABLE [dbo].[sql_job_list] ДОБАВЯНЕ НА ПОДРАЗБИРАНЕ (Getdate()) ЗА [ReportDate] go

Изпълнете следния код, за да създадете lst_dbservers таблица:

ИЗПОЛЗВАЙТЕ [MonitoringDashboard] go CREATE TABLE [dbo].[lst_dbservers] ( [id] [INT] IDENTITY(1, 1) NOT NULL, [servername] [VARCHAR](50) NOT NULL, [addeddate] [DATETIME] [DATETIME] ] НЕ НУЛЕВО, ПЪРВЕН КЛЮСТ КОЛУСТРИРАН ( [id] ASC ) С (pad_index =OFF, statistics_norecompute =OFF, ignore_dup_key =OFF, allow_row_locks =on, allow_page_locks =on) ВКЛ. pad_index =ИЗКЛЮЧЕНО, statistics_norecompute =ИЗКЛЮЧЕНО, ignore_dup_key =ИЗКЛЮЧЕНО, allow_row_locks =включено, allow_page_locks =включено) ON [PRIMARY] ) ON [PRIMARY] отидете ALTER TABLE [dbo].[lst_dbservers] ДОБАВЕТЕ ПО ПОДРАЗБИРАНЕ (Date FORED) върви

Изпълнете следния код, за да създадете Database_Summery таблица:

ИЗПОЛЗВАЙТЕ [MonitoringDashboard] go CREATE TABLE [dbo].[database_summery] ( [id] [INT] IDENTITY(1, 1) NOT NULL, [servername] [VARCHAR](150) NULL, [databaseid] [INT] NULL, [име на база данни] [VARCHAR](250) NULL, [статус на база данни] [VARCHAR](50) NULL, [модел на възстановяване] [VARCHAR](50) NULL, [ниво на съвместимост] [INT] NULL, [databasecreatedate] [ДАТА] NULL , [databasecreatedby] [VARCHAR](150) NULL, [dbsize] [NUMERIC](10, 2) NULL, [datafilesize] [NUMERIC](10, 2) NULL, [datafileused] [NUMERIC](10, 2) NULL , [logfilesize] [NUMERIC](10, 2) NULL, [logfileused] [NUMERIC](10, 2) NULL, [reportdate] [DATETIME] NULL ) НА [ОСНОВНИ] отидете ALTER TABLE [dbo].[database_summery] ДОБАВИ ДОБАВИ. ПО ПОДРАЗБИРАНЕ (Getdate()) ЗА [ReportDate] go

Изпълнете следния код, за да създадете Database_Object_Summery таблица:

ИЗПОЛЗВАЙТЕ [MonitoringDashboard] go CREATE TABLE [dbo].[database_object_summery] ( [id] [INT] IDENTITY(1, 1) NOT NULL, [servername] [VARCHAR](250) NULL, [databasename] [VARCHAR] (250) NULL, [objecttype] [VARCHAR](50) NULL, [objectcount] [INT] NULL, [reportdate] [DATETIME] NULL ) НА [PRIMARY] отидете ALTER TABLE [dbo].[database_object_summery] ДОБАВЯНЕ НА ПОДРАЗБИРАНЕ (Getdate) ()) ЗА [ReportDate] go

След като таблиците бъдат създадени, създайте съхранена процедура с име Generate_Database_Information на MonitoringDashboard база данни. Използвайки “RPC”, той изпълнява съхранени процедури, създадени наTTI609-VM1 иTTI609-VM2 сървъри на база данни за попълване на данните.

Изпълнете следния код, за да създадете съхранена процедура:

Create PROCEDURE Generate_database_information AS BEGIN /*Cleanup*/ TRUNCATE TABLE database_object_summery TRUNCATE TABLE database_summery TRUNCATE TABLE sql_job_list DECLARE @ServerCount INT DECLARE @i INT =0 DECLARE @SQLCommand_Object_Summery NVARCHAR(max) DECLARE @SQLCommand_Database_Information NVARCHAR(max) DECLARE @SQLCommand_SQL_Job_Information NVARCHAR (max) DECLARE @servername VARCHAR(100) CREATE TABLE #db_server_list (име на сървъра VARCHAR(100) ) INSERT INTO #db_server_list (име на сървър) SELECT servername FROM lst_dbservers SET @ServerCount=(SELECT FROM (списък на сървър)WerCount (списък на сървър_име на сървър)> @i ) BEGIN SET @servername=(ИЗБЕРЕТЕ ТОП 1 име на сървър ОТ #db_server_list) SET @SQLCommand_Object_Summery ='вмъкнете в Database_Object _Summery (ServerName,DatabaseName,ObjectType,ObjectCount,ReportDate) exec [' + @servername + '].DBATools.dbo.[Pull_Database_Objects]' SET @SQLCommand_Database_Information ='вмъкнете в Database,StadelbaseNaverbility,Stadelbasemo,StadelbaseMo,Database,StaerbaseMo. ,DatabaseCreateDate,DatabaseCreatedBy,DBSize,DataFileSize,DataFileUsed,LogFileSize,LogFileUsed) exec [' + @servername + '].DBATools.dbo.[Pull_Database_Information]' SET @SQLOb_ist_SQLob_JobNa (SQLob_JobNa_JobNa_SQLob_JobNa_JobNa_SQLob_JobNa_SQLob_JobNa_SQLob_Me. JobDescription,JobStatus,CreateDate,ModifiedDate,IsScheduled,ScheduleName) exec [' + @servername + '].DBATools.dbo.[Pull_SQLJob_Information]' EXEC Sp_executesql @SQLCommand_Object_Summery EXEC Sp_executesql @SQLCommand_Database_Information EXEC Sp_executesql @SQLCommand_SQL_Job_Information DELETE FROM #db_server_list WHERE servername =@ име на сървъра SET @[email protected] + 1 КРАЙ КРАЙ

След като процедурата бъде създадена, създайте SSIS пакет за експортиране на данни във файл на Excel.

Създайте SSIS пакет за експортиране на данни във файл на excel

В предишните си статии обясних стъпките за конфигуриране на задачите за поток от данни, OLEDB връзки и връзки с Excel, затова пропускам тази част.

За да експортирате данни във файл на Excel, отворете инструментите за данни на SQL Server и създайте нов SSIS проект с име Export_Database_Information.

След като проектът е създаден, плъзнете и пуснете Изпълнение на SQL задача към Контролен поток прозорец и го преименувайте на Попълване на данни от сървъри . Вижте следното изображение:

Щракнете двукратно върху Изпълнение на SQL задача (Попълване на данни от сървъра). Редакторът на задачи за изпълнение на SQL се отваря диалогов прозорец за конфигуриране на SQL връзка. Вижте следното изображение:

В Връзка подадено, изберете OLEDB низ за връзка и в SQL изявление поле, предоставете следната заявка:

ИЗПОЛЗВАЙТЕ таблото за наблюдение идете EXEC Generate_database_information

Щракнете върху OK, за да затворите диалоговия прозорец.

На Контролен поток екран, плъзнете и пуснете Задача за поток от данни от SSIS Toolbox и я преименувайте на Генериране на отчет. Вижте следното изображение:

Щракнете двукратно, за да отворите Поток на данни прозорец.

Както споменах по-рано, Generate_Database_Information процедура вмъква изхода на сървърите на базата данни в следните таблици:

  1. База_обект_Лято
  2. База данни_Summery
  3. SQL_Job_List

Създадох файл на Excel, който има три работни листа. Следните таблици показват съпоставянето на SQL таблиците и работния лист на Excel.


В Поток от данни прозорец, плъзнете и пуснете три ADO.Net източника и три дестинации на Excel. Вижте следното изображение:

Щракнете двукратно върху Обобщение на обекта y (ADO.NET Source) в ADO.NET Source Редактор.

  1. Изберете TTI412-VM\SQL2017MonitoringDashboard от ADO.NET мениджъра на връзки падащо меню.
  2. Изберете Таблица или Преглед от Режим за достъп до данни падащо меню.
  3. Изберете Database_Object_Summery от Име на таблицата или изгледа падащо меню.

Щракнете двукратно върху Информация за базата данни (ADO.NET Source) в ADO.NET Source Editor .

  1. Изберете „TTI412-VM\SQL2017MonitoringDashboard ” от ADO.NET мениджъра на връзки падащо меню.
  2. Изберете Таблица или Преглед от Режим за достъп до данни падащо меню.
  3. Изберете „Database_Summery ” от Име на таблицата или изгледа падащо меню.

Щракнете двукратно върху SQL Jobs (ADO.NET Source) в ADO.NET Source Editor .

  1. Изберете TTI412-VM\SQL2017MonitoringDashboard в диспечера на връзките на ADO.NET.
  2. Изберете Таблица или Преглед отРежим за достъп до данни падащо меню.
  3. Изберете SQL_Job_List в Името на таблицата или изгледа падащо меню.

Сега плъзнете и пуснете три дестинации на Excel от SSIS Toolbox. Вижте следното изображение:

След като дестинациите бъдат копирани, плъзнете синя стрелка под източника на ADO.Net и я пуснете върху дестинацията на Excel. Направете същото за всички. Вижте следното изображение:

Щракнете двукратно върху Резюме на обекта в Excel (ADO.NET Source) в Excel Destination Editor .

  1. Изберете Excel Connection Manager от диспечера на връзките на Excel падащо меню.
  2. Изберете Възможност или Преглед от Режим за достъп до данни падащо меню.
  3. Изберете Object Summery$ от Име на листа в Excel падащо меню.

Както споменах, имената на колоните на SQL таблицата и колоните на Excel са еднакви, следователно картографирането ще се извършва автоматично. Щракнете върху Картографиране за картографиране на колоните. Вижте следното изображение:

Щракнете двукратно върху Информация за базата данни на Excel (Excel Destination) в Excel Destination Editor .

  1. Изберете Excel Connection Manager от диспечера на връзките на Excel падащо меню.
  2. Изберете Възможност или Преглед от Режим за достъп до данни падащо меню.
  3. Изберете Информация за базата данни$ от Име на листа в Excel падащо меню.

Както споменах, имената на колоните на SQL таблицата и колоните на Excel са еднакви, следователно картографирането ще се извършва автоматично. Щракнете върху Картографиране за картографиране на колоните. Вижте следното изображение:

Щракнете двукратно върху Excel SQL Jobs (Дестинация на Excel) в Excel Destination Editor .

  1. Изберете Excel Connection Manager от диспечера на връзките на Excel падащо меню.
  2. Изберете Възможност или Преглед от Режим за достъп до данни падащо меню.
  3. Изберете „SQL Jobs$ от Името на листа на Excel падащо меню.

Както споменах, имената на колоните на SQL таблицата и колоните на Excel са еднакви, следователно картографирането ще се извършва автоматично. Щракнете върху Картографиране за картографиране на колоните. Вижте следното изображение:

Създайте SQL задание, за да изпратите по имейл отчета за базата данни

След като пакетът е създаден, създайте SQL задание, за да извършите следните дейности:

  1. Изпълнете пакета SSIS, за да попълните данни от всички сървъри.
  2. Изпратете по имейл отчета за базата данни на необходимия екип.

В SQL Job трябва да създадем две стъпки. Първата стъпка ще изпълни пакета SSIS, а втората ще изпълни процедурата за изпращане на имейл.

За да създадете SQL задание, отворете SSMS>> SQL Server Agent>> Щракнете с десния бутон върху Нова SQL задача .

О, Новата работа съветника, изберете Стъпка опция и щракнете върху Не w. В стъпката Нова работа диалогов прозорец в Стъпка име текстово поле, посочете желаното име, изберете SQL Server Integration Services package от Тип падащо меню. Посочете местоположението на пакета SSIS в Текста на пакета кутия. Вижте следното изображение:

Щракнете върху OK, за да затворите New Job Step .

Създайте друга стъпка от заданието, която ще изпълни съхранена процедура за изпращане на отчета по имейл. Той използва системна процедура за изпращане на имейл. Пакетът SSIS копира информацията от базата данни на конкретно място, като по този начин предоставя пълния път на файла на excel в параметъра @file_attachments на sp_send_dbmail съхранена процедура.

За да създадете съхранената процедура, изпълнете следния код в DBATools база данни на централния сървър:

СЪЗДАДЕТЕ ПРОЦЕДУРА Send_database_report КАТО BEGIN DECLARE @ProfileName VARCHAR(150) SET @ProfileName =(ИЗБЕРЕТЕ ИМЕ ОТ msdb..sysmail_profile WHERE profile_id =7) DECLARE @lsMessage NVARCHAR Hello Support, Please find attached database summery report. ' + '

' EXEC msdb.dbo.Sp_send_dbmail @recipients='[email protected]', @[email protected], @subject='Database Summery Report', @file_attachments='C:\Users\Administrator\Desktop\Database_Information.xlsx', @copy_recipients='', @blind_copy_recipients='', @body_format='HTML', @[email protected] END

Once the procedure is created, add a new SQL Job step. Click New . In the New Job Step dialog box, provide a Job Step name, and select Transact-SQL script (T-SQL) from the Type drop-down box. In the Command Text box, write the following code:

USE DBAtools Go EXEC Send_database_report

See the following image:

Click OK to close the wizard. Now to configure Job Schedule , select Schedules on the New Job прозорец. Click New to add a schedule.

In the New Job Schedule dialog box, provide the desired name in the Name text box, choose frequency and time. See the following image:

Close OK to close the New Job Schedule and in the New Job window, click on OK to close the dialog box.

Now, to test the SQL Job, right-click the Email Database Report SQL job and click Start Job at Step .

In the result of successful completion of the SQL Job, you will receive an email with the database report. See the following image:

Резюме

In this article I have covered as follows:

  1. How to populate information of the databases located on remote DB server.
  2. Create an SSIS package to populate database information and export it to excel file
  3. Create a multi-step SQL job to generate the report by executing an SSIS package and email the report.

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Оценка на кардиналност за множество предикати

  2. Праисторически и съвременен подход към проектиране на бази данни

  3. Как да изтриете колона в таблицата

  4. Създаване на Docker Swarm Cluster в Azure Container Service

  5. SQL CREATE TABLE за начинаещи