RESTORE DATABASE [newdatabase] FROM  
DISK = N'E:\forums040808.bak'WITH  FILE = 1,  NOUNLOAD ,  
STATS = 10,  RECOVERY ,  REPLACE ,  MOVE N'olddbname' TO N'E:\forums040808.mdf',  
MOVE N'olddbname_log' TO N'E:\olddbname\forums040808_log.ldf'

解决方案 »

  1.   

    在还原前,你要将数据库当前使用的进程全部杀掉,如下: 
    string strSQL = "select spid from master..sysprocesses where dbid=db_id(yourDBName)";
    try  

    SqlConnection conn= new SqlConnection(strConn);
    SqlCommand comm = new SqlCommand();
    comm.Connection = conn;
    DataSet ds = new DataSet();
    SqlDataAdapter da = new SqlDataAdapter(strSQL,conn);
    da.Fill(ds,"tbl");
    DataTable dt = ds.Tables["tbl"];

    if( dt != null && dt.Rows.Count > 0 )
    {
    int cnt = dt.Rows.Count;
    stBar.Panels[0].Text = "状态: 正在停止数据库相关访问("+cnt.ToString()+")...";
    conn.Open();
    for(int i=0;i<cnt;i++)
    {
    comm.CommandText = "kill "+dt.Rows[i][0].ToString();
    comm.ExecuteNonQuery();
    }
    stBar.Panels[0].Text = "状态: 正在恢复数据...";
    comm.CommandText = "RESTORE DATABASE QTMS FROM disk='c:\\QTMS.dat'";
    comm.ExecuteNonQuery();
    conn.Close();
    }
      

  2.   

    注意,你访问数据库的用户必须要有相应的关闭SQLServer进程的权限
      

  3.   

    to  xikboy
    我的备份文件是forums040808.db,不是forums040808.bak,直接改后缀吗
      

  4.   

    没办法你备份的时候指定了两个备份文件,这样,SQL把备份的数据备份到了这两个备份文件中
    所以还原的时候,你也必须指定这两个备份文件,否则无法还原(因为数据不全)所以你找回另一个备份文件,再用类似下面的语句还原吧:
    restore database test1 
    from disk='C:\forums040808\forums040808.db'
    ,disk='C:\forums040808\forums040808.db2'  --另一个备份文件
      

  5.   

    /*--备份/恢复测试 SQL恢复时。提示媒体有2个家族成员。现在只提供了1个。数据备份不能恢复--*/
    --下面是对这个问题的测试--1.创建测试的数据库
    create database test
    go--2.备份数据库(注意,我指定了两个备份文件)
    backup database test to disk='c:\a1.bak',disk='c:\a2.bak' with init
    go--3.删除测试的数据库
    drop database test
    go--4.恢复数据库(第一次,我只提供一个备份文件)
    restore database test from disk='c:\a1.bak'
    go--5.查询是否恢复了
    select * from master..sysdatabases where name='test'
    go--上面的恢复会出错,也看不到恢复的数据库.
    --6.下面是正确的恢复方法
    restore database test from disk='c:\a1.bak',disk='c:\a2.bak'
    go--7.查询是否恢复了
    select * from master..sysdatabases where name='test'
    go--8.删除测试数据库
    drop database test/*--下面是测试结果--1.创建数据库的提示信息:CREATE DATABASE 进程正在磁盘 'test' 上分配 0.88 MB 的空间。
    CREATE DATABASE 进程正在磁盘 'test_log' 上分配 0.49 MB 的空间。
    已处理 112 页,这些页属于数据库 'test' 的文件 'test'(位于文件 1 上)。
    已处理 1 页,这些页属于数据库 'test' 的文件 'test_log'(位于文件 1 上)。--2.备份数据库的提示信息BACKUP DATABASE 操作成功地处理了 113 页,花费了 0.180 秒(5.108 MB/秒)。
    --3.删除数据库的提示信息正在删除数据库文件 'd:\Program Files\Microsoft SQL Server\MSSQL\data\test_log.LDF'。
    正在删除数据库文件 'd:\Program Files\Microsoft SQL Server\MSSQL\data\test.mdf'。
    --4.不正确恢复的提示信息服务器: 消息 3132,级别 16,状态 1,行 3
    数据库 'test' 的媒体集有 2 个家族成员,但只提供了 1 个。必须提供所有的成员。
    服务器: 消息 3013,级别 16,状态 1,行 3
    RESTORE DATABASE 操作异常终止。
    --5.查询是否恢复了的结果name  dbid   sid                                                             mode   status   status2     crdate                     reserved                  category   cmptlevel  filename                                                    version 
    ----- ------ --------------------------------------------------------------- ------ -------- ----------- -------------------------- ------------------------- ---------- ---------- ----------------------------------------------------------- --------(所影响的行数为 0 行)
    --6.正确恢复的提示信息已处理 112 页,这些页属于数据库 'test' 的文件 'test'(位于文件 1 上)。
    已处理 1 页,这些页属于数据库 'test' 的文件 'test_log'(位于文件 1 上)。
    RESTORE DATABASE 操作成功地处理了 113 页,花费了 0.186 秒(4.943 MB/秒)。
    --7.查询是否恢复了的结果
    name  dbid   sid                                                             mode   status   status2     crdate                     reserved                  category   cmptlevel  filename                                                    version 
    ----- ------ --------------------------------------------------------------- ------ -------- ----------- -------------------------- ------------------------- ---------- ---------- ----------------------------------------------------------- --------
    test  11     0x01050000000000051500000007E53B2B54190E2943170A32F4010000      0      16       1090519040  2003-12-31 16:35:03.673    1900-01-01 00:00:00.000    0         80         d:\Program Files\Microsoft SQL Server\MSSQL\data\test.mdf   539(所影响的行数为 1 行)
    --8.删除数据库的提示信息正在删除数据库文件 'd:\Program Files\Microsoft SQL Server\MSSQL\data\test_log.LDF'。
    正在删除数据库文件 'd:\Program Files\Microsoft SQL Server\MSSQL\data\test.mdf'。
    --*/
      

  6.   

    to  zjcxc(邹建) 
    我就只有一个forums040808.db,就没法还原了吗
      

  7.   

    当然没办法还原啦.你自己做我上面的测试就知道了.假设备份某个数据库为一个备份文件,生成的文件大小是10M
    如果把这个库备份成两个备份文件,则生成的两个文件的大小分别是5M
    所以SQL是把数据库中的数据平均分配到了你的备份文件中
    所以你备份生成了两个,现在只有一个的话,数据不全,当然无法还原.