我只阅读了路由设置并且工作正常。我有一个 SQL 登录名,它使用ApplicationIntent=ReadOnly. 但是我想阻止用户访问主。
我已经看到很多关于此的主题,它们似乎都建议禁用主服务器上的登录。当我做这个连接到听众ApplicationIntent=ReadOnly失败时Login failed for user ''. Reason: The account is disabled.
我已确保帐户是相同的 SID。
谢谢你的帮助。
我尝试在IndexOptimize索引数量非常多(> 250.000)的数据库上使用存储过程。存储过程收集需要处理的数据的初始步骤需要数小时,即使我设置了 @Indexes 参数来缩小工作范围。
SQL Server 维护解决方案版本:2019-02-10 10:40:47 安装了最新 CU14 的 SQL Server 2017 标准版。
在客户那里,我看到了一个包含 500.000 个以上索引的数据库。12 小时后,数据收集步骤仍在运行。
我希望如果我将 @Indexes 设置为单个索引执行应该立即开始。
这是我的存储过程调用的示例。
EXECUTE dbo.IndexOptimize
@Databases = 'db',
@Indexes = 'db.dbo.'
@FragmentationLow = NULL,
@FragmentationMedium = 'INDEX_REORGANIZE,INDEX_REBUILD_ONLINE,INDEX_REBUILD_OFFLINE',
@FragmentationHigh = 'INDEX_REBUILD_ONLINE,INDEX_REBUILD_OFFLINE',
@FragmentationLevel1 = 30,
@FragmentationLevel2 = 50,
@UpdateStatistics = 'ALL',
@OnlyModifiedStatistics = 'Y',
@LogToTable = 'Y',
@LockTimeout = 60
Run Code Online (Sandbox Code Playgroud)
有人可以与我分享他在索引数量非常多的数据库中使用 IndexOptimize 的经验吗?
index sql-server ola-hallengren index-maintenance sql-server-2017
Microsoft SQL Server 2017 (RTM-CU14-GDR) (KB4494352) - 14.0.3103.1 (X64) 2019 年 3 月 22 日 22:33:11 版权所有 (C) 2017 Microsoft Corporation Developer Edition(64 位),Windows Server 2016(数据中心 10.0)内部版本 14393:)(管理程序)
我的生产服务器在 SQL 代理作业中执行这些命令以将结果输出到我的管理数据库中的表:
DECLARE @SQL VARCHAR(MAX) = 'master..xp_cmdshell ''SQLCMD -E -Q"DBCC CHECKDB('+@Database+') WITH NO_INFOMSGS, ALL_ERRORMSGS"'''; -- If all is well, there will be no output.
INSERT INTO DBCC_CHECKDB_Results EXEC(@SQL);
Run Code Online (Sandbox Code Playgroud)
昨晚,输出一行信息,作业停止执行,作业历史记录中没有显示错误。一行信息是:
“Sqlcmd:警告:上次操作已终止,因为用户按下了 CTRL+C。”
这怎么可能?周日晚上 10:00,没有人登录到服务器。CTRL+C不在命令行中。
作为测试,我执行了此命令,并在执行时键入CTRL+C::
USE ARC
DBCC CHECKDB WITH NO_INFOMSGS, ALL_ERRORMSGS:
Nothing happened.
Run Code Online (Sandbox Code Playgroud)
关于什么会导致该输出行的任何想法?
谢谢,李
我想向现有索引添加另一个包含的列,但保持其余设置(例如 FILLFACTOR、ONLINE、SORT_IN_TEMPDB 等)相同。
有任何想法吗?
我有一个运行数天的 while 循环(bydesign)请参阅相关是否有限制可以将多少个备份附加到单个文件?
我有一个显示循环计数的局部变量,当我在查询窗口中运行它时,我可以用 print @counter
我现在正在作业中运行 while 循环,并且我想显示该@counter值。经过一番研究,我尝试了RAISERROR (Transact-SQL),它应该显示在 SQL 错误日志中,但它不起作用。我读了Using RAISERROR我认为我的代码是正确的,但不确定它是否可以在带有局部变量的 While 循环中使用。
创建数据库并准备它
USE [master]
GO
Create database T_test
USE [master]
GO
ALTER DATABASE [T_test] SET RECOVERY FULL WITH NO_WAIT
GO
BACKUP DATABASE T_test to disk= N'K:\Test\T_test.bak' with noinit --Create first full
GO
Run Code Online (Sandbox Code Playgroud)
尝试在查询窗口中运行以进行测试
DECLARE @counter int
SET @counter = 0
WHILE 1=1
BEGIN
BACKUP DATABASE [T_test] TO
DISK = N'K:\Test\T_Test.diff' WITH DIFFERENTIAL , NOFORMAT, NOINIT,
NAME = N'T_Test-Diff Database …Run Code Online (Sandbox Code Playgroud) 使用 Windows 身份验证,有没有办法禁止用户通过 ODBC 连接到数据库?
我正在阅读有关 SQL Server 高可用性解决方案和灾难恢复以及 SQL Server 具有快照功能的可用资源。从理论上讲,一切看起来都很美。
我还读到快照将在某个时间点复制数据库,您可以使用它来恢复数据库。
在这个答案中有一条评论(Peter Schofield,2013 年)关于 SQL Server 快照不受支持,并且在开发环境中用于快速回滚非常有用。
[...] 也许采用的最大障碍是 Management Studio 不提供支持[...]
[...] 这听起来像是在开发环境中使用快照的理想方式,只是为了快速部署脚本和快速回滚。[...]
我想知道快照在生产环境中是否真的有用。有哪些在生产中的使用示例,请提供有关您何时使用快照在生产系统上提供解决方案的个人示例。
主要目标是提供一些实际使用的示例,并通过这些示例为我和将阅读本文的每个人提供一些有用的想法。
就我而言,我在生产环境中使用 SQL Server 2017 Enterprise Edition。
我可以使用 SQL Server 2017 标准版配置分布式 AG 吗?
sql-server availability-groups standard-edition sql-server-2017 distributed-availability-groups
我目前在一张表上大约有 70 亿行,并且接近整个数据库的最大磁盘空间。
我需要开始将一个大表上的新数据保存到新磁盘。
我已经看过分区datetime,这似乎是显而易见的选择 这是我们在 6 个月内获得新服务器之前的临时解决方案,但需要“现在”解决方案。
我将如何实现这一目标?我可以实施手动分区以便所有新数据都转到新磁盘吗?
我所看到的一切都需要创建类似于每月选项的内容,而我只想将所有新内容放在新磁盘上。
一种选择是按月拆分现有数据,然后手动移动分区。
我什至不确定这是否可行,因此希望获得有关实现上述目标的最佳解决方案的一些反馈。
SQL Server 2017 企业版。
我正在尝试使用 python 来自动化我们的一些数据库恢复。当我运行 SQL 查询时,数据库会恢复并正常恢复,但是当我运行使用相同 SQL 查询的 python 脚本时,数据库仍处于恢复模式。
对我做错的任何帮助将不胜感激。
import pyodbc
#Set these Variables
sourceserver = 'MySourceServerName'
destinationserver = 'MyDestinationServerName'
dbname = 'test'
sourceserverplusport = sourceserver + ',1433'
destinationserverplusport = destinationserver + ',1433'
def ExecSQL(serverplusport, dbnameIN, sql):
try:
connexecsql = pyodbc.connect('Driver={SQL Server};'
'Server=' + serverplusport +';'
'Database=' + dbnameIN + ';'
'Trusted_Connection=yes;')
#Set AutoCommit
if connexecsql is not None:
connexecsql.autocommit = True
print(sql)
cursor = connexecsql.cursor()
cursor.execute(sql)
finally:
cursor.commit
cursor.close
connexecsql.commit
connexecsql.close
sqlcommand = r"""IF @@SERVERNAME = 'MyDestinationServerName'
RESTORE …Run Code Online (Sandbox Code Playgroud) sql-server-2017 ×10
sql-server ×9
index ×2
connectivity ×1
dbcc ×1
dbcc-checkdb ×1
disk-space ×1
distributed-availability-groups ×1
python ×1
security ×1
snapshot ×1
t-sql ×1