在 docker 容器中恢复 AdventureWorks2017 数据库时出现以下错误。运行 SQL Server 2019 CTP 2.0 (mcr.microsoft.com/mssql/server:vNext-CTP2.0-ubuntu) 备份和目标数据量都被持久化。创建新数据库没有问题。检查了路径,它们是正确的。使用 2017 年最新的 docker 镜像恢复时没有任何问题。
其他任何人都对 2019-CTP2 有此问题,解决方法?
消息 3634,级别 16,状态 1,第 7 行 尝试在“/var/opt/mssql/data/AdventureWorks2017”上执行“RestoreContainer::ValidateTargetForCreation”时,操作系统返回错误“2(系统找不到指定的文件。)” .mdf'。消息 3156,级别 16,状态 5,第 7 行文件“AdventureWorks2017”无法恢复到“/var/opt/mssql/data/AdventureWorks2017.mdf”。使用 WITH MOVE 标识文件的有效位置。消息 3634,级别 16,状态 1,第 7 行 尝试在“/var/opt/mssql/log/AdventureWorks2017_log”上执行“RestoreContainer::ValidateTargetForCreation”时,操作系统返回错误“2(系统找不到指定的文件。)” .ldf'。消息 3156,级别 16,状态 5,第 7 行文件“AdventureWorks2017_log”无法恢复到“ /var/opt/mssql/log/AdventureWorks2017_log.ldf'。使用 WITH MOVE 标识文件的有效位置。消息 3119,级别 16,状态 1,第 7 行 规划 RESTORE 语句时发现问题。以前的消息提供了详细信息。消息 3013,级别 16,状态 1,第 7 行 RESTORE DATABASE 异常终止。
创建容器。
$datapath = "D:\Foo";
$logpath = "D:\Foo";
$backuppath = "D:\Foo";
$pass = ":-)" …Run Code Online (Sandbox Code Playgroud) 我编写了以下存储过程:
CREATE PROCEDURE dbo.usp_DEMO
@LOGINSQL VARCHAR(30),
@DBNAME VARCHAR(40)
WITH EXECUTE AS owner
AS
DECLARE @SQL NVARCHAR(1000)
SET @SQL = 'USE'
SET @SQL = @SQL + ' ' + @DBNAME + ' ' + ' CREATE USER ' + ' '
+ @LOGINSQL + ' ' + ' FOR LOGIN ' + ' ' + @LOGINSQL + ' '
+ ' ALTER ROLE [DB_OWNER] ADD MEMBER ' + ' '
+ @LOGINSQL
EXEC sp_executesql @SQL
Run Code Online (Sandbox Code Playgroud)
像这样运行:
use master
go
exec usp_DEMO …Run Code Online (Sandbox Code Playgroud) 我无法在 Windows 11 计算机上安装 SQL Server 2019,因为它无法启动数据库引擎服务,我不明白为什么。这是我的个人计算机,我对其拥有完全访问权限和所有权限。
我知道这个错误已经发布在整个互联网上,并且我已经在 StackOverflow 上看到了一些错误,但是我在任何地方找到的解决方案都没有帮助我解决这个问题。
我花了相当多的时间尝试在线多个教程,但我觉得我已经走进了死胡同。无奈之下,我什至尝试过重装windows,但都无济于事。
我希望我的解释足够清楚,即使我快要睡着了,因为我熬夜试图解决这个问题。非常感谢您的帮助,我可以提供更多有关我尝试过或未尝试过的日志或信息。
编辑:正如评论中所建议的,我已经使用命令提示符检查了扇区大小,这是输出,它确实不是预期值:
C:\WINDOWS\system32>fsutil fsinfo sectorinfo C:
LogicalBytesPerSector : 512
PhysicalBytesPerSectorForAtomicity : 32768
PhysicalBytesPerSectorForPerformance : 32768
FileSystemEffectivePhysicalBytesPerSectorForAtomicity : 4096
Device Alignment : Aligned (0x000)
Partition alignment on device : Aligned (0x000)
No Seek Penalty
Trim Supported
Not DAX capable
Not Thinly-Provisioned
Run Code Online (Sandbox Code Playgroud)
摘要日志:
Overall summary:
Final result: Failed: see details below
Exit code (Decimal): -2061893606
Start time: 2022-02-02 02:21:47
End time: 2022-02-02 02:25:37
Requested action: Install
Setup completed with required …Run Code Online (Sandbox Code Playgroud) 我们正在迁移到 SQL Server 2019 RTM 版本,并注意到我们使用SET IDENTITY_INSERTON/OFF 语句的存储过程之一失败,但在 SQL Server 2017 及更早版本中正常工作。
即使将兼容性级别更改为 SQL Server 2017,在 SQL Server 2019 中的工作方式也不同。这看起来像是一个没有记录在案的错误/行为更改。
任何人遇到类似问题或知道这是否是报告的问题?我尝试搜索它,但报告该问题的另一个人是 ODBC 和 SQL Server 2019 CTP 版本的组合。
我们有很多客户在 SQL Server 2017 及更早版本上运行我们产品的早期版本,我们无法更改这些存储过程,但仍想迁移到 SQL Server 2019,现在这已成为我们 SQL Server 2019 迁移的阻碍.
这是在 SQL Server 2019 中失败但在 SQL Server 2017 及更早版本中运行良好的代码片段
如何重现行为。
CREATE PROC proc_inner
AS
BEGIN
SET IDENTITY_INSERT [#TMP_MESSAGE] ON;
INSERT INTO [#TMP_MESSAGE] (DCORP, ENTITYKEY, SEQNO, MESSAGE)
SELECT
'test', 1, 1, 'bdkfsjk';
SET IDENTITY_INSERT #TMP_MESSAGE OFF;
END;
GO
CREATE …Run Code Online (Sandbox Code Playgroud) 这是我的示例代码
drop function rowcount_test
go
CREATE FUNCTION dbo.rowcount_test () RETURNS INT AS
BEGIN
DECLARE @v INT
SELECT @v = 1
return @@ROWCOUNT
END
GO
grant exec on dbo.rowcount_test to public
go
SELECT dbo.rowcount_test()
Run Code Online (Sandbox Code Playgroud)
由 mssql 2017(及更早版本)执行时,它给出 1
由 mssql 2019 执行时它给出 0
它在 mssql 2019(标准版)执行时给出 1,并将 db 置于 2017 兼容模式
以前从来没出过问题……是MSSQL 2019中的某种影响代码的设置还是某种bug?
t-sql sql-server rowcount user-defined-functions sql-server-2019
就像任何零售业务一样,我们有一个 Orders 表和一个 Inventory 表。我要做的是检查我们有足够库存可供发货的订单。我需要考虑以下几点:
如果订单中的所有商品都可用,则将此订单视为“可交付”
按照OrderID( intvalue)的顺序检查 Order 的可交付状态。即OrderID = 12,依此类推。
在检查下一个订单的可交付性之前,减少下一个订单的可用库存(不更新库存表,只考虑之前订单已经消耗的库存数量)。
如果我们没有足够的库存用于订单中的 1 个或多个项目,请完全忽略该订单并且不要减少下一个要检查的订单的可用库存数量。
在以下示例中:
Order = 100 完全可交付,因为我们有足够的库存来存放所有产品。Order = 200 无法完全交付,因为 PID 2 需要数量 5,但在订单 100 消耗了 2 个之后,我们只剩下 3 个Order = 300也完全可交付,因为我们有所有产品的足够库存。测试数据
INSERT INTO @Inventory (PID, Qty)
VALUES (1 , 10)
, (2 , 5)
, (3 , 2)
INSERT INTO @Order (OrderID, PID, Qty)
VALUES (100 , 1 , 2) --\
, (100 , 2 …Run Code Online (Sandbox Code Playgroud) 我正在使用mcr.microsoft.com/mssql/server:2019-latest容器,并希望挂载其数据目录,以便在服务器出现故障时数据不会丢失。
数据目录位于里面的什么位置?文档根本没有提到这一点。
我有下面的 Json 对象。如何获取对象数组的计数。
{
"Model": [
{
"ModelName": "Test Model",
"Object": [
{
"ID": 1,
"Name": "ABC"
},
{
"ID": 11,
"Name": "ABCD"
},
]
}]}
Run Code Online (Sandbox Code Playgroud)
我尝试了以下查询,但似乎 JSON_Length 不可用。
SELECT ModelName,
JSON_LENGTH(JsonData, '$.Model[0].Object')
FROM TabA
Run Code Online (Sandbox Code Playgroud)
预期输出应该是
ModelName COUNT
Test Model 2
Run Code Online (Sandbox Code Playgroud) 我在 Spring boot 应用程序中使用 Spring Data JPA 创建了简单的 CRUD api。控制器中的 Post 方法如下所示:-
@RequestMapping(value = "/article", method = RequestMethod.POST, produces = "application/json")
public Article createArticle(@RequestBody Article article) {
return service.createArticle(article);
}
Run Code Online (Sandbox Code Playgroud)
服务方法如下:-
@Override
public Article createArticle(Article articleModel) {
return repository.save(articleModel);
}
Run Code Online (Sandbox Code Playgroud)
我的 JsonPayload 如下所示:
{
"article_nm":"A1",
"article_identifier":"unique identifier"
}
Run Code Online (Sandbox Code Playgroud)
现在我想让我的 POST 请求成为幂等的,这样即使我article_identifier再次获得相同的 json 有效负载,它也不会在数据库中创建记录。
我无法在数据库中进行任何方案/约束更改,并且article_identifier字段也不是表中的主键。
我明白,首先我可以检查数据库并返回保存的记录(如果它已经存在),但在这里如果多个请求(原始请求和重复请求)同时出现,两者都会检查数据库并且不会找到具有该标识符的任何记录并将创建 2 条记录(每条一条)。此外,由于它是一个分布式应用程序,我如何保持多个数据库事务之间的一致性。
我怎样才能使用一些锁定机制,这样就不会出现两条相同的记录article_identifier。有人可以建议一些参考如何在 Spring boot 中实现它吗?
sql-server-2019 ×10
sql-server ×7
sql ×3
docker ×2
idempotent ×1
json ×1
locking ×1
post ×1
r ×1
rowcount ×1
spring-boot ×1
t-sql ×1