asp备份sql数据库

首先,你要这样来备份数据库:

SQL="backup database 数据库名 to disk='"&Server.MapPath("backup")&"\"&"backuptext.dat"&"' with INIT"

这样你的备份将覆盖原来的同名备份(如果有的话),否则备份将附加在原来的备份上,不仅文件越来越大,日后还原时还会发生各种问题。

其次,数据库在有用户连接时是不能恢复的。

所以你要备份的话,不能链接到你的数据库,要链接到master数据库,使用:

cnn.open "driver={SQL Server};Server=服务器名;uid=sa;pwd=;database=master"

再次,仅仅你不链接到数据库,但不能保证没有别人链接数据库,所以还要断开所有用户到数据库的连接,才能开始还原。可以使用下列语句来进行:

declare backup_cursor cursor global for select 'kill '+rtrim(spid) from master.dbo.sysprocesses where dbid=db_id('数据库名') exec sp_msforeach_worker '?'

所以,你的程序要改成这样:

1、备份
<%
SQL="backup database 数据库名 to disk='"&Server.MapPath("backup")&"\"&"backuptext.dat"&"' with INIT"
set cnn=Server.createobject("adodb.connection")
cnn.open "driver={SQL Server};Server=服务器名;uid=sa;pwd="
cnn.execute SQL
on error resume next
if err<>0 then
response.write "错误:"&err.Descripting
else
response.write "数据备份成功!"
end if
cnn.close
set cnn=nothing
%>

2、恢复
<%
aSQL="declare backup_cursor cursor global for select 'kill '+rtrim(spid) from master.dbo.sysprocesses where dbid=db_id('数据库名') exec sp_msforeach_worker '?'"

bSQL="Restore database 数据库名 from disk='"&Server.MapPath("backup")&"\"&"backuptext.dat"&"'"

set cnn=Server.createobject("adodb.connection")
cnn.open "driver={SQL Server};Server=服务器名;uid=sa;pwd=;database=master"
cnn.execute aSQL
cnn.execute bSQL
on error resume next
if err<>0 then
response.write "错误:"&err.Descripting
else
response.write "数据恢复成功!"
end if
cnn.close
set cnn=nothing
%>



文章来自: 本站原创
Tags:
评论: 0 | 查看次数: 7022