Monitorování databáze je nejdůležitější prací každého správce databáze. Velké organizace a společnosti mají více databázových serverů, které jsou umístěny buď ve stejném datovém centru, nebo v geograficky odlišných datových centrech. Pro monitorování databáze existuje mnoho standardních nástrojů. Tyto nástroje používají k naplnění dat pohledy dynamické správy serveru SQL Server a systémovou uloženou proceduru. Pomocí těchto DMV můžeme vytvořit náš přizpůsobený automatizovaný systém pro naplnění stavu databáze a odeslání zprávy e-mailem.
V tomto článku předvedu, jak můžeme použít systémovou uloženou proceduru a propojený server k naplnění informací databází umístěných na různých serverech a naplánování úlohy k odeslání zprávy.
V této ukázce budu provádět následující úkoly:
- Vytvořte požadované uložené procedury na TTI609-VM1 , TTI609-VM2, a TTI412-VM servery k naplnění informací o databázi, databázových objektech a úlohách SQL.
- Vytvořte uloženou proceduru pro naplnění souhrnu databáze, souhrnu databázových objektů a souhrnu úlohy SQL z TTI609-VM1 a TTI609-VM2 servery a ukládat je do souvisejících tabulek.
- Vytvořte balíček SSIS, který bude provádět následující úkoly:
- Spustí uloženou proceduru pomocí Spustit úlohu skriptu SQL .
- Exportujte data z tabulek SQL vytvořených na TTI412-VM a uložte jej na samostatnou kartu souboru aplikace Excel.
- Vytvořte úlohu serveru SQL pro spuštění balíčku SSIS k naplnění informací o databázi a uložené procedury pro odeslání zprávy e-mailem.
Následující obrázek ilustruje nastavení ukázky:
Následuje seznam uložených procedur:
Následuje seznam tabulek:
Vytvoření uložených procedur na obou databázových serverech
Jak jsem zmínil, chystáme se naplnit data z TTI609-VM1 a TTI609-VM2 servery. Uložené procedury používané k naplnění databáze zůstanou na obou serverech stejné.
Takže nejprve jsem vytvořil databázi s názvem DBATools na obou serverech. V těchto databázích jsem vytvořil uloženou proceduru. Chcete-li to provést, spusťte následující kód na TTI609-VM1 a TTI609-VM2 servery:
USE [master] go /****** Object: Database [DBATools] Script Date: 10/25/2018 11:25:27 AM ******/ CREATE DATABASE [DBATools] containment = none ON PRIMARY ( NAME = N'DBATools', filename = N'C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\DATA\DBATools.mdf' , size = 3264kb, maxsize = unlimited, filegrowth = 1024kb ) log ON ( NAME = N'DBATools_log', filename = N'C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\DATA\DBATools_log.ldf' , size = 816kb, maxsize = 2048gb, filegrowth = 10%) go
Vytvořte uloženou proceduru s názvem Pull_Database_Information v DBATools databáze. Tato uložená procedura vyplní následující informace o všech databázích existujících na obou databázových serverech.
- Název databáze.
- Úroveň kompatibility databáze.
- Stav databáze (ONLINE/OFFLINE/OBNOVA/POZASTAVENÍ).
- Model obnovy databáze (JEDNODUCHO / ÚPLNÁ / HROMADNĚ PROTOKOVANÉ).
- Velikost databáze v MB.
- Celková velikost datového souboru.
- Použitá velikost datového souboru.
- Celková velikost souboru protokolu.
- Použitá velikost souboru protokolu.
Spusťte následující kód vDBATools databáze obou databázových serverů pro vytvoření uložené procedury:
USE DBAtools go CREATE PROCEDURE Pull_Database_Information AS BEGIN IF Object_id('tempdb.dbo.#DBSize') IS NOT NULL DROP TABLE #dbsize CREATE TABLE #dbsize ( database_id INT PRIMARY KEY, data_file_used_size DECIMAL(18, 2), log_file_used_size DECIMAL(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 DB_ID() , SUM(CASE WHEN [type] = 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;' FROM sys.databases d WHERE d.[state] = 0 FOR xml path(''), type).value('.', 'NVARCHAR(MAX)'), 1, 2, '') EXEC sys.Sp_executesql @SQLCommand SELECT d.database_id AS 'Database ID', d.NAME AS 'Database Name', d.state_desc AS 'Database State', d.recovery_model_desc AS 'Recovery Model', t.total_db_size AS 'Database Size', t.data_file_size AS 'Data File Size', s.data_file_used_size AS 'Data File Used', t.log_file_size AS 'Log file size', s.log_file_used_size AS 'Log File Used' FROM (SELECT database_id, log_file_size = Cast(Sum(CASE WHEN [type] = 1 THEN size END) * 8. / 1024 AS DECIMAL(18, 2) ), data_file_size = Cast(Sum(CASE WHEN [type] = 0 THEN size END) * 8. / 1024 AS DECIMAL(18, 2)) , total_DB_size = Cast( Sum(size) * 8. / 1024 AS 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_db_size DESC END
Za druhé, vytvořte uložené procedury s názvem Pull_Database_Objects v DBATools databáze. Tato uložená procedura prochází všemi databázemi v rámci obou databázových serverů a naplňuje počet všech databázových objektů. Vyplní následující sloupce:
- Název serveru / hostitele.
- Název databáze.
- Typ databázového objektu (tabulka / uložená procedura / funkce SQL Scaler / omezení atd...)
- Celkový počet databázových objektů.
Spusťte následující kód v DBATools databáze na obou databázových serverech k vytvoření uložené procedury:
USE dbatools go CREATE PROCEDURE [Pull_database_objects] AS BEGIN CREATE TABLE #finalsummery ( id INT IDENTITY (1, 1), databasename VARCHAR(350), objecttype VARCHAR(200), totalobjects INT ) DECLARE @SQLCommand NVARCHAR(max) DECLARE @I INT=0 DECLARE @DBName VARCHAR(350) DECLARE @DBCount INT CREATE TABLE #databases ( NAME VARCHAR(350) ) INSERT INTO #databases (NAME) SELECT NAME FROM sys.databases WHERE database_id > 4 AND NAME NOT IN ( 'ReportServer', 'reportservertempdb' ) SET @DBCount=(SELECT Count(*) FROM #databases) WHILE ( @DBCount > @I ) BEGIN SET @DBName=(SELECT TOP 1 NAME FROM #databases) SET @SQLCommand=' Insert Into #FinalSummery (DatabaseName,ObjectType,TotalObjects) Select ''' + @DBName + ''', Case when Type=''TR'' then ''SQL DML trigger'' when Type=''FN'' then ''SQL scalar function'' when Type=''D'' then ''DEFAULT (constraint or stand-alone)'' when Type=''PK'' then ''PRIMARY KEY constraint'' when Type=''P'' then ''SQL Stored Procedure'' when Type=''U'' then ''Table (user-defined)'' when Type=''V'' then ''View'' when Type=''X'' then ''Extended stored procedure'' End As ObjectType, Count(Name)TotalObjects from ' + @DBName + '.sys.all_objects group by type' EXEC Sp_executesql @SQLCommand DELETE FROM #databases WHERE NAME = @DBName SET @[email protected] + 1 END SELECT Host_name() AS 'Server Name', databasename, objecttype, totalobjects, Getdate() AS 'ReportDate' FROM #finalsummery WHERE objecttype IS NOT NULL DROP TABLE #finalsummery END
Vytvořte uložené procedury s názvem Pull_SQLJob_Information v DBATools databáze. Tato uložená procedura prochází celým databázovým serverem a naplňuje informace o všech úlohách SQL a jejich stavech. Vyplní následující sloupce:
- Název serveru / hostitele.
- Název úlohy SQL.
- Vlastník úlohy SQL.
- Kategorie práce.
- Popis úlohy.
- Stav úlohy (povoleno / zakázáno)
- Datum vytvoření pracovního místa.
- Datum změny úkolu.
- Stav naplánované úlohy.
- Název plánu.
- Datum a čas posledního provedení
- Stav posledního provedení.
Spusťte následující kód vDBATools databáze na obou databázových serverech k vytvoření uložené procedury:
CREATE PROCEDURE Pull_sqljob_information AS BEGIN SELECT Host_name() AS 'Server Name', a.NAME AS 'Job Name', d.NAME AS Owner, b.NAME AS Category, a.description AS Description, CASE a.enabled WHEN 1 THEN 'Yes' WHEN 0 THEN 'No' END AS 'IsEnabled', a.date_created AS CreatedDate, a.date_modified AS ModifiedDate, CASE WHEN f.schedule_uid IS NULL THEN 'No' ELSE 'Yes' END AS 'Scheduled?', f.NAME AS 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, ':') AS DATETIME)) AS [LastRun], CASE g.run_status WHEN 0 THEN 'Failed' WHEN 1 THEN 'Success' WHEN 2 THEN 'Retry' WHEN 3 THEN 'Canceled' WHEN 4 THEN 'In progress' END AS Status FROM msdb.dbo.sysjobs AS a INNER JOIN msdb.dbo.sysjobhistory g ON a.job_id = g.job_id LEFT JOIN 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 LEFT JOIN msdb.sys.database_principals AS d ON a.owner_sid = d.sid LEFT JOIN msdb.dbo.sysjobschedules AS e ON a.job_id = e.job_id LEFT JOIN msdb.dbo.sysschedules AS f ON e.schedule_id = f.schedule_id GROUP BY a.NAME, d.NAME, 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
Vytvářejte uložené procedury, propojený server a tabulky na centrálním serveru
Jakmile budou postupy vytvořeny na TTI609-VM1 a TTI609-VM2 databázové servery, vytvořte požadované procedury a tabulky na centrálním serveru (TTI412-VM ).
Vytvořil jsem samostatnou databázi s názvem MonitoringDashboard na TTI412-VM server. Spuštěním následujícího kódu vytvořte databázi na centrálním serveru.
USE [master] go /****** Object: Database [MonitoringDashboard] Script Date: 10/25/2018 2:44:09 PM ******/ CREATE DATABASE [MonitoringDashboard] containment = none ON PRIMARY ( NAME = N'MonitoringDashboard', filename = N'E:\MS_SQL\SQL2017_Data\MonitoringDashboard.mdf', size = 8192kb, maxsize = unlimited, filegrowth = 65536kb ) log ON ( NAME = N'MonitoringDashboard_log', filename = N'E:\MS_SQL\SQL2017_Log\MonitoringDashboard_log.ldf', size = 8192kb, maxsize = 2048gb, filegrowth = 65536kb ) go
Po vytvoření databáze vytvořte uloženou proceduru, která používá LINKED Server ke spuštění procedury na TTI609-VM1 a TTI609-VM2 databázové servery. Spusťte následující kód v „hlavní“ databázi TTI412-VM databázový server pro vytvoření propojeného serveru:
Skript 1:Vytvořte propojený server TTI609-VM1
USE [master] go /****** Object: LinkedServer [TTI609-VM1] Script Date: 10/25/2018 2:49:28 PM ******/ EXEC master.dbo.Sp_addlinkedserver @server = N'TTI609-VM1', @srvproduct=N'SQL Server' /* For security reasons the linked server remote logins password is changed with ######## */ EXEC master.dbo.Sp_addlinkedsrvlogin @rmtsrvname=N'TTI609-VM1', @useself=N'False', @locallogin=NULL, @rmtuser=N'sa', @rmtpassword='########' go EXEC master.dbo.Sp_serveroption @server=N'TTI609-VM1', @optname=N'collation compatible', @optvalue=N'true' go EXEC master.dbo.Sp_serveroption @server=N'TTI609-VM1', @optname=N'data access', @optvalue=N'true' go EXEC master.dbo.Sp_serveroption @server=N'TTI609-VM1', @optname=N'dist', @optvalue=N'false' go EXEC master.dbo.Sp_serveroption @server=N'TTI609-VM1', @optname=N'rpc', @optvalue=N'true' go EXEC master.dbo.Sp_serveroption @server=N'TTI609-VM1', @optname=N'rpc out', @optvalue=N'true' go EXEC master.dbo.Sp_serveroption @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' go EXEC master.dbo.Sp_serveroption @server=N'TTI609-VM1', @optname=N'use remote collation', @optvalue=N'true' go EXEC master.dbo.Sp_serveroption @server=N'TTI609-VM1', @optname=N'remote proc transaction promotion', @optvalue=N'false' go
Skript 2:Vytvořte propojený server TTI609-VM2
USE [master] go /****** Object: LinkedServer [TTI609-VM2] Script Date: 10/25/2018 2:55:29 PM ******/ EXEC master.dbo.Sp_addlinkedserver @server = N'TTI609-VM2', @srvproduct=N'SQL Server' /* For security reasons the linked server remote logins password is changed with ######## */ EXEC master.dbo.Sp_addlinkedsrvlogin @rmtsrvname=N'TTI609-VM2', @useself=N'False', @locallogin=NULL, @rmtuser=N'sa', @rmtpassword='########' go EXEC master.dbo.Sp_serveroption @server=N'TTI609-VM2', @optname=N'collation compatible', @optvalue=N'true' go EXEC master.dbo.Sp_serveroption @server=N'TTI609-VM2', @optname=N'data access', @optvalue=N'true' go EXEC master.dbo.Sp_serveroption @server=N'TTI609-VM2', @optname=N'dist', @optvalue=N'false' go EXEC master.dbo.Sp_serveroption @server=N'TTI609-VM2', @optname=N'rpc', @optvalue=N'true' go EXEC master.dbo.Sp_serveroption @server=N'TTI609-VM2', @optname=N'rpc out', @optvalue=N'true' go EXEC master.dbo.Sp_serveroption @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 go EXEC master.dbo.Sp_serveroption @server=N'TTI609-VM2', @optname=N'query timeout', @optvalue=N'0' go EXEC master.dbo.Sp_serveroption @server=N'TTI609-VM2', @optname=N'use remote collation', @optvalue=N'true' go EXEC master.dbo.Sp_serveroption @server=N'TTI609-VM2', @optname=N'remote proc transaction promotion', @optvalue=N'false' go
Vytvořte uloženou proceduru a tabulky
Po vytvoření propojeného serveru musíme vytvořit tři tabulky s názvem Database_Object_Summery , Database_Summery a SQL_Job_List v MonitoringDashboard databáze. Tyto tabulky ukládají informace naplněné Generate_Database_Information uložená procedura a později data uložená v těchto tabulkách, které budou použity pro generování sestavy v excelu.
Spuštěním následujícího kódu vytvořte SQL_Job_List tabulka:
USE [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, [jobdescription] [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] ADD DEFAULT (Getdate()) FOR [ReportDate] go
Spuštěním následujícího kódu vytvořte lst_dbservers tabulka:
USE [MonitoringDashboard] go CREATE TABLE [dbo].[lst_dbservers] ( [id] [INT] IDENTITY(1, 1) NOT NULL, [servername] [VARCHAR](50) NOT NULL, [addeddate] [DATETIME] NOT NULL, PRIMARY KEY CLUSTERED ( [id] ASC )WITH (pad_index = OFF, statistics_norecompute = OFF, ignore_dup_key = OFF, allow_row_locks = on, allow_page_locks = on) ON [PRIMARY], UNIQUE NONCLUSTERED ( [servername] ASC )WITH (pad_index = OFF, statistics_norecompute = OFF, ignore_dup_key = OFF, allow_row_locks = on, allow_page_locks = on) ON [PRIMARY] ) ON [PRIMARY] go ALTER TABLE [dbo].[lst_dbservers] ADD DEFAULT (Getdate()) FOR [AddedDate] go
Spuštěním následujícího kódu vytvořte Database_Summery tabulka:
USE [MonitoringDashboard] go CREATE TABLE [dbo].[database_summery] ( [id] [INT] IDENTITY(1, 1) NOT NULL, [servername] [VARCHAR](150) NULL, [databaseid] [INT] NULL, [databasename] [VARCHAR](250) NULL, [databasestatus] [VARCHAR](50) NULL, [recoverymodel] [VARCHAR](50) NULL, [compatibilitylevel] [INT] NULL, [databasecreatedate] [DATE] 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 ) ON [PRIMARY] go ALTER TABLE [dbo].[database_summery] ADD DEFAULT (Getdate()) FOR [ReportDate] go
Spuštěním následujícího kódu vytvořte Database_Object_Summery tabulka:
USE [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 ) ON [PRIMARY] go ALTER TABLE [dbo].[database_object_summery] ADD DEFAULT (Getdate()) FOR [ReportDate] go
Po vytvoření tabulek vytvořte uloženou proceduru s názvem Generate_Database_Information na MonitoringDashboard databáze. Pomocí „RPC“ provádí uložené procedury vytvořené naTTI609-VM1 a TTI609-VM2 databázové servery k naplnění dat.
Chcete-li vytvořit uloženou proceduru, spusťte následující kód:
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 ( servername VARCHAR(100) ) INSERT INTO #db_server_list (servername) SELECT servername FROM lst_dbservers SET @ServerCount= (SELECT Count(servername) FROM #db_server_list) WHILE ( @ServerCount > @i ) BEGIN SET @servername=(SELECT TOP 1 servername FROM #db_server_list) SET @SQLCommand_Object_Summery = 'insert into Database_Object_Summery (ServerName,DatabaseName,ObjectType,ObjectCount,ReportDate) exec [' + @servername + '].DBATools.dbo.[Pull_Database_Objects]' SET @SQLCommand_Database_Information = 'insert into Database_Summery (ServerName,DatabaseID,DatabaseName,DatabaseStatus,Recoverymodel,CompatibilityLevel,DatabaseCreateDate,DatabaseCreatedBy,DBSize,DataFileSize,DataFileUsed,LogFileSize,LogFileUsed) exec [' + @servername + '].DBATools.dbo.[Pull_Database_Information]' SET @SQLCommand_SQL_Job_Information = 'insert into SQL_Job_List (ServerName,JobName,JobOwner,Jobcategory,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 = @servername SET @[email protected] + 1 END END
Po vytvoření procedury vytvořte balíček SSIS pro export dat do souboru aplikace Excel.
Vytvořte balíček SSIS pro export dat do souboru aplikace Excel
Ve svých minulých článcích jsem vysvětlil kroky ke konfiguraci úloh toku dat, připojení OLEDB a připojení aplikace Excel, proto tuto část přeskakuji.
Chcete-li exportovat data do souboru aplikace Excel, otevřete nástroje SQL Server Data Tools a vytvořte nový projekt SSIS s názvem Export_Database_Information.
Jakmile je projekt vytvořen, přetáhněte Spustit úlohu SQL do Toku řízení okno a přejmenujte jej na Naplnit data ze serverů . Viz následující obrázek:
Poklepejte na Spustit úlohu SQL (Naplnit data ze serveru). Spustit editor úloh SQL otevře se dialogové okno pro konfiguraci připojení SQL. Viz následující obrázek:
V části Připojení vyberte OLEDB připojovací řetězec a v příkazu SQL zadejte následující dotaz:
USE monitoringdashboard go EXEC Generate_database_information
Klepnutím na tlačítko OK zavřete dialogové okno.
Na Toku ovládání přetáhněte úlohu Data Flow Task z SSIS Toolbox a přejmenujte ji na Generate Report. Viz následující obrázek:
Dvojitým kliknutím otevřete Datový tok okno.
Jak jsem již zmínil, Generate_Database_Information procedura vloží výstup databázových serverů do následujících tabulek:
- Database_Object_Summery
- Databáze_Léto
- SQL_Job_List
Vytvořil jsem soubor Excel, který má tři listy. Následující tabulky ukazují mapování tabulek SQL a Excel Worksheet.
V Datovém toku okno, přetáhněte tři zdroje ADO.Net a tři cíle Excel. Viz následující obrázek:
Dvakrát klikněte na Souhrn objektů y (zdroj ADO.NET) v Zdroj ADO.NET Editor.
- Vyberte TTI412-VM\SQL2017MonitoringDashboard ze Správce připojení ADO.NET rozevíracím seznamu.
- Vyberte Tabulka nebo Zobrazit z režimu přístupu k datům rozevíracím seznamu.
- Vyberte Database_Object_Summery z Název tabulky nebo zobrazení rozevíracím seznamu.
Dvakrát klikněte na Informace o databázi (zdroj ADO.NET) v Editoru zdrojů ADO.NET .
- Vyberte „TTI412-VM\SQL2017MonitoringDashboard ” ze Správce připojení ADO.NET rozevíracím seznamu.
- Vyberte Tabulka nebo Zobrazit z režimu přístupu k datům rozevíracího pole.
- Vyberte „Database_Summery ” z Název tabulky nebo zobrazení rozevíracího pole.
Poklepejte na Úlohy SQL (zdroj ADO.NET) v Editoru zdrojů ADO.NET .
- Vyberte TTI412-VM\SQL2017MonitoringDashboard ve správci připojení ADO.NET.
- Vyberte Tabulka nebo Zobrazit zrežimu přístupu k datům rozevíracího pole.
- Vyberte SQL_Job_List v Název tabulky nebo zobrazení rozevíracího pole.
Nyní přetáhněte tři cíle aplikace Excel z panelu nástrojů SSIS. Viz následující obrázek:
Po zkopírování cílů přetáhněte modrou šipku pod zdroj ADO.Net a umístěte jej do cíle aplikace Excel. Udělejte totéž pro všechny. Viz následující obrázek:
Poklepejte na Shrnutí objektů Excel (zdroj ADO.NET) vEditoru cílů Excelu .
- Vyberte Excel Connection Manager ze Správce připojení aplikace Excel rozevíracího pole.
- Vyberte možnost Table nebo View z režimu přístupu k datům rozevíracím seznamu.
- Vyberte Object Summery$ zNázev excelového listu rozevíracího pole.
Jak jsem zmínil, názvy sloupců tabulky SQL a sloupců Excelu jsou stejné, takže mapování bude provedeno automaticky. Klikněte na Mapování k mapování sloupců. Viz následující obrázek:
Poklepejte na Informace o databázi Excel (Cíl v Excelu) v Editoru cílů Excelu .
- Vyberte Excel Connection Manager ze Správce připojení aplikace Excel rozevíracího pole.
- Vyberte možnost Table nebo View z režimu přístupu k datům rozevíracím seznamu.
- Vyberte Informace o databázi$ zNázev excelového listu rozevíracím seznamu.
Jak jsem zmínil, názvy sloupců tabulky SQL a sloupců Excelu jsou stejné, takže mapování bude provedeno automaticky. Klikněte na Mapování k mapování sloupců. Viz následující obrázek:
Poklepejte na Excel SQL Jobs (Cíl v Excelu) vEditoru cílů Excelu .
- Vyberte Excel Connection Manager ze Správce připojení aplikace Excel rozevíracího pole.
- Vyberte možnost Table nebo View z režimu přístupu k datům rozevíracím seznamu.
- Z Název listu Excelu vyberte „Úlohy SQL$“. rozevíracího pole.
Jak jsem zmínil, názvy sloupců tabulky SQL a sloupců Excelu jsou stejné, takže mapování bude provedeno automaticky. Klikněte na Mapování k mapování sloupců. Viz následující obrázek:
Vytvořte úlohu SQL pro odeslání zprávy o databázi e-mailem
Jakmile je balíček vytvořen, vytvořte úlohu SQL pro provádění následujících činností:
- Spusťte balíček SSIS k naplnění dat ze všech serverů.
- Zašlete e-mailem zprávu o databázi požadovanému týmu.
V SQL Job musíme vytvořit dva kroky. V prvním kroku se spustí balíček SSIS a ve druhém kroku se provede postup odeslání e-mailu.
Chcete-li vytvořit úlohu SQL, otevřete SSMS>> SQL Server Agent>> Klikněte pravým tlačítkem na Nová úloha SQL .
O Nové zaměstnání průvodce, vyberte Krok a klikněte na Ne w V Kroku nové úlohy dialogovém okně Krok jméno do textového pole zadejte požadovaný název a vyberte Balík služeb SQL Server Integration z Typ rozevíracím seznamu. V Textu balíčku zadejte umístění balíčku SSIS krabice. Viz následující obrázek:
Kliknutím na OK zavřete Nový krok úlohy .
Vytvořte další krok úlohy, který provede uloženou proceduru pro odeslání zprávy e-mailem. K odeslání e-mailu používá systémový postup. Balíček SSIS zkopíruje databázové informace do konkrétního umístění, a proto uveďte úplnou cestu k souboru aplikace Excel v parametru @file_attachments v sp_send_dbmail uložená procedura.
Chcete-li vytvořit uloženou proceduru, spusťte následující kód v DBATools databáze centrálního serveru:
CREATE PROCEDURE Send_database_report AS BEGIN DECLARE @ProfileName VARCHAR(150) SET @ProfileName = (SELECT NAME FROM msdb..sysmail_profile WHERE profile_id = 7) DECLARE @lsMessage NVARCHAR(max) SET @lsMessage = '<p style="font-family:Arial; font-size:10pt"> Hello Support, Please find attached database summery report. ' + '</p>' 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 krok. 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
Viz následující obrázek:
Click OK to close the wizard. Now to configure Job Schedule , select Schedules on the New Job okno. 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. Viz následující obrázek:
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. Viz následující obrázek:
Shrnutí
In this article I have covered as follows:
- How to populate information of the databases located on remote DB server.
- Create an SSIS package to populate database information and export it to excel file
- Create a multi-step SQL job to generate the report by executing an SSIS package and email the report.