2013-05-01 13 views
0

J'essaie de copier une base de données SQL Server dans VBA (MS-ACCESS).Copier la base de données du serveur SQL avec .bak

J'ai eu cette requête pour créer la .bak

DECLARE @name VARCHAR(50) -- database name 
DECLARE @path VARCHAR(256) -- path for backup files 
DECLARE @fileName VARCHAR(256) -- filename for backup 
DECLARE @fileDate VARCHAR(20) -- used for file name 


-- specify database backup directory 
SET @path = 'D:\Backup\' 


-- specify filename format 
SELECT @fileDate = CONVERT(VARCHAR(20),GETDATE(),112) 


DECLARE db_cursor CURSOR FOR 
SELECT name 
FROM master.dbo.sysdatabases 
WHERE name NOT IN ('master','model','msdb','tempdb') -- exclude these databases 


OPEN db_cursor 
FETCH NEXT FROM db_cursor INTO @name 


WHILE @@FETCH_STATUS = 0 
BEGIN 
     SET @fileName = @path + @name + '.BAK' 
     BACKUP DATABASE @name TO DISK = @fileName 


     FETCH NEXT FROM db_cursor INTO @name 
END 


CLOSE db_cursor 
DEALLOCATE db_cursor 

alors je suis celui-ci pour restaurer la base de données

RESTORE DATABASE SMD 
FROM DISK='\\SRV_FILESMTL\SMD\SMD.bak' 
WITH 
MOVE 'smd' TO 'c:\Program Files\Microsoft SQL Server\MSSQL11.SQLEXPRESS\MSSQL\DATA\SMD.mdf', 
MOVE 'smd_log' TO 'c:\Program Files\Microsoft SQL Server\MSSQL11.SQLEXPRESS\MSSQL\DATA\SMD_log.ldf', 
REPLACE 

Ils sont tous deux appelés sous la forme principale sur un bouton comme cliquez Je pensais que cela fonctionnait, mais j'ai réalisé que les nouvelles données ne sont pas importées. J'ai donc vérifié si le .bak est créé correctement et oui car si je copie le .bak sur mon ordinateur et le restaure en utilisant SQL Management studio, cela fonctionne.

Y a-t-il un problème avec ma requête à restaurer? Il n'y a pas d'erreur, mais est-ce censé prendre 30 secondes parce que quand j'ai copié le .bak, c'était 5go et ça a pris 5 minutes? Je pensais que peut-être la base de données est verrouillée parce que j'appelle ces fonctions dans Access avec des tables qui sont liées à cette base de données, mais je n'ai eu aucune erreur.

Y at-il un problème parce que j'obtiens le .bak d'un autre serveur?

Merci

Répondre

2

j'ai découvert que la taille du fichier .bak augmentait chaque fois que je fais une sauvegarde. Je l'ai donc supprimé et j'en ai fait un autre. C'était 33 000 ko au lieu de 4go ...

Maintenant, la sauvegarde fonctionne.

Donc, dans VBA, je supprime le fichier avant de faire la sauvegarde.

+1

... ou vous pouvez ajouter 'WITH INIT' à vos commandes' BACKUP'. –

+0

Merci, je ne le savais pas. Ça fonctionne comme un charme et c'est plus simple – Marc

Questions connexes