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
    • 最新
    • 标签
主页 / dba / 问题

问题[sql-clr](dba)

Martin Hope
Glorfindel
Asked: 2022-02-09 02:45:50 +0800 CST

有没有办法在 M1 Mac 上为 Ubuntu Docker 使用 Azure SQL Edge 上的标准 CLR 函数?

  • 4

我有一台带有 M1 芯片的 MacBook,所以(关于)我运行 SQL Server 的唯一选择是将它作为 Docker 容器运行。这适用于标准 SQL,但我们的应用程序使用了一些 CLR 功能,例如COMPRESS;当我尝试使用它时,它告诉我

消息 50000,级别 16,状态 1,第 45 行公共语言运行时 (CLR) 在此实例上未启用。

启用它不起作用:

EXEC sp_configure 'clr enabled', 1;  
RECONFIGURE;  
GO

给

消息 15392,级别 16,状态 1,过程 sp_configure,第 166 行
此版本的 SQL Server 不支持指定的选项“启用 clr”,并且无法使用 sp_configure 进行更改。

我找到了这篇 Stack Overflow 帖子,但那是关于有人使用自定义 .NET 库的;我正在寻找适用于 Windows 的 SQL Server 中可用的“标准”功能。

docker sql-clr
  • 2 个回答
  • 1876 Views
Martin Hope
user1664043
Asked: 2021-10-29 12:22:40 +0800 CST

Sql Server 2019,迁移 clr 程序集,clr 严格安全

  • 1

我们在 Sql Server 2008 服务器上运行了一些旧代码,我们正在寻求升级到 Sql Server 2019。旧的 clr 代码真的很旧(比如 .net framework 2.0 old),所以我知道我必须重建新服务器的程序集。我们从旧系统备份/恢复到新系统,虽然所有程序集都在那里,但它们在执行时会抛出错误。

我遇到了“CLR strict security”帖子,并且“使用 SAFE 或 EXTERNAL_ACCESS 选项为程序集 XXX 创建或更改程序集失败,因为 sp_configure 的 'clr strict security' 选项设置为 1。Microsoft 建议您使用证书...”消息。

我从第一个数据库中的第一个程序集开始。我将框架更改为 4.6.1 并签名。我首先尝试了 ALTER ASSEMBLY,它说由于签名差异而无法更改。所以我删除了对该程序集的所有引用,然后删除了该程序集,并使用新代码进行了 CREATE ASSEMBLY。它奏效了。也许它不应该,但它做到了。

所以我开始在下一个数据库中的下一个程序集中苦苦挣扎。做了同样的过程(更新框架、签名、重建、删除所有引用、删除程序集、创建程序集)。只有下一次我得到“使用 SAFE 或 EXTERNAL_ACCESS 选项为程序集 XXX 创建或更改程序集失败,因为 sp_configure 的 'clr strict security' 选项设置为 1。Microsoft 建议您使用证书对程序集进行签名......”信息。

我跑了

sp_configure

SELECT * FROM sys.trusted_assemblies
SELECT * FROM sys.assemblies

在两个数据库中。两者都将“clr strict security”run_value 显示为 1,两者都在trusted_assemblies 中不显示任何条目。

我意识到我的“只是签署程序集”的理解还不够,但我很困惑为什么该方法在第一个数据库上有效而在第二个数据库中失败。

我为每个程序集生成了新的 snk 文件,并且我没有将任何登录名与它们相关联。

“只是签署程序集”是如何在第一次尝试而不是在第二次尝试中工作的?

在第一个数据库中,在 sys.assemblies 的输出下,我在程序集上看到了新构建的公钥令牌,我在 permission_set_desc 和新的安装日期中看到了 SAFE_ACCESS,但我不知道为什么这样就足够了第一个分贝而不是第二个分贝。

谢谢

sql-server-2019 sql-clr
  • 1 个回答
  • 1457 Views
Martin Hope
Jack.Frost
Asked: 2021-04-13 13:37:54 +0800 CST

我想在我的数据库中使用 UDTT,但是我们关闭了 CLR,并且根据创建类型的文档,所有类型都需要 CLR 程序集

  • 0

这是真的?或者我可以在关闭 CLR 的情况下使用用户定义的表类型吗?(即他们不需要使用 CLR)

如果他们确实需要 CLR,是否可以为我的存储过程参数使用具有相同功能的替代方法?

sql-server sql-clr
  • 1 个回答
  • 54 Views
Martin Hope
JamesP
Asked: 2019-08-10 10:38:20 +0800 CST

Azure SQL 托管实例上的 CLR 存储过程在执行时出错:“主机存储中的程序集与 GAC 中的程序集具有不同的签名”

  • 5

我有一个 CLR 存储过程,当从 SQL Server 2012 - 2017 部署到本地 SQL Server 实例时,它可以正确执行。我可以成功部署到 Azure SQL 托管实例,但是当我执行该过程时,出现以下错误:

无法加载文件或程序集 'System.Net.Http, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' 或其依赖项之一。主机存储中的程序集与 GAC 中的程序集具有不同的签名。(来自 HRESULT 的异常:0x80131050)。

我尝试过使用项目引用,但无济于事 - 唯一System.Net.Http.dll可以部署到托管实例的版本是执行错误的版本。

sql-server sql-clr
  • 2 个回答
  • 1268 Views
Martin Hope
JW-OP
Asked: 2018-09-18 10:57:38 +0800 CST

带有持久化计算的 CLR 原始数据的表,标记为 has_unchecked_assembly_data = 1,但 DBCC CHECKTABLE 不会取消设置相同的标志

  • 6

我们有一个包含列的 OrderLines 表:

Quantity int not null
QtyCancelled int not null
QtyBackorder int not null
QtyPicking int not null
QtyPacking int not null
QtyShiped int not null

计算列和持久列 FulfillmentStatusId 为:

dbo.clr_GetFulfillmentStatusByLineQuantities(Quantity, QtyCancelled, QtyBackorder, QtyPicking, QtyPacking, QtyShiped)

“clr_GetFulfillmentStatusByLineQuantities”,当然,通过标量函数映射到数据库中的 ASSEMBLY,相关方法 (C#) 标记为:

[SqlFunction(DataAccess = None, IsDeterministic = true, IsPrecise = true, SystemDataAccess = None)]

关于这个问题,我多次针对这个表运行 DBCC CHECKTABLE ,它仍然是 has_unchecked_assembly_data=1。当列首次添加到表中时确实如此,但我相信 DBCC CHECKTABLE 命令在迁移到 SQL 2016 之前成功了。


虽然该表已在 has_unchecked_assembly_data=1 下使用了很长时间,但似乎对该表的功能没有影响。我担心 ALTER ASSEMBLY 在不使用 WITH UNCHECKED DATA 时抛出异常,然后在我确实使用该选项时抛出另一个异常,但似乎“根据 MVID”更新程序集。

对不起,如果我漫无边际,我不会问太多问题而且我主要是潜伏。

不过,请提前致谢!


更新 (20180917T17:34-05:00):感谢 Sean 提出了初步方向。DBCC CHECKTABLE ('OrderLines') WITH EXTENDED_LOGICAL_CHECKS的结果是两行类似于:

Msg 2537, Level 16, State 106, Line 1
Table error: object ID 1486732449, index ID 1, partition ID 72057594403946496, alloc unit ID 72057594422755328 (type In-row data), page (1:1430554), row 5. The record check (valid computed column) failed. The values are 38 and 0.

因此,我对表的主键(即上面指示的索引 ID 1)执行了 REBUILD,这成功了。然而,重新运行DBCC CHECKTABLE('OrderLines') WITH EXTENDED_LOGICAL_CHECKS再次返回类似的错误,只是这次使用不同的分区 ID 和分配单元 ID(正如人们所预料的那样)。

极端的解决方案可能是删除、重新创建并使用标识插入重新填充表,可以这么说,“从轨道上删除站点”,但出于显而易见的原因,这是极端的。

“表的聚集索引中的计算列数据似乎不一致”的正确解决方案是什么?

sql-server sql-clr
  • 1 个回答
  • 176 Views
Martin Hope
Andriy
Asked: 2017-03-11 06:49:05 +0800 CST

我们可以从 SQL Server 中的 .NET 程序集调用哪些类型的方法

  • 6

在 SQL Server 中注册一个 DLL 之后(在可编程性 -> 程序集),我们可以从 SQL Server 中的那个 .NET 程序集调用任何类型的方法吗?还是只是静态的?

sql-server sql-clr
  • 1 个回答
  • 669 Views
Martin Hope
Bohms27
Asked: 2016-02-05 06:16:44 +0800 CST

我可以在与数据库实例不同的服务器上运行 CLR 存储过程吗?

  • 4

每当将一行插入某个表时,我想添加一个触发器。触发器将触发 CLR 存储过程,该过程将执行数据库工作以外的事情,例如将 JSON 字符串写入 txt 文件并更新不同类型数据库的系统日志。

我的手被绑在使用这项技术上。最初我们打算编写一个 Windows 服务,它会定期扫描表,然后在插入新记录时运行该程序。

我的问题是:

我能否将 DLL 托管在不同的服务器上以便它在那里运行,或者当我部署 CLR 存储过程 dll 时,它是否始终在 SQL Server 数据库实例中运行?

我问的原因是我们不希望此代码减慢数据库服务器的速度,这可能会通过在代码中执行这些其他任务来实现。

sql-server sql-clr
  • 3 个回答
  • 1347 Views
Martin Hope
msgisme
Asked: 2015-07-30 12:58:52 +0800 CST

如何从 CLR 存储过程调用的 TSQL 中捕获 PRINT 语句

  • 3

我有一个 CLR 存储过程,它(除其他外)调用 TSQL 存储过程。TSQL 存储过程运行一些动态 SQL,并在运行前打印 SQL 以用于调试目的。报表中没有任何内容PRINT显示在客户端中。当我们需要进行故障排除时,有什么好方法可以让我们看到这些命令?

示例代码:

dll中的C#代码

public static void Print_CLR()
{
    using (SqlConnection conn = new SqlConnection("context connection=true"))   
    {
            conn.Open();
            using (SqlCommand c = new SqlCommand("exec dbo.Print_TSQL", conn))
            {   
            c.ExecuteNonQuery();    
        }
    }
}

CLR 调用的过程

CREATE PROC DBO.Print_TSQL AS
PRINT 'WTF'
GO
--Exposing proc to SQL
CREATE PROC dbo.Print_CLR AS
EXTERNAL NAME 
[CLRUtility].[CLRUtility.CLRUtility].Print_CLR
GO
--Executing, nothing is PRINTed for the client
EXEC dbo.Print_CLR
sql-server sql-clr
  • 1 个回答
  • 5219 Views
Martin Hope
Valerio Santinelli
Asked: 2015-03-05 07:52:15 +0800 CST

Amazon EC2 实例 (SQL Server 2014 CU6) 上的 SQL CLR 非常慢

  • 1

我在 r3.large Amazon EC2 机器上运行 SQL Server 2014 Standard Edition(累积更新 6)实例。我注意到 SQL Server 的 CPU 使用率飙升至 100%,同时几乎不执行任何查询。

查看 SQL Performance Tool,我可以看到大部分时间都在 SQL CLR 函数中丢失了。

这是其中一个操作的屏幕截图: https ://dl.dropboxusercontent.com/u/3098924/Schermata%202015-03-04%20alle%2016.46.17.png

大多数 CLR 函数都在做基本的事情。例如,IsNullOrEmpty 函数返回 String.IsNullOrEmpty() 的结果,但即使是这些函数也需要 1500 到 7000 毫秒才能执行。

如果我接受同样的工作并在我们用于开发的物理盒子上运行它,那么这些调用几乎看不到,因为它们太快了。

有没有人遇到过类似的问题?我想这是由于 EC2 或 VM 造成的,但我真的说不出原因。谢谢!

sql-server sql-clr
  • 1 个回答
  • 378 Views
Martin Hope
Justin Dearing
Asked: 2014-04-12 07:40:38 +0800 CST

sqlproj 中的引用程序集未部署到服务器

  • 9

我有一个 Visual Studio 2013 数据库项目,它采用fastJSON的修改版本作为参考。我在参考属性中选择了 Generate DDL,如下图所示:

fastJSON 属性面板

在 .sqlproj msbuild 文件中:

<Reference Include="fastJSON">
  <HintPath>..\..\fastjson\output\net40\fastJSON.dll</HintPath>
  <GenerateSqlClrDdl>True</GenerateSqlClrDdl>
</Reference>

但是 bin/debug/Project.sql 不包含CREATE ASSEMBLY fastJSON . . .. 手动添加程序集,然后我的项目将部署并运行。我该怎么做才能让 Visual Studio 部署我的程序集?

sql-server sql-clr
  • 1 个回答
  • 6311 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