SqlServer一键复制数据库脚本

手册/FAQ (339) 2016-04-15 09:59:07

 

假定有两个Server:192.168.0.1和192.168.0.2,需要复制的数据库名为TestDB,现将该库由192.168.0.1复制到192.168.0.2,其中%source_database_backup_file_dir%为存放192.168.0.1上TestDB库备份文件的文件夹,%target_database_file_dir%为192.168.0.2上TestDB数据库文件所在的文件夹,BAT脚本如下:

  1. @echo off  

  2.   

  3. set source_server=192.168.0.1  

  4. set source_server_user=sa  

  5. set source_server_password=sa  

  6.   

  7. set target_server=192.168.0.2  

  8. set target_server_user=sa  

  9. set target_server_password=sa  

  10.   

  11. set database=TestDB  

  12.   

  13. set source_database_backup_file_dir=\\Systemname\ShareName\Path  

  14. set target_database_file_dir=\\Systemname\ShareName\Path  

  15.   

  16. echo Start to backup source database...  

  17. osql -S"%source_server%"  -U"%source_server_user%" -P"%source_server_password%" -n -h-1 -d"%database%" -Q"BACKUP DATABASE %database% TO DISK = '%source_database_backup_file_dir%\%database%.bak' WITH INIT;"  

  18.   

  19. echo Disconnect all existing connections of target database.  

  20. osql -S"%target_server%"  -U"%target_server_user%" -P"%target_server_password%" -Q"declare @i int declare cur cursor for select spid from sysprocesses where db_name(dbid)= '%database%' open cur fetch next from cur into @i while @@fetch_status=0 begin exec('kill '+@i) fetch next from cur into @i end close cur deallocate cur"  

  21.   

  22. echo Start to resotre target database from source database backup file...  

  23. osql -S"%target_server%"  -U"%target_server_user%" -P"%target_server_password%" -n -h-1 -d"Master" -Q"RESTORE DATABASE %database% FROM DISK = '%source_database_backup_file_dir%\%database%.bak' WITH REPLACE,MOVE '%database%' TO '%source_database_backup_file_dir%\%database%.mdf',MOVE '%database%_Log' TO '%source_database_backup_file_dir%\%database%_log.ldf';"  

  24.   

  25. echo DONE!!  

  26.   

  27. pause  

本脚本主要使用BACKUP命令为原库生成一个备份文件,然后使用RESTORE命令将备份文件恢复到目标库,从而实现数据库复制。

有两个细节说明一下:

1. BACKUP语句中的WITH INIT用于每次备份时覆盖原备份文件中的数据。

2. 由于两个Server都需要访问数据库备份文件 ,存放备份文件的文件夹一般要设置为"共享"文件夹。

 

THE END