2017-01-18 1 views
9

J'ai besoin de restaurer une grande base de données SQL Server sur une instance Linux Docker (https://hub.docker.com/r/microsoft/mssql-server-linux/)Restaurer la base de données SQL Server pour Linux Docker

Je me déplace mon fichier .bak à l'docker et l'exécution de cette commande en shell MSSQL:

RESTORE DATABASE gIMM_Brag FROM DISK = '/var/opt/mssql/backup/BackupFull8H_gIMM.bak' WITH MOVE '[gIMM].Data' T'/var/opt/mssql/data/gIMM.mdf', MOVE '[gIMM].Log' TO '/var/opt/mssql/data/gIMM.ldf', MOVE 'TraceabilityData' TO '/var/opt/mssql/data/gIMM.TraceData.mdf', MOVE 'TraceabilityIndexes' TO '/var/opt/mssql/data/gIMM.TraceIndex.mdf', MOVE 'KpiData' TO '/var/opt/mssql/data/gIMM.KpiData.mdf', MOVE 'KpiIndexes' TO '/var/opt/mssql/data/gIMM.KpiIndex.mdf' 

Je cartographie correctement tous les fichiers qui doivent et j'ai vraiment assez d'espace sur l'instance docker mais je reçois cette erreur:

Error: The backup or restore was aborted.

le même erreur se produit avec une version Windows de ce docker en fait ... Et comme ce n'est pas censé être une version Express, la taille de la base de données ne devrait pas être le problème ici.

Si quelqu'un a plus d'informations sur la cause de cette erreur!

Merci,

+0

Quelle est la taille de votre base de données et la version? Utilisez-vous In-Memory? –

+0

Où exactement vous essayez de restaurer des données, à l'image elle-même ou dans le conteneur? – Hrishi

Répondre

3

Quand j'ai eu ce problème, il est parce que la commande restore prenait assez longtemps pour MSSQL à temps (avec un message d'erreur totalement inutile). La spécification d'un délai d'attente long lors de la connexion a permis à la restauration de se terminer. par exemple

mssql -s localhost -p "<sa_password>" -t 36000000 -T 36000000 
4

Vous ne le mentionne pas, mais la chose qui m'a trompé en était que je ne copie pas le fichier BAK à mon exemple Docker.

Dans Terminal avec docker et votre conteneur MSSQL course ...

1) obtenir conteneur ID:
$docker inspect -f '{{.Id}}' <container_name>

2) Copiez le fichier BAK à docker exemple:
docker exec -i <container_id> bash -c 'cat > /var/opt/mssql/backup.bak' < '/source/path/backup.bak'

3) log en mssql:
mssql -u sa -p 'myPassword'

3) restore db: (vous pouvez le remplacer par votre script de restauration, bien que cela suffisait pour moi)
RESTORE DATABASE [MyDatabase] FROM DISK = N'/var/opt/mssql/backup.bak' WITH FILE = 1, NOUNLOAD, REPLACE, STATS = 5

+2

Pendant la restauration, je reçois: Erreur SQL [5133] [S0001]: La recherche de répertoire pour le fichier "c: \ Program Files \ Microsoft SQL Server \ MSSQL11.SQLEXPRESS \ MSSQL \ DATA \ database.mdf" a échoué avec le système d'exploitation erreur 2 (Le système ne trouve pas le fichier spécifié.). com.microsoft.sqlserver.jdbc.SQLServerException: recherche de répertoire pour le fichier «c: \ Program Files \ Microsoft SQL Server \ MSSQL11.SQLEXPRESS \ MSSQL \ DATA \ database.mdf» a échoué avec l'erreur du système d'exploitation 2 (le système ne peut pas trouve le fichier spécifié.). – TOUDIdel

+0

Avez-vous résolu le problème? Je reçois le même problème @TOUDIdel – bluesummers

+1

@TOUDIdel désolé, je ne pouvais pas reproduire votre erreur –