我们有一个包含人力资源数据的 HR 架构的 SQL Server 数据库。它包括工资和其他私人信息。数据库所有者、系统管理员和 [Executives] 角色的成员可以查看 HR 架构。
其他一些用户是 db_datareader 角色的成员,该角色能够从数据库的任何表中读取数据。他们在人力资源安全要求存在之前就被添加到该角色中。
拒绝所有其他用户访问的策略是什么?
在不需要 WSFC 集群的 SQL AG(读取扩展)异步模式下,假设以下场景:
当辅助数据库启动时,它如何将其数据库与主数据库同步?这是自动还是手动过程?
我在分布式 AG 设置中观察到 log_send_rate 较低。我知道 AG 使用日志流,所以我认为它不应该与数据有任何关系,但我想知道这是否与它正在传输的数据有关,而不仅仅是操作系统资源(网络、I/O)?
供考虑的基本指标:
在源 AG 上,我没有看到“发送到传输的字节数/秒”计数器的任何内容,因此我无法确定这是否是瓶颈。
如果我遗漏了任何我应该包含的内容,请提出建议。
sql-server availability-groups distributed-availability-groups
我想防止表中的删除、插入、更新和选择并发,因此我尝试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
我的 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。
我知道 …
运行以下命令后,我正在查看查询的输出:SET STATISTICS IO ON
表1显示扫描计数为5,逻辑读取12197
表2显示扫描计数为0,逻辑读取80
文档说
扫描计数是在任何方向到达叶级别后开始的查找或扫描次数,以检索所有值以构建输出的最终数据集。
我正在寻找一个示例来了解此(扫描计数)对于上述输出的含义。我的困惑是,仅 5 次扫描如何实现 12197 的逻辑读取?
我有一个数据库,其中架构是:
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 2000(又名版本 8.0)在电源故障后无法恢复数据库。我发现的唯一备份是当前的 mdf 文件和两年前的 ldf 文件。
我可以使用当前的 mdf 文件和旧的 ldf 文件恢复数据库吗?
我从 SERVER_A 进行日志传送,每 10 分钟备份一次。我每 20 分钟将日志恢复到 SERVER_B。当我从 SERVER_B 到 SERVER_C 进行 DWH 加载时,我暂停恢复
我从 SERVER_B 进行报告,我想知道在 SERVER_A 上进行备份的时间,以便我可以向用户展示他们看到的数据有多新鲜
我无法使用 SERVER_A 的上次日志备份时间,因为我不确定该日志是否已恢复到 SERVER_B。
我无法使用 SERVER_B 的上次恢复时间,因为我不知道 SERVER_A 上实际进行备份的时间。
对于获得数据新鲜度的好方法有什么想法吗?
我有这个功能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 ×10
backup ×1
concurrency ×1
distributed-availability-groups ×1
errors ×1
functions ×1
log-shipping ×1
query ×1
ssms ×1