我正在对大型SQL server 2008 数据库做一些性能调优,IT 组不愿意给SHOWPLAN 权限。过去,“显示执行计划”是了解单个查询和过程性能的最有效方法。
授予此权限有哪些固有风险?对数据库的开发副本进行这种限制是否有正当理由?
注意:该 SQL IT 组在单个 SQL Server 实例下拥有 200 多个数据库。谢谢。
答:我认为没有回应意味着除了下面提到的风险之外没有重大的安全风险。基本上,将其限制在开发数据库上会适得其反。
如果有人提出更好的答案,我会更新。感谢您的意见!
今天,在断电后,一个数据库(恢复:已满)在 SSMS 中显示“In Recovery”。所以:
myDatabase (In recovery) (数据库状态:recovery, Shutdown)
完成后,“恢复过程”数据库显示名称 myDatabase 没有“(恢复中)”。我以为问题解决了,但事实并非如此。
当我启动使用该数据库的应用程序时,额外的文本“(恢复中)”再次出现在我的数据库名称旁边。
我等到“恢复过程”完成,然后将数据库脱机并重新联机。
我重新启动了服务器,重新启动了计算机,当我的应用程序运行时,额外的文本再次出现。在 SQL Server 日志中,消息“正在启动数据库‘myDatabase’”出现了几次。似乎数据库正在工作,因为我可以插入数据,但状态显示它发生了一些事情。
服务器日志没有显示任何有趣的内容。唯一不正常的是我有30个条目“启动数据库'myDatabase'”。
我知道当服务器启动时,每个数据库在准备使用之前都会经过恢复。但就我而言,数据库联机然后显示“myDatabase(恢复中)”。如果我关闭应用程序,数据库将进入状态:正常。这真让我抓狂。
我什至安装了一个新的 SQL Server 实例,并将旧数据库“myDatabase”放在上面。问题仍然发生。
当我运行此查询时:
SELECT databasepropertyex('nyDatabase', 'STATUS')
Run Code Online (Sandbox Code Playgroud)
它显示正在恢复、在线、可疑和回到在线然后恢复等。
我最近接手了一个项目,我发现在大多数表中,主键都有属性“ NOT FOR REPLICATION”。
我不是 DBA,但肯定在大多数数据库中,没有主键的记录将被视为已损坏。大多数这些记录的主键几乎肯定会在某处用作外键。
这是前开发人员(不再为公司工作)的错误,还是涉及其他一些逻辑?我们甚至不在生产环境中使用复制,所以这实际上并没有影响任何严重的事情,但我想知道删除所有这些我不知道的指令是否有任何其他副作用。
对于与该主题相关的许多搜索词,我没有找到很多有用的点击,所以我相当肯定这只是一个我需要扭转的愚蠢错误,所以这个问题真的是为了缓解我的偏执。
我在 SQL Server Central 线程中看到完整备份是否会截断日志?完整备份不会截断日志:
不会。完整备份或差异备份都不会截断事务日志。- Lynn Pettis
否 - 完整备份不会截断日志。-查德克劳馥
那么完整备份和仅复制完整备份有什么区别呢?
对于日志备份,只有复制备份可以防止日志链在不截断日志的情况下中断。那么什么是仅复制完整备份?
明年,我将帮助清理多个 SQL Server 环境。
我们有大约 10,000 个存储过程,估计其中只有大约 1000 个是定期使用的,另外还有 200 个左右是在极少数情况下使用的,这意味着我们有很多工作要做。
由于我们有多个部门和团队可以访问这些数据库和程序,因此我们并不总是调用这些程序的人,这意味着我们必须确定正在调用哪些程序。最重要的是,我们希望在几个月内而不是几天内确定这一点(这消除了一些可能性)。
一种方法是使用SQL Server Profiler并跟踪正在调用的过程,并将它们与我们拥有的过程列表进行比较,同时标记是否使用了这些过程。从那时起,我们可以将程序移动到不同的模式,以防部门尖叫。
Profiler在这里使用最有效的方法吗?和/或你们中有没有人做过类似的事情并找到了另一种方法/更好的方法来做到这一点?
我有一个包含数据的现有表:
dbo.Test (col1,col2,col3....) ON [PRIMARY]
Run Code Online (Sandbox Code Playgroud)
我需要将此表更改为这样分区:
dbo.Test(col1,col2,col3....) ON Ps_Date(Col2)
Run Code Online (Sandbox Code Playgroud)
我怎样才能在不删除和重新创建表格的情况下实现这一目标?
我最近开始使用 Management Studio 2012。使用 MySQL Workbench 时,一个方便的功能是我可以全部使用小写字母,任何保留字(如SELECT, INSERT)都会自动转换为大写字母。如何在 SSMS 中复制此行为?
该sp_getapplock存储过程有以下返回值:
0:同步成功授予锁。
1:等待其他不兼容的锁释放后,成功授予锁。
-1:锁定请求超时。
-2:锁定请求被取消。
-3:锁定请求被选为死锁牺牲品。
-999:表示参数验证或其他调用错误。
我正在编写一个用于调用sp_getapplock我们的数据访问层的包装器,我想知道在什么情况下可以返回 -2,以便我可以抛出一个描述性和有用的异常。-1 和 -3 的返回值的含义很明显,我可以轻松创建导致返回这些值的测试条件。我将如何设法获得 -2 的返回值?
我一直在研究 SQL Server (2012) 上的统计更新的采样阈值,并注意到一些奇怪的行为。基本上,采样的行数在某些情况下似乎有所不同 - 即使是相同的数据集。
我运行这个查询:
--Drop table if exists
IF (OBJECT_ID('dbo.Test')) IS NOT NULL DROP TABLE dbo.Test;
--Create Table for Testing
CREATE TABLE dbo.Test(Id INT IDENTITY(1,1) CONSTRAINT PK_Test PRIMARY KEY CLUSTERED, TextValue VARCHAR(20) NULL);
--Insert enough data so we have more than 8Mb (the threshold at which sampling kicks in)
INSERT INTO dbo.Test(TextValue)
SELECT TOP 1000000 'blahblahblah'
FROM sys.objects a, sys.objects b, sys.objects c, sys.objects d;
--Create Index on TextValue
CREATE INDEX IX_Test_TextValue ON dbo.Test(TextValue);
--Update Statistics …Run Code Online (Sandbox Code Playgroud) 我应该在设计表格时使用varchar(255)或varchar(256)吗?我听说一个字节用于列的长度,或用于存储元数据。
在这一点上它不再重要了吗?
我在互联网上看到了一些帖子,但是它们适用于 Oracle 和 MySQL。
我们有 Microsoft SQL Server 2016 企业版,它如何应用于这种环境?
现在举个例子,如果我告诉我的客户保留例如 255 个字符而不是 256 个字符的文本描述,有什么区别吗?我读到的内容“最大长度为 255 个字符,DBMS 可以选择使用单个字节来指示字段中数据的长度。如果限制为 256 或更大,则需要两个字节。” 这是真的?
database-design sql-server varchar sql-server-2016 enterprise-edition
sql-server ×10
backup ×1
locking ×1
partitioning ×1
profiler ×1
recovery ×1
ssms ×1
statistics ×1
varchar ×1