È possibile ripristinare bak SQL sql e ridurre contemporaneamente il registro?


26

Abbiamo un file bak di un cliente che abbiamo trasferito ai nostri uffici degli sviluppatori per l'indagine sui problemi. Il backup è attualmente di 25 GB e il database ripristinato ha circa le stesse dimensioni, tuttavia è necessario ripristinarlo. Credo che ciò sia dovuto al fatto che il database è impostato per avere una dimensione del registro delle transazioni di 75 GB. Dopo aver ripristinato il database, possiamo ridurre il file di registro, ma c'è un modo per farlo nel ripristino?


3
Che sono a conoscenza del fatto che non è possibile modificare il database fino a quando non ha completato il ripristino.
Shawn Melton,

3
Sono stato nella stessa situazione e non vedo l'ora di rispondere. Solo per commentare, c'è un prodotto: il ripristino virtuale SQL di red-gate. Non l'ho mai usato, ma secondo il sito: "Il database montato richiede quasi zero spazio di archiviazione aggiuntivo sul file di backup".
Stanley Johns,

Risposte:


16

Non è possibile ridurre il backup come parte del processo di ripristino. Il database ripristinato deve apparire esattamente come il database di origine, con l'unica eccezione che è possibile modificare le lettere e le cartelle dell'unità.


34

Esiste un hack " non-mai-fare-questo-in-un-ambiente-live" che puoi usare dove lo spazio è limitato, ripristinando il file di registro in una cartella compressa. Tentare questo comprimendo una cartella esistente e ripristinando su di essa comporterà un errore, quindi è necessario imbrogliare con un collegamento simbolico.

  1. Crea una cartella compressa D:\LogCompressed\
  2. Crea un collegamento simbolico alla cartella compressa mklink /D /J D:\Log\ D:\LogCompressed\

  3. Ripristina il tuo database con il file ldf che punta a D:\Log\

  4. Riduci il file di registro a una dimensione appropriata

  5. Scollegare il database, spostare il file di registro in una cartella non compressa, allegare

È sporco, imbroglia, NON FARLO MAI IN DIRETTA , ma funziona. Il test rapido di un database appena creato con un file di registro da 32 MB mostra che occupa 330 KB sul disco quando viene compresso, decomprime la cartella e sulla dimensione del disco torna a 32 MB.


2
@Mark: questo trucco funziona, ma non è perfetto. Anche se il file di registro occupa molto meno spazio della sua dimensione reale, non è possibile ripristinare il database a meno che il disco non abbia davvero spazio libero tanto quanto la dimensione reale del database. Inoltre, durante il ripristino, la dimensione effettiva del file di registro scende lentamente dalla dimensione reale, è dolorosa. Tuttavia, è ancora un ottimo trucco. Grazie.
chenwq,

9

Credo che il motivo per cui il backup è di 25 GB e il database ripristinato sia di 100 GB non sia dovuto al registro delle transazioni. Qual è la mia ipotesi, i file del database hanno 100 GB di spazio allocato e ci sono 25 GB di dati effettivi nel database.

C'è una differenza tra lo spazio file del database allocato e lo spazio dati utilizzato . In questo caso, il primo è di 100 GB e il secondo è di 25 GB.


1
Il client alloca 75 GB al registro delle transazioni. Dopo il ripristino, al momento cambio l'allocazione del registro su 1 GB. Se possibile, vorrei ripristinare questo database su un server in cui le unità hanno meno di 100 GB di spazio libero. Senza dover ripristinare su un altro server, troncare, eseguire il backup e ripristinare nuovamente.
Adam Butler,

@Adam Butler, sarebbe possibile ripristinare temporaneamente sul primo server in modo da poter ridurre le dimensioni del file, quindi fare un backup della copia e ripristinarlo sul server di destinazione?
DForck42,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.