如何实现sql2005备份还原 远程备份

使用SQLSERVER的扩展存储过程实现远程备份与恢复 - CSDN博客
标题很长,但内容简单。。这是小弟的第一篇习作,写的不好,望大家海涵。
&& 最近我在为公司的框架程序(以数据应用为导向的应用体系)做数据管理模块,这个模块的需求比较简单:备份、恢复和清理日志。我公司的软件基本上以C/S为基本架构,所以数据管理模块中两个主要的功能&备份与恢复&都可能会在Client端操作,备份与恢复&的文件也都有可能存储在client端,因而这个数据管理模块就必须能够实现在远程备份与恢复数据库。
& 文章的前提阐述完了,就该说说如何具体实现吧。其实都很简单,我想写个远程备份的测试实例给大家看,就能够很清楚的描述吧!& 实例说明:&&&&&&&&&& 环境:win2k+sqlserver 2K+查询分析器&&&&&&&&&& SQLSERVER服务实例名称:mainserver&&&&&&&&&& 需要备份的数据库名称: msdb &&&&&&&&&& 本地机器名称(Client端):david&&&&&&&&&& 本地用户:zf 密码:123&&&&&&&&&& 本地域名:domain&&&&&&&&&& 本地提供备份需求的文件夹:e:/test
& 第一步: 建立共享文件夹&&&& 在程序代码中调用(或者CMD窗口)& net share test=e:/test&&&& 或者用NetShareAdd这个API&&&& 简要说明:&&&&&&&&&&& net share&&&& : 是WINDOWS内部的网络命令。&&&&&&&&&&&&&&&&&&&&&&&&&&& 作用:建立本地的共享资源,显示当前计算机的共享资源信息。&&&&&&&&&&&&&&&&&&&&&&&&&&& 语法:参见 net share /?& & 第二步: 建立共享信用关系&&&& master..xp_cmdshell 'net use&
123 /user:domain/zf'&&&& 简要说明:&&&&&&&&&& 1:xp_cmdshell :是SQLSERVER的扩展存储过程。&&&&&&&&&&&&&&&&&&&&&&&&&&& 作用,以操作系统命令行解释器的方式执行给定的命令字符串,&&&&&&&&&&&&&&&&&&&&&&&&&&& 并以文本行方式返回任何输出。&&&&&&&&&&&&&&&&&&&&&&&&&&& 语法:参见SQLSERVER联机帮助&&&&&&&&&& 2:net use&&&&& : 是WINDOWS内部的网络命令。&&&&&&&&&&&&&&&&&&&&&&&&&&& 作用,将计算机与共享资源连接或断开,或者显示关于计算机&&&&&&&&&&&&&&&&&&&&&&&&&&& 连接的信息。该命令还控制持久网络连接。&&&&&&&&&&&&&&&&&&&&&&&&&&& 语法:参见 net use /?
& 第三步:备份数据库&&&& backup database msdb to disk='//david/test/msdb.bak'&&&& 这个不需要说明吧,语法参见SQLSERVER联机帮助
& 第四步: 删除共享文件夹&&&& 在程序代码中调用(或者CMD窗口)& net share test /delete&&&& 或者用NetShareDel这个API& 结果:&&&&& 已处理 1376 页,这些页属于数据库 'msdb' 的文件 'MSDBData'(位于文件 1 上)。&&&&& 已处理 1 页,这些页属于数据库 'msdb' 的文件 'MSDBLog'(位于文件 1 上)。&&&&& BACKUP DATABASE 操作成功地处理了 1377 页,花费了 3.653 秒(3.086 MB/秒)。
& 这样mainserver服务器上的msdb就备份到了david机器的E:/test/msdb.bak文件了,使用起来很简单吧?恢复数据库操作也是一样,只要将第三个步骤的语句改为'restore database msdb from disk='//david/test/msdb.bak'就可以啦。。你看完了也可以试试呀?!(最简单的测试工具查询分析器+CMD窗口)
备注:xp_cmdshell 这个扩展存储过程只能SA级别的用户调用,而且是SQLSERVER的安全隐患之&&&&& 一,许多DBA都喜欢将其删除或者禁用,所以开发人员使用时要倍加小心哦。&&&& 文章中的例子只是简要的说明了应如何利用扩展存储过程实现远程备份与恢复,没有涉及安全以及其他方面的考虑,希望读者在代码中自行完善。 上传我的文档
 下载
 收藏
该文档贡献者很忙,什么也没留下。
 下载此文档
正在努力加载中...
ASP.net(C#)远程备份与恢复SQLServer数据库的设计与实现
下载积分:1099
内容提示:ASP.net(C#)远程备份与恢复SQLServer数据库的设计与实现
文档格式:PDF|
浏览次数:10|
上传日期: 16:51:05|
文档星级:
该用户还上传了这些文档
ASP.net(C#)远程备份与恢复SQLServer数据库的设计与实现
官方公共微信关于SQLSERVER&2008远程备份(利用映射网络服务器)
网上的资料统统不能用,至少针对SQL SERVER
2008都不适用,包括直接在WINDOWS上设置成功网络服务器映射,但是仍然无法在查询分析器中利用到BACKUP DATABASE
其实吧...很简单,害我弄了一个下午...尝试N中可能性- -||
1.先创建映射
exec&master..xp_cmdshell&'net&use&\\192.168.1.116\vincent
yourPWD /user:192.168.1.116\administrator'
其中\\192.168.1.116\vincent是你的网络路径,vincent是我建立的共享文件夹
/user:192.168.1.116\administrator 这里的192.168.1.116是我的server
IP,administrator是计算机主机名字
yourPWD:是计算机的密码
2.利用映射备份数据库
backup&database
testDB&to&disk='\\192.168.1.116\vincent\testDB.bak'&with&init
3.删除映射
exec master..xp_cmdshell'net use \\192.168.1.116\vincent
这里的网络路径要跟前面的一样
PS:虽然删除了这个网络映射,不过还是可以利用这个网络映射来备份数据库,有兴趣了再搞....
========================================================================================
网络流传的错误参考:
-备份环境:把本地数据库服务器的数据库(TEST)备份到(192.168.1.145)的C$下
--首先,做一个与客户端的映射exec&master..xp_cmdshell'net
use z: "//192.168.1.145/c$" "密码"
"/user:192.168.1.145/administrator"'
--其次,进行数据库备份backup&database&TEST&to&disk='z:/Test.bak'
--最后.备份完成后删除映射exec&master..xp_cmdshell&'net
use z: /delete'
将以上放到sqlserver的job 就可以达到自动备份效果了
进一步可以把备份名字自动生成
exec&master..xp_cmdshell'net
use z: "//192.168.1.145/d$/dbback" "123456"
"/user:192.168.1.145/administrator"'
declare&@a&char(80)select&@a&='z:/'&+&replace(replace(convert(varchar(19),getDate(),120),'&','-'),':','-')&+&'-service_korea.bak'
backup&database&pubs&to&disk=&@a
exec&master..xp_cmdshell&'net
use z: /delete'
----------------------------------
有A数据库服务器,B本机;&
我现在想通过在B机器上通过代码调用SQL来执行A数据库的备份到B机器上&
调用的SQL语句为:Backup&Database&MYDATABASE&To&Disk='D:/test.bak',这样备份的目录是数据库服务器A的D盘下;&
怎么才能备份到A的D盘下呢?&
请各位给予建议,谢谢!----------------------------------------------------------------------------------------------------
要用远程数据库可以备份本地。&
本地数据库也可以备份到远程。&
--备份环境:把数据库服务器(192.168.1.8)的数据库(TEST)备份到(192.168.1.145)的C$下&
--首先,做一个与客户端的映射&
exec&master..xp_cmdshell&
'net use z: //192.168.1.145/c$ "密码"
/user:192.168.1.145/administrator'&&
--其次,进行数据库备份&
backup&database&TEST&to&disk='z:/Test.bak'&
--最后.备份完成后删除映射&
exec&master..xp_cmdshell&'net
use z: /delete'&--来自网络
--以下代码放在作业里做调度,自动备份、自动删除4天前备份
--创建映射exec&master..xp_cmdshell&'net
use w: /DatabaseBackup$&
"password"/user:Roy',NO_OUTPUTgo-----2000用游标:declare&@s&nvarchar(200),@del&nvarchar(200)select&&@s='',@del=''
declare&datebak&cursor&for
&&&&[bak]='backup
database&&'+quotename(Name)+'& to disk
=''w:'+Name+'_'+convert(varchar(8),getdate(),112)+'.bak''& with
&&&&[del]='exec
master..xp_cmdshell&''&del
w:'+Name+'_'+convert(varchar(8),getdate()-4,112)+'.bak'', no_output'&from&master..sysdatabases&where&dbid&4&--不备份系统数据库
open&datebak
fetch&next&from&datebak&into&@s,@del
while&@@fetch_status=0
&&&&&&&&exec&(@del)
&&&&&&&&exec(@s)
&&&&&&&&fetch&next&from&datebak&into&@s,@del
close&datebak
deallocate&datebakgo
--删除映射exec&master..xp_cmdshell&'net
use w: /delete'
SERVER2000为例&
企业管理器—&数据库服务器—&管理目录—&SQL SERVER代理—&作业—&右键 选—&新建&
常规选项页—&输入作业名称—&选中所有者。&
步骤选项页—&新建—&输入步骤名—&类型 TSQL脚本—&选择需要执行的数据库—&在命令框里输入你的SQL 脚本:&
如:update&tb&set&状态=&...&&where&日期...........&
你可以点左下角的【分析】按钮,分析一下语法,分析无误,按确定。&
调度选项页—&新建调度—&输入调度名称—&调度类型
你可以选择也可以点右下角的【更改】按钮进行更改,确定。&
任务栏 SQL SERVER服务器的小图标 双击 服务 选中 SQL SERVER
AGENT,点【开始/继续】,选中当启动OS时,自动启动服务,就可以了。&
到你定的那个时间点,SQL SERVER会自动去执行你的脚本的。&
如果需要生成脚本的话,企业管理器—&数据库服务器—&管理目录—&SQL SERVER代理—&作业—&右键你刚完成的作业—&所有任务&
—&生成SQL脚本,即可生成你需要的脚本。
-------------------------------
另一种方法:
--&创建链接服务器
exec&sp_addlinkedserver&'link_server_name','','SQLOLEDB','server_name';
exec&sp_addlinkedsrvlogin&'link_server_name','false','sa','sa','password';
exec&sp_serveroption&'link_server_name','rpc
out','true';
--&备份 dbname
数据库exec('backup database dbname to
disk=''c:/dbname.bak'';') at link_server_
--&删除链接服务器
exec&sp_droplinkedsrvlogin&'link_server_name','sa';
exec&sp_dropserver&'Macedonia';&
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。页面导航:
→ 正文内容 sql2005远程备份
Sql Server2005实现远程备份数据库
相信大家都在当心数据库的丢失,这也是每个开发者头痛的一件事件,因为正在运行的服务器及数据库也在这台服务器上
相信大家都在当心数据库的丢失,这也是每个开发者头痛的一件事件,因为正在运行的服务器及数据库也在这台服务器上。如果服务器崩溃,那么所有的数据都不存在了,就算是你在你的机子上做了备份,那也是没有用的,为什么会这样说主要是因为本机是向互联网公开的,所以出事故的概率就比较高。最终我们可以利用局域网解决这样的问题。就拿两台机子做例子,A机是服务器,B机是要把A服务器上的数据库备份到B机上,前提是B机必须要有数据库,以Sql Server2005为例。首先A机必须具备数据库,程序,IIS,B机必须具备数据库,服务程序。前提是B机必须知道A机的机器密码。其次代码操作如下 这只是存储过程
代码如下:IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[BackSqlorFile]') AND type in (N'P', N'PC'))&BEGIN&EXEC dbo.sp_executesql @statement = N'&&CREATE proc [dbo].[BackSqlorFile]&@ServerIp varchar(50),--数据库服务器IP&@ServerName varchar(50),--数据库计算机用户&@ServerPwd&& varchar(50),--数据库计算机用户密码@ServerIISIp varchar(50),--IIs服务器Ip@ServerIIsName varchar(50),--IIs服务器名称@ServerIIsPwd& varchar(50),--IIs服务器密码@SqlShareFile&&& varchar(50),--远程sql共享文件@IIsShareFile&& varchar(50),--远程IIS共享文件@MoveIIsPath&& varchar(50),--d:/back@MoveSqlPath&& varchar(50),--d:/sql@DataName&&&&& varchar(50),--数据库名称@SqlloginName varchar(50),--远程数据库登陆名称@SqlLoginPwd& varchar(50)--远程数据库登陆密码asbegin/*=====================================================================*/--Create data --Modify data --Autor:sp--Method:数据库远程备份、虚拟主机远程备份、IIS远程备份/*====================================================================*/declare @iisname varchar(1000)--备份IIS的名称declare @IISversion varchar(1000)--IIS版本号declare @MovePath varchar(1000)--COPY文件的路劲declare @IIsBack varchar(1000)--IIS备份命令declare @IIsBackmd varchar(1000)--IIS备份为后缀的MD文件declare @IIsBacksc varchar(1000)--IIS备份为后缀的SC文件declare @SqlName varchar(1000)--备份数据库名称declare @SqlPath varchar(1000)--备份数据库文件路金declare @IISyshe varchar(1000)--IIS网罗映射declare @Sqlyshe varchar(1000)--sql网络映射declare @sqlback varchar(1000)---数据库备份命令declare @url varchar(1000)-- 数据库远程备份存放的路径declare @osql varchar(1000)--数据库备份DOS操作命令begin& --命名规则'文件名+月+日+年‘&& set @SqlName=@DataName+replace(convert(varchar(50),getdate(),110),''-'','''')+''.bak''&& set @url=''E:/Program Files/Microsoft SQL Server/MSSQL.1/MSSQL/Backup/''+@SqlName&& set @sqlback=''backup database ''+@DataName +'' to disk=''''''+@url+'''''' with init''&& set @iisname=''IIs''+replace(convert(varchar(50),getdate(),110),''-'','''')&& set @osql=''osql -S''+@ServerIp+'' -U''+@SqlloginName+''& -P''+@SqlLoginPwd+''& -dmaster -q"''+@sqlback+''"''&& set @IISversion=''123''--//replace(convert(varchar(50),getdate(),120),'':'',''-)&& set @IISBack=''iisback /Backup /s ''+@ServerIISIp+'' /u ''+@ServerIIsName+'' /p ''+@ServerIIsPwd+'' /b ''+@iisname+'' /v ''+@IISversion+''''--远程备份IIS文件路劲&& --其中 /S 代表远程计算机名称或者IP /U 代表用户 /p 代表密码 /b 代表备份名称 /V 代表你所备份的版本号 /e 代表对备份文件进行加密&& set @IIsBackmd=''copy y:/''+@iisname+''.MD''+@IISversion+'' ''+@MoveIIsPath+''''&& set @IIsBacksc=''copy y:/''+@iisname+''.SC''+@IISversion+'' ''+@MoveIIsPath+''''&& set @Sqlpath=''copy q:/''+@SqlName+'' ''+@MoveSqlPath+''''&& set @IISyshe=''net use y: //''+@ServerIISIp+''/''+@IIsShareFile+'' "''+@ServerIIsPwd+''" /user:''+@ServerIISIp+''/''+@ServerIIsName+''''&& set @Sqlyshe=''net use q: //''+@ServerIp+''/''+@SqlShareFile+'' "''+@ServerPwd+''" /user:''+@ServerIp+''/''+@ServerName+''''&& exec master..xp_cmdshell @IISBack--远程备份&& exec master..xp_cmdshell @IISyshe --//建立网落映射IIS''&& exec master..xp_cmdshell @IIsBackmd&& exec master..xp_cmdshell @IIsBacksc&& exec master..xp_cmdshell ''net use y: /delete''--删除映射&& exec master..xp_cmdshell @osql--远程备份数据库&& exec master..xp_cmdshell @Sqlyshe--//建立网落映射数据库''&& exec master..xp_cmdshell @Sqlpath&& exec master..xp_cmdshell ''net use q: /delete''--删除映射&& ENDend' ENDIF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[Creat_Job]') AND type in (N'P', N'PC'))BEGINEXEC dbo.sp_executesql @statement = N'create proc [dbo].[Creat_Job]@prorcname varchar(1000), --要调用定时调用的存储过程名,如果不在当前库中,则用:库名..所有者名..存储过程名@job_date datetime --存储过程的执行时间(包括时间信息)asdeclare @dbname sysname,@jobname sysname,@date int,@time intselect @jobname=''作业_''+cast(newid() as varchar(36))&,@date=convert(varchar,@job_date,112)&,@time=replace(convert(varchar,@job_date,108),'':'','''')
if exists(select * from msdb..sysjobs where name=@jobname)&exec msdb..sp_delete_job @job_name=@jobname
--创建作业exec msdb..sp_add_job @job_name=@jobname,@delete_level=0
--创建作业步骤declare @sql varchar(1000)select @sql=''exec ''+@prorcname&,@dbname=db_name()
exec msdb..sp_add_jobstep @job_name=@jobname,&@step_name = ''执行步骤'',&@subsystem = ''TSQL'',&@database_name=@dbname,&@command = @sql,&@retry_attempts = 5,&& --重试次数&@retry_interval = 5&&& --重试间隔--创建调度EXEC msdb..sp_add_jobschedule @job_name = @jobname, @name = ''时间安排'',@enabled = 1, @freq_type = 4, --代表每天都执行@active_start_date = @date,@active_start_time = @time,@freq_interval =1--至少一次-- 添加目标服务器EXEC msdb.dbo.sp_add_jobserver @job_name = @jobname ,@server_name = N''(local)'' ' END
同时也备份IIS,并且通过网络映射,这样的结果是在A机上也有备份的文件,在B机上也有相同的备份文件。在此也利用了作业的操作。注意:Sql Server2005默认的情况下是没有打开xp_cmdshell这个是系统存储过程,所以我们必须打开它 EXEC sp_configure 'show advanced options', 1,然后在运行RECONFIGURE 再一次运行EXEC sp_configure 'xp_cmdshell', 1,最后RECONFIGURE。
您可能感兴趣的文章:
上一篇:下一篇:
最 近 更 新
热 点 排 行
12345678910

我要回帖

更多关于 sql2005配置远程连接 的文章

 

随机推荐