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

yizhihongxing

这里为大家详细介绍“只有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日

相关文章

  • FROM_UNIXTIME 格式化MYSQL时间戳函数

    FROM_UNIXTIME是MYSQL中的一个日期时间函数,用于将UNIX时间戳(以秒为单位的时间戳)格式化成MYSQL的日期时间格式。其基本语法如下: FROM_UNIXTIME(unix_timestamp,[format]) 其中,unix_timestamp表示需要转换的UNIX时间戳,必填项;[format]表示格式化输出的日期时间格式,可选项,如…

    database 2023年5月22日
    00
  • 在CentOS上MySQL数据库服务器配置方法

    下面是在CentOS上配置MySQL数据库服务器的完整攻略: 配置步骤 安装MySQL数据库服务器。 $ sudo yum install mysql-server 启动MySQL服务并设置开机自启动。 $ sudo systemctl start mysqld $ sudo systemctl enable mysqld 进入MySQL服务器并通过命令设置…

    database 2023年5月22日
    00
  • Redis C客户端库Hiredis的应用

    Redis   Redis(REmote DIctionary Server)是一个高性能的key-value数据库。  Redis是一个开源的使用ANSI C语言编写、遵守BSD协议、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。它通常被称为数据结构服务器,因为值(value)可以是 字符串(String), 哈…

    Redis 2023年4月13日
    00
  • MySQL和Redis的数据一致性问题

    MySQL和Redis都是常用的数据库软件,它们在业务开发中常常被同时使用。而在使用中,我们需要解决MySQL和Redis之间数据一致性的问题。这里提供一些解决数据一致性问题的完整攻略: 1、简述MySQL和Redis的数据一致性问题 MySQL和Redis作为两个不同的数据库,它们之间的数据交互是不可避免的。在实际开发中,我们可能需要在Redis中缓存部分…

    database 2023年5月22日
    00
  • 如何用mysql自带的定时器定时执行sql(每天0点执行与间隔分/时执行)

    使用MySQL自带的定时器可以很方便地实现SQL语句的定时执行,无需使用第三方定时任务软件,下面是详细的攻略: 1. 启用定时器 要使用MySQL自带的定时器,需要先启用定时器功能。在MySQL的配置文件my.cnf中,打开以下配置: [mysqld] event_scheduler = ON 重启MySQL服务,或者执行以下语句,使配置修改生效: SET …

    database 2023年5月22日
    00
  • 关于CentOS 8 搭建MongoDB4.4分片集群的问题

    本文将详细讲解如何在 CentOS 8 上搭建 MongoDB 4.4 分片集群。 环境准备 三台 CentOS 8 服务器,最好是在同一个局域网内 所需软件:MongoDB 4.4 安装 MongoDB 在三台服务器上分别执行如下命令安装 MongoDB: sudo yum install -y mongodb-org 配置 MongoDB 在每个节点上创…

    database 2023年5月22日
    00
  • Redis分布式锁的python实现

    #!/usr/bin/env python # coding=utf-8 import time import redis class RedisLock(object): def __init__(self, key): self.rdcon = redis.Redis(host=”, port=6379, password=””, db=1) self…

    Redis 2023年4月11日
    00
  • 详解MySQL Shell 运行 SQL 的两种内置方法

    详解MySQL Shell 运行 SQL 的两种内置方法 MySQL Shell是MySQL官方的新一代命令行客户端,它支持运行SQL,并且提供了两种内置的方法来运行SQL。本文将详细介绍这两种方法以及它们的使用方式。 方法一:使用 sql() 函数 sql(sql_statement) sql() 函数可以接收一个 SQL 语句作为参数,并且会返回执行结果…

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