是否可以为某个用户生成用户已获得显式访问权限的对象列表?
我想查看用户拥有明确权限的所有项目的列表,不包括通过角色等继承的任何权限。
该table任务有列如下:
Task(TaskID, TaskName, CreatedDate)
Run Code Online (Sandbox Code Playgroud)
并希望根据日期时间差异执行代码块:
如果任务 CreatedDate 已过去 15 分钟 THEN
执行块#01
否则,如果任务 CreatedDate 还没有超过 15 分钟,那么
执行块#02
我测试了下面的查询,但它给出的结果为 61633440
SELECT DATEDIFF(MINUTE, CONVERT(VARCHAR(10), CreatedDate, 108), CURRENT_TIMESTAMP) AS MinuteDiff
Run Code Online (Sandbox Code Playgroud)
我们如何在 sql 中实现上述目标?
我清除了我的统计数据并运行了我的查询。实际执行计划的总估计成本为 0.61。我使用dmv 中的total_worker_time列dm_exec_query_stats来计算平均 20858 微秒的 CPU 时间:
(SUM(query_stats.total_worker_time) / SUM(query_stats.execution_count))
Run Code Online (Sandbox Code Playgroud)
该计划推荐了一个索引,我创建了该索引。我清除了我的统计信息,然后再次运行查询。这一次,该计划在顶层的总估计成本为 0.37。我dm_exec_query_state再次检查了dmv,现在平均 CPU 时间为 51536 微秒。
我原以为工人的时间大约是一半,而不是两倍!我在这里错过了什么吗?为什么查询计划的改进没有反映在 exec 查询统计信息中?两个计划在这里上传:
我想知道是否有人可以阐明我的担忧,即query_plan_hash碰撞可能导致查询作为完全不同的查询执行。
散列是一个 16 位的十六进制,sp_help sys.dm_exec_query_stats表示是一个二进制。因此它只是一个 64 位的散列,并且碰撞似乎很有可能(考虑到 SHA1 [160 位] 刚刚被验证有碰撞)。
请问plan_hash并query_plan_hash都有碰撞的这个(查询作为一个完全不同的查询被执行)的情况发生?
我也很好奇 SQL Server 中是否有设置允许我们将此哈希更改为 SHA2-512(以减少发生冲突的可能性)。我们的数据非常重要。
我通过 Google 和 Stack Exchange 论坛进行了高低搜索。
有没有办法防止非持久计算列在事务中更新?
我已经拼凑了一个示例,该示例表明这些列在使用非确定性函数时可以更新(在本例中getutcdate())。这不会破坏事务的一致性要求吗?我曾尝试使用事务级别来防止这种情况(可序列化和快照),但没有帮助。
询问:
set nocount on;
create table dbo.TransactionTest (
[Timestamp] datetime,
IsUpdated as case when datediff(second, [Timestamp], getutcdate()) >= 1 then 1 else 0 end
);
insert into dbo.TransactionTest ([Timestamp]) values (getutcdate());
begin tran
select *
from dbo.TransactionTest;
waitfor delay '00:00:01';
select *
from dbo.TransactionTest;
rollback
drop table dbo.TransactionTest;
Run Code Online (Sandbox Code Playgroud)
结果:
Timestamp IsUpdated
----------------------- -----------
2017-03-19 00:44:28.130 0
Timestamp IsUpdated
----------------------- -----------
2017-03-19 00:44:28.130 1
Run Code Online (Sandbox Code Playgroud) SQL Server 2008 R2,Dynamics AX 2009 我们有这个丑陋的查询
DECLARE @P1 NVARCHAR(5), @P2 INT, @P3 INT, @P4 NVARCHAR(11), @P5 INT, @P6 NVARCHAR(5), @P7 NVARCHAR(11)SELECT A.SALESID,
A.LINENUM,
A.ITEMID,
A.SALESSTATUS,
A.LEDGERACCOUNT,
A.NAME,
A.EXTERNALITEMID,
A.TAXGROUP,
A.QTYORDERED,
A.SALESDELIVERNOW,
A.REMAINSALESPHYSICAL,
A.REMAINSALESFINANCIAL,
A.COSTPRICE,
A.SALESPRICE,
A.CURRENCYCODE,
A.LINEPERCENT,
A.LINEDISC,
A.LINEAMOUNT,
A.CONFIRMEDDLV,
A.RESERVATION,
A.SALESUNIT,
A.DIMENSION,
A.DIMENSION2_,
A.DIMENSION3_,
A.PRICEUNIT,
A.PROJTRANSID,
A.INVENTTRANSID,
A.CUSTGROUP,
A.CUSTACCOUNT,
A.SALESQTY,
A.SALESMARKUP,
A.INVENTDELIVERNOW,
A.MULTILNDISC,
A.MULTILNPERCENT,
A.SALESTYPE,
A.BLOCKED,
A.COMPLETE,
A.REMAININVENTPHYSICAL,
A.TRANSACTIONCODE,
A.TAXITEMGROUP,
A.TAXAUTOGENERATED,
A.UNDERDELIVERYPCT,
A.OVERDELIVERYPCT,
A.BARCODE,
A.BARCODETYPE,
A.INVENTREFTRANSID,
A.INVENTREFTYPE,
A.INVENTREFID,
A.ITEMBOMID,
A.LINEHEADER,
A.SCRAP,
A.DLVMODE,
A.INVENTTRANSIDRETURN,
A.PROJCATEGORYID,
A.PROJID,
A.INVENTDIMID,
A.TRANSPORT,
A.STATPROCID, …Run Code Online (Sandbox Code Playgroud) 可以说,我有一个查询,
SELECT * FROM MyTable WHERE MyParam = 0 OR MyColumn = MyParam
Run Code Online (Sandbox Code Playgroud)
这里 MyParam 是参数和可选的。因此,它只检查MyColumn = MyParamMyParam 是否不为 0。但是我们的 DBA 说 OR 会使其变慢,而 db 会受到影响。另一种选择是,
IF MyParam = 0
SELECT * FROM MyTable WHERE MyColumn = MyParam
Run Code Online (Sandbox Code Playgroud)
这种方法的问题在于我们有很多可选参数。所以,我们的查询变得非常非常大。另一种选择是 CASE。
所以你们的建议是什么。我在谈论一般是 Oracle 还是 SQL Server。
是否有关于在具有 1000 多个数据库和 10TB 存储空间的服务器上将 SQL Server 2014 升级到 SQL Server 2016 需要多长时间的统计数据?安装后续 2016 服务包需要多长时间?有没有办法通过配置来优化这些安装时间?
目标是最小化维护窗口
更新:让我澄清一个问题。所有生产更新都将在 QA 环境中进行测试,问题不在于这一切。我问的是您已知的优化升级持续时间的选项。我将通过测量我环境中的升级时间来自己搜索这些选项,但如果有“以前的艺术” - 请分享。
只是一个关于手动故障转移的问题。如果我们使用 SSMS 执行故障转移与转到故障转移群集管理器并将角色移动到辅助节点,这是否重要?是否有首选方法或任何一种方法都可以?
我最近创建了一个新的 SQL Server 环境,我正在尝试尽可能使用最佳实践,尤其是最低特权的方法。我们环境中的其他服务器只有使用域管理员权限和 SA 权限的组合运行的作业,这“简单”且可怕。
除此之外,我有使用域帐户运行的数据库引擎DOMAIN\sqlengine和使用DOMAIN\sqlagent.
我有一个简单的维护计划,可以将服务器上的所有数据库完整备份到远程 UNC 路径。我曾假设/计划代理帐户 ( DOMAIN\sqlagent) 将执行计划的作业。作业因操作系统驱动的拒绝访问错误而失败。所以我DOMAIN\sqlagent在目录中添加了帐户修改权限,以便它可以执行备份。令我惊讶的是它又失败了。当我检查目标服务器的安全日志时,我看到这DOMAIN\sqlengine是帐户身份验证。该帐户没有获得 UNC 路径的权限。为什么引擎帐户而不是代理帐户运行作业?
如果我查看我DOMAIN\sqlagent为该维护计划中的所有作业设置的作业所有者。在作业步骤下,它被设置为作为“SQL Server 代理服务帐户”运行。
我做错了什么或不理解?
sql-server ×10
permissions ×2
clustering ×1
date ×1
datetime ×1
hashing ×1
jobs ×1
oracle ×1
tuning ×1
upgrade ×1