标签: sql-server

如何限制对 SQL Server 中 HR 数据的访问?

我们有一个包含人力资源数据的 HR 架构的 SQL Server 数据库。它包括工资和其他私人信息。数据库所有者、系统管理员和 [Executives] 角色的成员可以查看 HR 架构。

其他一些用户是 db_datareader 角色的成员,该角色能够从数据库的任何表中读取数据。他们在人力资源安全要求存在之前就被添加到该角色中。

拒绝所有其他用户访问的策略是什么?

sql-server

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

当辅助服务器因辅助服务器电源故障而错过 tlog 记录时,异步 AG 辅助辅助服务器如何与主服务器同步?

在不需要 WSFC 集群的 SQL AG(读取扩展)异步模式下,假设以下场景:

  1. 主节点将数据写入其事务日志并将该日志记录发送到辅助节点
  2. 假设在上述日志记录到达辅助节点之前辅助节点已断电

当辅助数据库启动时,它如何将其数据库与主数据库同步?这是自动还是手动过程?

sql-server availability-groups sql-server-2019

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

除了操作系统资源之外,还有哪些因素会影响普通或分布式 AG 中的 log_send_rate?

我在分布式 AG 设置中观察到 log_send_rate 较低。我知道 AG 使用日志流,所以我认为它不应该与数据有任何关系,但我想知道这是否与它正在传输的数据有关,而不仅仅是操作系统资源(网络、I/O)?

供考虑的基本指标:

  • SQL Server 2019-CU16
  • 源 RAM 1.5 TB,48 个 CPU <> 目标 RAM 128 GB,48 个 CPU - 内存差异在这里起作用吗?
  • 两台服务器位于同一 DC,ping 延迟<1ms。目标服务器是虚拟机。
  • ROBOCOPY 测试显示文件传输速率约为 100 MB/s
  • 当高事务日志生成活动(例如索引维护或创建)发送到其他副本时 - 它以最大 20 MB/s 的速率传输(这不是预期的)。这是 log_send_queue 堆积起来的时候。
  • 另一端的 REDO 速率良好,没有 REDO 队列堆积在那里。

在源 AG 上,我没有看到“发送到传输的字节数/秒”计数器的任何内容,因此我无法确定这是否是瓶颈。

如果我遗漏了任何我应该包含的内容,请提出建议。

sql-server availability-groups distributed-availability-groups

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

为什么 SERIALIZABLE 级别不会锁定 SQL Server 中其他会话的表

我想防止表中的删除、插入、更新和选择并发,因此我尝试SERIALIZABLE在转换之前使用该表,但这并没有为其他进程锁定该表!如何修复它?

我尝试过什么:

1-创建表_1

    --Create Sample Table
CREATE TABLE [dbo].[Table_1](
    [Number] [bigint] NOT NULL,
    [Price] [bigint] NULL,
 CONSTRAINT [PK_Table_1] PRIMARY KEY CLUSTERED 
(
    [Number] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
INSERT [dbo].[Table_1] ([Number], [Price]) VALUES (1, 1000)
GO
INSERT [dbo].[Table_1] ([Number], [Price]) VALUES (2, 3000)
GO
INSERT [dbo].[Table_1] ([Number], [Price]) VALUES (3, 8000)
GO
Run Code Online (Sandbox Code Playgroud)

2- 查询有延迟的会话一:

--SESSION 1
SET TRANSACTION ISOLATION LEVEL …
Run Code Online (Sandbox Code Playgroud)

sql-server-2008 sql-server query concurrency sql-server-2008-r2

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

为什么查询大型数据库表时 sys.dm_os_buffer_descriptors 报告的内存与最大服务器内存不匹配?(表大小&gt;最大内存)

我的 SQL 2019 enterprise 系统内存为 180GB,最大 SQL Server 内存配置为 160GB。

有 3 个大型数据库,每个数据库大约 450GB。其他的是较小的数据库。

当我运行以下查询时:

SELECT
    databases.name AS database_name,
    COUNT(*) * 8 / 1024 AS mb_used
FROM sys.dm_os_buffer_descriptors
INNER JOIN sys.databases
ON databases.database_id = dm_os_buffer_descriptors.database_id
GROUP BY databases.name
ORDER BY COUNT(*) DESC;
Run Code Online (Sandbox Code Playgroud)

输出是:

Db1 83443
Db2 35665
Db3 20112
Db4 3559
Db5 2236
Tempdb 988
Msdb 670
Ssisdb 21
Master 2
Model 0
Run Code Online (Sandbox Code Playgroud)

以上合计为146696=143GB。

我并行安排了 3 个代理作业,1 个作业目标 1 db(针对 db1、db2 和 db3)。该作业对一些最大的数据库表一一执行 select *。我执行 SELECT * 的所有表的总大小约为 250GB。

我知道 …

sql-server sql-server-2019

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

SET STATISTICS IO ON 中的扫描计数是什么意思?

运行以下命令后,我正在查看查询的输出:SET STATISTICS IO ON

表1显示扫描计数为5,逻辑读取12197

表2显示扫描计数为0,逻辑读取80

文档说

扫描计数是在任何方向到达叶级别后开始的查找或扫描次数,以检索所有值以构建输出的最终数据集。

我正在寻找一个示例来了解此(扫描计数)对于上述输出的含义。我的困惑是,仅 5 次扫描如何实现 12197 的逻辑读取?

sql-server sql-server-2019

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

如何将表格的列排成一行?

我有一个数据库,其中架构是:

CREATE TABLE [dbo].[Student]([Id] [int] NULL,[Name] [varchar](255) NULL,[Mark] [int] NULL)
INSERT [dbo].[Student] ([Id], [Name], [Mark]) VALUES (1, N'Medi', 10)
INSERT [dbo].[Student] ([Id], [Name], [Mark]) VALUES (2, N'Ibra', 15)
INSERT [dbo].[Student] ([Id], [Name], [Mark]) VALUES (3, N'Simo', 20)
Run Code Online (Sandbox Code Playgroud)

所以查询select * from Student

ID 姓名 标记
1 梅迪 10
2 伊布拉 15
3 西莫 20

但我希望第一行的标题如下所示:

ID 姓名 标记
ID 姓名 标记
1 梅迪 10
2 伊布拉 15
3 西莫 20

为了建立这个结果,

  • 首先我想获取列:

我已经通过INFORMATION_SCHEMA查询完成了此操作:

SELECT COLUMN_NAME 
FROM INFORMATION_SCHEMA.COLUMNS …
Run Code Online (Sandbox Code Playgroud)

sql-server ssms

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

我可以用两年前的 ldf 恢复当前的 mdf 吗?

我的 SQL Server 2000(又名版本 8.0)在电源故障后无法恢复数据库。我发现的唯一备份是当前的 mdf 文件和两年前的 ldf 文件。

我可以使用当前的 mdf 文件和旧的 ldf 文件恢复数据库吗?

sql-server sql-server-2000

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

当源日志传送到另一台服务器时,获取数据新鲜度的好方法是什么?

我从 SERVER_A 进行日志传送,每 10 分钟备份一次。我每 20 分钟将日志恢复到 SERVER_B。当我从 SERVER_B 到 SERVER_C 进行 DWH 加载时,我暂停恢复

我从 SERVER_B 进行报告,我想知道在 SERVER_A 上进行备份的时间,以便我可以向用户展示他们看到的数据有多新鲜

我无法使用 SERVER_A 的上次日志备份时间,因为我不确定该日志是否已恢复到 SERVER_B。

我无法使用 SERVER_B 的上次恢复时间,因为我不知道 SERVER_A 上实际进行备份的时间。

对于获得数据新鲜度的好方法有什么想法吗?

sql-server backup log-shipping disaster-recovery

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

创建函数时出现无效对象名称错误

我有这个功能get_department。函数内部有一个函数调用get_po_amount.

get_po_amount函数不再存在,因此当我尝试创建 Main 函数时get_Department,出现错误“对象名称 get_po_amount 无效”。

有什么方法可以通过不在内部创建函数来创建该函数。

我也有同样的观点问题。在另一个视图中调用一个视图。

我创建这些函数只是为了展示一个示例,我需要在大型数据库上执行此操作。

CREATE FUNCTION [dbo].[GET_DEPARTEMNET]
(
    @DEPTNO NVARCHAR(100)
    
)
    RETURNS TABLE 
AS 
RETURN 
   (    
        SELECT * FROM  [dbo].[dept] WHERE DEPTNO=(SELECT [dbo].[GET_PO_AMOUNT](@DEPTNO)))
GO
Run Code Online (Sandbox Code Playgroud)

sql-server functions errors

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