CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  MS-SQL Server >  基础类

请教:关于数据库备份与恢复的问题

楼主jennifergao()2002-07-05 09:09:29 在 MS-SQL Server / 基础类 提问

如下文,存储过程     GY_DBBak     实现数据库     AAA的备份和恢复。     但是备份文件只能备份在SQL     Server     服务器上。     我想备份到本机,如何实现?          
     
  当我给出选择本机路径及文件时,     提示:设备不存在或设备脱机      
     
  SET     QUOTED_IDENTIFIER     OFF          
  GO      
  SET     ANSI_NULLS     ON          
  GO      
     
  ALTER       PROCEDURE     GY_DBBak      
                      @bakequip         int,                   --     备份设备:磁盘&磁带      
                      @bakpath           varchar(50),   --     带全路径的备份文件名      
                      @baktype           int,                   --     完全备份&增量备份      
                      @baklog             int,                   --     ‘0’备份日志      
                      @bakdb               int,                   --     ‘0’备份数据库      
                      @kind     varchar(7),                 --备份还是恢复      
                      @retmsg     varchar(20)     output           --返回信息      
  AS      
        DECLARE     @db_paths             varchar(50)      
        DECLARE     @log_paths         varchar(50)      
        SELECT         @db_paths             =     @bakpath         +     '.dat'      
        SELECT         @log_paths         =     @bakpath         +     'log.dat'      
             
        DBCC     CHECKDB(AAA)      
     
        IF     @kind='backup'      
        BEGIN      
                IF     @bakequip=0      
                BEGIN      
                        IF     @baktype=0      
                        BEGIN      
                                IF     @bakdb=0      
                                BEGIN          
                                        BACKUP     DATABASE     AAA     TO     DISK=@db_paths      
                                        WITH     INIT      
                                END      
                                IF     @baklog=0      
                                BEGIN                              
                                        BACKUP     LOG     AAA     WITH     NO_LOG                              
                                        BACKUP     LOG     AAA     TO     DISK=@log_paths      
                                        WITH     INIT,NO_TRUNCATE      
                                END      
                        END      
                        ELSE     BEGIN      
                                IF     @bakdb=0      
                                BEGIN      
                                        BACKUP     DATABASE     AAA     TO     DISK=@db_paths      
                                        WITH     NOINIT      
                                END      
                                IF     @baklog=0      
                                BEGIN      
                                        BACKUP     LOG     AAA     WITH     NO_LOG                              
                                        BACKUP     LOG     AAA     TO     DISK=@log_paths      
                                        WITH     NOINIT,NO_TRUNCATE      
                                END      
                        END                      
                END      
                SELECT     @retmsg='数据库备份成功!'      
        END      
     
        IF     @kind='restore'              
        BEGIN      
                RESTORE     DATABASE     AAA     FROM     DISK=     @db_paths     WITH     REPLACE      
                SELECT     @retmsg='恢复数据库成功!'      
        END      
     
        RETURN     0      
     
  GO      
  SET     QUOTED_IDENTIFIER     OFF          
  GO      
  SET     ANSI_NULLS     ON          
  GO 问题点数:50、回复次数:6Top

1 楼tj_dns(愉快的登山者)回复于 2002-07-05 09:25:16 得分 0

数据库备份设备只能在服务器上建立,你可以在服务器上备份完后,再将备份文件拷贝到你的机器上。Top

2 楼OpenVMS(半知半解)回复于 2002-07-05 09:31:31 得分 5

USE   master  
  EXEC   sp_addumpdevice   'disk',   'networkdevice',  
        '\\Localservername\sharename\path\filename.ext'  
  用NT帐号登录SQL,上面的路径指向本地,要加网络路径,开放文件夹共享  
   
  Top

3 楼leimin(黄山光明顶)回复于 2002-07-05 11:46:32 得分 40

 
   
  create       PROCEDURE     GY_DBBak      
                      @bakequip         int,                   --     备份设备:磁盘&磁带      
                      @bakpath           varchar(50),   --     带全路径的备份文件名      
                      @baktype           int,                   --     完全备份&增量备份      
                      @baklog             int,                   --     ‘0’备份日志      
                      @bakdb               int,                   --     ‘0’备份数据库      
                      @kind     varchar(7),                 --备份还是恢复      
                       
      @retmsg     varchar(20)     output           --返回信息      
  AS      
   
   
        DECLARE     @DevName_data         varchar(50)      
        DECLARE     @DevName_log       varchar(50)  
        declare   @db_path   varchar(100)  
        declare   @log_path   varchar(100)  
                 
        DECLARE     @RC INT        
   
  SELECT         @db_path         =     @bakpath         +     '.dat'      
  SELECT         @log_path       =     @bakpath         +     'log.dat'      
                  SELECT         @RC=0  
   
        DBCC     CHECKDB(Northwind)      
  /***********************************************************  
  **   CREATE   BACKUP   AND   RESTORE   DEVICES  
  ************************************************************/  
  IF   @RC=0  
        BEGIN  
   
        EXEC   sp_addumpdevice   'disk',   @DevName_data,@db_path  
   
  exec   sp_addumpdevice   'disk',   @DevName_log,@log_path  
        select   @rc=@@error  
  IF   @RC<>0  
  begin  
  EXEC   SP_DropDevice   @Devname_data  
  exec   sp_dropdevice   @devname_log  
  SELECT   @RC=-1000  
  return   @rc  
  end  
      END  
   
        IF     @kind='backup'      
        BEGIN      
                IF     @bakequip=0      
                BEGIN      
                        IF     @baktype=0      
                        BEGIN      
                                IF     @bakdb=0      
                                BEGIN          
                                        BACKUP     DATABASE     Northwind     TO     DISK=@Devname_data      
                                        WITH     INIT      
                                END      
                                IF     @baklog=0      
                                BEGIN                              
                                        BACKUP     LOG     Northwind     WITH     NO_LOG                              
                                        BACKUP     LOG     Northwind     TO     DISK=@DevName_log    
                                        WITH     INIT,NO_TRUNCATE      
                                END      
                        END      
                        ELSE     BEGIN      
                                IF     @bakdb=0      
                                BEGIN      
                                        BACKUP     DATABASE     Northwind     TO     DISK=@DevName_data  
                                        WITH     NOINIT      
                                END      
                                IF     @baklog=0      
                                BEGIN      
                                        BACKUP     LOG     Northwind     WITH     NO_LOG                              
                                        BACKUP     LOG     Northwind     TO     DISK=@DevName_log    
                                        WITH     NOINIT,NO_TRUNCATE      
                                END      
                        END                      
                END      
                SELECT     @retmsg='数据库备份成功!'      
        END      
     
        IF     @kind='restore'              
        BEGIN      
                RESTORE     DATABASE     Northwind     FROM     DISK=     @DevName_data   WITH     REPLACE      
                SELECT     @retmsg='恢复数据库成功!'      
        END      
     
        RETURN     0      
  Top

4 楼jennifergao()回复于 2002-07-08 15:53:37 得分 0

谢谢!  
  但是,提示‘逻辑设备名不能为NULL’.  
  select   @DevName_data   =   'Mybackupdev'  
  调试时,提示:逻辑设备   'MyBackupdev'   已存在。  
  是不是不能在存储过程中添加备份设备,   因为,每调用一次该过程就创建一个新设备。  
  请问:如何直接在server端添加一个网络路径的备份设备?Top

5 楼xjbs(大鱼)回复于 2002-07-13 12:18:23 得分 5

最好不要在存储过程中添加,,  
  或是添加前先看是不是存在了,不在再加,,Top

相关问题

  • 数据库备份与恢复问题??
  • 数据库备份与恢复
  • 关于oracle数据库备份与恢复
  • pb中备份与恢复,数据库oracle8.05.如何写?
  • any where数据库备份与恢复如何实现。
  • 关于SQL 7.0数据库的备份与恢复的问题
  • 请教:关于数据库备份与恢复的问题。
  • delphi数据库备份与恢复问题急!!!!!!
  • 再问关于数据库的备份与恢复(Delphi6+sqlServer2000)
  • SQL SERVER的数据库备份与恢复问题

关键词

  • 数据库
  • 存储过程
  • 服务器
  • 备份
  • devname
  • bakdb
  • baklog
  • bakpath+
  • baktype
  • bakequip

得分解答快速导航

  • 帖主:jennifergao
  • OpenVMS
  • leimin
  • xjbs

相关链接

  • SQL Server类图书

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo