Dela via


sqlmaint-verktyg

gäller för:SQL Server

Sqlmaint-verktyget utför en angiven uppsättning underhållsåtgärder på en eller flera databaser. Använd sqlmaint för att köra DBCC kontroller, säkerhetskopiera en databas och dess transaktionslogg, uppdatera statistik och återskapa index. Alla aktiviteter för databasunderhåll genererar en rapport som du kan skicka till en angiven textfil, HTML-fil eller ett e-postkonto. sqlmaint kör databasunderhållsplaner som skapats i tidigare versioner av SQL Server. Om du vill köra SQL Server-underhållsplaner från kommandotolken använder du dtexec-verktyget.

Viktigt!

Den här funktionen tas bort i en framtida version av SQL Server. Undvik att använda den här funktionen i nytt utvecklingsarbete och planera att ändra program som för närvarande använder den här funktionen. Använd funktionen för SQL Server-underhållsplan i stället. Mer information om underhållsplaner finns i Underhållsplaner.

Syntax

sqlmaint
[ -? ] |
[
     [ -S server_name [ \instance_name ] ]
     [ -U login_ID [ -P password ] ]
     {
          [ -D database_name | -PlanName name | -PlanID guid ]
          [ -Rpt text_file ]
          [ -To operator_name ]
          [ -HtmlRpt html_file [ -DelHtmlRpt <time_period> ] ]
          [ -RmUnusedSpace threshold_percentfree_percent ]
          [ -CkDB | -CkDBNoIdx ]
          [ -CkAl | -CkAlNoIdx ]
          [ -CkCat ]
          [ -UpdOptiStats sample_percent ]
          [ -RebldIdx free_space ]
          [ -SupportComputedColumn ]
          [ -WriteHistory ]
          [
               { -BkUpDB [ backup_path ] | -BkUpLog [ backup_path ] }
               { -BkUpMedia
                    { DISK [
                           [ -DelBkUps <time_period> ]
                           [ -CrBkSubDir ]
                           [ -UseDefDir ]
                          ]
                     | TAPE
                    }
               }
               [ -BkUpOnlyIfClean ]
               [ -VrfyBackup ]
          ]
     }
]
<time_period> ::=
number [ minutes | hours | days | weeks | months ]

Argumentpunkter

Avgränsa parametrarna och deras värden med ett blanksteg. Inkludera till exempel ett blanksteg mellan -S och server_name.

-?

Returnerar syntaxdiagrammet för sqlmaint. Använd den här parametern på egen hand.

-S server_name[\instance_name]

Anger målinstansen för SQL Server. Ange <server_name> för att ansluta till standardinstansen av SQL Server Database Engine på servern. Ange <server_name>\<instance_name> för att ansluta till en namngiven instans av databasmotorn på servern. Om du inte anger en server ansluter sqlmaint till standardinstansen av Databasmotorn på den lokala datorn.

-U login_ID

Anger vilket konto som ska användas när du ansluter till servern. Om du inte anger den här parametern försöker sqlmaint använda Windows-autentisering. Om login_ID innehåller specialtecken omger du det med dubbla citattecken ("), annars är de dubbla citattecknen valfria.

Viktigt!

Använd Windows-autentisering när det är möjligt.

-P lösenord

Anger lösenordet för login_ID. Den här parametern är endast giltig om du även anger parametern -U . Om lösenordet innehåller specialtecken omger du det inom dubbla citattecken. Annars är de dubbla citattecknen valfria.

Viktigt!

Lösenordet är inte maskerat. Använd Windows-autentisering när det är möjligt.

-D database_name

Anger namnet på databasen där underhållsåtgärden ska utföras. Om database_name innehåller specialtecken omger du det med dubbla citattecken. Annars är de dubbla citattecknen valfria.

- PlanName-namn

Anger namnet på en databasunderhållsplan som definierats med hjälp av guiden Databasunderhållsplan. Den enda information som sqlmaint använder från planen är listan över databaser i planen. Alla underhållsaktiviteter som du anger i de andra sqlmaint-parametrarna tillämpas på den här listan över databaser.

-PlanID guid

Anger den globalt unika identifieraren (GUID) för en databasunderhållsplan som definierats med hjälp av guiden Databasunderhållsplan. Den enda information som sqlmaint använder är listan över databaser i planen. Alla underhållsaktiviteter som du anger i de andra sqlmaint-parametrarna tillämpas på den här listan över databaser. Det här värdet måste matcha ett plan_id värde i msdb.dbo.sysdbmaintplans.

-Rpt text_file

Anger den fullständiga sökvägen och filnamnet för den genererade rapporten. Rapporten genereras också på skärmen. Rapporten underhåller versionsinformation genom att lägga till ett datum i filnamnet. Datumet genereras enligt följande, i slutet av filnamnet men före perioden, i formuläret _<yyyyMMddhhmm>. <yyyy> = år, <MM> = månad, <dd> = dag, <hh> = timme, <mm> = minut.

Om du kör verktyget klockan 10:23 den 1 december 1996, och det här är text_file-värdet:

C:\Program Files\Microsoft SQL Server\MSSQL\Backup\AdventureWorks2022_maint.rpt

Det genererade filnamnet är:

C:\Program Files\Microsoft SQL Server\MSSQL\Backup\AdventureWorks2022_maint_199612011023.rpt

Det fullständiga UNC-filnamnet (Universal Naming Convention) krävs för text_file när sqlmaint kommer åt en fjärrserver.

-Till operator_name

Anger den operator till vilken den genererade rapporten skickas via SQL Mail.

-HtmlRpt html_file

Anger den fullständiga sökvägen och namnet på filen som en HTML-rapport genereras till. sqlmaint genererar filnamnet genom att lägga till en sträng i formatet _<yyyyMMddhhmm> till filnamnet, precis som för parametern -Rpt .

Det fullständiga UNC-filnamnet krävs för html_file när sqlmaint kommer åt en fjärrserver.

-DelHtmlRpt <time_period>

Tar bort alla HTML-rapporter i rapportkatalogen om tidsintervallet efter att rapportfilen har skapats överskrider time_period. -DelHtmlRpt söker efter filer vars namn passar det mönster som genererats från parametern html_file . Om html_file är C:\Program Files\Microsoft SQL Server\MSSQL\Backup\AdventureWorks2022_maint.htm-DelHtmlRpt tar sqlmaint bort alla filer vars namn matchar mönstret C:\Program Files\Microsoft SQL Server\MSSQL\Backup\AdventureWorks2022_maint*.htm och som är äldre än den angivna time_period.

-RmUnusedSpace threshold_percent free_percent

Anger att outnyttjat utrymme tas bort från databasen som anges i -D. Det här alternativet är bara användbart för databaser som definieras för att växa automatiskt. Threshold_percent anger i megabyte den storlek som databasen måste nå innan sqlmaint försöker ta bort oanvänt datautrymme. Om databasen är mindre än threshold_percent vidtas ingen åtgärd. Free_percent anger hur mycket outnyttjat utrymme som måste finnas kvar i databasen, som anges som en procentandel av databasens slutliga storlek.

Om exempelvis en 200 MB-databas innehåller 100 MB data, innebär att ange 10 för free_percent att den slutliga storleken på databasen blir 110 MB. En databas expanderas inte om den är mindre än free_percent plus mängden data i databasen. Om en 108 MB-databas till exempel har 100 MB data expanderar inte databasen till 110 MB om du anger 10 för free_percent . den ligger kvar på 108 MB.

-CkDB | -CkDBNoIdx

Anger att en DBCC CHECKDB-instruktion , eller en DBCC CHECKDB -instruktion med NOINDEX alternativet, körs i databasen som anges i -D.

sqlmaint skriver en varning till text_file om databasen används när den körs.

-CkAl | -CkAlNoIdx

Anger att en DBCC CHECKALLOC-instruktion med NOINDEX alternativet körs i databasen som anges i -D.

-CkCat

Anger att en DBCC CHECKCATALOG-instruktion körs i databasen som anges i -D.

-UpdOptiStats sample_percent

Anger att följande instruktion körs på varje tabell i databasen:

UPDATE STATISTICS table WITH SAMPLE sample_percent PERCENT;

Om tabellerna innehåller beräknade kolumner måste du också ange -SupportedComputedColumn argumentet när du använder -UpdOptiStats.

Mer information finns i UPDATE STATISTICS.

-RebldIdx free_space

Anger att index på tabeller i måldatabasen ska återuppbyggas genom att använda procentvärdet free_space, vilket är motsatsen till fyllnadsfaktorn. Om free_space procentsats till exempel är 30 är fyllningsfaktorn 70. Om ett free_space procentvärde på 100 anges återskapas indexen med det ursprungliga fyllningsfaktorvärdet.

Om indexen finns i beräknade kolumner måste du också ange -SupportComputedColumn argumentet när du använder -RebldIdx.

-SupportBeräknadKolumn

Måste anges för att köra DBCC underhållskommandon med sqlmaint i beräknade kolumner.

-WriteHistory

Anger att en post görs i msdb.dbo.sysdbmaintplan_history för varje underhållsåtgärd som utförs av sqlmaint. Om -PlanName eller -PlanID anges, används ID:t för den angivna planen för posterna i sysdbmaintplan_history. Om -D anges görs posterna i sysdbmaintplan_history med nollor för plan-ID:t.

-BkUpDB [ backup_path ] | -BkUpLog [ backup_path ]

Anger en säkerhetskopieringsåtgärd. -BkUpDb säkerhetskopierar hela databasen. -BkUpLog säkerhetskopierar endast transaktionsloggen.

backup_path anger katalogen för säkerhetskopian. backup_path behövs inte om -UseDefDir också anges, och -UseDefDir åsidosätter backup_path om båda anges. Säkerhetskopian kan placeras i en katalog eller en bandenhetsadress (till exempel \\.\TAPE0). Filnamnet för en databassäkerhetskopia genereras automatiskt enligt följande:

dbname_db_yyyyMMddhhmm.BAK

Where:

  • <dbname> är namnet på databasen som säkerhetskopieras.
  • <yyyyMMddhhmm> är tiden för säkerhetskopieringsåtgärden med <yyyy> = år, <MM> = månad, <dd> = dag, <hh> = timme och <mm> = minut.

Filnamnet för en transaktionssäkerhetskopia genereras automatiskt med ett liknande format:

dbname_log_yyyymmddhhmm.BAK

Om du använder parametern -BkUpDB måste du också ange mediet med hjälp av parametern -BkUpMedia .

-BkUpMedia

Anger medietypen för säkerhetskopian, antingen DISK eller TAPE.

DISK

Anger att säkerhetskopieringsmediet är disk.

-DelBkUps <time_period>

För disksäkerhetskopior anger att alla säkerhetskopior i säkerhetskopieringskatalogen tas bort om tidsintervallet efter att säkerhetskopieringen har skapats överskrider time_period.

-CrBkSubDir

För disksäkerhetskopior anger att en underkatalog skapas i katalogen backup_path eller i standardkatalogen för säkerhetskopiering om -UseDefDir den också anges. Namnet på underkatalogen genereras från databasnamnet som anges i -D. -CrBkSubDir erbjuder ett enkelt sätt att placera alla säkerhetskopior för olika databaser i separata underkataloger utan att behöva ändra parametern backup_path .

-UseDefDir

För disksäkerhetskopior anger att säkerhetskopieringsfilen skapas i standardkatalogen för säkerhetskopiering. UseDefDir åsidosätter backup_path om båda anges. Med en standardinställning för SQL Server är C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\Backupstandardkatalogen för säkerhetskopiering .

BAND

Anger att säkerhetskopieringsmediet är band.

-BkUpOnlyIfClean

Anger att säkerhetskopieringen endast sker om de angivna -Ck kontrollerna inte hittar problem med data. Underhållsåtgärder körs i samma sekvens som de visas i kommandotolken. Ange parametrarna -CkDB, -CkDBNoIdx, -CkAl, -CkAlNoIdx, -CkTxtAleller -CkCat före parametrarna -BkUpDB eller -BkUpLog om du också ska ange -BkUpOnlyIfClean. Om du inte anger dessa parametrar sker säkerhetskopieringen oavsett om kontrollen rapporterar problem eller inte.

-VrfyBackup

Anger att RESTORE VERIFYONLY körs på säkerhetskopian när den har slutförts.

number [ minuter | timmar | dag | veckor | månader ]

Anger det tidsintervall som används för att avgöra om en rapport eller säkerhetskopia är tillräckligt gammal för att tas bort. talet är ett heltal följt (utan utrymme) av en tidsenhet. Giltiga exempel:

  • 12weeks
  • 3months
  • 15days

Om du bara anger nummer är weeksstandarddatumdelen .

Anmärkningar

Sqlmaint-verktyget utför underhållsåtgärder på en eller flera databaser. Om du anger -Dutför verktyget de åtgärder som anges i de återstående växlarna endast på den angivna databasen. Om du anger -PlanName eller -PlanIDär den enda information som sqlmaint hämtar från den angivna underhållsplanen listan över databaser i planen. Alla åtgärder som anges i de återstående sqlmaint-parametrarna tillämpas på varje databas i listan som hämtas från planen. Sqlmaint-verktyget tillämpar inte någon av underhållsaktiviteterna som definierats i själva planen.

Sqlmaint-verktyget returnerar 0 om det körs korrekt eller 1 om det misslyckas. Fel rapporteras om:

  • Någon av underhållsåtgärderna misslyckas.

  • Kontrollerna -CkDB, -CkDBNoIdx, -CkAl, -CkAlNoIdx, -CkTxtAleller -CkCat hittar problem med data.

  • Ett allmänt fel påträffas.

Behörigheter

Alla Windows-användare med Läs- och körbehörighet på sqlmaint.exe kan köra sqlmaint. Som standard sqlmaint.exe lagras i <X>:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER1\MSSQL\Binn mappen. Dessutom måste den SQL Server-inloggning som du anger med -login_ID ha de SQL Server-behörigheter som krävs för att utföra den angivna åtgärden. Om du använder Windows-autentisering för att ansluta till SQL Server måste SQL Server-inloggningen som mappas till den autentiserade Windows-användaren ha de SQL Server-behörigheter som krävs för att utföra den angivna åtgärden.

Till exempel kräver användning av -BkUpDB behörighet för att köra BACKUP-instruktionen. Och att använda -UpdOptiStats argumentet kräver behörighet att köra -instruktionen UPDATE STATISTICS . Mer information finns i Behörigheter (databasmotor).

Exempel

A. Utföra DBCC-kontroller på en databas

Det här exemplet kör DBCC kontroller mot en databas.

sqlmaint -S MyServer -D AdventureWorks2022 -CkDB -CkAl -CkCat -Rpt C:\MyReports\AdvWks_chk.rpt

B. Uppdatera statistik

I det här exemplet uppdateras statistiken med hjälp av ett urval på 15% i alla databaser i en strategi. Alla databaser som når 110 MB krymps till att bara ha 10% ledigt utrymme.

sqlmaint -S MyServer -PlanName MyUserDBPlan -UpdOptiStats 15 -RmUnusedSpace 110 10

C. Säkerhetskopiera alla databaser

Det här exemplet säkerhetskopierar alla databaser i en plan till deras enskilda underkataloger med hjälp av standardkatalogen <X>:\Program Files\Microsoft SQL Server\MSSQLl13.MSSQLSERVER\MSSQL\Backup . Den tar också bort säkerhetskopior som är äldre än två veckor.

sqlmaint -S MyServer -PlanName MyUserDBPlan -BkUpDB -BkUpMedia DISK -UseDefDir -CrBkSubDir -DelBkUps 2weeks

D. Göra en säkerhetskopia av en databas

Det här exemplet säkerhetskopierar en enkel databas till standardkatalogen <X>:\Program Files\Microsoft SQL Server\MSSQLl13.MSSQLSERVER\MSSQL\Backup .

sqlmaint -S MyServer -BkUpDB -BkUpMedia DISK -UseDefDir