Database
 sql >> Teknologi Basis Data >  >> RDS >> Database

Sistem Email Otomatis untuk Mengirim Laporan Ringkasan Basis Data

Pemantauan basis data adalah pekerjaan paling penting dari setiap administrator basis data. Organisasi dan perusahaan besar memiliki beberapa server basis data yang terletak di pusat data yang sama atau di pusat data yang berbeda secara geografis. Ada banyak alat standar untuk pemantauan basis data. Alat tersebut menggunakan tampilan manajemen dinamis SQL Server dan prosedur tersimpan sistem untuk mengisi data. Dengan menggunakan DMV ini, kami dapat membuat sistem otomatis yang disesuaikan untuk mengisi status basis data dan mengirimkan laporan melalui email.

Dalam artikel ini, saya akan mendemonstrasikan bagaimana kita dapat menggunakan prosedur tersimpan sistem dan server tertaut untuk mengisi informasi database yang terletak di server yang berbeda dan menjadwalkan pekerjaan untuk mengirim laporan.

Dalam demo ini, saya akan melakukan tugas-tugas berikut:

  1. Buat prosedur tersimpan yang diperlukan di TTI609-VM1 , TTI609-VM2, dan TTI412-VM server untuk mengisi informasi database, objek database, dan Pekerjaan SQL.
  2. Buat prosedur tersimpan untuk mengisi ringkasan database, ringkasan objek database, dan ringkasan Pekerjaan SQL dari TTI609-VM1 dan TTI609-VM2 server dan menyimpannya di tabel terkait.
  3. Buat paket SSIS yang melakukan tugas berikut:
      • Mengeksekusi prosedur tersimpan menggunakan Menjalankan Tugas Skrip SQL .
      • Ekspor data dari tabel SQL yang dibuat di TTI412-VM dan simpan di tab individual file excel.
  4. Buat Tugas SQL Server untuk menjalankan paket SSIS untuk mengisi informasi database dan prosedur tersimpan untuk mengirimkan laporan melalui email.

Gambar berikut mengilustrasikan pengaturan demo:

Berikut adalah daftar prosedur tersimpan:

Berikut Daftar Tabelnya:

Buat prosedur Tersimpan di kedua server database

Seperti yang saya sebutkan, kita akan mengisi data dari TTI609-VM1 dan TTI609-VM2 server. Prosedur tersimpan yang digunakan untuk mengisi database akan tetap sama di kedua server.
Jadi pertama-tama, saya telah membuat database bernama DBATools di kedua server. Saya membuat prosedur tersimpan di database tersebut. Untuk melakukannya, jalankan kode berikut pada TTI609-VM1 dan TTI609-VM2 server:

GUNAKAN [master] go /****** Objek:Database [DBATools] Tanggal Skrip:25/10/2018 11:25:27 ******/ CREATE DATABASE [DBATools] penahanan =tidak ada DI PRIMARY ( NAME =N'DBATools', nama file =N'C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\DATA\DBATools.mdf' , size =3264kb, maxsize =unlimited, filegrowth =1024kb ) log AKTIF ( NAMA =N'DBATools_log', nama file =N'C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\DATA\DBATools_log.ldf' , ukuran =816kb, ukuran maksimal =2048gb, pertumbuhan file =10%) pergi 

Buat prosedur tersimpan bernama Pull_Database_Information di DBATools basis data. Prosedur tersimpan ini mengisi informasi berikut dari semua database yang ada di kedua server database.

  1. Nama Basis Data.
  2. Tingkat Kompatibilitas Basis Data.
  3. Status database (ONLINE/OFFLINE/RESTORING/SUSPEND).
  4. Model pemulihan basis data (SEDERHANA / LENGKAP / DATA MASSA).
  5. Ukuran Basis Data dalam MB.
  6. Ukuran File Data Total.
  7. Ukuran File Data yang Digunakan.
  8. Total Ukuran File Log.
  9. Ukuran File Log yang Digunakan.

Jalankan kode berikut di DBATools database kedua server database untuk membuat prosedur tersimpan:

GUNAKAN DBAtools go CREATE PROCEDURE Pull_Database_Information AS MULAI JIKA Object_id('tempdb.dbo.#DBSize') BUKAN NULL DROP TABLE #dbsize CREATE TABLE #dbsize ( database_id INT PRIMARY KEY, data_file_used_size DECIMAL_file_bekas(18), (18, 2) ) MENYATAKAN @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 UNTUK xml pat h(''), type).value('.', 'NVARCHAR(MAX)'), 1, 2, '') EXEC sys.Sp_executesql @SQLCommand PILIH d.database_id AS 'Database ID', d.NAME AS 'Nama Basis Data', d.state_desc AS 'Status Basis Data', d.recovery_model_desc AS 'Model Pemulihan', t.total_db_size AS 'Ukuran Basis Data', t.data_file_size AS 'Ukuran File Data', s.data_file_used_size AS 'File Data Digunakan ', 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) ) DARI sys.master_files GROUP BY database_id) t GABUNG sys.databases d PADA d.database_id =t.database_id KIRI GABUNG #dbsize s ON d.database_id =s.database_id ORDER OLEH t.total_db DESC 

Kedua, buat prosedur tersimpan bernama Pull_Database_Objects di DBATools basis data. Prosedur tersimpan ini mengulangi semua database di dalam server database dan mengisi jumlah semua objek database. Ini mengisi kolom berikut:

  1. Nama Server / Host.
  2. Nama Basis Data.
  3. Jenis objek database (Tabel / Prosedur tersimpan / fungsi / batasan SQL Scaler dll…)
  4. Jumlah total objek database.

Jalankan kode berikut di DBATools database di kedua server database untuk membuat prosedur tersimpan:

GUNAKAN 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 ) MENYATAKAN @SQLCommand NVARCHAR(max) DECLARE @I INT=0 MENYATAKAN @DBName VARCHAR(350) MENYATAKAN @DBCount INT CREATE TABLE #databases ( NAME VARCHAR(350) ) INSERT INTO #databases (NAME) PILIH NAMA DARI sys.databases WHERE database_id> 4 DAN NAMA TIDAK DI ( ' ReportServer', 'reportservertempdb' ) SET @DBCount=(SELECT Count(*) FROM #databases) WHILE ( @DBCount> @I ) MULAI SET @DBName=(SELECT TOP 1 NAME FROM #databases) SET @SQLCommand=' Insert Into #FinalSummery (DatabaseName,ObjectType,TotalObjects) Pilih ''' + @DBName + ''', Case ketika Type=''TR'' lalu ''SQL DML trigger'' ketika Type=''FN'' lalu ''SQL scalar function'' ketika Type='' D'' lalu ''DEFAULT (constraint atau stand-alone)'' ketika Type=''PK'' lalu ''PRIMARY KEY constraint'' ketika Type=''P'' lalu ''SQL Stored Procedure'' saat Mengetik ''U'' lalu ''Tabel (ditentukan pengguna)'' saat Ketik=''V'' lalu ''Lihat'' saat Ketik=''X'' lalu ''Prosedur tersimpan yang diperluas'' Berakhir Sebagai TipeObjek , Hitung(Nama)TotalObjects dari ' + @DBName + '.sys.all_objects mengelompokkan menurut jenis' EXEC Sp_executesql @SQLCommand DELETE FROM #databases WHERE NAME =@DBName SET @[email protected] + 1 END SELECT Host_name() AS ' Nama Server', nama database, tipe objek , totalobjects, Getdate() SEBAGAI 'ReportDate' FROM #finalsummery WHERE objecttype BUKAN NULL DROP TABLE #finalsummery END

Buat prosedur tersimpan bernama Pull_SQLJob_Information di DBATools basis data. Prosedur tersimpan ini mengulangi semua server database dan mengisi informasi semua pekerjaan SQL dan statusnya. Ini mengisi kolom berikut:

  1. Nama Server / Host.
  2. Nama Pekerjaan SQL.
  3. Pemilik Pekerjaan SQL.
  4. Kategori Pekerjaan.
  5. Deskripsi Pekerjaan.
  6. Status Pekerjaan (Diaktifkan / dinonaktifkan)
  7. Tanggal penciptaan lapangan kerja.
  8. Tanggal pekerjaan diubah.
  9. Status pekerjaan terjadwal.
  10. Nama Jadwal.
  11. Tanggal dan waktu eksekusi terakhir
  12. Status eksekusi terakhir.

Jalankan kode berikut di DBATools database di kedua server database untuk membuat prosedur tersimpan:

BUAT PROSEDUR 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 LALU 'YA' KETIKA 0 MAKA 'Tidak' AKHIR SEBAGAI 'IsEnabled', a.date_created AS CreatedDate, a.date_modified AS ModifiedDate, KASUS KETIKA f.schedule_uid NULL MAKA 'Tidak' LAINNYA 'Ya' AKHIR SEBAGAI 'Dijadwalkan?' , f.NAME AS JobScheduleName, Max(Pemeran( Barang(Barang(Pemeran(g.run_date AS VARCHAR), 7, 0, '-'), 5, 0, '-') + ' ' + Barang(Barang(Ganti (Str(g.run_time, 6, 0), ' ', '0'), 5, 0, ':'), 3, 0, ':') AS DATETIME)) AS [LastRun], CASE g.run_status KETIKA 0 MAKA 'Gagal' KETIKA 1 MAKA 'SUKSES ss' KETIKA 2 KEMUDIAN 'Coba lagi' KETIKA 3 KEMUDIAN 'Dibatalkan' KETIKA 4 KEMUDIAN 'Sedang berlangsung' AKHIR SEBAGAI Status FROM msdb.dbo.sysjobs SEBAGAI INNER GABUNG msdb.dbo.sysjobhistory g ON a.job_id =g.job_id KIRI BERGABUNG msdb.dbo.syscategories SEBAGAI b PADA a.category_id =b.category_id KIRI BERGABUNG msdb.dbo.sysjobsteps AS c ON a.job_id =c.job_id DAN a.start_step_id =c.step_id KIRI BERGABUNG msdb.sypals.database AS a.owner_sid =d.sid KIRI GABUNG msdb.dbo.sysjobschedules AS e ON a.job_id =e.job_id KIRI GABUNG msdb.dbo.sysschedules AS f ON e.schedule_id =f.schedule_id GROUP d.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

Buat prosedur Tersimpan, Server Tertaut, dan tabel di server pusat

Setelah prosedur dibuat di TTI609-VM1 dan TTI609-VM2 server database, buat prosedur dan tabel yang diperlukan di server pusat (TTI412-VM ).

Saya membuat database terpisah bernama MonitoringDashboard di TTI412-VM server. Jalankan kode berikut untuk membuat database di server pusat.

GUNAKAN [master] go /****** Objek:Basis Data [MonitoringDashboard] Tanggal Skrip:25/10/2018 14:44:09 PM ******/ CREATE DATABASE [MonitoringDashboard] penahanan =tidak ada PADA PRIMARY ( NAMA =N'MonitoringDashboard', nama file =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

Setelah database dibuat, buat prosedur tersimpan yang menggunakan LINKED Server untuk menjalankan prosedur pada TTI609-VM1 dan TTI609-VM2 server basis data. Jalankan kode berikut di database "master" TTI412-VM server database untuk membuat server tertaut:

Skrip 1:Buat server Tertaut TTI609-VM1

GUNAKAN [master] go /****** Objek:LinkedServer [TTI609-VM1] Tanggal Skrip:25/10/2018 14:49:28 PM ******/ EXEC master.dbo.Sp_addlinkedserver @server =N'TTI609-VM1', @srvproduct=N'SQL Server' /* Demi keamanan, kata sandi login jarak jauh server tertaut diubah dengan ######## */ 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'akses data' , @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'benar' pergi EXEC master.dbo.Sp_serverop tion @server=N'TTI609-VM1', @optname=N'connect timeout', @optvalue=N'0' pergi 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'promosi transaksi proc jarak jauh', @optvalue=N'false' go

Script 2:Buat server Tertaut TTI609-VM2

GUNAKAN [master] go /****** Objek:LinkedServer [TTI609-VM2] Tanggal Skrip:25/10/2018 14:55:29 PM ******/ EXEC master.dbo.Sp_addlinkedserver @server =N'TTI609-VM2', @srvproduct=N'SQL Server' /* Demi keamanan, kata sandi login jarak jauh server tertaut diubah dengan ######## */ 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'akses data' , @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'benar' pergi EXEC master.dbo.Sp_serverop tion @server=N'TTI609-VM2', @optname=N'connect timeout', @optvalue=N'0' pergi EXEC master.dbo.Sp_serveroption @server=N'TTI609-VM2', @optname=N'collation name', @optvalue=NULL buka EXEC master.dbo.Sp_serveroption @server=N'TTI609-VM2', @optname=N'query timeout', @optvalue=N'0' buka 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'promosi transaksi proc jarak jauh ', @optvalue=N'false' go

Buat prosedur dan tabel Tersimpan

Setelah server tertaut dibuat, kita perlu membuat tiga tabel bernama Database_Object_Summery , Database_Summery , dan SQL_Job_List di Dasbor Pemantauan basis data. Tabel ini menyimpan informasi yang diisi oleh Generate_Database_Information prosedur tersimpan dan kemudian data, disimpan dalam tabel yang akan digunakan untuk membuat laporan di excel.

Jalankan kode berikut untuk membuat SQL_Job_List tabel:

GUNAKAN [MonitoringDashboard] pergi CREATE TABLE [dbo].[sql_job_list] ( [id] [INT] IDENTITY(1, 1) NOT NULL, [servername] [VARCHAR](250) NULL, [jobname] [VARCHAR] (250) NULL, [pemilik pekerjaan] [VARCHAR](250) NULL, [kategori pekerjaan] [VARCHAR](250) NULL, [deskripsi pekerjaan] [VARCHAR](250) NULL, [status pekerjaan] [VARCHAR](50) NULL, [ dibuat] [DATETIME] NULL, [modifieddate] [DATETIME] NULL, [dijadwalkan] [VARCHAR](5) NULL, [schedulename] [VARCHAR](250) NULL, [reportdate] [DATETIME] NULL ) ON [PRIMARY] pergi ALTER TABLE [dbo].[sql_job_list] ADD DEFAULT (Getdate()) UNTUK [ReportDate] go

Jalankan kode berikut untuk membuat lst_dbservers tabel:

GUNAKAN [MonitoringDashboard] pergi 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 )DENGAN (pad_index =OFF, Statistics_norecompute =OFF, abaikan_dup_key =OFF, allow_row_locks =on, allow_page_locks =on) ON [PRIMARY], UNIK NONCLUSTERED ( [servername] ASC ] pad_index =OFF, statistik_norecompute =OFF, abaikan_dup_key =OFF, allow_row_locks =aktif, allow_page_locks =on) ON [PRIMARY] ) ON [PRIMARY] go ALTER TABLE [dbo].[lst_dbservers] ADD DEFAULT (Getdate()) FOR [AddedDate()] FOR [AddedDate()] FOR [AddedDate()] FOR [AddedDate()] FOR [AddedDate()] FOR [AddedDate()] pergi

Jalankan kode berikut untuk membuat Database_Summery tabel:

GUNAKAN [MonitoringDashboard] pergi CREATE TABLE [dbo].[database_summery] ( [id] [INT] IDENTITY(1, 1) NOT NULL, [servername] [VARCHAR](150) NULL, [databaseid] [INT] NULL, [namadatabase] [VARCHAR](250) NULL, [status database] [VARCHAR](50) NULL, [model pemulihan] [VARCHAR](50) NULL, [tingkat kompatibilitas] [INT] NULL, [tanggal pembuatan database] [TANGGAL] NULL , [databasedibuatoleh] [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 ) PADA [PRIMARY] go ALTER TABLE [dbo].[database_summery] ADD DEFAULT (Getdate()) UNTUK [ReportDate] pergi

Jalankan kode berikut untuk membuat Database_Object_Summery tabel:

GUNAKAN [MonitoringDashboard] pergi 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 ()) UNTUK [Tanggal Laporan] pergi

Setelah tabel dibuat, buat prosedur tersimpan bernama Generate_Database_Information di Dasbor Pemantauan basis data. Menggunakan “RPC”, ia menjalankan prosedur tersimpan, dibuat di TTI609-VM1 dan TTI609-VM2 server database untuk mengisi data.

Jalankan kode berikut untuk membuat prosedur tersimpan:

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 (maks) DECLARE @servername VARCHAR(100) CREATE TABLE #db_server_list ( servername VARCHAR(100) ) INSERT INTO #db_server_list (servername) PILIH nama server DARI lst_dbservers SET @ServerCount=(PILIH Hitungan(nama server) FROM #db_server_list)> @i ) BEGIN SET @servername=(PILIH TOP 1 nama server DARI #db_server_list) SET @SQLCommand_Object_Summery ='masukkan ke Database_Object _Summery (ServerName,DatabaseName,ObjectType,ObjectCount,ReportDate) exec [' + @servername + '].DBATools.dbo.[Pull_Database_Objects]' SET @SQLCommand_Database_Information ='masukkan ke Database_Summery (ServermodelName,LecoverDatabase,DatabaseID,DatabaseS ,DatabaseCreateDate,DatabaseCreatedBy,DBSize,DataFileSize,DataFileUsed,LogFileSize,LogFileUsed) exec [' + @servername + '].DBATools.dbo.[Pull_Database_Information]' SET @SQLCommand_SQL_Job_Information ke SQL_'insertJobry JobDescription,JobStatus,CreateDate,ModifiedDate,IsScheduled,ScheduleName) exec [' + @servername + '].DBATools.dbo.[Pull_SQLJob_Information]' EXEC Sp_executesql @SQLCommand_Object_Summery EXEC Sp_execute_execute_SQL_Information_SQL_SQL_Server_ExEC Sp_executesql @SQLCommand_Object_Summery EXEC Sp_executeSp_executesql_Informand_SQL ROM_server_SQL_execute_sql_server_Informasi_SQL servername SET @[email protected] + 1 END END

Setelah prosedur dibuat, buat paket SSIS untuk mengekspor data ke file Excel.

Buat Paket SSIS untuk mengekspor data dalam file excel

Dalam artikel saya sebelumnya, saya menjelaskan langkah-langkah untuk mengkonfigurasi tugas aliran data, Koneksi OLEDB, dan koneksi Excel, maka saya melewatkan bagian ini.

Untuk mengekspor data ke file Excel, Buka alat Data SQL Server dan buat proyek SSIS baru bernama Export_Database_Information.

Setelah proyek dibuat, seret dan lepas Jalankan Tugas SQL ke Alur Kontrol jendela dan ganti namanya menjadi Populate Data from Servers . Lihat gambar berikut:

Klik dua kali Jalankan Tugas SQL (Mengisi Data dari Server). Jalankan Editor Tugas SQL kotak dialog terbuka untuk mengkonfigurasi koneksi SQL. Lihat gambar berikut:

Di Sambungan diajukan, pilih OLEDB string koneksi dan dalam Pernyataan SQL bidang, berikan kueri berikut:

GUNAKAN dasbor pemantauan pergi EXEC Generate_database_information

Klik OK untuk menutup kotak dialog.

Di Alur Kontrol layar, seret dan lepas Tugas Aliran Data dari SSIS Toolbox dan ganti namanya menjadi Buat Laporan. Lihat gambar berikut:

Klik dua kali untuk membuka Aliran Data jendela.

Seperti yang saya sebutkan sebelumnya, Generate_Database_Information prosedur memasukkan output dari server database dalam tabel berikut:

  1. Database_Object_Summery
  2. Database_Summery
  3. SQL_Job_List

Saya membuat file Excel yang memiliki tiga lembar kerja. Tabel berikut menunjukkan pemetaan tabel SQL dan Lembar Kerja Excel.


Dalam Alur Data jendela, seret dan lepas tiga Sumber ADO.Net dan tiga tujuan Excel. Lihat gambar berikut:

Klik dua kali Ringkasan Objek y (Sumber ADO.NET) di Sumber ADO.NET Editor.

  1. Pilih TTI412-VM\SQL2017MonitoringDashboard dari pengelola koneksi ADO.NET kotak tarik-turun.
  2. Pilih Tabel atau Tampilan dari Mode akses data kotak tarik-turun.
  3. Pilih Database_Object_Summery dari Nama tabel atau tampilan kotak tarik-turun.

Klik dua kali Informasi Basis Data (Sumber ADO.NET) di Editor Sumber ADO.NET .

  1. Pilih “TTI412-VM\SQL2017MonitoringDashboard ” dari manajer koneksi ADO.NET kotak tarik-turun.
  2. Pilih Tabel atau Tampilan dari Mode akses data kotak tarik-turun.
  3. Pilih “Database_Summery ” dari Nama tabel atau tampilan kotak tarik-turun.

Klik dua kali Tugas SQL (Sumber ADO.NET) di Editor Sumber ADO.NET .

  1. Pilih TTI412-VM\SQL2017MonitoringDashboard di manajer koneksi ADO.NET.
  2. Pilih Tabel atau Tampilan dari Mode akses data kotak tarik-turun.
  3. Pilih SQL_Job_List di Nama tabel atau tampilan kotak tarik-turun.

Sekarang, seret dan lepas tiga tujuan Excel dari SSIS Toolbox. Lihat gambar berikut:

Setelah tujuan disalin, seret panah biru di bawah sumber ADO.Net dan letakkan di tujuan Excel. Lakukan hal yang sama untuk semua. Lihat gambar berikut:

Klik dua kali Ringkasan Objek Excel (Sumber ADO.NET) di Editor Tujuan Excel .

  1. Pilih Pengelola Koneksi Excel dari pengelola koneksi Excel kotak tarik-turun.
  2. Pilih Tmampu atau Lihat dari Mode akses data kotak tarik-turun.
  3. Pilih Objek Musim Panas$ dari Nama lembar excel kotak tarik-turun.

Seperti yang saya sebutkan, nama kolom dari tabel SQL dan kolom Excel adalah sama, maka pemetaan akan dilakukan secara otomatis. Klik Pemetaan untuk memetakan kolom. Lihat gambar berikut:

Klik dua kali Informasi Basis Data Excel (Tujuan Excel) di Editor Tujuan Excel .

  1. Pilih Pengelola Koneksi Excel dari pengelola koneksi Excel kotak tarik-turun.
  2. Pilih Tmampu atau Lihat dari Mode akses data kotak tarik-turun.
  3. Pilih Informasi basis data$ dari Nama lembar excel kotak tarik-turun.

Seperti yang saya sebutkan, nama kolom dari tabel SQL dan kolom Excel adalah sama, maka pemetaan akan dilakukan secara otomatis. Klik Pemetaan untuk memetakan kolom. Lihat gambar berikut:

Klik dua kali Pekerjaan SQL Excel (Tujuan Excel) di Editor Tujuan Excel .

  1. Pilih Pengelola Koneksi Excel dari pengelola koneksi Excel kotak tarik-turun.
  2. Pilih Tmampu atau Lihat dari Mode akses data kotak tarik-turun.
  3. Pilih “SQL Jobs$ dari Nama lembar Excel kotak tarik-turun.

Seperti yang saya sebutkan, nama kolom dari tabel SQL dan kolom Excel adalah sama, maka pemetaan akan dilakukan secara otomatis. Klik Pemetaan untuk memetakan kolom. Lihat gambar berikut:

Buat Pekerjaan SQL untuk mengirim laporan database melalui email

Setelah paket dibuat, buat tugas SQL untuk melakukan aktivitas berikut:

  1. Jalankan paket SSIS untuk mengisi data dari semua server.
  2. Kirim laporan database melalui email ke tim yang dibutuhkan.

Dalam SQL Job, kita perlu membuat dua langkah. Langkah pertama akan mengeksekusi paket SSIS dan langkah kedua akan menjalankan prosedur mengirim email.

Untuk membuat SQL Job, Buka SSMS>> SQL Server Agent>> Klik kanan Tugas SQL Baru .

Oh, Pekerjaan Baru wizard, pilih Langkah opsi dan klik Tidak w. Dalam Langkah Pekerjaan Baru kotak dialog, di Langkah nama kotak teks, berikan nama yang diinginkan, pilih paket layanan Integrasi SQL Server dari Jenis kotak drop-down. Berikan lokasi paket SSIS di Teks Paket kotak. Lihat gambar berikut:

Klik OK untuk menutup Langkah Pekerjaan Baru .

Buat langkah pekerjaan lain yang akan menjalankan prosedur tersimpan untuk mengirimkan laporan melalui email. Ini menggunakan prosedur sistem untuk mengirim email. Paket SSIS menyalin informasi basis data di lokasi tertentu, karenanya menyediakan jalur lengkap file excel di @file_attachments parameter sp_send_dbmail prosedur tersimpan.

Untuk membuat prosedur tersimpan, jalankan kode berikut di DBATools database Server Pusat:

BUAT PROSEDUR Send_database_report AS MULAI MENYATAKAN @ProfileName VARCHAR(150) SET @ProfileName =(PILIH NAMA DARI msdb..sysmail_profile WHERE profile_id =7) DECLARE @lsMessage NVARCHAR(max) SET @lsMessage =' -family:Arial; font-size:10pt"> Halo Dukungan, Silakan temukan laporan musim panas database terlampir. ' + '

' 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 kotak drop-down. In the Command Text box, write the following code:

USE DBAtools Go EXEC Send_database_report

Lihat gambar berikut:

Click OK to close the wizard. Now to configure Job Schedule , select Schedules on the New Job jendela. 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. Lihat gambar berikut:

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. Lihat gambar berikut:

Ringkasan

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. Kompresi dan Pengaruhnya pada Performa

  2. Bug T-SQL, perangkap, dan praktik terbaik – fungsi jendela

  3. Membandingkan Kinerja Windows Azure VM, Bagian 1

  4. Cara Membuat Objek ResultSet yang Dapat Digulir dan Dapat Diperbarui di JDBC

  5. SQL Pilih Berbeda