分享

如何将sql数据库备份到本地

 照汗青 2010-11-15
---备份的时候,在SQL中做映射

--1.映射
exec   master..xp_cmdshell   'net   use   z:   \\xz\c$   " "   /user:xz\administrator '

/*--说明:
z: 是映射网络路径对应本机的盘符,与下面的备份对应
\\xz\c$ 是要映射的网络路径
xz\administrator xz是远程的计算机名,administrator是登陆的用户名
--*/


--2.进行数据库备份
backup   database   数据库名   to   disk= 'z:\备份文件名 '


--3.备份完成后删除映射
exec   master..xp_cmdshell   'net   use   z:   /delete '
-------------------------------

"master..xp_cmdshell   'net   use     \\ "+uo_3.of_ComputerName()+ "\c$   "+ls_syspassword+ "   /user: "+uo_3.of_ComputerName()+ "\ "+uo_3.of_getloginid()+ " ' "
这是我的一个例子,uo_3.of_ComputerName()得到本地计算机名,ls_syspassword本机密码
uo_3.of_getloginid()系统用户
本段代码用于在客户端把服务器数据备份到本地
------------------------------
转:
/***************     http://www.csdn.net/develop/article/21/21304.shtm  
标题           使用SQLSERVER的扩展存储过程实现远程备份与恢复         happy_david(原作)  
   
      最近我在为公司的框架程序(以数据应用为导向的应用体系)做数据管理模块,这个模块的需求比较简单:备份、恢复和清理日志。我公司的软件基本上以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     \\david\test   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都喜欢将其删除或者禁用,所以开发人员使用时要倍加小心哦。
          文章中的例子只是简要的说明了应如何利用扩展存储过程实现远程备份与恢复,没有涉及安全以及其他方面的考虑,希望读者在代码中自行完善。

 
/**************************************************
SQL异地备份失败,归根结底是权限问题!!!
如:
      SQLServer备到FileServer上
      那你的SQLServer的启动用户必须在FileServer上有足够的权限!
--------------------^^^---------------------------------
1、SQLServer上新建一SQLUser用户权限大一点。
2、FileServer上建同一用户对某一文件夹有足够权限。
3、两机的SQLUser密码相同(方便一点)
4、将SQLServer改为SQLUser启动
      (管理工具--> 服务--> mssql项--> 属性--> 指定用户及密码)
5、\\192.168.*.*\文件夹\ShareBak.Bak就可以了
-----------------------------------------------------------
简单一点就是:
如果你两台都是windows2ks
你的机器也用同样的Administrator密码,且sql服务器用administrator启动
那你写设备时就可以写:\\ip\.......

如果对方是98那你要完全共享一下!
你写设备时就可以写:\\ip\.......

------
我用的一个例子:
/*
备份数据库:
@DatabaseName 需备份的数据库名
@Path 备份文件存放路径,可以是本机路径或网络上的路径(需完全共享)
Usage:
Exec   myBack   'DB_ERP01 ', '\\HSQL\PSQLBack '
*/
ALTER     proc   myBack   @DatabaseName   varchar(20),@Path   varchar(20)
As

declare   @fn   varchar(100),@sql   varchar(200)
set   @fn   =   @Path   +(case   when   right(@Path,1)   <> '\ '   then   '\ '   else   ' '   end)
+@DatabaseName+ '_ '
+convert(char(8),getdate(),112)+ '_ '
+replace(convert(char(8),getdate(),108), ': ', ' ')
+ '.bak '
set   @sql   =   'backup   database   '+@DatabaseName   +   '   to   disk   =   ' ' '   +   @fn   +   ' ' ' '
exec(@sql)

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多