我们遇到了一种奇怪的情况,当我们运行索引维护作业时,它会用 HADR_SYNC_COMMIT 会话填满服务器,应用程序中的所有其他会话都会挂起,等待它完成:
我们正在测量服务器的速度,但几乎接近 2 ec2 之间的速度限制。
这是否是需要在 SQL 外部进行修复的问题?
我们有 1 个同步副本和一个异步副本(带有 dr 的 4 个节点)。
将数据库从一台服务器移动到另一台服务器后,我们开始遇到一个问题:
> Msg 15581, Level 16, State 7, Procedure xxxxx, Line 24 [Batch Start Line 2]
Please create a master key in the database or open the master key in the session before performing this operation.
Msg 15315, Level 16, State 1, Procedure xxxxx, Line 62 [Batch Start Line 2]
The key '<CustomKeyName>' is not open. Please open the key before using it.
所讨论的程序具有:
OPEN SYMMETRIC KEY MySymKey
DECRYPTION BY CERTIFICATE MySymCert;
我可以验证移动数据库后,我可以通过查询和来看到asymmetric key
和a 。
certificate
sys.symmetric_keys
sys.certificates
是的,我们没有主密钥。我很好奇这个过程是否可行:
ALTER MASTER KEY REGENERATE WITH ENCRYPTION BY PASSWORD = 'a_cool_pass';
再次备份数据库
在新服务器中再次恢复数据库(使用替换)
OPEN MASTER KEY DECRYPTION BY PASSWORD = 'the_cool_Pass'
ALTER MASTER KEY ADD ENCRYPTION BY SERVICE MASTER KEY
这是解决此情况的适当方法吗?
或者,我可以删除 symetric_key 和 cert,然后重新创建吗?
编辑:REGENERATING
将主密钥传递到旧服务器,备份/恢复到新服务器, OPEN MASTER KEY DECRYPTION BY PASSWORD =
遇到了问题The key is not encrypted using the specified decryptor.
(我认为这很奇怪。我明天会再试一次。
(我需要对证书进行备份恢复吗?
我们在一个集群中有 2 台服务器(没有 aoag ),使用 SQL + SSIS。
集群节点之一死亡,我们将其删除。我们计划创建一个新的集群节点,并在其上正常配置 SQL 引擎作为集群资源,但我们不记得 SSIS 是否也配置为集群资源。
由于 SSIS 不支持集群,并且 MS 不建议 SSIS 位于集群资源中,那么这里的选项是什么?SSIS 只是一个运行包的服务,我很困惑如何将新的 SQL 集群节点与 SSIS 一起添加(新节点中的 SQL 很简单,问题是 SISS )。
安装sql后在新的集群节点中安装SSIS并将包指向共享驱动器是否可行?
因为说实话,我很困惑如果故障转移到节点 2 而 SSIS 仅安装在节点 1 上会发生什么。
谢谢。
我们使用 ollas 索引维护,并由我们的团队在各处进行了一些更改。
我们通常会遇到一个巨大的数据库问题,它的 Alter 索引会锁定某些进程。它通常是一个重组,即使它锁定了一些任务,例如批量任务。
我们可以做什么来尽量减少这种情况?nob每周日运行超过24小时。
我想到了拆分表,并在不同的周末进行索引维护。
我想到了一个警报,它会杀死该锁的工作 X 分钟(很糟糕,因为我确信它永远不会完成)。
例如,我想在所有数据库上运行索引维护作业。
我的服务器有很多AOAG,经常同时扮演不同AOAG的主副副本角色。
如果我在该服务器上有一个辅助数据库,并且它是只读的,我无法在其中找到此信息,sys.databases
因为它显示0
.
如何运行游标并跳过作为辅助副本的 AOAG 的一部分的数据库,而不中断工作?
我知道我可以使用... SELECT DATABASEPROPERTYEX('MyDBNAme', 'Updateability')
但是有没有更简单的方法可以将它实现到游标/查询/过程中?
谢谢
我对这个特定的话题很好奇。
如果我停止数据同步以更改主节点而不影响辅助节点,我是否需要停止日志备份作业?停止数据同步期间的日志备份是否会弄乱任何 LSN 并使其无法再次恢复数据同步?
编辑。
所以,我有一个数据库,是两台服务器之间的 AOAG 的一部分。如果我点击“停止数据同步”,辅助将停止从主接收信息。
与此同时,如果我在主数据库中执行“备份日志”会发生什么?当我“恢复数据同步”时,它会中断 AOAG 连接吗?LSN 会有所不同吗?
我们处于选择被更新阻止的情况。但桌子是不同的。
UPDATE [dbo].[TABLE_1]
SET ...
SELECT [t1].[field]
FROM [dbo].[TABLE_1] AS [t1]
WHERE...
当它们同时运行时,这个简单的过程会阻止这个:
SELECT "A lot of fields"
FROM TABLE_TOTALLY_DIFFERENT
INNER JOIN [another table totally different]
ON...
WHERE...
这对我来说毫无意义。
即使通过查看 pageID,我也可以看到在这种情况下被锁定的表是TABLE_TOTALLY_DIFFERENT
.
但他们与他们无关。
我如何寻找并确定它们被锁定的原因?
我删除了我的旧问题,以便更准确地了解我需要什么。
我们有一个包含许多较小查询的大查询。这个查询运行得非常好,直到它到达“having max”子句:
having
max
(
DateField
) < getdate() - @2_years_ago
有没有比拥有 max 更快的条款?因为这会导致索引扫描以及表中存在的数百万行不停地循环和循环。
我试图按 row_number 做,但没有运气。
我只是注意到这个相同的查询在具有相同结构的其他数据库上运行得很好。
只是这个(有趣的是行更少)它不起作用。
数据库在同一台服务器上。
我试图在同一个查询中插入数据,然后删除。
我正在尝试分块删除它,以免导致 LOG 问题:
DECLARE @BatchSize INT
SET @BatchSize = 100000
WHILE @BatchSize <> 0
BEGIN
DELETE (@BatchSize) TABLE1
WHERE LogType = 'LOGTYPE'
AND TABLE1.Id NOT IN (SELECT Id FROM TABLE2)
AND TABLE1.Id IN (SELECT Id FROM DifferentDB..TABLE3)
SET @BatchSize = @@rowcount
END
但是同样的查询,我想先在辅助数据库中插入数据,然后再删除。
是否可以在没有触发器的情况下实现?(插入,删除...)
我也愿意采用更好的分块删除方法,我只是凭记忆得到了那个。
我们有一个有 4 列的表(示例):
create TABLE [dbo].[myTable]
(
[Id] BIGINT NOT NULL,
[Id2] SMALLINT NOT NULL,
[Id3] SMALLINT NOT NULL,
[IdUnique] UNIQUEIDENTIFIER NOT NULL,
[CreateDate] DATETIME NOT NULL,
CONSTRAINT [PK_MyTable_Id_Id2_Id3] PRIMARY KEY CLUSTERED ([Id], [Id2], [Id3]),
CONSTRAINT [UQ_MyTable_IdUnique] UNIQUE NONCLUSTERED ([IdUnique] ASC )
)
这个想法是在 WHERE 中使用 IdUnique 来检索 ID、ID2 和 ID3:
但显然我们正在进行密钥查找。
如何在唯一非聚集索引上包含包含列?
我找不到与此相关的任何内容。
我今天正在考虑类似的事情,但我找不到这条信息。
当 SQL Server 请求内存而操作系统无法提供时,我们会得到RESOURCE_SEMAPHORE
等待类型。
但我找不到如下信息:
假设查询要求 3GB。但是只能提供2,查询仍然运行缓慢,还是一直等待?
RESOURCE_SEMAPHORE
意味着查询处于“停止”状态,只是在等待内存?
未决的内存授予应始终为 0 对吗?这意味着查询正在请求多少内存但仍在等待,对吗?
我正在阅读Memory Grants:Microsoft 的神秘 SQL Server memory consumer with Many Names,但它没有解释这一点,它只是解释了 Memory grant 是什么。
我正在阅读一些关于 AOAG 的 Windows 文档,但我很困惑:
Always On 可用性组是 SQL Server 2012 (11.x) 中引入的高可用性和灾难恢复解决方案,需要 Windows Server 故障转移群集 (WSFC)。此外,尽管 Always On 可用性组不依赖于 SQL Server 故障转移群集,但您可以使用故障转移群集实例 (FCI) 来托管可用性组的可用性副本。了解每种群集技术的作用以及在设计 Always On 可用性组环境时需要注意哪些事项非常重要。
接着:
Windows Server 故障转移群集和可用性组 部署 Always On 可用性组需要 Windows Server 故障转移群集 (WSFC)。要为 Always On 可用性组启用,SQL Server 实例必须驻留在 WSFC 节点上,并且 WSFC 和节点必须在线。
我从来没有听说过没有 Windows 故障转移集群的 aoag。
是否可以在不属于 oa windows 集群的 2 台机器上安装 AOAG?
我正在运行从数据库 X 到数据库 Y 的过程。
在数据库 Y 上应该有来自用户的插入。
在这张图片中,第一列是登录名,第二列是拥有所有必要权限的角色(它在我们需要的表上有 INSERT)。
登录名已正确分配给角色,并且该角色具有所有必要的权限。
但是当我执行该过程时,我收到了那些著名的错误:
Msg 229, Level 14, State 5, Procedure PROCEDURENAME, Line 165 [Batch Start Line 2]
The INSERT permission was denied on the object 'XXXXXXXXXXX', database 'DB', schema 'dbo'.
Msg 229, Level 14, State 5, Procedure PROCEDURENAME, Line 484 [Batch Start Line 2]
The INSERT permission was denied on the object 'YYYYYYYYYYYYYY', database 'DB', schema 'dbo'.
Msg 229, Level 14, State 5, Procedure PROCEDURENAME, Line 527 [Batch Start Line 2]
The INSERT permission was denied on the object 'YYYYYYYYYYYYYY', database 'DB', schema 'dbo'.
Msg 229, Level 14, State 5, Procedure PROCEDURENAME, Line 570 [Batch Start Line 2]
The INSERT permission was denied on the object 'YYYYYYYYYYYYYY', database 'DB', schema 'dbo'.
我创建了另一个测试登录,提供了完全相同的权限并且它工作。
如何找到阻止此登录的插入的内容?我什至跑了一个跟踪,看看我是否能找到更多的错误,在 eventviewer 上也没有。
登录没有明确的权限。它只是具有权限的角色的成员身份。
角色权限正确:
编辑:
自从重新创建 Windows 登录并重做所有权限以来,我尝试了一切。我注意到的是:
我可以创建一个登录名(使用密码的 sql 登录名)并且它有效。
我尝试使用原始 Windows 登录名在表中插入数据,但失败了,然后我将其从 ROLE 中删除并授予它 INSERT 权限,但它仍然失败。即使对数据库具有插入权限,它也无法插入数据。
我的查询运行有点慢,我认为这是因为该where datediff
功能。
WHERE DateDiff(minute, TB1.stDate, getdate()) > 50
(使用这种方法至少是使用我创建的索引)
在此之前是这样的:
datediff(minute, TB1.stDate), '2017-01-01') <= 0)
我想了解是否有更好的方法来过滤 datediff。
我的问题是,我的查询是如何使用索引的,即使在DATEDIFF
函数内部也是如此。
我需要每天运行一项工作 16。但如果是“星期六”或“星期日”,则必须在下一个工作日运行。
我不在乎是不是假期。我只需要运行它。
我可以做这样的事情并在步骤上分开它,并且只有在它运行没有错误时才传递到下一步:
--Step 1 - Verify if it is 16
IF day(getdate()) <> 16
RAISERROR ('Job runs only day 16.',16,1)
--Step 2 - verify if its saturday of sunday
IF DATEPART(weekday,getdate()) IN ( 7,1 )
RAISERROR ('Job will run on the next business day.',16,1)
我将使用这些查询创建 2 个步骤,但这不起作用,因为假设下一个工作日是 18 日,第一步将引发错误。
有没有办法安排这样的事情?
我有一个查询要在某些字段中更新和设置一些值。
Obut 现在我需要更新这些字段,此外,我需要设置DateOfModification
为当前日期和时间。
sql server 中的 GETDATE() 等价于在 $set 中使用什么?
我试过这个:
db.col.updateMany({
"field.field":"zzzzzzzz"
},{$set:{
"field2" : {
"field3" : ObjectId("5d4dc2c2b3e6de001b934ec6"),
"field4" : "xxxxxxxxxxxxxxxxxxxxxxxxxx"
},
"DateOfModification: "$$NOW"
}
}})
但似乎 $$NOW 仅适用于 mongoDB 4.2,我仍在使用 4.0
谢谢
编辑:
我尝试了 $currentDate 但仍然出现错误:
db.testeDBA.update(
{},
{$set: {"item":"anything",$currentDate: {"modifiedOn":true}}
})
'$currentDate' 中的美元 ($) 前缀字段 '$currentDate' 对存储无效。+
Azure 数据库是包含数据库(对吗?),那么我需要使用它来创建用户:
CREATE USER UserName WITH PASSWORD = 'hardPass';
ALTER ROLE [db_owner] ADD MEMBER UserName ;
有没有办法通过门户网站做到这一点?我发现官方文档说添加用户的唯一方法是使用查询,但文档可能没有更新。
谢谢。
我正在通过 BCP 创建一些报告以通过电子邮件发送。
create TABLE ##tempsss
(
create TABLE ##JOB_DataAssociacao_verContrato
(
F1 VARCHAR(6)
,F2 VARCHAR(200)
,F3 VARCHAR(22)
,F4 char(1)
,F5 varchar(10)
,F6 varchar(15)
,F7 varchar(30)
,F8 varchar(10)
,F9 VARCHAR(18)
) --it needs to be varchar to be able to use header
)
insert into ##tempsss
SELECT
...fields...
FROM some table or view
go
-------------------------------------------------------------
--passo 2 --
exec xp_cmdshell 'bcp "select ''field1'',''field2'',''field3'' UNION ALL select * from table or view" queryout "filepath\filename.xls" -U sa -P password -w -S servername'
-------------------------------------------------------------
EXEC msdb.dbo.sp_send_dbmail
@profile_name = 'dba profile or something',
@recipients = 'recipients email',
@subject = 'email subject',
@file_attachments='path\filename.xls'
-------------------------------------------------------------
drop table ##tempsss
有 9k 行,我有一个 2mb 的文件。我只是复制这个文件的内容,然后粘贴到一个空的 excel 文件中,我有 160KB。
如何使用 bcp 但创建较小的文件?
我在通过 dbmail 发送超过 1mb 的文件时遇到了问题。
我将 dbmail 设置为发送 10mb+ 的文件。smtp 也可以。