数据库管理员

希望提高数据库技能并向社区中的其他人学习的数据库专业人员的问答

1
SQL Server事务备份与日志
我继承了一个中等规模的对业务至关重要的SQL Server 2008数据库,并试图将我的头放在备份计划上。(我是开发人员,而不是DBA。) 现在,我们的系统设置方式有两个备份系统: 每周完整备份(.bak)和每小时事务日志(.trn)备份。我们保留了这些备份的几套,并定期将它们运到异地。 SQL Server日志(.ldf),恢复模式设置为Full。该文件与主.mdf文件位于单独的驱动器上,但不进行备份。 如果进行紧急还原(或将备份还原到开发机),我的程序是使用这些.bak文件,然后应用.trn文件。我们有一个脚本,可使该过程相对简单。 我的问题: 是否可以从.ldf文件还原数据库?什至是为了什么? 同时拥有这两个事务日志是否不必要? 备份.ldf文件重要吗?

4
CLUSTER之后需要REINDEX吗?
我正在考虑使用CLUSTER通过索引对表重新排序。我知道表数据的重新创建使所有现有索引要么过时,要么变得毫无用处。我已经看到一些迹象表明在集群之后需要REINDEX。我发现其他引用表明CLUSTER 执行了REINDEX。在官方文档说,一切尽在不言中约REINDEX是集群的一部分或需要(虽然它确实表明集群运行后分析), 任何人都可以明确地(例如,对官方文档进行某种程度的引用)说出在CLUSTER之后是否需要REINDEX吗?
12 postgresql 

5
如何从Azure SQL数据库中删除错误的执行计划?
DBCC FREEPROCCACHE在Azure SQL DB中不起作用。我还能如何强制计划以一种不会损害生产系统的方式将自己从缓存中踢出(即,我不能只是随意改变表)?这是专门针对由Entity Framework创建的SQL,因此它们不是自我管理的存储过程-它实际上是动态SQL。 (来源是错误的索引->错误的统计信息,等等。这些都是固定的,但是错误的计划不会消失。) 更新: 我选择了@mrdenny的解决方案,因为他先到达了那里。但是,我已经成功使用@Aaron Bertrand的脚本执行了工作。感谢大家的帮助!

1
如何从默认位置移动SQL Server LocalDB实例的文件夹?
我收到多个错误消息LocalDB(启动错误,无法从SQL Server Management Studio创建数据库,并且在尝试还原备份时也遇到多个 问题),我发现的任何修复方法都无济于事。在我看来,所有错误的根源都在于未正确设置权限。 现在,一个简单的DDL表创建脚本可以在SQL Server Management Studio中正常运行,并在用户帐户文件夹的根目录中创建数据库(如此处所述)。但是,Instances文件夹(D:\Users\[My name]\AppData\Local\Microsoft\Microsoft SQL Server Local DB\Instances尽管在通过高级服务安装SQL Server Express时位于该文件夹,但我在另一个位置指定了DATA文件夹-仅.mdf存储标准SQL Server Express 文件,但不存储LocalDB实例)在权限方面存在问题(与帐户相反)因此,也为了将我的数据库文件放在项目中的某个位置,我想将Instances文件夹移动到另一个位置。这可能吗?我什至没有找到相应的注册表项。 我正在使用SQL Server Express 2012和相同版本(已安装最新更新)的SSMS。 任何帮助,将不胜感激。 编辑: 前面提到的“数据库设置”页面KookieMonster对我造成了错误,无法编辑或查看那里的任何配置。我让Windows Update再次检查更新,并且有一些未安装的SQL Server Express更新(尽管我确定我选择了所有要安装的东西),所以我安装了它们。这使我可以转到设置页面。 我尝试将LocalDB实例的根文件夹设置到其他位置,但是对于尝试的每个文件夹,我都会收到拒绝访问错误,即 设置“ Microsoft.SqlServer.Management.Smo.ObjectKeyBase”的更改失败。(Microsoft.SqlServer.Smo) - - - - - - - - - - - - - - - 附加信息: 执行Transact-SQL语句或批处理时发生异常。(Microsoft.SqlServer.ConnectionInfo) RegCreateKeyEx()返回错误5,“访问被拒绝。” …

3
级联物理操作:是否保证执行顺序?
在标准SQL中,union all不能保证a的结果以任何顺序排列。因此,类似: select 'A' as c union all select 'B' 可以按任何顺序返回两行(尽管实际上,在我所知道的任何数据库上,“ A”都将排在“ B”之后)。 在SQL Server中,这变成使用“串联”物理操作的执行计划。 我很容易想到,连接操作将扫描其输入,并返回具有可用记录的任何输入。但是,我在网上(此处)找到了以下声明: 查询处理器将按照操作员出现在计划中的顺序执行该计划,第一个是最上一个,最后一个是最后一个。 问题:实际上是这样吗?这保证是真的吗? 我没有在Microsoft文档中找到任何参考,从头到尾按顺序扫描输入。另一方面,每当我尝试运行它时,结果表明实际上确实按顺序处理了输入。 有没有一种方法可以让引擎一次处理多个输入?我的测试(使用比常量更复杂的表达式)是在启用了并行的8核计算机上进行的,大多数查询的确利用了并行性。

2
SQL Server数据库设计用于“已存档但可用”的数据
我们有一个打算“缩小”的大型数据库(> 1TB)。数据库围绕一个主要实体,我们称其为“访问”。为了讨论起见,假设它是医学实践的数据库。 总共有30种访问“类型”,例如程序,年度,随访,免疫等,每种类型都是“访问”的辅助表,例如“ visit_immuno”。 自2000年以来,该数据库已积累了大约12年的数据。有人建议我们在“实时”版本中保留大约3年的数据,而其余数据则保留在“ old_data”数据库中。由于日期已标准化,因此仅存储在“访问”表中。Visit表还包含一个ROWVERSION列和一个BIGINT伪身份(聚集)列。出于所有目的和目的,假设群集密钥由SEQUENCE(SQL Server 2012 Enterprise)填充-我们将其命名为cid。 在visit.date当医生的推移延长探视,并与他的数据的“公文包”的回报并不总是以相同的顺序作为聚集键,例如,它被合并到主表。“访问”表也进行了一些更新,这将导致该ROWVERSION列与cid和date列不同步-简单地说,由于这个原因,它们都ROWVERSION不会cid创建合适的分区键。 从“活动”中删除数据的业务规则是,visit.date必须大于36个月并且visit_payment必须存在子记录。另外,“ OLD_DATA”数据库不包含任何基本表visit%。 因此,我们最终得到: 直播DB(日常使用) -所有表老数据DB -对于较旧的数据visit%表 该提案要求使用组合DB,该组合DB是一个外壳,其中包含(除外)中所有基本表的同义词以及两个数据库中所有表的UNION ALL的视图。Live DBvisit%visit% 假设在Old-Data数据库中创建了相同的索引,查询在UNION-ALL 视图上的性能是否良好?哪种类型的查询模式可能会使UNION-ALL 视图的执行计划失败?

2
将列别名放在列定义的开始或结尾之间有什么区别吗?
我一直都将列别名写为 SELECT 1 as ColumnName 但是今天遇到了一个使用了 SELECT ColumnName = 1 这两个查询的执行方式有何不同?还是在DBA中有关于使用哪个标准的标准? 我个人认为,第二个会更容易阅读/(很好的例子保持更长的列定义在这里从这篇文章),但我从来没有见过,所以今天很奇怪,之前使用的第二语法,如果有某种原因,我不应该使用它。

3
如何在SQL Server权限上刷新AD安全组
我在Small Business Server 2003上使用Sql Server 2008。客户端正在使用WinXP。 我将用户添加到了Active Directory安全组;为什么该用户不能立即访问数据库?似乎在Sql Server中识别用户之前存在延迟。 我将AD安全组明确用于权限,因此不需要在Sql Server中添加单个用户。因此,实际上,我无需执行任何操作,只需将用户添加到AD安全组即可授予访问权限。 但是由于某种原因,Sql Server无法立即识别出该添加项。我已经看过很多次了。我将该用户添加到了组中,但是该用户直到第二天才能访问数据。似乎它不能实时查询Active Directory。你能确认是吗? 我需要做什么,以便Sql Server从Active Directory“刷新”用户列表?

2
选择最长的连续序列
我正在尝试在PostgreSQL 9.0中构造一个查询,以获取特定列的最长连续行序列。 请考虑下表: lap_id (serial), lap_no (int), car_type (enum), race_id (int FK) lap_no每个地方都是独特的(race_id, car_type)。 我希望查询为给定的race_id和生成最长的序列car_type,因此它将返回int最高的(或长)。 带有以下数据: 1, 1, red, 1 2, 2, red, 1 3, 3, red, 1 4, 4, red, 1 5, 1, blue, 1 6, 5, red, 1 7, 2, blue, 1 8, 1, green, 1 对于car_type = …

3
查找孤立的用户
在SQL Server 2005中,有一种方法可以找到在服务器级别不存在的用户(在服务器级别已删除但在删除之前未与数据库解除关联的帐户)或未链接的用户(可能已在服务器级别删除了一个帐户,但未删除数据库级别,然后读取了该帐户,但从未清除过该数据库级别)。 我的服务器非常凌乱,如果要运行查询来查找这些服务器,那就太好了。

3
有没有办法打破字符串并注入SQL,而无需在oracle中使用单引号?
我正在测试基于oracle的应用程序,并且发现以下代码: Query =“从雇员那里选择名称,其中id ='” + PKID +“';;” 即查询字符串包含直接从URL获得的PKID值周围的引号。 显然,这是一个经典的SQL注入等待中……除非应用程序位于CA SiteMinder后面,否则它将阻止任何带有单引号(任何形式)的URL传递给应用程序。 有没有办法打破字符串并注入SQL而无需使用单引号? 编辑:抱歉,我应该更清楚-我知道应该如何编写,但是我需要说服人们这是一个可利用的问题。目前,由于它落后于siteminder,后者阻止了单引号,因此这将是低优先级的解决方案。

2
读取DMV时将READ UNCOMMITTED设置为
我已经看到几个人SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED在阅读系统DMV之前先打过电话。假设没有在同一事务中混合调用DMV和表,是否有任何理由这样做?
12 sql-server  dmv 

1
将SQL Server 2005升级到SQL Server 2012
我有一个以下测试环境: 虚拟机(Hyper-V) Windows Server 2008 R2 SP1(x64位) Windows SQL Server 2005 Developer Edition SP4(x64位)(默认实例名称) 设置了1个具有合并复制的数据库... 3个发布,每个都有2个订阅者。 我们正在测试升级到SQL Server 2012 Developer Edition(sp1)的过程。 我已经下载了64位SQL Server 2012 Dev的iso。(sp1)来自MSDN(完整许可副本),并且已开始沿升级路径进行。在开始检查不同条件的最后阶段之一中,我们遇到了一个奇怪的问题,如下所述: Rule "Upgrade architecture mismatch" failed. The CPU architectures of upgrading feature(s) are different. To upgrade these features, Setup architecture must be the same as the …

3
区域名称PostgreSQL错误的“ AT TIME ZONE”?
我在回答这个stackoverflow问题,发现奇怪的结果: select * from pg_timezone_names where name = 'Europe/Berlin' ; name | abbrev | utc_offset | is_dst ---------------+--------+------------+-------- Europe/Berlin | CET | 01:00:00 | f 和下一个查询 select id, timestampwithtimezone, timestampwithtimezone at time zone 'Europe/Berlin' as berlin, timestampwithtimezone at time zone 'CET' as cet from data ; id | timestampwithtimezone | …

2
ETL:从200个表中提取-SSIS数据流或自定义T-SQL?
根据我的分析,我们数据仓库的完整维模型需要从200多个源表中提取。这些表中的某些将作为增量负载的一部分被提取,而另一些则将作为全负载。 需要注意的是,我们有大约225个具有相同模式的源数据库。 从我所看到的,在具有OLE DB源和OLE DB目标的SSIS中构建简单的数据流要求在设计时确定列和数据类型。这意味着仅用于提取,我最终将获得200多个数据流。 从可维护性的角度来看,这是我遇到的一个大问题。如果需要对提取代码进行某种彻底的更改,则必须修改200个不同的数据流。 另一个选择是,我编写了一个小脚本,该脚本读取要从一组元数据表中提取的源数据库,表名和列。该代码在多个循环中运行,并使用动态SQL通过链接服务器和OPENQUERY从源表中提取。 根据我的测试,这仍然不及将SSIS数据流与OLEDB源和目标一起使用的速度。所以我想知道我有什么样的选择。到目前为止的想法包括: 使用EZAPI以编程方式生成具有简单数据流的SSIS包。要提取的表和列将来自前面提到的相同的元数据表。 购买第三方软件(动态数据流组件) 解决此问题的最佳方法是什么?当涉及到.NET编程时,我是一个初学者,因此仅考虑基础知识所需的时间也是一个问题。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.