ms sql 2000 的备份和恢复 搞了大半天也没结果 各位老大 指点迷津

解决方案 »

  1.   

    按照提示操作来,应该没问题的啊,要不可以看看ms sql的帮助
      

  2.   

    http://community.csdn.net/Expert/topic/3208/3208558.xml?temp=.6821863
      

  3.   

    var
        FADOCommand: TADOCommand;
        FOpenQuery: TADOQuery;
        FConnection: TADOConnection;
    初始化
      FConnection := TADOConnection.Create(nil);
      FConnection.LoginPrompt := False;
      FConnection.CommandTimeout := 3600;
      FConnection.ConnectionTimeout := 60;  FADOCommand := TADOCommand.Create(nil);
      FADOCommand.CommandTimeout := 3600;
      FADOCommand.CommandType := cmdText;
      FADOCommand.Connection := FConnection;  FOpenQuery := TADOQuery.Create(nil);
      FOpenQuery.Connection := FConnection;
    备份
    const
      BackupStr = 'use master backup database [%s] to DISK=''%s''  with init';
    begin
      Result := GetConnected;
      if not Result then Exit;
      with FADOCommand do
      begin
        try
          FADOCommand.CommandText := Format(BackupStr, [DBName(数据库名称), FileName(备份文件名称)]);
          FADOCommand.Execute;
          Result := True;
        except
          on E: Exception do
          begin
            FLastError := '数据库备份错误:' + E.Message;
            Result := False;
          end;
        end;
      end;恢复
    var
      LogicDBName, LogicLogName: string;//, FSQL
    const
      RestoreStr = 'Use master RESTORE database [%0:s]  FROM DISK = ''%1:s'' '
        + ' with Replace, Move ''%2:s'' to ''%3:s%0:s_data.mdf'',move ''%4:s'' to '
        + ' ''%3:s%0:s_log.ldf''';
    begin
      //判断连接数
      Result := CheckOtherConnected and GetLogicInfo(LogicDBName, LogicLogName);
      if not Result then
      begin
        Result := False;
        Exit;
      end;
      with FADOCommand do
      begin
          FADOCommand.CommandText := Format(RestoreStr, [DBName, FFileName,
            LogicDBName, GetDBDataFilePath, LogicLogName]);
        try
          FADOCommand.Execute;
          Result := True;
        except
          on E: Exception do
          begin
            FLastError := '数据恢复错误:' + E.Message;
            Result := False;
          end;
        end;
      end;
    附:
    function GetLogicInfo(var LogicDBName,
      LogicLogName: string): Boolean;
    begin
      with FOpenQuery do
      begin
        try
          Close;
          SQL.Clear;
          SQL.Add(Format('use master RESTORE FILELISTONLY FROM DISK =''%s''', [FFileName]));
          Open;
          First;
          while not Eof do
          begin
            if FieldByName('Type').AsString = 'D' then
              LogicDBName := FieldByName('LogicalName').AsString;
            if FieldByName('Type').AsString = 'L' then
              LogicLogName := FieldByName('LogicalName').AsString;
            Next;
          end;
          Result := True;
        except
          on E: EOleException do
          begin
            FLastError := Format('数据恢复错误:找不到备份文件"%s"。'
              +  #10#13'请确认文件是否存在。', [FFileName]);
            Result := False;
          end;
        end;
      end;
    end;function GetDBDataFilePath: string;
    begin
      with FOpenQuery do
      begin
        try
          Close;
          SQL.Clear;
          SQL.Text := 'select filename from master..sysdatabases where name = ''' + FConnectInfo.DB + '''';
          Open;
          Result := Fields[0].AsString;
          if Result <> EmptyStr then
          begin
            if Length(ExtractFileDir(Result)) <> 3 then
              Result := ExtractFileDir(Result) + '\'
            else
              Result := ExtractFileDir(Result)
          end
        except
          on E: Exception do
            FLastError := '得到系统路径错误:' + E.Message;
        end;
      end;
    end;