Processo del backup

martedì 13 ottobre 2009 - 09.07

Blacky Profilo | Newbie

Ciao

Per effettuare un backup io effettuo queste operazioni (ho creato un programma che le fà ogni mattina).

1) Check consistenza DB e deframmentazione
2) Ricostruzione indici (anche se ne ho pochini)
3) BackUp del database

Mi dite se secondo voi sono nell'ordine giusto, se son fatti bene come comandi, o se manca qualcosa?


=======================================================================

DBCC CHECKDB(DB);

=======================================================================
USE DB;
GO
SET NOCOUNT ON;
DECLARE @objectid int;
DECLARE @indexid int;
DECLARE @partitioncount bigint;
DECLARE @schemaname nvarchar(130);
DECLARE @objectname nvarchar(130);
DECLARE @indexname nvarchar(130);
DECLARE @partitionnum bigint;
DECLARE @partitions bigint;
DECLARE @frag float;
DECLARE @command nvarchar(4000);
-- Conditionally select tables and indexes from the sys.dm_db_index_physical_stats function
-- and convert object and index IDs to names.
SELECT
object_id AS objectid,
index_id AS indexid,
partition_number AS partitionnum,
avg_fragmentation_in_percent AS frag
INTO #work_to_do
FROM sys.dm_db_index_physical_stats (DB_ID(), NULL, NULL , NULL, 'LIMITED')
WHERE avg_fragmentation_in_percent > 10.0 AND index_id > 0;

-- Declare the cursor for the list of partitions to be processed.
DECLARE partitions CURSOR FOR SELECT * FROM #work_to_do;

-- Open the cursor.
OPEN partitions;

-- Loop through the partitions.
WHILE (1=1)
BEGIN;
FETCH NEXT
FROM partitions
INTO @objectid, @indexid, @partitionnum, @frag;
IF @@FETCH_STATUS < 0 BREAK;
SELECT @objectname = QUOTENAME(o.name), @schemaname = QUOTENAME(s.name)
FROM sys.objects AS o
JOIN sys.schemas as s ON s.schema_id = o.schema_id
WHERE o.object_id = @objectid;
SELECT @indexname = QUOTENAME(name)
FROM sys.indexes
WHERE object_id = @objectid AND index_id = @indexid;
SELECT @partitioncount = count (*)
FROM sys.partitions
WHERE object_id = @objectid AND index_id = @indexid;

-- 30 is an arbitrary decision point at which to switch between reorganizing and rebuilding.
IF @frag < 30.0
SET @command = N'ALTER INDEX ' + @indexname + N' ON ' + @schemaname + N'.' + @objectname + N' REORGANIZE';
IF @frag >= 30.0
SET @command = N'ALTER INDEX ' + @indexname + N' ON ' + @schemaname + N'.' + @objectname + N' REBUILD';
IF @partitioncount > 1
SET @command = @command + N' PARTITION=' + CAST(@partitionnum AS nvarchar(10));
EXEC (@command);
PRINT N'Executed: ' + @command;
END;

-- Close and deallocate the cursor.
CLOSE partitions;
DEALLOCATE partitions;

-- Drop the temporary table.
DROP TABLE #work_to_do;
GO

=======================================================================
BACKUP DATABASE DB TO DBData;

=======================================================================

lbenaglia Profilo | Guru

>Per effettuare un backup io effettuo queste operazioni (ho creato
>un programma che le fà ogni mattina).
>
>1) Check consistenza DB e deframmentazione
>2) Ricostruzione indici (anche se ne ho pochini)
>3) BackUp del database
>
>Mi dite se secondo voi sono nell'ordine giusto, se son fatti
>bene come comandi, o se manca qualcosa?

Ciao Francesca,

il check della consistenza io lo sposterei dopo il backup, in questo modo se l'esito è positivo sei sicura di aver backuppato un db consistente e privo di errori.

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

Blacky Profilo | Newbie

Ciao Lorenzo, ma il check controlla solo oppure corregge anche se c'è qualche errore o problema?
Nel senso, devo aggiungere anche questa opzione? REPAIR_REBUILD

Quindi

DBCC CHECKDB <MIODB>
REPAIR_REBUILD
GO

Grazie ancora

lbenaglia Profilo | Guru

>Ciao Lorenzo, ma il check controlla solo oppure corregge anche
>se c'è qualche errore o problema?
Se non specifichi le opzioni REPAIR_ALLOW_DATA_LOSS | REPAIR_FAST | REPAIR_REBUILD l'analisi sarà in sola lettura.

>Nel senso, devo aggiungere anche questa opzione? REPAIR_REBUILD
Direi di no dato che a te interessa verificare se al termine del backup il db è in uno stato consistente. Nel caso non lo sia, con molta probabilità il backup contiene una copia inconsistente ed occorre quindi verificare se procedere con un tentativo di riparazione della base dati oppure ripristinare un precedente backup consistente.

>Grazie ancora
Prego.

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5