Por que usamos FILE = 1 em scripts para restaurar um banco de dados

13

Recentemente, quando me deparei com o script para restaurar um banco de dados, eu tenho uma dúvida sobre por que precisamos usar " FILE = 1 "? Não podemos restaurar um banco de dados sem essa declaração !? Basicamente, para que é usado?

Sunil Kumar Machineni
fonte

Respostas:

22

Você tem permissão para salvar mais de um backup em um arquivo de backup (por exemplo, dispositivo). A FILEcláusula permite acessar uma operação de backup específica quando houver várias opções para escolher no .bakarquivo.

Para obter mais informações sobre as várias opções do comando RESTORE , consulte a seguinte documentação do MSDN para argumentos RESTORE .

Se você olhar na seção Opções de conjunto de backup , encontrará:

ARQUIVO = { backup_set_file_number | @ backup_set_file_number }

Identifica o conjunto de backup a ser restaurado. Por exemplo, um backup_set_file_number de 1 indica o primeiro conjunto de backups na mídia de backup e um backup_set_file_number de 2 indica o segundo conjunto de backups. Você pode obter o backup_set_file_number de um conjunto de backups usando a instrução RESTORE HEADERONLY.

Quando não especificado, o padrão é 1, exceto RESTORE HEADERONLY; nesse caso, todos os conjuntos de backup no conjunto de mídias são processados. Para obter mais informações, consulte "Especificando um conjunto de backup", posteriormente neste tópico.

Importante
Esta opção FILE não está relacionada à opção FILE para especificar um arquivo de banco de dados, FILE = { logic_file_name_in_backup | @ nome_do_arquivo lógico_em_backup_var }.

Sim, você deve ser capaz de restaurar sem a FILE = 1como 1é a de qualquer maneira padrão. E se você tiver apenas um único conjunto de backup em um arquivo de backup, ele não deverá representar um problema.

Um exemplo para ajudar a ilustrar quando você usaria a FILEopção é o seguinte, que é o Exemplo B da página MSDN do comando RESTORE (vinculada acima). Ele mostra duas restaurações a partir de um único arquivo de backup: o primeiro RESTOREé o backup COMPLETO e o segundo RESTOREé o backup DIFFerential.

RESTORE DATABASE AdventureWorks2012
   FROM DISK = 'Z:\SQLServerBackups\AdventureWorks2012.bak'
   WITH FILE = 6
      NORECOVERY;
RESTORE DATABASE AdventureWorks2012
   FROM DISK = 'Z:\SQLServerBackups\AdventureWorks2012.bak'
   WITH FILE = 9
      RECOVERY;
Solomon Rutzky
fonte