先找個磁盤空閒足夠大的盤,再進行恢復:
语法
还原整个数据库:RESTORE DATABASE { database_name | @database_name_var } 
[ FROM < backup_device > [ ,...n ] ] 
[ WITH
    [ RESTRICTED_USER ]
    [ [ , ] FILE = { file_number | @file_number } ]
    [ [ , ] PASSWORD = { password | @password_variable } ]
    [ [ , ] MEDIANAME = { media_name | @media_name_variable } ]
    [ [ , ] MEDIAPASSWORD = { mediapassword | @mediapassword_variable } ]
    [ [ , ] MOVE 'logical_file_name' TO 'operating_system_file_name' ]
            [ ,...n ]
    [ [ , ] KEEP_REPLICATION ]
    [ [ , ] { NORECOVERY | RECOVERY | STANDBY = undo_file_name } ]
    [ [ , ] { NOREWIND | REWIND } ]
    [ [ , ] { NOUNLOAD | UNLOAD } ]
    [ [ , ] REPLACE ]
    [ [ , ] RESTART ]
    [ [ , ] STATS [ = percentage ] ] 
]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'

解决方案 »

  1.   

    可先將數據庫detach掉,再恢復,恢復時可將數據庫恢復到新的磁盤,如:
    RESTORE FILELISTONLY 
       FROM DISK = 'c:\Northwind.bak'
    RESTORE DATABASE TestDB 
       FROM DISK = 'c:\Northwind.bak'
       WITH MOVE 'Northwind' TO '新的路徑',
       MOVE 'Northwind_log' TO '新的路徑'
    GO
      

  2.   

    ALTER DATABASE cati
    在执行操作:
    ADD FILE 
    (
     NAME = CCC_dat2,
     FILENAME = 'D:\Program Files\Microsoft SQL Server\MSSQL\Data\CCC_dat2.mdf',
     SIZE = 1000MB,
     FILEGROWTH = 20MB
    )
    GO
    提示错误:未能找到 ID 为 8 的数据库。可能该数据库尚未激活,也可能正在转换过程中。
      

  3.   

    用DETACH后,无法执行ATTACH附加数据库,这种方法不是很使用,我估计日志文件可能已经损坏,或是其他原因
      

  4.   

    我的MSN :[email protected] 欢迎大家直接给我联系一下,问题非常奇怪!!
      

  5.   

    --试试这样处理.停止SQL服务,备份有问题的这个数据库的数据文件及日志文件
    然后启动SQL服务,删除有问题的这个数据库
    接下来按下面的步骤处理:1.新建一个同名的数据库2.再停掉sql server(注意不要分离数据库)3.用原数据库的数据文件覆盖掉这个新建的数据库4.再重启sql server5.此时打开企业管理器时会出现置疑,先不管,执行下面的语句(注意修改其中的数据库名)6.完成后一般就可以访问数据库中的数据了,这时,数据库本身一般还要问题,解决办法是,利用
    数据库的脚本创建一个新的数据库,并将数据导进去就行了.USE MASTER
    GOSP_CONFIGURE 'ALLOW UPDATES',1 RECONFIGURE WITH OVERRIDE
    GOUPDATE SYSDATABASES SET STATUS =32768 WHERE NAME='置疑的数据库名'
    Gosp_dboption '置疑的数据库名', 'single user', 'true'
    GoDBCC CHECKDB('置疑的数据库名') 
    Goupdate sysdatabases set status =28 where name='置疑的数据库名'
    Gosp_configure 'allow updates', 0 reconfigure with override
    Go sp_dboption '置疑的数据库名', 'single user', 'false'
    Go
      

  6.   

    错误 1105
    严重级别 17
    消息正文
    未能为数据库 ''%3!'' 中的对象 ''%1!'' 分配空间,因为文件组 ''%5!'' 已满。解释
    指定的文件组可用空间已用完。对策
    若要获得更多空间,可以释放包含完整文件组中的某个文件的任何磁盘驱动器上的磁盘空间,以允许组中的文件增长。或者可以将某数据文件用于指定的数据库来获得空间。释放磁盘空间
    可以释放本地驱动器或另一个磁盘驱动器上的可用磁盘空间。释放另一个驱动器上的可用磁盘空间: 将可用磁盘空间不足的文件组中的数据文件移动到另一个磁盘驱动器中。
    执行 sp_detach_db 分离数据库。
    执行 sp_attach_db 附加数据库,指向被移动的文件。 
    使用数据文件
    另一种解决方案是使用 ALTER DATABASE 语句的 ADD FILE 子句向指定的数据库添加数据文件。或者可以使用 ALTER DATABASE 语句的 MODIFY FILE 子句、指定 SIZE 和 MAXSIZE 语法来扩大数据文件。
      

  7.   

    多谢zjcxc(: 邹建 :) ,你的方法有效,我现在正在复制数据!真是非常感谢,小弟在这次事故处理中学到了很多东西!
    同时也谢谢progress99(如履薄冰)老兄,你的及时回答让我有了很大信心,以后还会向大家请教,我也会常来这里跟大家学习!
    谢谢各位参与的朋友!小弟正在复制数据库,有什么需要注意的,不妨提醒一下!!这个数据库里面的键值设置太多了,我先用导出SQL脚本,然后在导入数据,大家讨论一下,这样行吗?
    中场结论:
    用停止SQL服务,备份有问题的这个数据库的数据文件及日志文件
    然后启动SQL服务,删除有问题的这个数据库
    接下来按下面的步骤处理:1.新建一个同名的数据库2.再停掉sql server(注意不要分离数据库)3.用原数据库的数据文件覆盖掉这个新建的数据库4.再重启sql server5.此时打开企业管理器时会出现置疑,先不管,执行下面的语句(注意修改其中的数据库名)6.完成后一般就可以访问数据库中的数据了,这时,数据库本身一般还要问题,解决办法是,利用
    数据库的脚本创建一个新的数据库,并将数据导进去就行了.这个方法有效!其他的因为我添加不了新数据或日志文件而失败!