<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Mauro Dalfreddo &#187; Backup</title>
	<atom:link href="http://www.maurodalfreddo.it/archives/tag/backup/feed" rel="self" type="application/rss+xml" />
	<link>http://www.maurodalfreddo.it</link>
	<description>My work, my life... my Blog</description>
	<lastBuildDate>Thu, 24 Jun 2010 12:10:20 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Storia di una catastrofe evitata&#8230; per un soffio</title>
		<link>http://www.maurodalfreddo.it/archives/75/storia-di-una-catastrofe-evitata-per-un-soffio</link>
		<comments>http://www.maurodalfreddo.it/archives/75/storia-di-una-catastrofe-evitata-per-un-soffio#comments</comments>
		<pubDate>Sat, 10 Jan 2009 11:00:35 +0000</pubDate>
		<dc:creator>Mauro Dalfreddo</dc:creator>
				<category><![CDATA[Hardware]]></category>
		<category><![CDATA[Pensieri]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Backup]]></category>
		<category><![CDATA[Data recovery]]></category>
		<category><![CDATA[Raid]]></category>

		<guid isPermaLink="false">http://www.maurodalfreddo.it/?p=75</guid>
		<description><![CDATA[Esperienza diretta dell'utilizzo di un disco esterno con tecnologia RAID, della copia massiva di enormi quantità di dati e del recovery dei dati di un disco illeggibile]]></description>
			<content:encoded><![CDATA[<p><em>Chi predica bene razzola male</em>, recita il proverbio. Ho sempre sostenuto l&#8217;esigenza di backup frequenti dei dati di business o comunque importanti.</p>
<p style="text-align: left;"><img class="size-thumbnail wp-image-77 alignleft" title="lacie250" src="http://www.maurodalfreddo.it/wp-content/uploads/2009/01/lacie250-150x104.jpg" alt="lacie250" width="150" height="104" align="left" />Custodivo la maggior parte dei dati sul mio buon vecchio (3 anni oramai) LACIE, un disco esterno USB da 250 GB. Solitamente faccio backup frequenti per i files di progetto e le fotografie digitali su DVD-ROM, ma nulla per quanto riguarda i montaggi dei filmati AVI, essendo questi di dimensioni spropositate: 50-60 GB complessivamente tra i files originali scaricati dalla videocamera digitale JVC, il montato, i files di contorno e i files temporanei&#8230; D&#8217;altronde per backuppare tutto ciò ci vorrebbe un&#8217;unità nastro o un altro disco fisso; e poi i tempi di backup non sarebbero proprio istantanei&#8230;</p>
<p style="text-align: left;"><img class="size-thumbnail wp-image-78 alignleft" title="tb32-raid1" src="http://www.maurodalfreddo.it/wp-content/uploads/2009/01/tb32-raid1-150x142.jpg" alt="tb32-raid1" width="150" height="142" align="left" />E la perdita dei dati a causa della rottura del disco è per me in generale una cosa <strong>tremenda</strong>!</p>
<div class="mceTemp"> Così, per <em>razzolare bene</em> ed evitare la perdita dei suddetti montaggi video, ho acquistato un&#8217;unità esterna che implementasse la tecnologia <a href="http://it.wikipedia.org/wiki/RAID" target="_blank">RAID 1</a>, ovvero la copia real-time dei dati (a livello di byte) tra due dischi. In questo modo, pur rimanendo la problematica del backup, ho aumentato l&#8217;integrità dei dati e la tolleranza ai guasti del disco.</div>
<p style="text-align: left;">
<div class="mceTemp">Ho acquistato un <a href="http://www.mapower.com/Product.asp?CateID=146&amp;LineID=10" target="_blank">Mapower TB32</a>, cioè un&#8217;unità esterna che espone al Sistema Operativo un unico disco (il mirror), mentre invece internamente ci sono 2 dischi SATA che lavorano in parallelo. La configurazione è semplice e viene effettuata solo in hardware tramite un jumper e lo stato dei  dischi è visualizzato tramite i led sul pannello frontale. Le connessioni esterne sono USB ed eSATA.</div>
<p style="text-align: left;">
<div class="mceTemp">La <em>sceneggiatura</em> (alla <a href="http://www.maurodalfreddo.it/archives/category/ralph-supermaxieroe" target="_self">Bill Maxwell</a>) prevedeva quindi la copia dei dati tra le due unità USB. E la copia di 200 GB  non è una cosa da farsi con Windows Explorer, che è estremamente lento ed in caso di errori si ferma a metà.</div>
<p style="text-align: left;">
<div class="mceTemp">Ho utilizzato invece <a href="http://killprog.narod.ru/killcopye.html" target="_blank">Killcopy</a>, un programma freeware che accellera la copia tra files sfruttando parallellismo e grandi buffer di memoria; inoltre può effettuare una verifica dei bytes scritti (utile nelle copie in rete), riservare lo spazio prima della copia effettiva (per ridurre la frammentazione del file) ed essere utilizzato dalla command line.  Cito brevemente  <a href="http://www.codesector.com/teracopy.php" target="_blank">Teracopy</a>, un altro programma con le stesse caratteristiche, disponibile gratuitamente per usi non commerciali.</div>
<p style="text-align: left;">
<div class="mceTemp">E nel bel mezzo della copia massiva, dopo un centinaio di GB copiati,  ecco comparire i primi problemi: errori CRC, dovuti probabilmente a settori danneggiati o illeggibili&#8230; Non mi preoccupavo, finché questi comparivano su alcuni file thumb.db o su qualche foto già backuppata; mi sono seriamente preoccupato quando, ad un certo punto è comparso il popup di alert <em>Disco non inizializzato, formattare il disco!</em></div>
<div class="mceTemp">Ovviamente non ho seguito il suggerimento di Windows, e mi sono buttato freneticamente nell&#8217;attività di data recovery.</div>
<p style="text-align: left;">
<div class="mceTemp">Il disco veniva riconosciuto tra le periferiche rimuovibili, la partizione del disco veniva riconosciuta dal Sistema come RAW, non più come NTFS, e questo significava che si era danneggiata l&#8217;area del disco dove risiedeva la <a href="http://www.ntfs.com/ntfs-mft.htm" target="_blank">MFT</a>, quindi non l&#8217;elettronica o le meccaniche del disco.</div>
<p style="text-align: left;">
<div class="mceTemp">Tutto sommato la situazione non era cosè catastrofica: quello che mi interessava veramente l&#8217;avevo già copiato e poi avevo alcuni backup delle foto e del software sviluppato; non mi ricordavo se mancava ancora qualche file&#8230;</div>
<p style="text-align: left;">
<div class="mceTemp">Alla fine ho utilizzato <a href="http://www.runtime.org/data-recovery-software.htm" target="_blank">GetDataBack for NTFS</a>, un eccellente programma commerciale per il recupero dei dati: di fatto analizza i settori del disco alla ricerca di record e pezzi di directory; poi permette il salvataggio dell&#8217;indice così ricostruito su un file, in modo tale da poter accedere velocemente ai dati del disco anche in un secondo momento senza dover ripetere l&#8217;analisi. </div>
<p style="text-align: left;">
<div class="mceTemp">Alla fine ritengo di aver recuperato il 99% dei dati presenti sul disco USB, e comunque il 100% di ciò che mi interessava veramente.</div>
<p style="text-align: left;">
<div class="mceTemp">Una storia comunque finita bene, anche se mi ha fatto sudare freddo perdendo un po&#8217;di tempo durante il week-end, e che mi ha dato ragione sull&#8217;importanza delle politiche di backup e salvaguardia dei dati per mezzo della tecnologia Raid.</div>
]]></content:encoded>
			<wfw:commentRss>http://www.maurodalfreddo.it/archives/75/storia-di-una-catastrofe-evitata-per-un-soffio/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Backup automatizzato dei databases</title>
		<link>http://www.maurodalfreddo.it/archives/56/backup-automatizzato-dei-databases</link>
		<comments>http://www.maurodalfreddo.it/archives/56/backup-automatizzato-dei-databases#comments</comments>
		<pubDate>Tue, 20 May 2008 10:00:22 +0000</pubDate>
		<dc:creator>Mauro Dalfreddo</dc:creator>
				<category><![CDATA[SQL Server]]></category>
		<category><![CDATA[Backup]]></category>

		<guid isPermaLink="false">http://www.maurodalfreddo.it/?p=56</guid>
		<description><![CDATA[SQL Server: come backuppare tutti i DB presenti e futuri dell'istanza]]></description>
			<content:encoded><![CDATA[<p>Posto di seguito un semplice script per effettuare il backup di tutti i database (tranne il tempdb) presenti in un&#8217;istanza di SQL Server. L&#8217;ho implementato su un&#8217;istanza SQL Server 2005 a 64bit, ma funziona anche per le versioni precedenti come SQL2000 e sul nuovissimo SQL2008.</p>
<p>Backuppare i backup in un ambiente di produzione è un esigenza indiscutibile; in questo caso la tipologia di backup prescelta è quella full, che può essere tranquillamente utilizzata per DB di piccole e medie dimensioni, ma che può essere modificata per esigenze diverse. I backup vengono salvati nella cartella C:\BACKUP\SQL\.</p>
<p>Da notare che un backup automatizzato tramite script di tutti i DB presenti sull&#8217;istanza minimizza sicuramente l&#8217;intervento amministrativo.</p>
<pre>DECLARE @dbid int
DECLARE @dbname varchar(100)
DECLARE @sql varchar(1000)</pre>
<pre>DECLARE curs CURSOR LOCAL FORWARD_ONLY FOR
select database_id, [name] from msdb.sys.databases where name &lt;&gt; ''tempdb''
OPEN curs
FETCH NEXT FROM curs INTO @dbid, @dbname
WHILE @@FETCH_STATUS = 0
BEGIN</pre>
<pre>SET @sql = ''BACKUP DATABASE [''+@dbname+''] TO </pre>
<pre>DISK = N''''C:\BACKUP\SQL\''+@dbname+''.bak''''
WITH NOFORMAT, INIT,  NAME = N''''''+@dbname+''-Full Database Backup'''',
SKIP, NOREWIND, NOUNLOAD,  STATS = 10''</pre>
<pre>RAISERROR(N''Executing... %s'',2,-1,@sql)
EXEC( @sql )
FETCH NEXT FROM curs INTO @dbid, @dbname
END</pre>
<p><span id="more-56"></span></p>
<p>Lo script può facilmente essere integrato in un JOB e schedulato ogni notte. Di seguito riporto l&#8217;intero script per creare il JOB, lo STEP TSQL e la SCHEDULAZIONE relativa; ho evidenziato il codice precedente presente proprio nella creazione dello Step. Faccio notare che tutto l&#8217;output dello script viene appeso nel file C:\BACKUP\SQL\history.txt a mo&#8217; di log.</p>
<pre>USE [msdb]
GO</pre>
<pre>BEGIN TRANSACTION
DECLARE @ReturnCode INT
SELECT @ReturnCode = 0</pre>
<pre>IF NOT EXISTS (SELECT name FROM msdb.dbo.syscategories
WHERE name=N'[Uncategorized (Local)]' AND category_class=1)
BEGIN
EXEC @ReturnCode = msdb.dbo.sp_add_category
  @class=N'JOB',
  @type=N'LOCAL',
  @name=N'[Uncategorized (Local)]'
IF (@@ERROR &lt;&gt; 0 OR @ReturnCode &lt;&gt; 0) GOTO QuitWithRollback</pre>
<pre>END</pre>
<pre>DECLARE @jobId BINARY(16)
EXEC @ReturnCode =  msdb.dbo.sp_add_job
  @job_name=N'BACKUP FULL DB (Tutti i DB definiti sul questa istanza)',
  @enabled=1,
  @notify_level_eventlog=0,
  @notify_level_email=0,
  @notify_level_netsend=0,
  @notify_level_page=0,
  @delete_level=0,
  @description=N'Script per eseguire il backup FULL di tutti i database',
  @category_name=N'[Uncategorized (Local)]',
  @owner_login_name=N'sa', @job_id = @jobId OUTPUT

IF (@@ERROR &lt;&gt; 0 OR @ReturnCode &lt;&gt; 0) GOTO QuitWithRollback</pre>
<pre>EXEC @ReturnCode = msdb.dbo.sp_add_jobstep
  @job_id=@jobId,
  @step_name=N'LIST AND BACKUP ALL DATABASES',
  @step_id=1,
  @cmdexec_success_code=0,
  @on_success_action=1,
  @on_success_step_id=0,
  @on_fail_action=1,
  @on_fail_step_id=0,
  @retry_attempts=0,
  @retry_interval=0,
  @os_run_priority=0, @subsystem=N'TSQL',
  @command=N'
<span style="color: #339966;">DECLARE @dbid int
DECLARE @dbname varchar(100)
DECLARE @sql varchar(1000)</span></pre>
<pre><span style="color: #339966;">DECLARE curs CURSOR LOCAL FORWARD_ONLY FOR
select database_id, [name] from msdb.sys.databases where name &lt;&gt; ''tempdb''
OPEN curs
FETCH NEXT FROM curs INTO @dbid, @dbname
WHILE @@FETCH_STATUS = 0
BEGIN</span></pre>
<pre><span style="color: #339966;">SET @sql = ''BACKUP DATABASE [''+@dbname+'']
TO  DISK = N''''C:\BACKUP\SQL\''+@dbname+''.bak''''
WITH NOFORMAT, INIT,  NAME = N''''''+@dbname+''-Full Database Backup'''',
SKIP, NOREWIND, NOUNLOAD,  STATS = 10''</span></pre>
<pre><span style="color: #339966;">RAISERROR(N''Executing... %s'',2,-1,@sql)
EXEC( @sql )
FETCH NEXT FROM curs INTO @dbid, @dbname
END</span></pre>
<pre>',
  @database_name=N'msdb',
  @output_file_name=N'C:\BACKUP\SQL\history.txt',
  @flags=6
IF (@@ERROR &lt;&gt; 0 OR @ReturnCode &lt;&gt; 0) GOTO QuitWithRollback
EXEC @ReturnCode = msdb.dbo.sp_update_job @job_id = @jobId, @start_step_id = 1
IF (@@ERROR &lt;&gt; 0 OR @ReturnCode &lt;&gt; 0) GOTO QuitWithRollback
EXEC @ReturnCode = msdb.dbo.sp_add_jobschedule
  @job_id=@jobId,
  @name=N'Ogni notte',
  @enabled=1,
  @freq_type=4,
  @freq_interval=1,
  @freq_subday_type=8,
  @freq_subday_interval=23,
  @freq_relative_interval=0,
  @freq_recurrence_factor=0,
  @active_start_date=20080506,
  @active_end_date=99991231,
  @active_start_time=20000,
  @active_end_time=235959

IF (@@ERROR &lt;&gt; 0 OR @ReturnCode &lt;&gt; 0) GOTO QuitWithRollback
EXEC @ReturnCode = msdb.dbo.sp_add_jobserver
        @job_id = @jobId, @server_name = N'(local)'
IF (@@ERROR &lt;&gt; 0 OR @ReturnCode &lt;&gt; 0) GOTO QuitWithRollback
COMMIT TRANSACTION
GOTO EndSave
QuitWithRollback:
    IF (@@TRANCOUNT &gt; 0) ROLLBACK TRANSACTION
EndSave:</pre>
<p>Il codice completo di <a href="http://www.maurodalfreddo.it/wp-content/uploads/2008/05/backup_automatizzato.zip">backup_automatizzato dei DB di un&#8217;istanza SQL Server</a> è scaricabile a questo link e faclimente  utilizzabile con copia e incolla in SQL Management Studio.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.maurodalfreddo.it/archives/56/backup-automatizzato-dei-databases/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
