Questions tagged «sql-server»

所有版本的Microsoft SQL Server(非MySQL)。还请添加特定于版本的标记,例如sql-server-2016,因为它通常与问题相关。

8
为什么应用程序不使用sa帐户
我的第一个问题,请保持温柔。我知道sa帐户可以完全控制SQL Server以及所有数据库,用户,权限等。 我绝对相信,没有完善的,以业务人员为中心的原因,应用程序不应使用sa密码。这个问题的答案包括我针对IT讨论的很多理由 我被迫接受一个新的服务管理系统,该系统除非使用sa密码,否则将无法正常工作。我从来没有时间弄清楚为什么要设置评估,但是服务器团队试图将其安装为使用我设置的固定角色,其中包含db_creater和我认为需要的其他权限。失败了。然后,我让服务器团队使用sa帐户进行安装,但在其数据库的dbo角色下以一个帐户运行,但这也失败了。很可惜,我试图用sysadmin角色的帐户来运行它,但是即使失败了,也没有出现有用的错误消息,这些错误消息使我能够确定正在发生的事情而无需花费更多的时间。它仅适用于sa帐户和以明文形式存储在配置文件中的密码。 当我对此进行查询时,服务器团队与供应商进行了交谈,他们得到了一个令人担忧的答案:“这是什么问题?” 然后“好吧,我们可以看看加扰密码” 我知道有一些方法和手段可以限制对文件的访问,但是我认为这只是安全性的另一个弱点 无论如何,我的问题是,有人可以向我指出一些文档,我可以用来向企业解释这是一件坏事的原因,应该是很大的不。我在一个领域工作,这意味着我需要认真对待安全性,并且一直在努力使业务理解,最终无论如何它可能都超出了排名,但是我需要尝试。


3
SQL Server数据库同步
问题定义 我们的用户需要具有查询最新数据库的能力。数据最多可以保留24小时,这是可以接受的。用生产副本获取和保持第二个数据库的最新成本最低的方法是什么?有我没有想到的方法吗? 工作量 我们有一个第三方应用程序,用于监视股票交易活动。白天,作为各种工作流程的一部分,会发生很多小的变化(是的,这种交易是有效的。否,这是可疑的,等等)。在晚上,我们执行基于大型集合的操作(加载前一天的交易)。 当前的解决方案和问题 我们利用数据库快照。晚上10点,我们放下并重新创建快照。然后开始ETL处理。显然,这对我们的磁盘造成了负担,但使我们的用户能够查询数据库而无需锁定数据库(他们使用Access前端)。他们在深夜和清晨使用它,因此他们会注意到停机时间。 这种方法的问题有两个方面。首先是,如果每晚处理失败,并且这种情况并非罕见,我们将还原数据库,从而导致快照被删除。另一个问题是我们的处理时间超过了我们的SLA。我们在发现书写不佳的查询和缺乏索引之后,尝试通过与供应商合作来解决此问题。数据库快照也是造成这种速度下降的罪魁祸首,我知道它存在时与不存在时的速度差异证明了这一点。 考虑的方法 聚类 我们已经打开了数据库集群功能,但是并不能满足使数据可用的需求,只是使管理员的生活更加复杂。此后已关闭。 SQL Server复制 我们上周开始研究复制。我们的理论是,我们可以建立第二个目录并与生产数据库同步。在开始ETL之前,我们将切断连接,只有在ETL过程完成后才重新启用它。 管理员从快照复制开始,但他担心生成快照以及所需的磁盘消耗会花费几天的高CPU使用率。他指出,似乎在将所有数据写出到物理文件之前,才将其发送给订户,因此我们的.6TB数据库将花费1.8TB的存储成本。另外,如果要花几天时间才能生成快照,那么它就不符合所需的SLA。 在阅读了精美的文章之后,似乎可以使用Snapshot初始化订阅者,但是之后我们希望切换到Transactional Replication以使其保持同步。我认为打开/关闭事务复制不会强制完全重新初始化吗?否则,我们会浪费时间窗口 数据库镜像 我们的数据库处于FULL恢复模式,因此可以选择数据库镜像,但是我对复制的了解甚至少于复制。我确实找到了SO答案,该答案指示“数据库镜像阻止直接访问数据,只能通过数据库快照访问镜像的数据。” 日志传送 听起来好像还可以选择日志传送,但这是我一无所知的另一件事。它会是一种比其他任何产品都更低廉的解决方案(实施和维护)吗?基于Remus的评论: “日志传送允许对副本的只读访问,但是在应用收到的下一个备份日志时(例如,每15-30分钟)将断开所有用户的连接。” 我不确定该停机时间将转换为多长时间,从而可能导致用户感到不安。 MS同步 我仅在上个周末听说过使用Sync,但尚未进行调查。我不愿为这种问题所具有的高可见性引入一种新技术,但是如果这是最好的方法,那就去吧。 SSIS 我们在这里做了很多SSIS,因此生成数百个SSIS包来保持辅助同步是我们的一种选择,尽管这是一个丑陋的选择。我不喜欢这样做,因为这是我不愿我的团队承担的大量维护费用。 SAN“魔术”快照 过去,我听说过我们的管理员使用某种SAN技术对整个磁盘进行即时备份。也许有一些EMC魔术可以用来制作mdf / ldf的uberquick副本,然后我们可以分离/附加目标数据库。 备份还原 我认为我们每周进行一次完整备份,每晚进行一次差异备份,每15分钟进行一次日志备份。如果用户可以在3-4个小时的停机时间内进行完全还原,那么我认为这可能是一种方法。 约束条件 Windows 2008 R2,SQL Server 2008 R2(企业版),VMWare v5企业版,EMC SAN存储,其中驱动器映射到vmdk文件,commvault处理备份以及源目录中的.6TB数据。这是我们内部托管的第三方应用程序。修改它们的结构通常是不赞成的。用户不能不查询数据库而拒绝通过主动标识他们监视的表来进行工作而受到约束。 目前,我们的DBA纯粹是承包商。专职人员已经起航,我们还没有替换他们。应用程序管理员对SQL Server的知识并不精通,我们的存储/ VM管理员团队可以帮助/阻碍这一工作。开发团队目前不参与,但可以根据该方法征募他们。因此,更易于实现和维护解决方案将是可取的。 我,我站在惯例的发展方面,所以我只能提出方法,而不必处理行政方面的问题。因此,没有时间在管理程序上,我很犹豫地说一种方法要优于另一种方法-根据这些论文,它们看起来都很棒。我完全愿意按照大家的建议去做,因为正如我所看到的那样,这只会使我作为数据库专家更加有价值。我有一辆独轮车,但没有大屠杀披风。 相关问题 /programming/525637/what-are-the-scenarios-for-using-mirroring-log-shipping-replication-and-cluste /programming/434982/mirroring-vs-replication /programming/4303020/sync-databases-mirroring-replication-log-shipping /programming/4303020/sync-databases-mirroring-replication-log-shipping …

1
CREATE DATABASE与CREATE ANY BASEBASE权限
在Microsoft SQL Server中,CREATE DATABASE和CREATE ANY DATABASE权限之间有什么区别? 我找不到权威的答案。我所能推断的最好是(a)CREATE ANY暗示我可以创建该数据库以由另一个用户拥有,而CREATE(b)在Sybase / SQL Server早期的原始权限是CREATE ANY并且CREATE被别名为符合ANSI。


5
有人在生产中使用HierarchyId吗?它可靠吗?
是否有人在实际生产中使用HierarchyId,并且表的大小合理,有几千行?它可靠/性能好吗?到目前为止,我还没有发现任何与该供应商无关的人推荐它,Paul Nielsen 在此建议不要这样做。 您在实际生产系统中使用HierarchyId有什么经验? 在选择HierarchyId替代方案时使用了哪些条件?

5
在数据库中存储单位的最佳方法
我继承了一个大型(SQLServer)数据库,其中包含数百个列,这些列代表一件事或另一件事的数量。这些值的单位(例如“加仑”,“英寸”等)存储在扩展属性的MS_Description字段中。我想知道是否有更好的方法来存储此信息。我认为这对于文档目的来说是很好的,但是很难基于此数据进行可靠的单位转换计算。目前,我还没有准备好进行侵入性更改,但是如果有机会,我在这方面建议的最佳实践是什么?在我头顶上方的选项可能包括: 将列名称更改为包含的单位(例如,“ TotalVolumeInGallons”。这将使该信息更容易获得,但对我而言似乎仍然很薄弱。) 添加一个单独的“单位”列以对应于每个“金额”列(此列可以是nvarchar,也可以是一个单独的“单位”表的外键,这可能使计算单位转换更加容易。许多列可以使我的数据库大小增加一倍-拥有非常冗余的数据。) 在扩展属性中专门为单位创建一个新字段。(不幸的是,我认为这不是Units表的外键。) 我还有其他想法要忽略吗? 更新:阅读@Todd Everett的答案后,我想到了一个可能的解决方案,所以我将继续回答自己的问题。(见下文)

2
SQL Server不会在两个等效分区的表上优化并行合并联接
此问题是从Stack Overflow 迁移而来的,因为可以在Database Administrators Stack Exchange上回答。 迁移 7年前。 非常抱歉,非常详细的问题。我已包含查询以生成用于重现该问题的完整数据集,并且我在32核计算机上运行SQL Server 2012。但是,我不认为这是特定于SQL Server 2012的,对于此特定示例,我已将MAXD​​OP强制设置为10。 我有两个使用相同分区方案进行分区的表。当在用于分区的列上将它们连接在一起时,我注意到SQL Server无法像人们期望的那样优化并行合并连接,因此选择使用HASH JOIN。在这种特殊情况下,我可以通过基于分区函数将查询分为10个不相交的范围并在SSMS中同时运行每个查询,来手动模拟一个更优化的并行MERGE JOIN。使用WAITFOR精确地同时运行它们,结果是所有查询在原始并行HASH JOIN使用的总时间的约40%内完成。 对于等效分区的表,是否有任何方法可以使SQL Server自行进行此优化?我了解到,SQL Server通常会为了使MERGE JOIN并行而产生大量开销,但是在这种情况下,似乎有一种非常自然的分片方法,开销很小。也许仅仅是一个特殊的情况,优化器还不够聪明以至于无法识别? 下面是设置简化数据集以重现此问题的SQL: /* Create the first test data table */ CREATE TABLE test_transaction_properties ( transactionID INT NOT NULL IDENTITY(1,1) , prop1 INT NULL , prop2 FLOAT NULL ) /* …

3
公用表表达式(CTE)的好处?
此问题是从Stack Overflow 迁移而来的,因为可以在Database Administrators Stack Exchange上回答。 迁移 7年前。 来自msdn: 与派生表不同,CTE可以是自引用的,并且可以在同一查询中多次引用。 我已经大量使用了CTE,但是我从来没有考虑使用它们的好处。 如果我在同一查询中多次引用CTE: 有什么性能上的好处? 如果我正在执行自我联接,SQL Server将扫描目标表两次吗?
21 sql-server  cte 


3
多久备份一次master数据库?
BOL中的建议相当模糊: 必要时备份主服务器,以充分保护数据以满足您的业务需求。我们建议您使用定期的备份计划,在进行实质性更新后,您可以通过额外的备份来进行补充。 如果您进一步冒险,则会发现以下详细信息: 导致主服务器更新且需要进行备份的操作类型包括: 创建或删除用户数据库。 如果用户数据库自动增长以容纳新数据,则 master 数据库不会受到影响。 添加或删除文件和文件组。 添加与登录安全性相关的登录名或其他操作。 数据库安全操作(例如将用户添加到数据库)不会影响主数据库。 更改服务器范围或数据库配置选项。 创建或删除逻辑备份设备。 配置服务器以进行分布式查询和远程过程调用(RPC),例如添加链接的服务器或远程登录。 因此,如果我们所有的登录名都是通过Windows组添加的,并且我们没有对数据库进行任何其他更改,那是否意味着一次备份主数据库就足够了? 如果不是,那么主数据库的标准备份间隔是多少?

4
确定架构更改是如何发生的?
昨天发生了一些坏事。 某人之前修改过的某个视图后来被某人修改,最终破坏了报告。不幸。某人(在不知不觉中)在PRODUCTION数据库中进行了此修改。 我的问题:有没有一种方法(脚本/软件/免费软件等),我们可以借此了解谁(用户名)进行了此修改,因此我可以撤消该用户对生产数据库的访问。 如果我的问题不清楚,请发表评论。
21 sql-server  view 


1
哈希键探针和残差
说,我们有这样的查询: select a.*,b.* from a join b on a.col1=b.col1 and len(a.col1)=10 假设以上查询使用哈希联接并具有残差,则探测键为col1,残差为len(a.col1)=10。 但是,通过另一个示例,我可以看到探针和残差在同一列。以下是我要说的话的详细说明: 查询: select * from T1 join T2 on T1.a = T2.a 执行计划,突出显示探针和残差: 测试数据: create table T1 (a int, b int, x char(200)) create table T2 (a int, b int, x char(200)) set nocount on declare @i int …

1
SQL Server 2014 Express中的SQLCMD.EXE在哪里?
使用“ SQLCMD.EXE”备份我的SQL Server Express数据库多年后,我才发现安装2014版本后,再也找不到SQLCMD.EXE。 在以前的版本中,它位于 C:\ Program Files \ Microsoft SQL Server \ 110 \ Tools \ Binn \ SQLCMD.EXE 但是在我的2014安装中,不存在SQLCMD.EXE C:\ Program Files \ Microsoft SQL Server \ 120 \ Tools \ Binn 我的问题: 有机会将SQLCMD.EXE放入SQL Server Express 2014吗?

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.