小编car*_*reo的帖子

授予从系统表中选择的权限

我有一个数据库 Microsoft SQL Server 2008 r2。定义了一个名为 marie 的用户,该用户可以访问主数据库上的表;这很好用。现在,我希望 marie 能够执行此查询:

SELECT resource_type,spid,login_time,status,hostname,program_name,nt_domain,nt_username,loginame
  FROM sys.dm_tran_locks dl
  JOIN sys.sysprocesses sp on dl.request_session_id = sp.spid
Run Code Online (Sandbox Code Playgroud)

涉及的表是主表;我如何允许玛丽阅读它们?我已经尝试以 dbo 身份执行以下操作:

GRANT ALL on sys.dm_tran_locks TO marie
GRANT ALL on sys.sysprocesses TO marie
Run Code Online (Sandbox Code Playgroud)

尽管如此,当 marie 尝试执行上面的查询时,错误是:

Msg 297, Level 16, State 1, Line 1
The user does not have permission to perform this action.
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

sql-server

16
推荐指数
1
解决办法
5万
查看次数

为什么删除外键需要很长时间?

我制作了一个脚本,一次一个,从数据库中删除所有外键,就像这样:

ALTER TABLE MyTable1 DROP CONSTRAINT FK_MyTable1_col1
ALTER TABLE MyTable2 DROP CONSTRAINT FK_MyTable2_col1
ALTER TABLE MyTable2 DROP CONSTRAINT FK_MyTable2_col2
Run Code Online (Sandbox Code Playgroud)

让我感到惊讶的是脚本需要很长时间:平均每个 DROP FK 需要 20 秒。现在,我明白创建 FK 可能是一件大事,因为服务器必须去检查 FK 约束是否从一开始就没有被侵犯,而是下降了?当丢弃需要这么长时间的 FK 时,服务器会做什么?这既是为了我自己的好奇心,也是为了了解是否有办法让事情变得更快。能够删除 FK(不仅仅是禁用它们)将使我在迁移过程中更快,从而最大限度地减少停机时间。

foreign-key sql-server sql-server-2016

13
推荐指数
2
解决办法
7160
查看次数

编写维护计划脚本

我使用 SQL Server Management Studio (SSMS) 为我的 SQL Server 2008 R2 创建了维护计划。

但是,我无法将其导出/转换为脚本,以防我需要在另一台服务器上重做。

有办法吗?

如果没有,是否有更新版本的 SQL Server 的方法?

sql-server sql-server-2008-r2 maintenance-plans

12
推荐指数
1
解决办法
3万
查看次数

SQL Server:提供数据库备份时动态数据屏蔽是否安全?

我有一个 SQL Server 2016 SP1,其中包含我准备与合作伙伴(开发人员)共享的数据,但有几列除外,例如:

email varchar(64) MASKED WITH (FUNCTION = 'email()') NULL
Run Code Online (Sandbox Code Playgroud)

我向合作伙伴提供了以特定用户身份登录数据库测试副本的凭据,而无需取消屏蔽权限。我知道这是相当安全的。现在,我们正在考虑与我们的合作伙伴共享数据库备份,以便他们可以在自己的服务器和环境中重新加载。

我可能需要包含用户,以便合作伙伴无法创建新用户或将他们连接到现有登录名(对此不确定)。

CREATE USER user_name WITH PASSWORD = 'strong_password';
Run Code Online (Sandbox Code Playgroud)

有没有办法可以共享数据库备份,并且仍然相信被屏蔽的列是安全的,或者我是否必须物理删除数据?

sql-server backup sql-server-2016 dynamic-data-masking

8
推荐指数
2
解决办法
810
查看次数

记录查询中的所有错误

我有一个 Microsoft SQL Server 2008 R2 数据库。

我有一些不同编程语言的应用程序。其中一些是遗留的,我不想修改它们。

有没有办法在服务器级别记录所有查询错误,而不管导致它的应用程序?

我想知道,对于每个错误,导致它的查询、错误类型以及理想情况下的登录名和主机名。

sql-server sql-server-2008-r2

6
推荐指数
2
解决办法
1万
查看次数

记录所有超过 X 秒的查询

我有一个数据库 Microsoft SQL Server 2008r2。我有一些不同编程语言的应用程序。

我想记录所有超过 X 秒的查询。

我想我应该创建一个事件会话,但我对它们的理解不足以完成这个特定的任务。理想的答案是包含一个包含活动会话示例的在线教程的链接;即使是一本书推荐也会去。

几年前我在微软做过6231A“维护一个Microsoft SQL Server数据库”的培训,但此后我就没有实践过;课件涵盖了论点,但我无法理解。

performance sql-server sql-server-2008-r2

5
推荐指数
1
解决办法
2023
查看次数

减少数据库大小以还原到 SQL Server Express

我有一个 SQL Server 2008 R2 数据库,大约 15 GB。

我想为使用 SQL Server 2008 R2 Express 的合作伙伴复制它。

我删除了很多表和行,现在我确定数据小于2 GB。

我做了一个备份,发送给合作伙伴,他试图恢复它,但他收到一个错误:

CREATE DATABASE 或 ALTER DATABASE 失败,因为由此产生的累积数据库大小将超过每个数据库 10240 MB 的许可限制

我做错了什么?

sql-server sql-server-2008-r2

5
推荐指数
1
解决办法
4万
查看次数

跟踪准备好的 SQL 语句中的错误

我使用扩展事件来存储数据库错误,如下所示:

CREATE EVENT SESSION [ErrorCapture] 
ON SERVER 
ADD EVENT sqlserver.error_reported
(
    ACTION
    (
        sqlserver.client_hostname,
        sqlserver.database_id,
        sqlserver.sql_text,
        sqlserver.username
    )
    WHERE 
    (
        [severity] >= (11)
    )
) 
ADD TARGET package0.asynchronous_file_target
(
    SET filename='J:\ServerXmlOutput\ErrorCapture.xel'
)
WITH 
(
    MAX_MEMORY=4096 KB,
    EVENT_RETENTION_MODE=ALLOW_SINGLE_EVENT_LOSS,
    MAX_DISPATCH_LATENCY=10 SECONDS,
    MAX_EVENT_SIZE=0 KB,
    MEMORY_PARTITION_MODE=NONE,
    TRACK_CAUSALITY=OFF,
    STARTUP_STATE=ON
);
Run Code Online (Sandbox Code Playgroud)

这有助于我轻松跟踪导致它们的应用程序。我有类似的东西来跟踪慢查询和其他特殊情况。但是,我从 SQL Server Profiles 中注意到 PHP/Laravel 应用程序不是直接发送一些语句,而是使用 RPC:Completed:它们看起来像准备好的语句,在运行时接收参数。如何扩展我的 ErrorCapture 以包含由通过 RPC:Completed 执行的语句引起的错误?

sql-server prepared-statement sql-server-2016

5
推荐指数
1
解决办法
189
查看次数

SQL Server 2016:向现有应用程序添加时态表

我有一个由外部公司开发的大型 PHP 应用程序,目前正在完成;我不能要求对其进行更改。它使用一个数据库 Microsoft SQL Server 2016,一些用户通过 SSMS 访问该数据库,包括我,以及在一天中的特定时间由一些计划任务访问。有时我会在一些表格中发现意想不到的内容,这很令人沮丧,因为我不知道它是什么时候到达的。我刚刚发现了时态表:知道记录更改的确切日期和时间将非常有用。

是否可以在应用程序中为 2-3 个关键表添加时态表,而无需更改 PHP 代码?是否存在兼容性或性能风险?

sql-server temporal-tables sql-server-2016

4
推荐指数
1
解决办法
1314
查看次数

SQL Server:跟踪所有连接/断开连接

我有一个 Microsoft SQL Server 2008r2 SP1。

我需要知道哪些用户连接到数据库和断开连接。

理想情况下,我想要一个(日期时间、用户名、连接/断开连接)列表。

这可以使用扩展事件来完成吗?或者,还有更好的方法?

sql-server-2008 sql-server sql-server-2008-r2

3
推荐指数
1
解决办法
4万
查看次数