当前位置: 代码迷 >> PB >> 数据备份及恢复的有关问题
  详细解决方案

数据备份及恢复的有关问题

热度:22   发布时间:2016-04-29 09:46:47.0
数据备份及恢复的问题
我用的数据是SQL2000,在单机备份可以,但不能恢复!
如果数据库放到局域网的主机上时,那备份及恢复都不行!
请问如何备份及恢复局域网上的数据?
如下是我备份程序:
string ls_path,ls_use
sqlca.autocommit=true
string docname, named
integer value
value = GetFileSaveName("选择备份文件",docname, named, "doc","dat Files (*.dat),*.dat")
IF value <> 1 THEN RETURN
setpointer(hourglass!)
 ls_use='use df'
 execute immediate :ls_use;
ls_use="backup database df to disk= '"+docname+"' with format ,name='full backup of df/sql'"
 execute immediate :ls_use;
 sqlca.autocommit=false
 if sqlca.sqlcode>=0 then
messagebox('提示','数据库保存成功!')
else
messagebox('提示','数据库保存不成功!请重新再试!')
end if
setpointer(arrow!)


恢复程序:
 string ls_path,ls_use
 sqlca.autocommit=true
 string docname, named
integer value
value = GetFileopenName("选择所有恢复的文件",docname, named, "doc","dat Files (*.dat),*.dat")
IF value <> 1 THEN RETURN
if messagebox('提示','确认要恢复该文件?',question!,yesno!)<>1 then return 
setpointer(hourglass!)
  commit;  
  disconnect;  

ls_use="use master"
execute immediate :ls_use;
ls_use=" restore database df from disk= '"+docname+"' "
execute immediate :ls_use;
 sqlca.autocommit=false
 if sqlca.sqlcode>=0 then
messagebox('提示','数据库恢复成功!')
ls_use="use df "
execute immediate :ls_use;
else
messagebox('提示','数据库恢复不成功!。请先让其它用户退出本系统,并关闭打开的窗口,重新再试!')
end if
setpointer(arrow!)

------解决方案--------------------
SQL 2000备份/恢复是在服务器上进行的,因此,在远程做备份时要确保几项数据.
1,备份时,要先连接系统数据库master.
2,要确保备份用户数据的目标文件夹要能创建文件.
3,恢复时,要确保没有其他用户连接目标数据库.
....
------解决方案--------------------
恢复的问题
恢复的时候必须保证未有其他人员在使用数据库的,因为恢复是一种覆盖性操作;
恢复时你的事务应该是要连接到master数据库,在恢复前最好先检查一下是否有其他人在用,通过下面的语句可以做到
select count(a.spid) from master.dbo.sysprocessed a,master.dbo.sysdatabases b where a.dbid=b.dbid and b.name='你要恢复的数据库'
笑傲江湖 15:15:59
另外,恢复的时候是具体操作是由数据库服务器后台完成的,所以你恢复的时候指定的文件不是指定你机器上的,而要保证服务器上有那个文件

你只是发条命令,服务器去做,做完后再告诉你结果

所以数据库的备份和恢复程序一般都是限制到服务器上运行的,即使有些可能通过客户端备份的,也只是固定备份到服务器的指定目录,再把路径写到一张表中,恢复的时候选择相应的备份档案

备份的时候也是一样,如果你选择你本机的目录,服务器如果有对应的目录就能备份成功,如果没有的话就会失败,报设备不存在或写错误之类的提示,
  相关解决方案