Sql server 2005 附加数据库时出现的问题
出现提示: 执行Transact-sql语句或批处理时发生了异常
尝试打开或创建物理文件'e:\db.mdf'时,create file 遇到操作系统错误5(错误:5123) 

解决方案 »

  1.   


    sp_attach_single_file_db
    将只有一个数据文件的数据库附加到当前服务器。语法
    sp_attach_single_file_db [ @dbname = ] 'dbname'
        , [ @physname = ] 'physical_name'参数
    [@dbname =] 'dbname'要附加到服务器的数据库的名称。dbname 的数据类型为 sysname,默认值为 NULL。 [@physname =] 'phsyical_name'据库文件的物理名称,包括数路径。physical_name 的数据类型为 nvarchar(260),默认值为 NULL。返回代码值
    0(成功)或 1(失败)结果集
    无注释
    当使用 sp_attach_single_file_db 将数据库附加到服务器时,它创建一个新的日志文件并执行额外的清除工作,从新附加的数据库中删除复制。仅对以前使用显式 sp_detach_db 操作从服务器分离的数据库执行 sp_attach_single_file_db。权限
    只有 sysadmin 和 dbcreator 固定服务器角色的成员才能执行本过程。示例
    下面的示例分离 pubs,然后将 pubs 中的一个文件附加到当前服务器。EXEC sp_detach_db @dbname = 'pubs'
    EXEC sp_attach_single_file_db @dbname = 'pubs', 
       @physname = 'c:\Program Files\Microsoft SQL Server\MSSQL\Data\pubs.mdf'另以后不要删除日志,可以清除日志中的内容或收缩日志. 
    引用楼主 adis789 的帖子:
    sql server日志为啥会增长很快, 
    有一个程序每5秒钟写数据一次,然后数据库日志经常增长很快,怎么避免这样的事情发生呢? 
    怎么能让sql server日志增长不要这么快,数据文件才100M日志文件居然1G多。 SQL code清除日志: 
    DECLARE @LogicalFileName sysname,
            @MaxMinutes INT,
            @NewSize INT
    USE     szwzcheck             -- 要操作的数据库名
    SELECT  @LogicalFileName = 'szwzcheck_Log',  -- 日志文件名
    @MaxMinutes = 10,               -- Limit on time allowed to wrap log.
            @NewSize = 20                  -- 你想设定的日志文件的大小(M)
    -- Setup / initialize
    DECLARE @OriginalSize int
    SELECT @OriginalSize = size 
      FROM sysfiles
      WHERE name = @LogicalFileName
    SELECT 'Original Size of ' + db_name() + ' LOG is ' + 
            CONVERT(VARCHAR(30),@OriginalSize) + ' 8K pages or ' + 
            CONVERT(VARCHAR(30),(@OriginalSize*8/1024)) + 'MB'
      FROM sysfiles
      WHERE name = @LogicalFileName
    CREATE TABLE DummyTrans
      (DummyColumn char (8000) not null)
    DECLARE @Counter   INT,
            @StartTime DATETIME,
            @TruncLog  VARCHAR(255)
    SELECT  @StartTime = GETDATE(),
            @TruncLog = 'BACKUP LOG ' + db_name() + ' WITH TRUNCATE_ONLY'
    DBCC SHRINKFILE (@LogicalFileName, @NewSize)
    EXEC (@TruncLog)
    -- Wrap the log if necessary.
    WHILE     @MaxMinutes > DATEDIFF (mi, @StartTime, GETDATE()) -- time 
          AND @OriginalSize = (SELECT size FROM sysfiles WHERE name = 
    @LogicalFileName)  
          AND (@OriginalSize * 8 /1024) > @NewSize  
      BEGIN -- Outer loop.
        SELECT @Counter = 0
        WHILE  ((@Counter < @OriginalSize / 16) AND (@Counter < 50000))
          BEGIN -- update
            INSERT DummyTrans VALUES ('Fill Log')  
            DELETE DummyTrans
            SELECT @Counter = @Counter + 1
          END   
        EXEC (@TruncLog)  
      END   
    SELECT 'Final Size of ' + db_name() + ' LOG is ' +
            CONVERT(VARCHAR(30),size) + ' 8K pages or ' + 
            CONVERT(VARCHAR(30),(size*8/1024)) + 'MB'
      FROM sysfiles 
      WHERE name = @LogicalFileName
    DROP TABLE DummyTrans
    SET NOCOUNT OFF
     
    把szwzcheck换成你数据库的名字即可,在查询分析器里面运行。 
    有全角的空格(为了显示好看),你自己把他换一下. 
    收缩日志:企业管理器--所有任务--收缩数据库--文件--选日志文件收缩
      

  2.   

    or
    CREATE DATABASE [testdb] ON 
    ( FILENAME = N'G:\SQLDATA\testdb_Data.MDF' ) 
    FOR ATTACH 
    GO 
    if not exists (select name from master.sys.databases sd where name = N'testdb' and SUSER_SNAME(sd.owner_sid) = SUSER_SNAME() ) EXEC [testdb].dbo.sp_changedbowner @loginame=N'cpname\Administrator', @map=false
      

  3.   

    该mdf文件是好的,没有被损坏?
      

  4.   

    Sql server 2005 附加数据库时出现的问题 
    出现提示: 执行Transact-sql语句或批处理时发生了异常 
    尝试打开或创建物理文件'e:\db.mdf'时,create file 遇到操作系统错误5(错误:5123) .mdf有没有损坏??换台机子附加一下试试..