vfp sql server 进行备份恢复.docx

上传人:b****0 文档编号:12591180 上传时间:2023-04-20 格式:DOCX 页数:32 大小:27.65KB
下载 相关 举报
vfp sql server 进行备份恢复.docx_第1页
第1页 / 共32页
vfp sql server 进行备份恢复.docx_第2页
第2页 / 共32页
vfp sql server 进行备份恢复.docx_第3页
第3页 / 共32页
vfp sql server 进行备份恢复.docx_第4页
第4页 / 共32页
vfp sql server 进行备份恢复.docx_第5页
第5页 / 共32页
点击查看更多>>
下载资源
资源描述

vfp sql server 进行备份恢复.docx

《vfp sql server 进行备份恢复.docx》由会员分享,可在线阅读,更多相关《vfp sql server 进行备份恢复.docx(32页珍藏版)》请在冰豆网上搜索。

vfp sql server 进行备份恢复.docx

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),/*文件的物理名称或操作系

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1