AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / user-132262

Dominique's questions

Martin Hope
Dominique
Asked: 2025-02-03 16:42:58 +0800 CST

为何我无法恢复备份?

  • 6

我正在使用 SQL-Server,使用 SQL-Server Management Studio (SSMS)。

为了执行备份恢复,我通过 SSMS 创建了一个名为的 SQL Server 登录PORT-DDM\SQLEXPRESS,这是连接 SQL-Server 数据库的典型方式。

我还创建了第二个实例,名为PORT-DDM\SQLEXPRESS01(其中PORT-DDM是我的 PC 的名称),现在我想将PORT-DDM\SQLEXPRESS实例中的备份还原到PORT-DDM\SQLEXPRESS01实例中。我已进行PORT-DDM\SQLEXPRESS备份并将其存储在本地目录中C:\Temp_Folder\<filename>.bak,但在执行还原操作时,出现以下错误消息:

===================================
Restore of database '<Prod>_<Customer>' failed. (Microsoft.SqlServer.Management.RelationalEngineTasks)
------------------------------
Program Location:
   at Microsoft.SqlServer.Management.RelationalEngineTasks.RestoreDatabaseTaskFormComponent.PerformTask(ITaskExecutionContext context)
   at Microsoft.SqlServer.Management.RelationalEngineTasks.RestoreDatabaseTaskFormComponent.Perform(ITaskExecutionContext context)
   at Microsoft.SqlServer.Management.TaskForms.TaskExecutionManager.ExecuteTaskSequence(ISfcScriptCollector collector)
===================================
System.Data.SqlClient.SqlError: The operating system returned the error '5(Access is denied.)' while attempting 'RestoreContainer::ValidateTargetForCreation' on 'C:\Program Files\Microsoft SQL Server\MSSQL15.SQLEXPRESS\MSSQL\DATA\<Prod>_<Customer>.mdf'. (Microsoft.SqlServer.SmoExtended)
------------------------------
For help, click: https://go.microsoft.com/fwlink?ProdName=Microsoft+SQL+Server&ProdVer=16.100.47021.0&LinkId=20476
------------------------------
Program Location:
   at Microsoft.SqlServer.Management.Smo.RestorePlan.Execute()
   at Microsoft.SqlServer.Management.RelationalEngineTasks.RestoreDatabaseTaskFormComponent.PerformTask(ITaskExecutionContext context)

(所提及的链接似乎已失效。)

我该怎么办?

哦,我忘了说了:我的备份所在的位置可供我的电脑的每个用户访问:
临时文件夹属性图形


我已将完全控制权授予所有人,使用icalcs。现在我陷入困境,因为 SQL-Server 正在使用以下文件:C:\Program Files\Microsoft SQL Server\MSSQL15.SQLEXPRESS\MSSQL\DATA\<Prod>_<Cust>.mdf。

为了避免这种情况,我重新启动了我的 SQL-Server 会话,甚至重新启动了我的整个 PC,但问题仍然存在。

根据要求,“恢复数据库屏幕”的图像:

截屏

这正在变成一场血腥的噩梦:

  1. 首先,我收到错误消息,说他需要文件的管理员访问权限。
  2. 然后他抱怨说文件正在使用中,所以我必须重新启动计算机。
  3. 然后他抱怨说还有其他文件需要管理员权限。
  4. 一旦管理好这些,他又抱怨文件正在使用中,所以我需要重新启动计算机。
  5. 最后他说“但是你不能这样做:你正在将数据库恢复到原来的位置。”

=> 最后一件事是我创建“SQLExpress 01 ”登录的确切原因:为了能够拥有相同数据库的不同实例:一个用于运行时测试,一个用于恢复从客户站点检索的备份。通常,后者工作正常,但现在我正在处理一个数据库服务器无法访问的客户,所以我使用“生成脚本”来获取±备份。我的想法是再次备份我的计算机(在“SQLEXPRESS”登录下),在“SQLEXPRESS01”登录下恢复,并将其用于提到的“生成脚本”场景。

sql-server
  • 1 个回答
  • 125 Views
Martin Hope
Dominique
Asked: 2024-11-29 16:09:05 +0800 CST

为什么我无法恢复我的 SQL-Server 数据库?

  • 5

我有一堆文件:两个备份和一个事务日志列表。

备份称为:

  • FB20241125_233033.bak
  • FB20241126_233040.bak

(文件名与备份的日期/时间相对应。)

事务日志被称为(命令行摘录):

Prompt>dir *.trn

 Directory of C:\...\Transaction_Logs

25/11/2024  23:45         5.758.464 20241125224500.trn
26/11/2024  00:00         5.560.832 20241125230001.trn
26/11/2024  00:15         5.692.928 20241125231501.trn
...
26/11/2024  15:00         5.822.976 20241126140001.trn
26/11/2024  15:15         5.955.072 20241126141501.trn
26/11/2024  15:30         5.889.536 20241126143000.trn
27/11/2024  12:15         5.626.368 20241127111501.trn

(文件名的原因相同。)

然后我使用以下属性恢复该目录(获取两个备份文件和所有事务日志文件):

属性截图

这是我收到的错误消息:

System.Data.SqlClient.SqlError: 此备份集中的日志开始于 LSN 33845000000619000001,该日志太新,无法应用于数据库。可以恢复包含 LSN 33816000000750400001 的早期日志备份。(Microsoft.SqlServer.SmoExtended)

我自己想“但这很明显:我最近的备份是在 2024 年 11 月 26 日 23 时 30 分 40 秒进行的,而最新的事务日志的日期是后一天,所以我们不要在恢复中包含该事务日志。 ”,但这没有帮助。

有人知道我该怎么做才能恢复包含最新事务日志的最新备份?

编辑1:“*.trn”文件中的LSN怎么样?
同时,我对提到的*.trn文件运行了以下SQL查询:

RESTORE HEADERONLY FROM DISK = 'C:\...\20241125224500.trn';
RESTORE HEADERONLY FROM DISK = 'C:\...\20241125230001.trn';
...

以下是第一批结果:

FirstLSN               LastLSN             
---------------------- --------------------
33758000001254200001   33759000000515900001
33759000000515900001   33759000001579300001
33759000001579300001   33760000000835100001
33760000000835100001   33761000000090800001
33761000000090800001   33761000001176400001
33761000001176400001   33762000000412500001
33762000000412500001   33762000001492100001
33762000001492100001   33763000000648100001
33763000000648100001   33763000001722200001

如您所见,有相当多的*.trn文件,其第一个日志序列号(LSN)为3375...和3376...,那么为什么错误消息说此备份集中的日志开始于LSN 3384...?

提前致谢

sql-server
  • 1 个回答
  • 59 Views
Martin Hope
Dominique
Asked: 2024-06-07 14:36:57 +0800 CST

为什么SQL-Server Management Studio将“执行查询”更改为“保存结果”?

  • 10

我是 SQL-Server Management Studio 的常规用户,但现在我遇到了一个非常奇怪的情况:当我按下F5或单击“执行”时,SQL-Server Management Studio 不会执行我的查询。相反,它会打开“保存结果”对话框,如您所见:

在此处输入图片描述

有人见过这种情况吗?你知道如何处理吗?
提前致谢

sql-server
  • 1 个回答
  • 497 Views
Martin Hope
Dominique
Asked: 2024-02-15 23:08:03 +0800 CST

将“插入”替换为“更新”

  • 3

我正在处理 SQL-Server 数据库中的一些表,并且正在进行一些重要的修改。为了在搞砸时不丢失所有内容,我决定执行“生成脚本”(仅数据,我正在使用 Microsoft SQL Server Management Studio),所以现在我有一堆 SQL“INSERT”命令,例如:

INSERT [dbo].[User_Group_Access] ([Visible], [GroupId], [Enabled], [ControlId], [Administrator]) VALUES (0, 26, 0, 181, 0)
INSERT [dbo].[User_Group_Access] ([Visible], [GroupId], [Enabled], [ControlId], [Administrator]) VALUES (0, 26, 0, 182, 0)

哎呀,我做错事了。
没问题,我想。只需替换INSERT即可UPDATE,但这似乎并不那么简单:在 StackOverflow 上查找这个问题,有关于事务、不同数据库技术的完整讨论,...

好吧,该UPDATE命令不起作用。
但是应该还有其他命令(REPLACE不起作用,SUBSTITUTE不作为命令存在),不是吗?

有人有想法吗?
提前致谢

sql-server
  • 2 个回答
  • 47 Views
Martin Hope
Dominique
Asked: 2022-12-06 02:53:39 +0800 CST

哪两个线程正在处理哪个表以及如何解决这个问题?

  • 5

我正在开发一个多线程应用程序 (VB.Net/C#),它正在处理 SQL 服务器数据库。
通常,我的客户抱怨应用程序显示“死锁”-like 关于所谓的 SQLClient 的异常,并且通过重新启动应用程序,一切都再次正常运行(一段时间)。

根据描述,我不相信我的客户面临真正的死锁(一个线程在等待另一个线程),但我相信我正在处理两个数据库请求,很可能在同一个表上,一个事务需要那么多它阻止其他交易的时间,但这只是一个猜测,我想确定这一点。为此,我正在考虑询问数据库哪些线程当前正在访问哪些表,希望这能给我一些信息。

在此处的网站上搜索时,我发现了另一个问题dm_db_index_operational_stats中提到的表格,但作为一个新手,这看起来很复杂,因此我想问一个简单的问题:

我如何知道哪个应用程序的哪些线程当前正在访问我的 SQL 服务器数据库中的哪些表?显然,信息(进程 ID、线程 ID、线程名称、调用堆栈的(上部)……)越多越好。

这存在吗?

就可能的解决方案而言:
我的应用程序基于此 DLL:

"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\System.Data.dll" 

...为了访问数据库执行以下操作(例如删除过时的条目):

Public Shared Sub ExecuteSQL(ByVal sSQL As String, ByVal ParamArray dbParams() As SqlParameter)
    Dim oCommand As SqlCommand = Nothing
    Try
        oCommand = BuildCommand(sSQL, dbParams)
        oCommand.CommandTimeout = 60
        oCommand.ExecuteNonQuery()
    Catch ex As Exception
        Debug.WriteLine(ex.Message)
        Throw
    Finally
        If oCommand IsNot Nothing Then ReleaseConnection(oCommand.Connection)
    End Try
End Sub

我想添加一个锁定机制以避免此类问题,例如:

DatabaseConnection.Lock_Table("Table_which_is_handled");
ExecuteSQL(...); // working on "Table_which_is_handled"
DatabaseConnection.Release_Lock_Table("Table_which_is_handled");

这存在吗?

有人有想法吗?
提前致谢

与Dan Huzman讨论后编辑:Dan Huzman提到的
这个答案提到了以下 SQL 查询:

--Get xml_deadlock_report events from system_health session file target
WITH
  --get trace folder path and append session name with wildcard (assumes base file name is same as session name)
  all_trace_files AS (
    SELECT path + '\system_health*.xel' AS FileNamePattern
    FROM sys.dm_os_server_diagnostics_log_configurations
    )
  --get xml_deadlock_report events from all system_health trace files
, deadlock_reports AS (
    SELECT CAST(event_data AS xml) AS deadlock_report_xml
    FROM all_trace_files
    CROSS APPLY sys.fn_xe_file_target_read_file ( FileNamePattern, NULL, NULL, NULL) AS trace_records
    WHERE trace_records.object_name like 'xml_deadlock_report'
)
SELECT TOP 10
  deadlock_report_xml.value('(/event/@timestamp)[1]', 'datetime2') AS UtcTimestamp
, deadlock_report_xml AS DeadlockReportXml
FROM deadlock_reports;

这是指位于客户计算机上的一些文件,很可能位于目录“C:\Program Files\Microsoft SQL Server\MSSQL15.SQLEXPRESS\MSSQL\Log”中(为了确定,请检查SELECT path FROM sys.dm_os_server_diagnostics_log_configurations)。
我可以检索提到的“system_health*.xel”文件并将它们放在我的本地计算机上(假设在目录“C:\Temp_Folder”中),然后启动以下新查询:

--Get xml_deadlock_report events from system_health session file target
WITH
  --get trace folder path and append session name with wildcard (assumes base file name is same as session name)
  all_trace_files AS (
    SELECT 'C:\Temp_Folder\system_health*.xel' AS FileNamePattern
    FROM sys.dm_os_server_diagnostics_log_configurations
    )
  --get xml_deadlock_report events from all system_health trace files
, deadlock_reports AS (
    SELECT CAST(event_data AS xml) AS deadlock_report_xml
    FROM all_trace_files
    CROSS APPLY sys.fn_xe_file_target_read_file ( FileNamePattern, NULL, NULL, NULL) AS trace_records
    WHERE trace_records.object_name like 'xml_deadlock_report'
)
SELECT deadlock_report_xml.value('(/event/@timestamp)[1]', 'datetime2') AS UtcTimestamp
, deadlock_report_xml AS DeadlockReportXml
FROM deadlock_reports;

这是否会为我提供我正在寻找的信息,或者我是否需要在客户的计算机上打开 Microsoft SQL Server Management Studio 会话?

sql-server
  • 1 个回答
  • 35 Views
Martin Hope
Dominique
Asked: 2022-07-12 05:55:59 +0800 CST

如何在 SQL-server 2019 中使用“fn_dblog”

  • 0

在我之前的问题中,我询问了如何知道我的 SQL-Server 2019 数据库中发生了什么。过了一会儿,我发现有一种表格,叫做fn_dblog,它提供了一些有趣的信息,但我仍然有一些问题(字面意思是从上一个问题复制而来):

SELECT Top 10 [Begin Time] [End Time]
  FROM fn_dblog(null,null)
  WHERE UPPER(AllocUnitName) LIKE '%TABLENAME_STATUS%'

...由我的 Microsoft SQL Server Management Studio 提出的位置[Begin Time]和位置。[End Time]令我惊讶的是,结果如下所示:

Title: End Time
NULL
...
NULL

现在我有以下问题:

  • [Begin Time]柱子怎么了?
  • 为什么[End Time]没有填写?
  • 当我将普通的 SQL 查询结果复制到剪贴板时,列名也会被复制,但是当我复制与 相关的 SQL 查询的结果时fn_dblog,列名不会出现在剪贴板中。为什么会这样,我该如何改变呢?

除此之外,我还发现了另一个“表”,名为fn_full_dblog,但更糟糕的是:

SELECT Top 10 * 
  FROM sys.fn_full_dblog(null,null, null, null, null, null, 
                         null, null, null, null,null)
  WHERE UPPER(AllocUnitName) LIKE '%TABLENAME_STATUS%'

=> 根本没有结果!

有人可以给我一些关于如何阅读fn_dblog以及可能fn_full_dblog或任何其他可能使用有趣信息的“表格”的信息吗?

提前致谢

sql-server transaction-log
  • 1 个回答
  • 184 Views
Martin Hope
Dominique
Asked: 2022-07-08 00:19:49 +0800 CST

此 SQL 请求何时产生结果?

  • 7

我正在开发一个 SQL 服务器数据库,其中包含订单和机器,执行这些订单。一台机器不能同时分配一个以上的活动订单。换句话说:这个 SQL 请求永远不会产生结果:

SELECT MachineId
  FROM Orders
  WHERE (Orders.Status=1)
  GROUP BY MachineId
  HAVING COUNT(Id)>1

我在 Microsoft SQL Server Management Studio 环境中打开了这个 SQL 请求,每次按F5时,我确实看不到任何结果。

但是,我确信 SQL 查询在某些时候确实会产生结果,并且我对那些时间以及那个时候该查询的结果很感兴趣。

有人知道我如何找到这个吗?(“归档日志”标签只是一个想法)

提前致谢

sql-server scheduled-tasks
  • 2 个回答
  • 1506 Views
Martin Hope
Dominique
Asked: 2022-06-30 23:46:43 +0800 CST

将 SQL 文件嵌套到 SQL Server 中的另一个文件中

  • 3

我有一个简单的 SQL 文件用于执行一些测试:

DECLARE @VAR1 AS VARCHAR(100) = '12345'
DECLARE @VAR2 AS INTEGER      = 54321

WAITFOR DELAY '00:00:02'

INSERT Orders SELECT @VAR1 AS COL1, @VAR2 AS COL2, ...
...

在启动所有这些之前,我想做一些清洁工作:

/* Clean SpecialSubSubEntries */
DELETE SpecialSubSubEntries
  WHERE Id IN (SELECT Id FROM SubSubEntries
                 WHERE SubEntryId IN (SELECT Id FROM SubEntries
                                        WHERE EntryId IN (SELECT Id FROM Entries
                                                            WHERE Name='ENTRY01')
                                      )
               )

DELETE SubSubEntries
  WHERE SubEntryId IN (SELECT Id FROM SubEntries
                         WHERE EntryId IN (SELECT Id FROM Entries
                                             WHERE Name='ENTRY01')
                      )
...

出于可读性的原因,我想将所有清理命令放在一个文件“cleanup.sql”中,并在我的 SQL 文件的开头启动它。我该怎么做这样的事情?

我想它是这样的:

EXECUTE ".\cleanup.sql"

...但我不确定语法。

sql-server t-sql
  • 2 个回答
  • 259 Views
Martin Hope
Dominique
Asked: 2022-05-12 23:33:31 +0800 CST

SQL 服务器表的校验和

  • 1

我正在安装应用程序和数据库。

为了检查文件是否正确,我可以简单地取校验和。
有没有办法检查表格是否正确?(我意识到我可以将整个表放入一个文件并获取该文件的校验和,但也许有更简单的方法。)

sql-server checksum
  • 1 个回答
  • 104 Views
Martin Hope
Dominique
Asked: 2021-08-21 00:24:49 +0800 CST

如何计算 SQL 中不同元组的最大值和最小值?

  • 0

我正在开发一个程序,该程序将“预测”表中下一个可能的元组。

其中一个功能是发现算术级数,有不同的方法可以做到这一点:

  • 使用System.Data.DataTable,检查DataTable.Columns[i].AutoIncrement(我正在使用 .Net (C#))
  • 使用索引
  • 在实际数据中查找算术级数

这个问题是关于最后一部分的。我能够从列中获取所有数据,将它们下载到列表中,并检查下载列表中是否有算术级数,但我想知道是否有一种简单的 SQL 方法可以做到这一点,例如:

SELECT MAX(Col1 - Previous_Tupple.Col1) FROM Table1
SELECT MIN(Col1 - Previous_Tupple.Col1) FROM Table1

如果两个结果相等(而不是零),那么我在Col1from中有一个算术级数Table1。
我已经找到了一种访问上一个和下一个元组的方法,使用LAG和LEADSQL 函数,如下所示:

SELECT 
  t.Col1 - LAG(t.Col1) OVER (ORDER BY t.Col1)
FROM Table1 t

现在我只有两个问题要解决:

  • 我非常天真地尝试启动此查询:
    SELECT MAX(t.Col1 - LAG(t.Col1) OVER (ORDER BY t.Col1)) FROM Table1 t
    失败:Msg 4109, Level 15, Windowed functions cannot be used in the context of another windowed function or aggregate.
  • 在第一个元组的情况下,LAG返回NULL,所以这可能会影响MAX和MIN计算

所以我的问题是:我如何计算基于 - 的 SQL 查询的MAXand ,同时删除烦人的- 值?MINLAGNULL

sql-server query
  • 1 个回答
  • 101 Views
Martin Hope
Dominique
Asked: 2021-01-19 02:44:56 +0800 CST

如何在设计时将字段的定义从一个表复制到另一个表?

  • 0

我有一个包含十个字段f1(作为整数字段)到f10(作为字符字段)的表。中间还有其他整数、字符和日期字段。

我想将这些字段定义复制到另一个表中,而无需重新编写整个定义。我正在使用数据字典,它似乎没有涵盖此功能。

在第一个答案后编辑第
一个答案提到了如何在运行时执行此操作,但我专门在设计时寻找解决方案。

编辑
我发现有不同的命令行实用程序可用于处理 Progress 数据库:ProDB用于创建新数据库,ProUtil用于执行多项任务(但我没有找到ProUtil <add a field to a table>)。

我怎样才能做到这一点?

database-design fields
  • 2 个回答
  • 52 Views

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目

    • 12 个回答
  • Marko Smith

    如何让sqlplus的输出出现在一行中?

    • 3 个回答
  • Marko Smith

    选择具有最大日期或最晚日期的日期

    • 3 个回答
  • Marko Smith

    如何列出 PostgreSQL 中的所有模式?

    • 4 个回答
  • Marko Smith

    列出指定表的所有列

    • 5 个回答
  • Marko Smith

    如何在不修改我自己的 tnsnames.ora 的情况下使用 sqlplus 连接到位于另一台主机上的 Oracle 数据库

    • 4 个回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Martin Hope
    Jin 连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane 如何列出 PostgreSQL 中的所有模式? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh 为什么事务日志不断增长或空间不足? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland 列出指定表的所有列 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney MySQL 能否合理地对数十亿行执行查询? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx 如何监控大型 .sql 文件的导入进度? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve