SQL Server有两种备份方式,一种是使用BACKUP DATABASE将数据库文件备份出去,另外一种就是直接拷贝数据库文件mdf和日志文件ldf的方式。本文中我们将主要介绍一下后者的备份与恢复。本文中假定您目前已经能够熟练使用Server企业管理器和SQL Server查询分析器) 1、正常的备份、恢复方式 正常方式下,我们要备份一个数据库,首先要先将该数据库从运行的数据服务器中断开,或者停掉整个数据库服务器,然后复制文件。 卸下数据库的命令:Sp_detach_db 数据库名 连接数据库的命令: 
Sp_attach_db或者sp_attach_single_file_db 
s_attach_db [@dbname =] ′dbname′, [@filename1 =] ′filename_n′ [,...16] 
sp_attach_single_file_db [@dbname =] ′dbname′, [@physname =] ′physical_name′ 使用此方法可以正确恢复SQL Sever7.0和SQL Server 2000的数据库文件,要点是备份的时候一定要将mdf和ldf两个文件都备份下来,mdf文件是数据库数据文件,ldf是数据库日志文件。 例子: 假设数据库为test,其数据文件为test_data.mdf,日志文件为test_log.ldf。下面我们讨论一下如何备份、恢复该数据库。 卸下数据库:sp_detach_db ’test’ 连接数据库: 
sp_attach_db ’test’,’C:\Program Files\Microsoft SQL Server\MSSQL\Data\test_data.mdf’,’C:\Program Files\Microsoft SQL Server\MSSQL\Data\test_log.ldf’sp_attach_single_file_db ’test’,’C:\Program Files\Microsoft SQL Server\MSSQL\Data\test_data.mdf’ 

解决方案 »

  1.   


    SQL Server2000中,如果数据库文件(非系统数据库文件)遇到错误的时候,我们该怎么办。以下是笔者以前的笔记。仅适用于非master,msdb的数据库。 
    说明如下: 
    1 建一个测试数据库test(数据库类型为完全) 
    2 建一个表,插入点记录 
      create table a(c1 varchar(2)) 
      go 
      insert into a values('aa') 
      go 
      insert into a values('bb') 
      go 
    3 作完全备份,到文件test_1.bak 
    4 在作一点修改 
      insert into a values('cc') 
      go 
      create table b(c1 int) 
      go 
      insert into b values(1) 
      go 
      insert into b values(2) 
      go 
    5 shutdown 数据库服务器 
    6 用ultraedit编辑数据库文件test_data.mdf,随便修改点字节内容,相当于数据库遭到致命的损坏。 
    7 启动数据库,并且运行企业管理器,点开数据库,看到test变成灰色,而且显示置疑。 
    8 运行isql -SLocalhost -Usa -P 
    1> backup log test TO DISK='Drogram FilesMicrosoft SQL ServerMSSQLBACKUP 
    est_2.bak' WITH NO_TRUNCATE 
    2>go 
    已处理 2 页,这些页属于数据库 'test' 的文件 'TEST_Log'(位于文件 1 上)。 
    BACKUP LOG 操作成功地处理了 2 页,花费了 0.111 秒(0.087 MB/秒)。 
    9 进行恢复最老的完全备份 
    1> RESTORE DATABASE test FROM DISK='Drogram FilesMicrosoft SQL ServerMSSQL 
    BACKUP est_1.bak' WITH NORECOVERY 
    2> go 
    已处理 96 页,这些页属于数据库 'test' 的文件 'TEST_Data'(位于文件 1 上)。 
    已处理 1 页,这些页属于数据库 'test' 的文件 'TEST_Log'(位于文件 1 上)。 
    RESTORE DATABASE 操作成功地处理了 97 页,花费了 0.107 秒(7.368 MB/秒)。 
    10 恢复最近的日志 
    1> RESTORE LOG test FROM DISK='Drogram FilesMicrosoft SQL ServerMSSQLBACKU 
    P est_2.bak' WITH RECOVERY 
    2> go 
    已处理 2 页,这些页属于数据库 'test' 的文件 'TEST_Log'(位于文件 1 上)。 
    RESTORE LOG 操作成功地处理了 2 页,花费了 0.056 秒(0.173 MB/秒)。 
    数据已经完全恢复了,可以使用了。 
    select * from a 
    go 
    总结,DBA应该有一个完善的数据库备份计划。本例中,如果没有一个完全备份的话,数据库的恢复就不可能