vfp sql server 进行备份恢复.docx
- 文档编号:12591180
- 上传时间:2023-04-20
- 格式:DOCX
- 页数:32
- 大小:27.65KB
vfp sql server 进行备份恢复.docx
《vfp sql server 进行备份恢复.docx》由会员分享,可在线阅读,更多相关《vfp sql server 进行备份恢复.docx(32页珍藏版)》请在冰豆网上搜索。
vfpsqlserver进行备份恢复
主 题:
VFP+SQLServer2000怎样进行数据库备份和恢复?
作 者:
itzhiren
等 级:
信誉值:
100
所属社区:
其他数据库开发VFP
问题点数:
20
回复次数:
26
发表时间:
2005-7-2611:
10:
07
VFP+SQLServer2000怎样进行数据库备份和恢复?
我看过myf1上的一篇帖子,但是看不太明白,感觉太麻烦了,请问各位高手,VFP有没有什么备份的命令之类的
怎样进行备份与恢复?
westbullswestbulls信誉:
1002005-7-2611:
52:
16得分:
0
可以调用SQLSERVER自己的命令来备份和还原数据库
=sqlexec(cnn,"backupdatabaselibtodisk='c:
\lib.dat'")
=sqlexec(cnn,"restoredatabaselibfromdisk='c:
\lib.dat'")
但是备份还原的文件只能够是服务器上的,如果要备份到本地或者还原本地的文件,可能只有采用映射网络驱动器的方法了。
Top
itzhirenitzhiren信誉:
1002005-7-2612:
24:
22得分:
0
怎样映射?
Top
westbullswestbulls信誉:
1002005-7-2612:
48:
50得分:
5
1.在服务器上共享一个目录,比如f:
\data
2.在网上邻居打开你的服务器,找到f:
\data,占击工具栏上的映射网络驱动器,比如k:
3.上现语句改为
=sqlexec(cnn,"backupdatabaselibtodisk='f:
\data\lib.dat'")
=sqlexec(cnn,"restoredatabaselibfromdisk='f:
\data\lib.dat'")
4.你可以在你的k:
盘上操作你的备份及恢复文件,实际上是服务器上的f:
\data目录.
不过这种做法按全性比较低
Top
apple_8180十豆三信誉:
3052005-7-2614:
36:
52得分:
15
转帖:
在VFP里操作和管理SQLSERVER(介绍SQL-DMO)
(1)
在论坛混了这么多年,看到的一个很明显的趋势是,用VFP和SQLSERVER来做系统的网友越来越多。
怎么从VFP里来操作或者管理SQLSERVER也成为很多人关心的问题。
对SQLSERVER的数据操作,可以用视图,SPT或者ADO来做,但对服务器本身的管理,似乎只有用SPT来发送一些命令了。
其实,微软为客户端操作SQLSERVER开发了一套完整的工具,这就是SQL-DMO(DistributedManagementObjects).这是一套COM组件,可以在各种语言里使用,VFP里自然也可以用了。
我准备花点时间,写些这方面的介绍文章,然后做个实例,算是我通过MCDBA后,给大家的礼物吧。
下面的介绍和例子,是针对SQLSERVER2000和VFP7的。
一.用SQL-DMO的必要性
大部分VFPER开发的程序,都是中小规模的系统,因为这是VFP最适用的范围。
而这样的系统,很多情况下是,客户端没有专业IT人士维护,更不要说专门的DBA了。
对于使用SQLSERVER的系统,就带来了一些问题。
SQLSERVER是一套比较大的数据库专业软件,是经常需要维护和清理的,而我们这些系统开发者,总不能老跑去用户那里做维护工作吧,尤其对商业软件来说,这是很大的成本了。
如果可以把对SQLSERVER的维护工作放到自己的程序里,甚至把SQLSERVER的安装无缝并入到自己的程序的安装包里,相信大家都会很乐意的。
DMO的功能就能满足我们的这些需要。
通过它,可以从程序里用命令方式来操作SQLSERVER:
停止/启动服务,建立数据库和表,添加用户和权限,备份/恢复数据库,数据导入/导出/发布...DMO的作用就是把我们能在EnterpriseManager里完成的功能,完全用代码来做.
二.微软的桌面数据引擎(DesktopDatabaseEngine)
我们都知道SQLSERVER2000有四个版本:
个人版,开发者版,标准班和企业版.其实,还有一个版本,就是桌面数据引擎(DDE)。
DDE几乎具有
SQLSERVER标准版和企业版的所有功能,不能支持的只是少数几个不常用的功能。
而它和其它版本的区别是,DDE没有任何图形管理界面,没有ENTERPRISEMANAGER,没有查询分析器等等工具。
对它的管理,主要是通过DMO或者专门的API来进行,它的另一个优点是,提供了安装程序,可以直接加到第3方软件里进行安装。
每个版本的SQLSERVERCD里都带有DDE,在MSDE目录下,运行SETUP程序就可以安装。
至于怎么把它加到自己的程序里安装,大家查一下SQLSERVER的帮助文件就可以找到。
DDE的限制是:
只适宜中小型系统(比如没有5个以上的用户同时连接和运行大型SQL命令),如果同时访问的用户很多,DDE就会比正常的SQLSERVER慢了。
这样,DDE+DMO就可以实现我们上面所要求的功能了。
这种做法甚至可以不让用户知道你是在使用SQLSERVER做为数据库。
当然,DMO不是只能操作DDE,它可以操作所有版本的SQLSERVER。
三.DMO的安装
其实DMO主要就是一个DLL文件而已:
SQLDMO.DLL。
具体位置在C:
\ProgramFiles\MicrosoftSQLServer\80\Tools\Binn目录里,在同一目录里还有个帮助文件Sqldmo80.hlp.如果你在程序里不能使用DMO,找到这个DLL文件,注册一下,就可以了。
另外在C:
\ProgramFiles\MicrosoftSQLServer\80\Tools\Devtools\Samples\Sqldmo目录下,有SQLDMO的例子,但都是VB和VC++的。
VB的例子和VFP很接近的.
四.初步接触DMO
在这里写几个简单的句子,来看看DMO的强大.这些命令可以直接在命令窗口里一行一行测试,只是用它们来显示数据库的信息。
至于添加数据库,数据表,备份和恢复等比较复杂的功能,得在实例里做。
oServer=CreateObject("SQLDMO.SQLServer")&&建立SERVER对象
oServer.Connect("Snoopy","sa","778899")&&连接到你的服务器
?
oServer.Databases.Count&&显示服务器上的数据库总数
?
oServer.Databases.Item
(1).Name&&显示第一个数据库的名字
oDB=oServer.Databases("PUBS")&&建立数据库对象
?
oDB.Tables.Count&&显示库里表的数目
oTable=oDB.Tables("Titles")&&建立表对象
?
oTable.Rows&&显示表里的记录数
?
oTable.Columns.Count&&显示表的列数
**显示列的属性
?
oTable.Columns
(1).Name
?
oTable.Columns
(1).type
?
oTable.Columns
(1).Datatype
?
oTable.Columns
(1).Identity
?
oTable.Columns
(1).InPrimaryKey
例子:
Backup和Restore数据库
oServer=CreateObject("SQLDMO.SQLServer")&&建立SERVER对象
oServer.Connect("Snoopy","sa","778899")&&连接到你的服务器
**备份
oBackup=CreateObject("SQLDMO.Backup")&&建立备份对象
oBackup.Database="PUBS"&&指定备份数据库
oBackup.Password="8899"&&给备份文件加密码
oBackup.Files="D:
\Temp\PUBBack.Dat"&&指定目标文件
oBackup.SQLBackup(oServer)&&运行备份命令,速度很快的
**备份恢复
oRestore=CreateObject("SQLDMO.Restore")
oRestore.Database="PUBS"
oRestore.Files="D:
\Temp\PUBBack.Dat"
oRestore.SQLRestore
oRestore.SQLRestore(oServer)&&先试不加密码,备份失败
oRestore.Password="8899"
oRestore.SQLRestore(oServer)
Top
apple_8180十豆三信誉:
3052005-7-2614:
39:
51得分:
0
接上:
SQLSERVER提供几种数据库备份方式,
一种是完整备份(FullBackup),第二种是差异备份(DifferentialBackup),第三种是日志备份,第四种是文件备份
完整备份是把整个数据库做个备份,差异备份只是备份进行了完整备份后数据库里的新变化。
当数据库很大时,完整备份很费空间和时间,可以根据情况定期做,比如每周或者每月做一次完整备份。
其它时间可以进行差异备份,比如每天一次,或者半天一次,也可以结合进行日志备份。
文件备份是直接备份数据库的数据和日志文件。
和在操作系统里做备份一样.
在恢复的时候,只要先恢复完整备份,然后恢复最后一个差异备份就可以。
如果有日志备份,还需要恢复差异备份后所做的日志备份。
备份种类通过备份对象的Action属性来决定.
oBackup.Action=0&&参数:
0-完整备份,1-差异备份,2-文件备份,3-日志备份
Server对象的一些属性和方法
属性
AutoReConnect:
当连接断开,后是否自动重连
ConnectionID:
本连接的ID
HostName:
本地机器的名字
Isdbcreator,Isdiskadmin,Isprocessadmin,Issecurityadmin,Isserveradmin,Issetupadmin,Issysadmin:
返回当前连接用户是否属于某类SERVERROLE,比如是不是SA
LoginTimeout:
决定连接超时时间,默认为60秒
SaLogin:
当前连接是不是SA
Status:
服务器当前状态
VersionMajor,VersionMinor:
SQLSERVER的版本号
方法:
AttachDB,DetachDB:
添加或者剥离数据库
Connect,Disconnect,Close:
连接,断开,或者关闭当前服务器对象(oServer)
VerifyConnection:
测试当前连接是否断开
Reconnect:
重新连接
Start,Stop,Shutdown:
用来启动,停止或者关闭服务器
BeginTransaction,RollbackTransaction,CommitTransaction:
操作事务
EnumServerAttributes:
返回服务器的大部分设置参数
EnumLocks:
返回服务器上所有的加锁进程
KillProcess:
强行中断一个进程
在VFP里来操作和管理SQLSERVER
(2)(介绍SQL-DMO)
用DMO来建立任务,并让它定时运行.执行环境必须是NT或者WINDOWS2000,因为需要运行SQLAGENT
***建立任务(JOB)
oJob=CreateObject("SQLDMO.Job")&&创建任务对象
ojob.Name="Pubs_Daily_Backup"&&任务名称
oServer.JobServer.Jobs.Add(oJob)&&加到SQLSERVER的任务里
oJob.BeginAlter&&开始定义任务
oJobStep=CreateObject("SQLDMO.JobStep")&&创建任务步骤对象
oJobStep.Name="Step_1"&&步骤名称
oJobStep.StepID=1&&步骤号码
oJobStep.DatabaseName="Pubs"&&数据库名称
oJobStep.SubSystem="TSQL"&&任务类型,可以是TSQL或者操作系统命令(CmdExec),或者ActiveScripting
cFName="PubBack"+Dtoc(Date(),1)+".dat"&&备份目标文件名
oJobStep.Command="BackupdatabasePubstoDisk='D:
\Temp\"+cFname+"'WithPassword='7788'"&&执行备份的TSQL命令
oJobStep.OnFailAction=2&&如果任务失败退出。
也可以设成发送EMAIL或者用NT里的NETSEND发信息
oJobStep.OnSuccessAction=1&&如果任务成功,退出。
oJob.JobSteps.Add(oJobStep)&&添加任务步骤
oJob.StartStepID=1&&从第一步开始执行,对多步骤的任务起作用
oJob.DoAlter&&保存修改
***把任务加到SCHEDULER里
oJobSchedule=CreateObject("SQLDMO.JobSchedule")&&创建Schedule对象
oJob=oServer.JobServer.Jobs("Pubs_Daily_Backup")&&创建任务对象
oJobSchedule.Name="Daily_Execution"&&名称
oJobSchedule.Schedule.FrequencyType=4&&运行频率,4是每日运行
oJobSchedule.Schedule.FrequencyInterval=1&&运行间隔,1是每天
oJobSchedule.Schedule.ActiveStartDate=Dtoc(Date(),1)&&开始日期(今天),必须是yyyymmdd格式
oJobSchedule.Schedule.ActiveStartTimeOfDay="233000"&&开始时间(晚上11点30),必须是hhmmss格式
**下面2句设置是使任务永不过期
oJobSchedule.Schedule.ActiveEndDate=99991231&&noenddate
oJobSchedule.Schedule.ActiveEndTimeOfDay=235959&&Noendtime
添加任务到SCHEDULE里
oJob.BeginAlter
oJob.JobSchedules.Add(oJobSchedule)
oJob.DoAlter
上述命令我在VFP7里都测试成功,在SQLSERVER里也看到了新添加的命令和运行设置,但因为我是用的WINDOWSME,没法测试任务是否真的运行了。
哪位有环境,可以帮我试试
Top
westbullswestbulls信誉:
1002005-7-2615:
07:
04得分:
0
toapple_8180(十豆三):
你所列的sqldmo是一种对象管理的方式,但是使用起来有点太麻烦了,而且也不能够解决备份文件位置的问题,其实本身T-SQL中本身就集成了很多方法,我想还是尽量不要使用SQLDMO好一些.
SQLDMO本身是SQLSERVER的SDK,还有估计下一版本SQLSERVER2005可能会换成.NET语句了,呵呵.
Top
apple_8180十豆三信誉:
3052005-7-2615:
31:
20得分:
0
而且也不能够解决备份文件位置的问题
-------------------------------------
to:
westbulls(westbulls)
oBackup.Files="D:
\Temp\PUBBack.Dat"&&指定目标文件
Top
apple_8180十豆三信誉:
3052005-7-2615:
42:
46得分:
0
下面这个帖子中的存储过程比较麻烦,不过调用起来比较简单。
------------------------------------------------
SQLSERVER2000数据库备份和恢复存储过程
我自己写的2个过程和一个函数,用于SQLSERVER2000数据库备份和恢复
拿出来和大家交流一下,过程和函数的详细说明在代码中
谢谢
/*备份数据库的过程*/
ifexists(
select*fromsysobjects
wherename='pr_backup_db'andxtype='p'
)
begin
dropprocpr_backup_db
end
go
createprocpr_backup_db
@flagvarchar(20)out,
@backup_db_namevarchar(128),
@filenamevarchar(1000)--路径+文件名字
as
declare@sqlnvarchar(4000),@parnvarchar(1000)
ifnotexists(
select*frommaster..sysdatabases
wherename=@backup_db_name
)
begin
select@flag='dbnotexist'/*数据库不存在*/
return
end
else
begin
ifright(@filename,1)<>'\'andcharindex('\',@filename)<>0
begin
select@par='@filenamevarchar(1000)'
select@sql='BACKUPDATABASE'+@backup_db_name+'todisk=@filenamewithinit'
executesp_executesql@sql,@par,@filename
select@flag='ok'
return
end
else
begin
select@flag='filetypeerror'/*参数@filename输入格式错误*/
return
end
end
GO
说明:
pr_backup_db过程是备份你的数据库
/*创建函数,得到文件得路径*/
ifexists(
select*fromsysobjects
wherename='fn_GetFilePath'andxtype='fn'
)
begin
dropfunctionfn_GetFilePath
end
go
createfunctionfn_GetFilePath(@filenamenvarchar(260))
returnsnvarchar(260)
as
begin
declare@file_pathnvarchar(260)
declare@filename_reversenvarchar(260)
select@filename_reverse=reverse(@filename)
select@file_path=substring(@filename,1,len(@filename)+1-charindex('\',@filename_reverse))
return@file_path
end
GO
/*恢复数据库的过程*/
ifexists(
select*fromsysobjects
wherename='pr_restore_db'andxtype='p'
)
begin
dropprocpr_restore_db
end
go
CREATEprocpr_restore_db
@flagvarchar(20)out,/*过程运行的状态标志,是输入参数*/
@restore_db_namenvarchar(128),/*要恢复的数据名字*/
@filenamenvarchar(260)/*备份文件存放的路径+备份文件名字*/
as
declare@proc_resulttinyint/*返回系统存储过程xp_cmdshell运行结果*/
declare@loop_timesmallint/*循环次数*/
declare@max_idssmallint/*@tem表的ids列最大数*/
declare@file_bak_pathnvarchar(260)/*原数据库存放路径*/
declare@flag_filebit/*文件存放标志*/
declare@master_pathnvarchar(260)/*数据库master文件路径*/
declare@sqlnvarchar(4000),@parnvarchar(1000)
declare@sql_subnvarchar(4000)
declare@sql_cmdnvarchar(100)
declare@sql_killnvarchar(100)
/*
判断参数@filename文件格式合法性,以防止用户输入类似d:
或者c:
\a\等非法文件名
参数@filename里面必须有'\'并且不以'\'结尾
*/
ifright(@filename,1)<>'\'andcharindex('\',@filename)<>0
begin
select@sql_cmd='dir'+@filename
EXEC@proc_result=master..xp_cmdshell@sql_cmd,no_output
IF(@proc_result<>0)/*系统存储过程xp_cmdshell返回代码值:
0(成功)或1(失败)*/
begin
select@flag='notexist'/*备份文件不存在*/
return/*退出过程*/
end
/*创建临时表,保存由备份集内包含的数据库和日志文件列表组成的结果集*/
createtable#tem(
LogicalNamenvarchar(128),/*文件的逻辑名称*/
PhysicalNamenvarchar(260),/*文件的物理名称或操作系
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- vfp sql server 进行备份恢复 进行 备份 恢复
![提示](https://static.bdocx.com/images/bang_tan.gif)