只有mdf文件的数据库附加失败的修复方法分享(置疑、只读)

这里为大家详细介绍“只有mdf文件的数据库附加失败的修复方法分享(置疑、只读)”。

问题描述

当我们在 SQL Server 管理器中尝试附加一个数据库时,有时会出现以下错误:

Msg 5172, Level 16, State 15, Line 1
无法恢复附加数据库,因为该数据库副本与现有数据库冲突。选择的回滚操作无法执行。原因是,在包含初始快照的设备上找到了要附加到现有的数据库的同名文件。使用 RESTORE FILELISTONLY 来确定文件的逻辑名称。
Msg 1802, Level 16, State 4, Line 1
无法恢复附加数据库(名为 'mydatabase' 的数据库)。 

这通常是由于附加数据库的 MDF 数据文件存在冲突引起的,可能是数据库已经存在,或者附加的文件中与现有数据库有相同的文件名。

解决方法

方法一:使用 T-SQL 执行附加数据库

如果使用 SQL Server 管理器附加数据库存在问题,我们可以尝试使用 T-SQL 命令来附加数据库。

首先,在 SQL Server 管理器中打开一个新的查询窗口,在该窗口中输入以下命令:

CREATE DATABASE [mydatabase] ON 
( FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\DATA\mydatabase.mdf' )
FOR ATTACH_REBUILD_LOG;

请注意,[mydatabase] 是新数据库的名称,而 C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\DATA\mydatabase.mdf 是 MDF 数据文件的路径和名称。这个命令会重新建立数据库的事务日志以解决附加失败的问题。

方法二:将 MDF 文件移动到新的位置

如果附加时出现问题,可能是由于数据库已经存在,或者附加的文件中与现有数据库有相同的文件名。在这种情况下,我们可以尝试将 MDF 数据文件移动到一个新的位置,然后再附加它。

如下示例,首先将现有的 MDF 文件移动到一个新的位置(例如,C:\Backup\mydatabase.mdf),然后执行以下命令:

CREATE DATABASE [mydatabase] ON 
( FILENAME = N'C:\Backup\mydatabase.mdf' )
FOR ATTACH_REBUILD_LOG;

方法三:将数据库设置为只读模式

如果我们无法移动 MDF 文件或从外部访问它,我们可以尝试将数据库设置为只读模式,这样我们就可以在不需要实际附加数据库的情况下访问其中的数据。在只读模式下运行附加操作可以避免修改数据库或冲突问题,因此,无需附加日志文件即可附加数据库。

如下示例,我们可以通过以下 T-SQL 命令将数据库设置为只读模式:

USE master;
GO
ALTER DATABASE [mydatabase] SET READ_ONLY WITH ROLLBACK IMMEDIATE;
GO

接下来,我们可以使用以下命令将 MDF 文件附加到只读数据库中:

CREATE DATABASE [mydatabase] ON 
( FILENAME = N'C:\Backup\mydatabase.mdf' )
FOR ATTACH;

请注意,我们在这里省略了 FOR ATTACH_REBUILD_LOG,这意味着我们只将 MDF 数据文件附加到只读数据库中。

以上是几种修复只有 MDF 文件的数据库附加失败的方法,我们可以根据实际情况选择合适的方法进行操作。

希望这能对大家有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:只有mdf文件的数据库附加失败的修复方法分享(置疑、只读) - Python技术站

(0)
上一篇 2023年5月21日
下一篇 2023年5月21日

相关文章

  • SQL SERVER2012中新增函数之字符串函数CONCAT详解

    SQL SERVER2012中新增函数之字符串函数CONCAT详解 简介 SQL SERVER2012新增了一个字符串函数CONCAT,它的作用是将多个字符串连接起来成为一个字符串。这个函数比较灵活,它可以支持多个参数,而且每个参数可以是字符数据类型、二进制数据类型、数字数据类型等。 语法 CONCAT(string1, string2 [, stringN…

    database 2023年5月21日
    00
  • 面试题锦集:1、数据库三大范式,2、mysql索引类型及作用,3、事务的特性和隔离级别

    目录 面试题集锦 一、数据库三大范式 二、mysql有哪些索引类型及作用 三、事务的特性和隔离级别 1、事务的四大特性 2、事务的隔离级别 3、什么是脏读、不可重复度、幻读 4、解决办法 面试题集锦 一、数据库三大范式 第一范式(1NF): 指数据库中表的每一列都是不可分割的最小单位 # 分割前: 地址 安徽省合肥市蜀山区 # 分割后: 省 | 市 | 区 …

    MySQL 2023年4月8日
    00
  • springboot整合apache ftpserver详细教程(推荐)

    我来为您详细讲解“springboot整合apache ftpserver详细教程(推荐)”。 1. 什么是Apache FtpServer Apache Ftpserver是一个基于Java的FTP服务器,它是一个完整的FTP服务器,拥有丰富的配置选项,支持多种身份验证方式,同时也支持SSl和TLS加密,是目前使用较广泛的FTP服务器之一。 2. Spri…

    database 2023年5月22日
    00
  • Linux监控cpu以及内存使用情况之top命令(详解)

    Linux监控cpu以及内存使用情况之top命令(详解) 什么是top命令? top命令是Linux系统中常用的一个命令,能够实时动态地监测系统中进程的运行情况,包括进程的CPU占用情况、内存占用情况等。 top命令的语法 top [选项] 选项说明 -d<秒数>:每隔几秒更新一次信息,默认是3秒。 -n<次数>:在退出top之前要显…

    database 2023年5月22日
    00
  • SQL中Group分组获取Top N方法实现可首选row_number

    首先,我们需要明确一点,就是在SQL中进行分组获取Top N的处理,我们有多种方法可以实现。其中比较受欢迎的一种方法就是使用row_number函数。 row_number函数的作用是为查询结果中返回的每一行分配一个唯一的数字,这个数字一般是按照指定的排序条件进行排列的。我们可以利用这个数字来实现分组获取Top N的操作。 下面,我将为你详细讲解使用row_…

    database 2023年5月21日
    00
  • 详解SQL死锁检测的方法

    详解SQL死锁检测的方法 什么是SQL死锁 SQL死锁是指两个或多个事务在互相等待对方所占用的资源时,造成彼此都无法继续执行的情况。当没有外力干涉时,死锁情况将会一直持续下去,导致性能下降,任务无法完成,甚至是应用崩溃。 如何检测SQL死锁 在SQL Server中,可以通过以下几种方式检测SQL死锁: 1. SQL Server Profiler 通过SQ…

    database 2023年5月21日
    00
  • Oracle控制文件丢失恢复归档模式方法

    Oracle控制文件丢失恢复归档模式方法 当Oracle数据库归档模式下的控制文件丢失后,需要进行恢复操作。本攻略将详细讲解Oracle控制文件丢失恢复归档模式的方法,包括以下步骤: 验证控制文件丢失 创建pfile文件 启动nomount模式 创建控制文件 修改数据库状态 恢复归档文件 下面将分别对每个步骤进行详细介绍。 1. 验证控制文件丢失 首先,我们…

    database 2023年5月22日
    00
  • pymysql 插入数据 转义处理方式

    当使用pymysql向MySQL数据库中插入数据时,需要注意字符串中可能含有引号、单引号、反斜杠等特殊字符,这些字符可能导致SQL语句语法出现错误。为了避免这种情况,需要使用转义处理方式,将特殊字符转换为可以被SQL语句安全接收的形式。 以下是pymysql插入数据的转义处理方式: 使用pymysql.escape_string()函数 pymysql.es…

    database 2023年5月22日
    00
合作推广
合作推广
分享本页
返回顶部