SQLShack

de SQL database integrity check is een van de meest cruciale en belangrijke taken van de database administrator. De database-integriteitstaak controleert de structurele integriteit en toewijzing van alle database-objecten en indexen. De integriteitscontroles kunnen worden uitgevoerd met het DBCC CheckDB Commando. Het CheckDB commando wordt gebruikt om de corruptie in de database te identificeren. De opdracht voert de volgende bewerkingen uit in de database.

  1. voert de DBCC-controletabel uit op elke tabel en weergave
  2. voert de DBCC-CHECKCATALOG uit op de databases
  3. voert de DBCC-CHECKALLOC uit op de databases
  4. valideert de gegevens van de service broker
  5. valideert de inhoud van geïndexeerde weergaven

u kunt DBCC CHECKDB (Transact-SQL) lezen voor meer informatie over het DBCC CHECKDB commando.

gewoonlijk maken DBA ‘ s aangepaste scripts om de corruptie in de databases te identificeren. Maar als u aan meerdere databases werkt, wordt het vervelend om de logs te bekijken die door het commando DBCC CheckDB zijn gegenereerd. Dus ik heb een SQL opgeslagen procedure die wordt uitgevoerd in alle databases, en als het enige consistentie fouten vindt, stuurt het de details naar het DBA-team.

in mijn vorige artikel, Automate SQL database backups met behulp van Windows Task Scheduler, had ik uitgelegd hoe we het proces kunnen automatiseren om een volledige en differentiële back-up van SQL database hersteld in SQL server express edition te genereren. Dit artikel legt uit hoe we de consistentiecontrole van de SQL-database die in SQL Server express edition is gemaakt, kunnen automatiseren. Om aan te tonen, heb ik hier een voorbeelddatabase gedownload. Ik heb SQL Server Express edition geïnstalleerd en de database hersteld met behulp van het volgende commando:

1
2
3
4
5
6
7

gebruik
GO
database herstellen vanaf DISK = N’C:\SQL Backup \ DemoCorruptMetadata2008R2.bak ‘
met FILE = 1,
verplaats N ‘Democorruptmetadata’naar N’ C:\Program bestanden\Microsoft SQL Server \ Mssql11.SQLEXPRESS \ MSSQL \ DATA \ DemoCorruptMetadata.MDF’,
verplaats N ‘Democorruptmetadata_log’naar N’ C:\Program bestanden\Microsoft SQL Server \ Mssql11.SQLEXPRESS \ MSSQL \ DATA \ DemoCorruptMetadata_log.ldf’,
zelfstandig naamwoord, statistieken = 5

zodra een database is hersteld, laten we het DBCC CheckDB commando uitvoeren om de fouten te bekijken.

1
2
3
4
5

set nocount on
NAAR
gebruik de master
NAAR
dbcc checkdb (DemoCorruptMetadata) met all_errormsgs, no_infomsgs

Consistentie fout van SQL database

Zoals je kunt zien in de bovenstaande afbeelding, de database is beschadigd, en de controle op consistentie opdracht heeft gerapporteerde fouten. Om de consistentiecontrole uit te voeren, heb ik een opgeslagen procedure aangemaakt die

  1. de consistentiecontrole uitvoert op alle SQL-databases, en als er consistentiefouten worden gevonden, voegt het deze fouten in een temp-tabel
  2. extraheer het bericht uit de temp-tabel en stuur de HTML-opgemaakte e-mail naar het DBA-team

de code van de opgeslagen procedure wordt hieronder weergegeven:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85

USE master
GO
CREATE PROCEDURE Sp_db_integrity_check
AS
BEGIN
DECLARE @DBName VARCHAR(150)
DECLARE @dbcccommand NVARCHAR(max)
DECLARE @DBcount INT
DECLARE @i INT = 0
CREATE TABLE #errormsgs
(
error INT NULL,
level INT NULL,
state INT NULL,
messagetext VARCHAR (7000) NULL,
repairlevel INT NULL,
status INT NULL,
dbid INT NULL,
dbfragid INT NULL,
objectid INT NULL,
indexid INT NULL,
partitionid INT NULL,
allocunitid INT NULL,
riddbid INT NULL,
ridpruid INT NULL,
INT NULL,
page INT NULL,
slot INT NULL,
refdbid INT NULL,
refpruid INT NULL,
reffile INT NULL,
refpage INT NULL,
refslot INT NULL,
allocation INT NULL,
)
CREATE TABLE #userdatabases
(
naam VARCHAR(500)
)
invoegen in # userdatabases
selecteer Naam
uit sys.databases
WAAR database_id > 4
SET @DBcount=(SELECT Count(1)
FROM #userdatabases)
WHILE ( @DBcount > @i )
BEGIN
INSTELLEN @DBName = (SELECT TOP 1 NAAM
FROM #userdatabases)
INSTELLEN @dbcccommand=’dbcc checkdb (‘ + @DBName
+ ‘) met no_infomsgs, all_errormsgs,tableresults’
INSERT INTO #errormsgs
EXEC (‘dbcc checkdb (‘ +@DBName +
‘) met no_infomsgs, all_errormsgs,tableresults’)
VERWIJDEREN VAN #userdatabases
WHERE NAME = @DBName
INSTELLEN @i=@i + 1
EINDE
DROP TABLE #userdatabases
EINDE
–selecteer MessageText van #errormsgs
VERKLAREN @onderworpen NVARCHAR(max)
VERKLAREN @tableHTML NVARCHAR(max)
INSTELLEN @subject = ‘Database Consistancy Controleren rapport voor-Server :’
+ @@servernaam
INSTELLEN @tableHTML =
‘ <html> <Inhoud> <style type=”text/css”> table {font-size:9.0 pt;font-family:verdana;text-align:left;} tr {text-align:left;} h3 { display: block; font-size: 15.0 pt; font-weight: bold; font-family: verdana; text-align: left; } </stijl> <H3>Overzicht van Database Consistancy Controleren op Server ‘
+ @@servernaam + ‘</H3>’ + N'<table border=”1″>’
+ N'<tr><th>MessageText</th><th>Corrupte Database</th></tr>’
+ Cast((SELECTEER Isnull(messagetext, “) ALS ‘TD’, “, Isnull(
Db_name(database-id), “) ALS ‘TD’, “, Isnull(repairlevel, “) ALS ‘TD’
, ” VAN #errormsgs VOOR xml-pad ( ’tr’ ), root) ALS NVARCHAR(
max))
+ N'</table> </html> < / Body>’
EXEC msdb..Sp_send_dbmail
@profile_name = ‘DBMailProfile’,
@ontvangers = ‘ni*********[email protected]’,
@subject = @onderworpen,
@belang = “Hoog”,
@body = @tableHTML,
@body_format = ‘HTML’;

Zoals u weet, de SQL Server Express edition biedt geen ondersteuning voor database-mail, maar u kunt de database-mail met behulp van T-SQL-query ‘ s. U kunt dit artikel, Database Mail configuration lezen in de SQL Server Express edition om het proces in detail te begrijpen.

de SQL Server Express-editie ondersteunt geen SQL Server-agents, dus gebruiken we de Windows-taakplattegrond. Windows schedular kan het batchbestand uitvoeren, dus ik heb een batchbestand gemaakt dat een opgeslagen procedure uitvoert met behulp van de sqlcmd-opdracht. De code van het batchbestand is de volgende.

1
sqlcmd-S Nisarg-PC \ SQLExpress-Q “execute sp_DB_Integrity_check” – d DBATools

Geef de opdracht in de teksteditor op en sla het bestand op als *.bat bestand. Laten we nu een taak maken met behulp van Windows task schedular. Open Configuratiescherm Open Administrator tools Open Taakplanner. Klik in het taakschema op een basistaak maken. Geef in het eerste scherm de naam van de taak en de beschrijving op.

standaardtaakscherm aanmaken

Maak een standaard taakscherm

de consistentiecontrole van de database moet elke week worden uitgevoerd, dus geef wekelijks op in het Taaktriggervenster.

taak startscherm

taak trigger scherm

het script moet elke zondag om 01:00 uur worden uitgevoerd, dus specificeer 01: 00: 00 in het tekstvak Start. De taak moet één keer per week worden uitgevoerd, dus geef 1 op in elk tekstvak herhalen. Selecteer zondag in de lijst van de dagen.

Configuratiescherm voor wekelijkse schema ' s

Weekly schedule configuration screen

we draaien een batch script om de database corruptie te controleren, dus kies de Start een programma optie op het actie scherm.

Taakactiescherm

taak actie scherm

in het startscherm, een programma scherm, Geef het volledige pad van het batch bestand. U kunt het bestand vinden door door de mappen te bladeren. In ons geval is het batchbestand gemaakt in C:\ DatabaseScripts, dus ik heb het volledige pad van het batchbestand opgegeven. Zorg ervoor dat de gebruiker die het schema heeft gemaakt, lees-schrijftoegang moet hebben in de map waarin het batchbestand is gemaakt. Klik op Volgende.

een programmascherm starten

Start een programma scherm

in het overzicht scherm kunt u de details van de gemaakte taak bekijken. Klik op Voltooien.

overzichtsscherm

overzicht scherm

u kunt de taak bekijken in taakplattegrondvensters. Laten we nu de geconfigureerde taak testen. Om dat te doen, klik met de rechtermuisknop op Controleer Database integriteit en klik op Uitvoeren. Als alternatief, Klik op de link met de naam uitvoeren van de rechter-pan.

takengeschiedenis weergeven

het consistentiecontroleproces begint.

DBCC CheckDB proces begint

het proces werd met succes voltooid. U kunt de details controleren op het tabblad Taakgeschiedenis van het taakschema.

taakuitvoeringsgeschiedenis

we hebben een beschadigde SQL-database hersteld, dus we hebben een e-mail ontvangen met de fouten in de consistentie van de database. De e-mail ziet eruit als de volgende afbeelding.

Consistentiefout e-mail

samenvatting

dit artikel legde uit hoe we databasecorruptie kunnen identificeren met behulp van een batchscript dat is gepland in het Windows-taakschema. Dit artikel kan nuttig zijn voor de entry-level database beheerders die willen automatiseren van de database onderhoudstaken van SQL database gemaakt of hersteld in SQL server express edition. In mijn volgende artikel, we zullen leren hoe we kunnen automatiseren van de index onderhoud van SQL database gemaakt in SQL Server express edition met behulp van Windows task scheduler. Blijf kijken!

  • auteur
  • recente berichten
Nisarg Upadhyay
Nisarg Upadhyay is een SQL Server Database Administrator en Microsoft certified professional die meer dan 8 jaar ervaring heeft met SQL Server administration en 2 jaar met Oracle 10g database administration.
hij heeft expertise op het gebied van database ontwerp, performance tuning, back-up en herstel, HA en DR setup, database migraties en upgrades. Hij heeft de B. Tech van Ganpat University afgerond. Hij is te bereiken op [email protected]

Nisarg Upadhyay
Laatste bericht door Nisarg Upadhyay (zie alle)
  • Hoe u tabellen verplaatsen naar een andere bestandsgroep van een SQL-database – December 14, 2021
  • het Configureren van ODBC-Stuurprogramma voor Oracle-19c – December 9, 2021
  • Configureren van een Gekoppelde Server tussen SQL Server en PostgreSQL met behulp van ODBC-stuurprogramma ‘ s – December 6, 2021

Write a Comment

Het e-mailadres wordt niet gepubliceerd.