我们如何分配用户,例如:数据库所有者(DBO)UNSAFE ASSEMBLY 权限?
我要求它使用户能够创建程序集但不知道 SA 密码,因此无能为力EXEC sp_changedbowner ‘sa’。
任何的想法?
谢谢你。
我正在将 SQL Server 2008R2 数据库迁移到新服务器。(也是 2008R2)
服务器上有许多 CLR 程序集。这些会自动随数据库迁移还是我必须手动编写脚本?
谢谢!
我正在从 CLR 存储过程调用 T-SQL 存储过程。并且THROWT-SQL 中的语句在不进入catch块的情况下停止 CLR 的执行。是否可以在我的代码中更改某些内容以导致 CLR 过程执行该catch块?
T-SQL:
CREATE TABLE t1 (ID INT PRIMARY KEY clustered);
CREATE TABLE t2 (ID INT CONSTRAINT fk_1 FOREIGN KEY REFERENCES t1(ID))
GO
CREATE PROC dbo.TestThrow
AS
BEGIN
BEGIN TRY
INSERT INTO t2 VALUES (1)
END TRY
BEGIN CATCH
THROW
END CATCH
END
GO
Run Code Online (Sandbox Code Playgroud)
克莱尔:
public static void TestThrow()
{
String query = "EXEC DBO.TESTTHROW";
using (SqlConnection connection = new SqlConnection("context connection=true"))
{
connection.Open();
try
{ …Run Code Online (Sandbox Code Playgroud) 在触发器中,我试图创建一个唯一的表名(使用NEWID()),我可以存储在插入和删除的表中找到的数据。
Declare @NewID varchar(50) = Replace(convert(Varchar(50),NEWID()),'-','')
Declare @SQLStr varchar(8000)
Set @SQLStr= 'Select * into [TMPIns' + @newID + '] from inserted'
Exec (@SQLStr)
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:无效的对象名称“插入”
我知道我可以做到:
Select * into #inserted from inserted
Set @SQLStr= 'Select * into [TMPIns' + @newID + '] from #inserted'
Exec (@SQLStr)
Run Code Online (Sandbox Code Playgroud)
但是我不想使用 TempDB,因为这些表会变得很大,而且我也觉得它是多余的。有没有办法避免创建#inserted?
我问了一个关于XML使用XSD schemainside验证的问题SQL Server 2012(见链接)。我明白(正如我怀疑的那样)我需要使用CLR Function. 该函数将获取XSD schema text并XML text进行验证。
我将有 1 个配置数据库和许多安装数据库。从那个角度来看,我想知道在哪里创建该功能 - 在配置数据库中还是在每个安装数据库中?
从支持的角度来看,最好只有一个 CLR 功能。
我们最近将我们的 ERP 系统从 IBM Universe 转换为 SQL Server。应用程序性能通常是可以接受的,但偶尔会降级到可怕的程度。
我们在具有 32 Gb RAM 的 VMWare 上的 Win Server 2012 和 SQL Server 2012 上运行数据库。SQL 最大内存设置为 27Gb。db 服务器仅托管此数据库,不执行任何其他功能。总数据库大小约为 110Gb。该应用程序有它自己的专用服务器。
供应商广泛使用 CLR 来移植代码(超过 36,000 个标量函数)。我了解单个 CLR 在应用程序 OLTP 上下文中运行正常,但由于逐行而不是基于设置的操作而尝试执行批量作业时,不能很好地扩展。很好……很酷……继续前进。
我运行了Brent Ozar 的脚本,该脚本将高可用内存确定为需要查看的内容,以及每个查询的大量执行计划。供应商建议向服务器添加更多 RAM,但这让我很恼火,因为应用程序似乎没有使用现在的内存。
我感兴趣的是 SQL 的整体性能和行为。我看到一系列症状表明某些事情不正确,但我无法确定。这就像服务器拒绝运行。它决心走。
粗略地说,在我看来,大约 10Gb 的内存被数据库用于缓存,大约 11GB 是免费的,大约 3.5Gb 用于计划缓存,其余的我无法解释。我对一些定义有点不确定,例如免费、保留、被盗等。它们是否重复计算?
活动监视器显示:
当我运行此查询时:
-- what's happening inside my buffer pool?
SELECT counter_name, instance_name, mb = cntr_value/1024.0
FROM sys.dm_os_performance_counters
WHERE (counter_name = …Run Code Online (Sandbox Code Playgroud) performance sql-server memory sql-server-2012 sql-clr performance-tuning
每隔几天我的 SQL Server 实例就会意外终止并重新启动。在日志中,请参阅:
.NET Framework 公共语言运行时发生致命错误。SQL Server 正在关闭。(事件 ID 6536)。
在终止之前,我看到几条消息说:
由于内存压力,AppDomain XXX 被标记为卸载。
我有 60 个 CLR 存储过程,它们是从我的前任那里继承而来的。所有这些都应该是使用少量数据的短存储过程。如何找到导致内存压力的 CLR 存储过程?
我在跑:
Microsoft SQL Server 2016 (SP1-CU4) (KB4024305) - 13.0.4446.0 (X64) 2017 年 7 月 16 日 18:08:49 Windows Server 2016 Standard 6.3(内部版本 14393:)(管理程序)上的标准版(64 位)
以纤程模式(轻量级池)运行 SQL Server会禁用 SQL CLR:
轻量级池不支持公共语言运行时 (CLR) 执行。禁用以下两个选项之一:“启用 clr”或“轻量级池化”。依赖 CLR 且在光纤模式下无法正常工作的功能包括层次结构数据类型、复制和基于策略的管理。
在另一方面,禁用SQL CLR单独(无实现了轻型池)并没有禁用内置的CLR类型,如geometry,和geography(虽然hierarchyid上面提到的),如图哪有“HIERARCHYID”类型的工作时,“CLR”被禁用?
现在一些新的语言特性依赖于CLR,例如该FORMAT功能:
FORMAT 依赖于 .NET Framework 公共语言运行时 (CLR) 的存在。
在光纤模式下运行 SQL Server 是否禁用该FORMAT功能和/或使用 CLR 类型?
我们突然开始看到这个错误,而且在调用我们的弹性池中的数据库或任何其他数据库时,它似乎经常发生。DTU 没有被最大化,资源 dmvs 看起来也不错。
无法使用 HRESULT 0x80131022 进入公共语言运行时 (CLR)。这可能是由于低资源条件。(D b)
这是我从系统资源调控器池中得到的
Resource Pool Name cache_memory (MB) used_memory (MB)
internal 104.773437 1577.125000
default 37.609375 38.796875
SloSecSharedPool 2.914062 8.156250
InMemBackupRestorePool 26.210937 101.437500
InMemDmvCollectorPool 186.195312 203.406250
InMemMetricsDownloaderPool 2.234375 2.250000
InMemDTAPool 0.000000 0.000000
SloHkPool 0.000000 0.031250
InMemQueryStorePool 22.453125 35.304687
InMemWIAutoTuningPool 3.312500 4.062500
InMemXdbLoginPool 3.976562 6.250000
PVSCleanerPool 0.000000 0.000000
InMemTdeScanPool 0.000000 0.000000
SloSharedPool1 1108.890625 1234.312500
Run Code Online (Sandbox Code Playgroud)
从 sys.dm_os_performance_counters 这是过去 3 小时的样子。
cpu% data_io% log_write% memory_usage% max_worker% sessions%
22.37 73.51 16.54 41.56 5.50 0.43
Run Code Online (Sandbox Code Playgroud)
这似乎不是 SQL Azure …
我正在将数据库应用程序从 Windows 2008 R2/SQL Server 2008 R2 迁移到使用第三方 .NET CLR 程序集来解析字符串的 Windows 2012 R2/SQL Server 2016。
我得到的错误是:
尝试加载程序集 ID 65540 时 Microsoft .NET Framework 中发生错误。服务器可能资源不足,或者程序集可能不受 PERMISSION_SET = EXTERNAL_ACCESS 或 UNSAFE 的信任。再次运行查询,或检查文档以了解如何解决程序集信任问题。有关此错误的更多信息:
System.IO.FileLoadException: 无法加载文件或程序集“clrsplit,版本=0.0.0.0,Culture=neutral,PublicKeyToken=null”或其依赖项之一。发生与安全相关的错误。(来自 HRESULT 的异常:0x8013150A)System.IO.FileLoadException: 在 System.Reflection.RuntimeAssembly._nLoad(AssemblyName fileName, String codeBase, Evidence assemblySecurity, RuntimeAssembly locationHint, StackCrawlMark& stackMark, IntPtr pPrivHostBinder, Boolean throwOnFileNotFound, Boolean for Introspection, Boolean SuppressSecurityChecks. (AssemblyName assemblyRef, Evidence assemblySecurity, RuntimeAssembly reqAssembly, StackCrawlMark& stackMark, IntPtr pPrivHostBinder, Boolean throwOnFileNotFound, Boolean for Introspection, Boolean SuppressSecurityChecks) 在 System.Reflection.RuntimeAssembly.InternalLoad(String assemblyString, Evidence assemblyMarkSecurity, StackIndPrrawlPrawl for …
sql-clr ×10
sql-server ×9
t-sql ×2
c# ×1
dynamic-sql ×1
format ×1
functions ×1
memory ×1
migration ×1
performance ×1
permissions ×1
trigger ×1
xml ×1