--还原 
use master
RESTORE DATABASE TestDB FROM DISK = 'c:\目录\a.bak'

解决方案 »

  1.   

    示例
    说明  所有的示例均假定已执行了完整数据库备份。
    A. 还原完整数据库
    说明  MyNwind 数据库仅供举例说明。
    下例显示还原完整数据库备份。RESTORE DATABASE MyNwind 
       FROM MyNwind_1B. 还原完整数据库备份和差异备份
    下例还原完整数据库备份后还原差异备份。另外,下例还说明如何还原媒体上的另一个备份集。差异备份追加到包含完整数据库备份的备份设备上。RESTORE DATABASE MyNwind
       FROM MyNwind_1
       WITH NORECOVERY
    RESTORE DATABASE MyNwind
       FROM MyNwind_1
       WITH FILE = 2C. 使用 RESTART 语法还原数据库
    下例使用 RESTART 选项重新启动因服务器电源故障而中断的 RESTORE 操作。-- This database RESTORE halted prematurely due to power failure.
    RESTORE DATABASE MyNwind
       FROM MyNwind_1
    -- Here is the RESTORE RESTART operation.
    RESTORE DATABASE MyNwind 
       FROM MyNwind_1 WITH RESTARTD. 还原数据库并移动文件
    下例还原完整数据库和事务日志,并将已还原的数据库移动到 C:\Program Files\Microsoft SQL Server\MSSQL\Data 目录下。RESTORE DATABASE MyNwind
       FROM MyNwind_1
       WITH NORECOVERY, 
          MOVE 'MyNwind' TO 'c:\Program Files\Microsoft SQL Server\MSSQL\Data\NewNwind.mdf', 
          MOVE 'MyNwindLog1' TO 'c:\Program Files\Microsoft SQL Server\MSSQL\Data\NewNwind.ldf'
    RESTORE LOG MyNwind
       FROM MyNwindLog1
       WITH RECOVERYE. 使用 BACKUP 和 RESTORE 创建数据库的复本
    下例显示使用 BACKUP 和 RESTORE 语句创建 Northwind 数据库的复本。MOVE 语句使数据和日志文件还原到指定的位置。RESTORE FILELISTONLY 语句用于确定待还原数据库内的文件数及名称。该数据库的新复本称为 TestDB。有关更多信息,请参见 RESTORE FILELISTONLY。 BACKUP DATABASE Northwind 
       TO DISK = 'c:\Northwind.bak'
    RESTORE FILELISTONLY 
       FROM DISK = 'c:\Northwind.bak'
    RESTORE DATABASE TestDB 
       FROM DISK = 'c:\Northwind.bak'
       WITH MOVE 'Northwind' TO 'c:\test\testdb.mdf',
       MOVE 'Northwind_log' TO 'c:\test\testdb.ldf'
    GOF. 使用 STOPAT 语法还原到即时点和使用多个设备进行还原
    下例将数据库还原到其在 1998 年 4 月 15 日中午 12 点时的状态,并显示涉及多个日志和多个备份设备的还原操作。RESTORE DATABASE MyNwind
       FROM MyNwind_1, MyNwind_2
       WITH NORECOVERY
    RESTORE LOG MyNwind
       FROM MyNwindLog1
       WITH NORECOVERY
    RESTORE LOG MyNwind
       FROM MyNwindLog2
       WITH RECOVERY, STOPAT = 'Apr 15, 1998 12:00 AM'G. 使用 TAPE 语法还原
    下例显示从 TAPE 备份设备还原完整数据库备份。RESTORE DATABASE MyNwind 
       FROM TAPE = '\\.\tape0'H. 使用 FILE 和 FILEGROUP 语法还原
    下例还原一个包含两个文件、一个文件组和一个事务日志的数据库。RESTORE DATABASE MyNwind
       FILE = 'MyNwind_data_1',
       FILE = 'MyNwind_data_2',
       FILEGROUP = 'new_customers'
       FROM MyNwind_1
       WITH NORECOVERY
    -- Restore the log backup.
    RESTORE LOG MyNwind
       FROM MyNwindLog1I. 将事务日志还原到标记处
    下例显示将事务日志还原到名为"RoyaltyUpdate"的标记处。BEGIN TRANSACTION RoyaltyUpdate 
       WITH MARK 'Update royalty values'
    GO
    USE pubs
    GO
    UPDATE roysched
       SET royalty = royalty * 1.10
       WHERE title_id LIKE 'PC%'
    GO
    COMMIT TRANSACTION RoyaltyUpdate
    GO
    --Time passes. Regular database 
    --and log backups are taken.
    --An error occurs.
    USE master
    GORESTORE DATABASE pubs
    FROM Pubs1
    WITH FILE = 3, NORECOVERY
    GO
    RESTORE LOG pubs
       FROM Pubs1
       WITH FILE = 4,
       STOPATMARK = 'RoyaltyUpdate'
      

  2.   

    --备份
    backup database sys to disk='c:\目录\a.bak' with init
    --还原 
    use master
    RESTORE DATABASE TestDB FROM DISK = 'c:\2002.dat'
      

  3.   

    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
            select  @DevName_data='dali',@DevName_log='dalilog'   DBCC  CHECKDB(数据库名)  
    /***********************************************************
    ** 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  数据库名  TO  DISK=@Devname_data   
                       WITH  INIT  
                   END  
                   IF  @baklog=0  
                   BEGIN              
                       BACKUP  LOG  数据库名  WITH  NO_LOG              
                       BACKUP  LOG  数据库名  TO  DISK=@DevName_log 
                       WITH  INIT,NO_TRUNCATE  
                   END  
               END  
               ELSE  BEGIN  
                   IF  @bakdb=0  
                   BEGIN  
                       BACKUP  DATABASE  数据库名  TO  DISK=@DevName_data
                       WITH  NOINIT  
                   END  
                   IF  @baklog=0  
                   BEGIN  
                       BACKUP  LOG  数据库名  WITH  NO_LOG              
                       BACKUP  LOG  数据库名  TO  DISK=@DevName_log 
                       WITH  NOINIT,NO_TRUNCATE  
                   END  
               END          
           END  
           SELECT  @retmsg='数据库备份成功!'  
       END  
     
       IF  @kind='restore'      
       BEGIN  
           RESTORE  DATABASE  数据库名  FROM  DISK=  @DevName_data WITH  REPLACE  
           SELECT  @retmsg='恢复数据库成功!'  
       END   EXEC SP_DropDevice @Devname_data
    exec sp_dropdevice @devname_log
     
       RETURN  0---测试:
    declare @ varchar(100)
    exec gy_dbbak 0,'aa',0,0,0,'backup',@ output
    select @
      

  4.   


    .bak,.dat文件的处理注意一下恢复时的源文件路径和恢复到的路径是否正确
    RESTORE FILELISTONLY 命令可以帮助查看源文件路径

    RESTORE FILELISTONLY
    from disk='f:\db.bak' 结果为
    tdmis_Data e:\database\db.mdf D PRIMARY 497221632 35184372080640
    tdmis_Log e:\database\db.ldf L NULL 1048576 35184372080640然后用
    restore database db
    from disk='f:\db.bak'
    with NORECOVERY,
    move 'db' to 'e:\database\td.mdf',
    move 'db_Log' to  'e:\database\db_log.ldf'就可以了