SQL Server附加数据库出错,错误代码5123

当在SQL Server中附加数据库时,有可能会遇到错误代码5123。这种错误代码表示无法将文件复制到目标位置。这通常是由于权限问题或目标文件正在使用而导致的。以下是附加数据库出错时的一些解决方法和步骤。

1. 检查权限

请确保当前登录的用户有足够的权限来修改目标位置。对于SQL Server,这通常意味着需要具有修改目标文件所在的目录的权限。您可以使用以下脚本来检查目录权限:

EXEC xp_cmdshell 'dir D:\SQLData\TestDB.mdf'

如果此脚本启动了,则表明当前用户具有执行xp_cmdshell的权限。否则,您需要使用以下脚本来授予权限:

sp_configure 'show advanced options',1
GO
RECONFIGURE WITH OVERRIDE
GO
sp_configure 'xp_cmdshell',1
GO
RECONFIGURE WITH OVERRIDE
GO

注意:为了安全起见,不建议开启xp_cmdshell,因为它可能被用来执行危险的任务。

如果您确定该用户具有目标位置的权限,则可以将其更改为选择源文件的权限。您可以使用以下脚本将目标目录的权限更改为选择的用户账户:

EXEC xp_cmdshell 'icacls D:\SQLData\TestDB.mdf /grant USERNAME:(R)'

2. 检查文件是否正在使用

请确保源文件和目标位置之间的任何连接都已断开。特别是,如果同一SQL Server实例中已经附加了该数据库,则应将其分离,然后再次进行尝试。您可以使用以下脚本来检查数据库状态,并使其脱机:

USE master;
GO

ALTER DATABASE TestDB SET OFFLINE WITH ROLLBACK IMMEDIATE;
GO

ALTER DATABASE TestDB SET ONLINE;
GO

如果还有其他进程占用了源文件或目标位置,您可以使用Windows任务管理器或其他进程监控工具来终止进程。如果不能终止进程,请重启计算机以释放文件句柄。

示例说明

示例一

错误场景:当执行以下命令附加数据库时:

CREATE DATABASE TestDB ON PRIMARY 
  (NAME = TestDB_data, 
   FILENAME = 'D:\SQLData\TestDB.mdf', 
   SIZE = 10MB, 
   FILEGROWTH = 10%)
LOG ON 
  (NAME = TestDB_log, 
   FILENAME = 'D:\SQLLogs\TestDB.ldf', 
   SIZE = 5MB, 
   FILEGROWTH = 5%)

错误代码5123将返回。这是因为D:\SQLData\TestDB.mdf和D:\SQLLogs\TestDB.ldf可能已被打开或在使用状态下。

解决方法:确保数据库文件未被锁定,没有权限问题或文件夹不存在。如果尝试将数据库文件放在其他文件夹中,则授予权限。有时还可以重启数据库来解决该问题。

示例二

错误场景:当尝试通过SQL Server Management Studio附加本地文件时,错误代码5123将返回。这是因为该文件已被附加到任意数据库中。

解决方法:打开SQL Server Management Studio,运行以下脚本:

SELECT 
DB_NAME(database_id), 
physical_name 
FROM sys.master_files 
WHERE physical_name = 'D:\SQLData\TestDB.mdf'

此脚本将返回使用数据库文件的所有数据库的列表。在列表中,找到并分离此文件的数据库。现在可以重新附加文件到SQL Server。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:SQL Server附加数据库出错,错误代码5123 - Python技术站

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

相关文章

  • Quartz集群原理以及配置应用的方法详解

    Quartz集群原理以及配置应用的方法详解 概述 Quartz是一个轻量级的、开源的、基于Java的调度框架,提供了很多调度的功能,比如创建多个定时任务、按照特定的规则执行任务、支持持久化、集群等。其中,Quartz集群支持多个应用实例共同组成一个调度集群,提高任务的可用性和可靠性。 Quartz集群原理 Quartz集群通过基于JDBC的持久化机制实现了数…

    database 2023年5月21日
    00
  • springboot2+mybatis多种方式实现多数据配置方法

    下面我将给出详细的“springboot2+mybatis多种方式实现多数据配置方法”的攻略,包含以下内容: 环境配置 多数据源引入方式 多数据源的实现 1. 环境配置 首先,我们需要在pom.xml文件中引入springboot-mybatis-starter,可以使用如下配置: <dependency> <groupId>org.…

    database 2023年5月21日
    00
  • 如何使用Python获取MySQL中表中最大值和最小值?

    以下是如何使用Python获取MySQL中表中最大值和最小值的完整使用攻略,包括导入模块、连接数据库、执行查询操作等步骤。同时,提供两个示例以便更好理解如何使用Python获取MySQL中表中最大值和最小值。 步骤1:导入模块 在Python中,我们需要导入相应的模块来获取MySQL中表中最大值和最小值。以下是导入pymysql模块的基本语法: import…

    python 2023年5月12日
    00
  • MySQL教程DML数据操纵语言示例详解

    MySQL教程DML数据操纵语言示例详解 介绍 本文将详细讲解MySQL的DML数据操纵语言,包含INSERT、UPDATE、DELETE等命令的使用方式以及示例说明。 INSERT命令 INSERT命令用于添加新的数据行到表中。下面是一个简单的示例: INSERT INTO customers(name, email, phone) VALUES(‘Joh…

    database 2023年5月21日
    00
  • Java的redis 操作类-优化通用版本

    java操作redis多节点处理方式;http://blog.itpub.net/29254281/viewspace-1188644/首先maven引入依赖包<dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifact…

    Redis 2023年4月13日
    00
  • MySQL 语句执行顺序举例解析

    当执行一个 MySQL 查询时,MySQL 会按照一定的顺序进行解析、优化和执行。在进行查询优化时,MySQL 会根据一定的规则来确定执行顺序,这个顺序决定了哪些操作会先被执行,哪些操作会后执行,从而影响查询的性能。 MySQL 语句执行顺序一般按照以下顺序进行: FROM 子句 WHERE 子句 GROUP BY 子句 HAVING 子句 SELECT 子…

    database 2023年5月21日
    00
  • MySQL两种临时表的用法详解

    《MySQL两种临时表的用法详解》 什么是临时表 临时表是MySQL中一种非常有价值的工具,它是指一种在数据库连接关闭之前存在且存在于内存或者硬盘中的表。临时表不需要预定义,可以直接创建并使用,同时也是一种非常高效的用来协助完成数据分析任务的工具。 临时表的创建 局部临时表 局部临时表只在创建时所在的会话中存在,会话结束后自动销毁。局部临时表创建的语法如下:…

    database 2023年5月22日
    00
  • Docker部署搭建WebDav服务的详细过程

    下面就为您详细讲解Docker部署搭建WebDav服务的完整攻略。 Docker部署搭建WebDav服务攻略 1. 为什么要使用Docker 在介绍如何使用Docker搭建WebDav服务之前,我们需要知道Docker是什么以及它在WebDav部署中的优势。 Docker是一款轻量级的虚拟化容器技术,可以在不同的操作系统上运行,不必担心不同操作系统之间的差异…

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