为 Azure SQL 数据库 (PaaS) 创建包含用户时,密码保存在哪里?
例如:
CREATE USER taiobtest WITH password='PVHz3U4A$LNytQF^';
GO
对于服务器登录,我可以从sys.sql_logins:password_hash
列中获取它。
我的用例是从生产备份中刷新非生产。我需要在恢复之前编写出包含用户和所有相关权限的数据库。恢复后清理生产数据库用户/权限并恢复非生产用户和权限。
为 Azure SQL 数据库 (PaaS) 创建包含用户时,密码保存在哪里?
例如:
CREATE USER taiobtest WITH password='PVHz3U4A$LNytQF^';
GO
对于服务器登录,我可以从sys.sql_logins:password_hash
列中获取它。
我的用例是从生产备份中刷新非生产。我需要在恢复之前编写出包含用户和所有相关权限的数据库。恢复后清理生产数据库用户/权限并恢复非生产用户和权限。
我正在使用:SSMS-18.4 SQL Server-SQL 2019 CU3 Windows 10
我能够成功创建从本地 SQL 2017 到 Azure SQL 数据库的链接服务器,而不会暴露我的密码。
--Read the password from text file
DECLARE @password VARCHAR(MAX)
SELECT @password = BulkColumn
FROM OPENROWSET(BULK 'C:\Azure SQL Database - Where is my SQL Agent\password.txt', SINGLE_BLOB) AS x
--Drop and create linked server
IF EXISTS(SELECT * FROM sys.servers WHERE name = N'AzureDB_adventureworks')
EXEC master.dbo.sp_dropserver @server=N'AzureDB_adventureworks', @droplogins='droplogins';
EXEC master.dbo.sp_addlinkedserver
@server = N'AzureDB_adventureworks',
@srvproduct=N'',
@provider=N'SQLNCLI',
@datasrc=N'ugdemotargetserver.database.windows.net',
@catalog=N'adventureworks';
EXEC master.dbo.sp_addlinkedsrvlogin
@rmtsrvname=N'AzureDB_adventureworks',
@useself=N'False',
@rmtuser=N'taiob',@rmtpassword=@password;
GO
但是密码没有得到正确的值。我登录失败。
一些错误信息:
Login failed for user 'taiob'.
(.Net SqlClient Data Provider) Server
Name: .\SQL2019
Error Number: 18456
Severity: 14
State: 1
Line Number: 1
我通过运行以下代码确认它正在从文件中读取正确的密码:
DECLARE @password VARCHAR(MAX)
SELECT @password = BulkColumn
FROM OPENROWSET(BULK 'C:\Azure SQL Database - Where is my SQL Agent\password.txt', SINGLE_BLOB) AS x
SELECT @password
我在其他地方使用 PowerShell 使用相同的文件,没有任何问题。
#Replace with password file location
$password = Get-Content "C:\Azure SQL Database - Where is my SQL Agent\password.txt"
如果我对密码进行硬编码,它可以正常工作。如果我打印变量,我可以看到值是正确的。这不是防火墙问题,因为我可以从运行代码的同一个 SSMS 直接连接。
我在用:
测试查询:
USE [AdventureWorks];
GO
SELECT TOP (13) *
FROM Sales.SalesOrderHeader AS s
INNER JOIN Sales.SalesOrderDetail AS d ON s.SalesOrderID = d.SalesOrderID
WHERE s.TotalDue > 1000
OPTION (RECOMPILE);
GO
打开实际执行计划 (Ctrl+M)。看着“聚集索引搜索”,我看到了13 of 17 (76%)
。查看我看到Estimated Number of Rows
或Estimated Number of Rows to be Read
看重的属性是 3.85562。我的问题是这个数字 17 是从哪里来的?
在我发布这个问题之前,请阅读以下文章。
我熟悉通过查看以下项目(不全面)来调查高线程数问题:
在我决定做出改变之前,这项调查可能需要几个小时。我可以在短期内做什么,这样请求就不会等待分配工作线程?
我们使用 SCOM 来监控 SQL Server 的许多方面,这就是其中之一。我知道这更多是信息性消息,但始终来自同一服务器的查看使我们有机会查看我上面列出的内容。我想从社区中找出什么,如果他们采取某些行动(可能是暂时的,直到完成全面评估),work_queue_count
一旦 SCOM 触发警报,是否持续大于零。有时很容易检测到消耗大量线程但并非总是如此的单个查询。
环境:Microsoft SQL Server 2014 - 12.0.4100.1 (X64) Apr 20 2015 17:29:27 Copyright (c) Microsoft Corporation Enterprise Edition (64-bit) on Windows NT 6.3 (Build 9600: ) (Hypervisor)
当我更改主副本上的日志文件增长率时,辅助副本数据库会得到该更改,我可以从 GUI 和sys.database_files
视图中进行验证。但同样的变化并没有反映在sys.master_files
视野中。
设置代码
:Connect PrimaryNode
IF EXISTS(SELECT name FROM sys.databases
WHERE name = 'FileGrowthTest]')
DROP DATABASE FileGrowthTest
GO
CREATE DATABASE [FileGrowthTest]
ON PRIMARY
( NAME = N'FileGrowthTest', FILENAME = N'L:\FileGrowthTest.mdf' , SIZE = 4096KB , FILEGROWTH = 10%)
LOG ON
( NAME = N'FileGrowthTest_log', FILENAME = N'F:\FileGrowthTest_log.ldf' , SIZE = 4096KB , FILEGROWTH = 10%)
GO
BACKUP DATABASE [FileGrowthTest] TO
DISK = N'E:\Backup\FileGrowthTest.bak'
WITH NOFORMAT, NOINIT, NAME = N'FileGrowthTest-Full Database Backup',
SKIP, NOREWIND, NOUNLOAD, STATS = 10
GO
--- YOU MUST EXECUTE THE FOLLOWING SCRIPT IN SQLCMD MODE.
:Connect PrimaryNode
USE [master]
GO
ALTER AVAILABILITY GROUP [TestAG]
ADD DATABASE [FileGrowthTest];
GO
:Connect PrimaryNode
BACKUP DATABASE [FileGrowthTest] TO DISK = N'\\backupshare\FileGrowthTest.bak' WITH COPY_ONLY, FORMAT, INIT, SKIP, REWIND, NOUNLOAD, COMPRESSION, STATS = 5
GO
:Connect SecondaryNode
RESTORE DATABASE [FileGrowthTest] FROM DISK = N'\\backupshare\FileGrowthTest.bak' WITH NORECOVERY, NOUNLOAD, STATS = 5
GO
:Connect PrimaryNode
BACKUP LOG [FileGrowthTest] TO DISK = N'\\backupshare\FileGrowthTest.trn' WITH NOFORMAT, INIT, NOSKIP, REWIND, NOUNLOAD, COMPRESSION, STATS = 5
GO
:Connect SecondaryNode
RESTORE LOG [FileGrowthTest] FROM DISK = N'\\backupshare\FileGrowthTest.trn' WITH NORECOVERY, NOUNLOAD, STATS = 5
GO
:Connect SecondaryNode
-- Wait for the replica to start communicating
begin try
declare @conn bit
declare @count int
declare @replica_id uniqueidentifier
declare @group_id uniqueidentifier
set @conn = 0
set @count = 30 -- wait for 5 minutes
if (serverproperty('IsHadrEnabled') = 1)
and (isnull((select member_state from master.sys.dm_hadr_cluster_members where upper(member_name COLLATE Latin1_General_CI_AS) = upper(cast(serverproperty('ComputerNamePhysicalNetBIOS') as nvarchar(256)) COLLATE Latin1_General_CI_AS)), 0) <> 0)
and (isnull((select state from master.sys.database_mirroring_endpoints), 1) = 0)
begin
select @group_id = ags.group_id from master.sys.availability_groups as ags where name = N'TestAG'
select @replica_id = replicas.replica_id from master.sys.availability_replicas as replicas where upper(replicas.replica_server_name COLLATE Latin1_General_CI_AS) = upper(@@SERVERNAME COLLATE Latin1_General_CI_AS) and group_id = @group_id
while @conn <> 1 and @count > 0
begin
set @conn = isnull((select connected_state from master.sys.dm_hadr_availability_replica_states as states where states.replica_id = @replica_id), 1)
if @conn = 1
begin
-- exit loop when the replica is connected, or if the query cannot find the replica status
break
end
waitfor delay '00:00:10'
set @count = @count - 1
end
end
end try
begin catch
-- If the wait loop fails, do not stop execution of the alter database statement
end catch
ALTER DATABASE [FileGrowthTest] SET HADR AVAILABILITY GROUP = [TestAG];
GO
GO
现在这两个文件都有10%的增长率。更改为固定值。
USE [master];
GO
ALTER DATABASE FileGrowthTest MODIFY FILE (NAME='FileGrowthTest', FILEGROWTH = 256MB);
ALTER DATABASE FileGrowthTest MODIFY FILE (NAME='FileGrowthTest_log', FILEGROWTH = 128MB);
GO
sys.database_files
使用视图查看数据和日志文件时,更改在辅助副本节点上可见。
USE [FileGrowthTest];
GO
SELECT name AS file_name,
type_desc AS file_type,
growth AS current_percent_growth
FROM sys.database_files
WHERE is_percent_growth=1
但是使用sys.master_files
仅查看数据文件更改是可见的。日志文件增长仍然显示 10%。
SELECT d.name as database_name,
mf.name as file_name,
mf.type_desc as file_type,
mf.growth as current_percent_growth
FROM sys.master_files mf (NOLOCK)
JOIN sys.databases d (NOLOCK) on mf.database_id=d.database_id
WHERE is_percent_growth=1
AND d.name='FileGrowthTest'
GO
为什么sys.master_files
不反映日志文件自动增长速率变化而数据文件自动增长变化被正确反映?
我完全理解这个错误的含义以及如何解决。
我的问题是这个数字(148643705716736)指的是什么?
日期 2018 年 5 月 7 日凌晨 1 点 36 分 58 秒
记录 SQL Server(当前 - 2018 年 5 月 7 日凌晨 2:31:00)
源 spid125
信息
无法为数据库“tempdb”中的对象“dbo.SORT 临时运行存储: 148643705716736 ”分配空间,因为“PRIMARY”文件组已满。通过删除不需要的文件、删除文件组中的对象、向文件组添加其他文件或为文件组中的现有文件设置自动增长来创建磁盘空间。
KB3170112引入了显示计划 XML 架构 SQL Server 2014 或 2016 的新属性。
MemoryGrantInfo 下的 MaxQueryMemory:如果查询需要内存才能运行,则可用于单个查询授权的最大内存量(以 KB 为单位)。
属性GrantedMemory
在上面公布之前就已经存在。现在两者都在 Showplan XML 中。
这是一个例子:
从上图中,如果我添加的值RequestedMemory
和RequiredMemory
总计 =62,864 KB。295,344 KB 的值MaxQueryMemory
来自哪里,或者该值的真正含义是什么?
我还查看了2017 Schema,其定义如下。
MaxQueryMemory:单个查询允许的最大内存(以 KB 为单位)。
根据 Microsoft 文档了解自动 SQL 数据库备份
备份多久发生一次?
完整数据库备份每周进行一次,差异数据库备份通常每隔几个小时进行一次,而事务日志备份通常每 5 - 10 分钟进行一次。第一次完整备份是在创建数据库后立即安排的。它通常在 30 分钟内完成,但当数据库很大时可能需要更长的时间。例如,初始备份在还原的数据库或数据库副本上可能需要更长的时间。第一次完整备份后,所有进一步的备份都会自动安排并在后台静默管理。所有数据库备份的确切时间由 SQL 数据库服务确定,因为它平衡了整个系统工作负载。
有没有办法让我检查我的第一个完整备份是否已完成并准备好恢复?
我知道它将首先在同一位置提供,然后再复制到其他位置。我也知道我可以通过尝试从备份中添加一个新数据库来检查我的数据库备份是否出现在列表中。如果有我可以查询检查的系统表、管理视图,我会更感兴趣?
表列中的样本数据,数据类型NVARCHAR(MAX)
。此数据由扩展事件跟踪捕获实体框架生成的数据库调用收集。
exec sp_executesql N'SELECT TOP (2)
[Extent1].[ccusqcode] AS [ccusqcode],
[Extent1].[ccusname] AS [ccusname],
[Extent1].[ccusfirstname] AS [ccusfirstname],
[Extent1].[ccuslastname] AS [ccuslastname],
[Extent1].[dbirthday] AS [dbirthday],
[Extent1].[ccellphone] AS [ccellphone],
[Extent1].[cdriverlicense] AS [cdriverlicense],
[Extent1].[csocsecno] AS [csocsecno],
[Extent1].[dfirstvisit] AS [dfirstvisit],
[Extent1].[dlastvisit] AS [dlastvisit],
[Extent1].[nmtdrxcount] AS [nmtdrxcount],
[Extent1].[lduplabel] AS [lduplabel],
[Extent1].[cemployerid] AS [cemployerid],
[Extent1].[mnotes] AS [mnotes],
[Extent1].[cemployercontact] AS [cemployercontact],
FROM [dbo].[customer] AS [Extent1]
WHERE ([Extent1].[cusid_PK] = @p__linq__0) AND ([Extent1].[pharminfoid_FK] = @p__linq__1)',N'@p__linq__0 bigint,@p__linq__1 bigint',@p__linq__0=NULL,@p__linq__1=1
我想使用LIKE
运算符来查找所有带有 text 的行FROM [dbo].[customer]
。
SELECT *
FROM [dbname].[schemaName].[tableName]
WHERE STATEMENT like '%FROM [[]dbo[]].[[]customer[]]%'
为什么它不起作用?
我运行以下代码来清除旧数据。确切的代码as is
作为指向用户数据库的 SQL 代理作业步骤运行。期望提交一批 10,000 行。2 天前它没有这样做,在终止会话后(终止原因与此问题无关)回滚所有删除,而不仅仅是最后一批。
任何人都可以指出我的原因吗?
SET NOCOUNT ON;
DECLARE @rowCount INT;
SET @rowCount= 1;
WHILE @rowCount > 0
BEGIN
BEGIN TRANSACTION;
DELETE TOP (10000)
dbo.TableName
WHERE RecordedAt<DATEADD(month, -3, GETDATE() )
SET @rowCount = @@ROWCOUNT;
COMMIT TRANSACTION;
END
版本:SQL 2012 SP3 两个节点。1 小学 1 中学
这就是节点的设置方式。
当我设置连接属性时使用 SSMS 连接选项,我ApplicationIntent=ReadOnly
没有被路由到辅助节点。是的,我使用侦听器名称作为服务器名称。
我没有创建任何只读路由列表,因为我只有 2 个节点。
问题一
即使只有 2 个节点我也需要只读路由列表,我错了吗?
问题2
这两个设置有什么区别Readable Secondary
?辅助节点只能提供只读流量,那么为什么要通过选择来路由其他连接Yes
?
根据在线书籍:
只读意向
只允许与该副本的辅助数据库建立只读连接。辅助数据库都可用于读取访问。
是的
允许所有连接到此副本的辅助数据库,但仅限于读取访问。辅助数据库都可用于读取访问。
这个论坛有一个关于扩展事件module_end
持续时间单位的问题,我回答了。详情在这里。
所有事件总是以微秒为单位吗?
sp_add_jobstep在此处有详细记录。我知道参数@command
是 type NVARCHAR(MAX)
。
我正在使用存储过程创建 SQL 代理作业。通过变量传递@command
参数值。我在 4000 个字符处被截断。
我的变量也声明为 NVARCHAR(MAX)
在参数中添加超过 4000 个字符的任何解决方法@command
?
我在我的 Blob 存储中上传了整套.txt
文件,文件夹结构为年/月/日。
然后在管道中,我创建了以下数据集。
"type": "AzureBlob",
"linkedServiceName": "blob-store",
"typeProperties": {
"fileName": "{Day}.csv",
"folderPath": "adf-data/sales/{Year}/{Month}",
"format": {
"type": "TextFormat",
"columnDelimiter": "\t",
"firstRowAsHeader": true
},
"partitionedBy": [
{
"name": "Year",
"value": {
"type": "DateTime",
"date": "SliceStart",
"format": "yyyy"
}
},
{
"name": "Month",
"value": {
"type": "DateTime",
"date": "SliceStart",
"format": "MM"
}
},
{
"name": "Day",
"value": {
"type": "DateTime",
"date": "SliceStart",
"format": "dd"
}
}
]
},
"availability": {
"frequency": "Day",
"interval": 1
},
"external": true,
"policy": {}
}
问题: 我可以做些什么来进一步解决或修复此问题?
我正在使用 SSMS 2016 版本。
Microsoft SQL Server Management Studio 13.0.16106.4
Microsoft Analysis Services Client Tools 13.0.1700.441
Microsoft Data Access Components (MDAC) 10.0.14393.0
Microsoft MSXML 3.0 6.0
Microsoft Internet Explorer 9.11.14393.0
Microsoft .NET Framework 4.0.30319.42000
Operating System 6.3.14393
在以前的版本中,我能够在状态栏或选项卡文本中看到会话 ID。
我可以导航到工具-->选项-->XML-->编辑器选项卡和状态栏并将其打开或关闭。我在 SSMS 2016 中看不到同样的情况。
任何人都知道此选项是否被删除或重新定位在其他选项下。
版本:Microsoft SQL Server 2012 (SP3) (KB3072779) - 11.0.6020.0 (X64) Oct 20 2015 15:36:27 版权所有 (c) Microsoft Corporation Enterprise Edition:基于内核的许可(64 位)在 Windows NT 6.3 (构建 9600:)
一旦我用全扫描更新我的统计数据,在 10~20 秒内,同一张表上的一些统计数据就会通过一个样本在二级上得到更新。我运行扩展事件跟踪以捕获辅助节点上的自动更新统计信息,但未记录任何内容。在主节点上,一旦我运行这个:用全扫描更新统计表名我看到这个关于我的统计状态
当我查询二级统计数据时,我得到了这个。查看 rows_sampled 和 last_updated 列。
我还运行了一个扩展事件跟踪来捕获自动更新统计信息,但没有记录任何内容。这是我的 XE 跟踪的定义。
CREATE EVENT SESSION [AutoUpdateStats] ON SERVER ADD EVENT sqlserver.auto_stats(
ACTION(sqlserver.client_app_name,sqlserver.server_principal_name)
WHERE ([package0].[equal_uint64]([database_id],(25))))WITH (MAX_MEMORY=4096 KB,EVENT_RETENTION_MODE=ALLOW_SINGLE_EVENT_LOSS,MAX_DISPATCH_LATENCY=30 SECONDS,MAX_EVENT_SIZE=0 KB,MEMORY_PARTITION_MODE=NONE,TRACK_CAUSALITY=OFF,STARTUP_STATE=OFF)GO
为什么这给我相同的值,四个 1?
USE [TSQL2012]
GO
IF OBJECT_ID('dbo.sqlsequence', 'SO') IS NOT NULL
DROP SEQUENCE dbo.sqlsequence;
GO
CREATE SEQUENCE [dbo].[SQLSequence] AS INT
START WITH 1
MAXVALUE 8 CYCLE
SELECT NEXT VALUE FOR
[dbo].[SQLSequence] AS [Seq1] ,
NEXT VALUE FOR
[dbo].[SQLSequence] AS [Seq2] ,
NEXT VALUE FOR
[dbo].[SQLSequence] AS [Seq3] ,
NEXT VALUE FOR
[dbo].[SQLSequence] AS [Seq4]
但这按预期工作正常。给我 1、2、3、4
USE [TSQL2012]
GO
IF OBJECT_ID('dbo.sqlsequence', 'SO') IS NOT NULL
DROP SEQUENCE dbo.sqlsequence;
GO
CREATE SEQUENCE [dbo].[SQLSequence] AS INT
START WITH 1
MAXVALUE 8 CYCLE
SELECT NEXT VALUE FOR
[dbo].[SQLSequence] AS [Seq1]
SELECT NEXT VALUE FOR
[dbo].[SQLSequence] AS [Seq2]
SELECT NEXT VALUE FOR
[dbo].[SQLSequence] AS [Seq3]
SELECT NEXT VALUE FOR
[dbo].[SQLSequence] AS [Seq4]