Скопируйте базу данных SQL-сервера с помощью .bak

Я пытаюсь скопировать базу данных SQL Server в VBA (MS-ACCESS).

Итак, я получил этот запрос для создания .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  

затем я получил этот, чтобы восстановить базу данных

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

Они оба вызываются в основной форме при нажатии кнопки, как это

On Error GoTo Error
    Dim os As String

    lblWait.Visible = True
    Me.Repaint

    CurrentDb.Execute ("qryToBackupServer")
    CurrentDb.Execute ("qryToRestoreDataW7")


    MsgBox ("Data imported successfully")
    lblWait.Visible = False
    Exit Sub
Error:
        MsgBox Err.Description
        lblWait.Visible = False
        Exit Sub

Я думал, что это сработало, но я понял, что новые данные не импортируются. Поэтому я проверил, правильно ли создан .bak, и да, потому что, если я скопирую .bak на свой компьютер и восстановлю его с помощью студии управления SQL, он будет работать.

Так есть ли проблема с моим запросом на восстановление? Ошибки нет, но должно ли это занять 30 секунд, потому что, когда я скопировал .bak, это было 5go, и это заняло 5 минут?

Я подумал, может быть, база данных заблокирована, потому что я вызываю эти функции в Access с таблицами, которые связаны с этой базой данных, но я не получил никакой ошибки.

есть ли проблема, потому что я получаю .bak с другого сервера?

Спасибо


person Marc    schedule 01.05.2013    source источник


Ответы (1)


Я обнаружил, что размер файла .bak увеличивается каждый раз, когда я делаю резервную копию. Поэтому я удалил его и сделал другой. Было 33 000 ко вместо 4го...

Теперь резервная копия работает.

Итак, в VBA я удаляю файл, прежде чем делать резервную копию.

person Marc    schedule 01.05.2013
comment
Спасибо, я этого не знал. Это работает как шарм, и это более просто - person Marc; 01.05.2013