Questions tagged «sql-server-2008»

SQL Server 2008(主要版本10.00.xxxx)。请同时用sql-server标记。


1
如何在SQL Server 2008中强制删除数据库
我试图强制删除数据库,但是删除数据库后,当我尝试重新创建数据库时,出现了错误 无法创建文件C:\ Program Files ..... [数据库名称] .mdf,因为它已经存在 这是我的强制删除数据库的查询 Use master; ALTER database [databasename] set offline with ROLLBACK IMMEDIATE; DROP database [databasename]; 我了解到,以上查询正在删除数据库,但并未删除.ldf和.mdf文件。如何彻底删除数据库? 普通查询 Drop database [databasename] ; //deletes the database completely, including the ldf and mdf's. 如何强制删除数据库,该数据库也会删除.mdf和.ldf文件?


7
编写一个简单的银行架构:如何使我的余额与他们的交易记录保持同步?
我正在为一个简单的银行数据库编写模式。基本规格如下: 数据库将针对用户和货币存储交易。 每个用户每种货币都有一个余额,因此每个余额只是针对给定用户和货币的所有交易的总和。 余额不能为负。 银行应用程序将专门通过存储过程与其数据库进行通信。 我希望该数据库每天可以接受成千上万的新交易,并且可以平衡更高数量级的查询。要非常快地用完余额,我需要预先对其进行汇总。同时,我需要保证余额永远不会与其交易历史相矛盾。 我的选择是: 有一个单独的balances表,然后执行下列操作之一: 将交易应用到transactions和balances表。TRANSACTION在存储过程层中使用逻辑,以确保余额和交易始终保持同步。(由Jack支持。) 将交易应用到transactions表格,并使用触发器balances为我更新交易金额。 将事务应用于balances表,并具有一个触发器,该触发器transactions为我在表中添加一个具有事务量的新条目。 我必须依靠基于安全性的方法来确保在存储过程之外无法进行任何更改。否则,例如,某些过程可能会直接将事务插入transactions表中,而根据计划1.3,相关余额将不同步。 有一个balances索引视图可以适当地汇总事务。存储引擎保证余额与事务保持同步,因此我不需要依靠基于安全性的方法来保证这一点。另一方面,由于视图-甚至是索引视图-都没有CHECK约束,因此我不能再将余额强制为非负数。(由Denny支持。) 仅具有一个transactions表,但具有一个附加列来存储该交易执行后立即生效的余额。因此,用户和货币的最新交易记录也包含其当前余额。(下面由安德鲁建议;由garik提出。) 当我第一次解决这个问题时,我阅读了这 两个讨论并决定选择2。作为参考,您可以在此处看到其基本实现。 您是否设计或管理了这样的具有高负载配置文件的数据库?您如何解决此问题? 您认为我做出了正确的设计选择吗?我有什么要记住的吗? 例如,我知道对transactions表的架构更改将需要我重建balances视图。即使我在归档事务以保持数据库较小(例如,通过将它们移动到其他地方并用汇总事务替换),每次架构更新都必须从数千万个事务中重建视图,这可能意味着每个部署的停机时间会大大增加。 如果要使用索引视图,如何保证没有余额是负数? 归档交易: 让我详细说明一下归档事务和上面提到的“摘要事务”。首先,在这样的高负载系统中,定期归档将是必要的。我想保持余额与交易记录之间的一致性,同时允许将旧交易移至其他位置。为此,我将使用每位用户和货币金额的摘要替换每一批已归档的交易。 因此,例如,以下交易清单: user_id currency_id amount is_summary ------------------------------------------------ 3 1 10.60 0 3 1 -55.00 0 3 1 -12.12 0 已归档并替换为: user_id currency_id amount is_summary ------------------------------------------------ 3 1 -56.52 1 …

6
死锁的主要原因是什么,可以防止死锁吗?
最近,我们的一个ASP.NET应用程序显示了一个数据库死锁错误,要求我检查并修复该错误。我设法找到导致死锁的原因是存储过程正在严格更新游标中的表。 这是我第一次看到此错误,并且不知道如何有效地跟踪和修复它。我尝试了所有可能的方法,最后发现正在更新的表没有主键!幸运的是,这是一个身份专栏。 后来,我发现为脚本编写部署脚本的开发人员陷入困境。我添加了一个主键,问题就解决了。 我感到很高兴,回到了我的项目,并做了一些研究以找出造成这种僵局的原因... 显然,导致死锁的是循环等待条件。没有主键的更新显然要比使用主键的更新花费更长的时间。 我知道这不是一个明确的结论,这就是为什么我在这里发布... 缺少主键是问题所在吗? 除了互斥,保留和等待,没有抢占和循环等待之外,还有其他导致僵局的条件吗? 如何防止和跟踪死锁?

11
将数组参数传递给存储过程
我有一个过程,可以捕获一堆记录(1000条记录)并对其进行操作,完成后,我需要将大量记录标记为已处理。我可以用大量的ID来表明这一点。我试图避免使用“循环更新”模式,因此我想找到一种更有效的方法来将此ID包发送到MS SQL Server 2008存储的proc中。 提案1-表格值参数。我可以定义一个带有ID字段的表类型,然后发送一个包含ID的表进行更新。 提案2-proc正文中带有OPENXML()的XML参数(varchar)。 提案3-列表解析。如果可能的话,我宁愿避免这种情况,因为它似乎笨拙且容易出错。 其中有什么偏好,或者我错过了任何想法?

4
在2008 R2上优于SQL Server 2012的客观业务原因是什么?
我的公司正在决定是否要为新的数据库服务器购买SQL Server 2012 Denali或SQL Server 2008 R2。我正在寻找客观原因来选择一个。 我们的要求: 标准版(出于财务原因,并且不需要企业功能) OLTP工作负载(这意味着我们不需要新的窗口功能和列存储索引) 数据库大小10-100 GB 无需商业智能功能。只需要关系引擎 同步数据库镜像 目前,我知道以下原因: SQL Server 2012 Denali 最新版本 SQL Server 2008 R2 成熟的技术 我似乎找不到很多技术原因来偏爱一个。基本上,归结为选择能够成功运行的可靠技术,而不是可用的最新和最佳版本。 做出决定的客观原因是什么?


8
如何快速缩小所有数据库的所有文件?
在SQL Server(在本例中为2008)中,如何快速缩小实例上所有数据库的所有文件(日志和数据)?我可以遍历SSMS,然后右键单击每个,然后选择“任务”->“收缩”,但是我正在寻找更快的东西。 我编写了一些“创建数据库”脚本的脚本,但忘记了它们具有默认值的膨胀大小,并且在此项目中不需要为这些文件保留太多的空间。

2
数据库“所有者”的目的是什么?
今天,在对服务代理问题进行故障排除时,我发现数据库所有者是离开公司的一名员工的Windows登录名。他的登录信息已被删除,因此查询通知失败。 最好的解决方法是让“ sa”成为数据库所有者。我们对其进行了更改,从而清除了队列。 我的(非常基本的)问题:数据库所有者是什么,数据库的目的是什么?

5
我无法通过IP地址连接到服务器SQL数据库
我已经安装了运行Windows Server 2008的服务器,并安装了SQL Server 2008 Express。 我可以通过连接到计算机的SQL Server Express数据库MACHINENAME/SQLEXPRESS。 但是,当我们使用IP地址通过任何软件或脚本进行连接时,将不允许连接。 我努力了: 关闭防火墙。 允许SQL数据库的远程连接。 在“ SQL配置”中启用TCP / IP。 当我们尝试通过软件“ SQL Server Management Studio”进行连接时,会收到以下消息: 错误信息: 建立与服务器的连接时发生错误。连接到SQL Server 2005时,此故障可能是由于以下事实导致的:在默认设置下,SQL Server不允许远程连接。(提供程序:TCP提供程序,错误:0-无法建立连接,因为目标计算机主动拒绝了它。)(Microsoft SQL Server,错误:10061) 已成功与服务器建立连接,但是在登录过程中发生了错误。(提供程序:TCP提供程序,错误:0-主机中的软件中止了已建立的连接。)(Microsoft SQL Server,错误:10053) 您能否在空闲时间让我知道,以便我们看看,因为我似乎已经知道在哪里,所以我根据UK Fast发送给我的一些信息修改了详细信息,但他们说“不在支持范围内” ,因此他们无济于事。 我期待着您的回音。


3
重建并重新索引所有内容后,为什么我的数据库仍然碎片化?
我有一个数据库,我试图通过运行以下T-SQL对所有表进行碎片整理: SELECT 'ALTER INDEX all ON ' + name + ' REORGANIZE;' + CHAR(10) + 'ALTER INDEX all ON ' + name + ' REBUILD;' FROM sys.tables 然后将输出复制并粘贴到新的查询窗口中并运行它。我没有任何错误,但是仍然有碎片。我也尝试单独运行两个命令,但仍然有碎片。注意:REORGANIZE Aaron 已使我意识到这是不必要的,并且我知道可以使用动态sql来自动执行此操作。 我运行此命令以确定我仍然有碎片: SELECT * FROM sys.dm_db_index_physical_stats (DB_ID(), NULL, NULL , NULL, NULL) WHERE avg_fragmentation_in_percent > 0 我得到: database_id object_id index_id partition_number …

3
参数嗅探vs变量vs重新编译vs优化未知
因此,我们有一个长时间运行的进程,导致今天早晨出现问题(30秒+运行时间)。我们决定检查是否应该归因于参数嗅探。因此,我们重写了proc并将输入的参数设置为变量,以消除参数嗅探。一种尝试/正确的方法。Bam,查询时间得到改善(不到1秒)。在查看查询计划时,在原始索引未使用的索引中发现了改进。 只是为了验证我们没有得到误报,我们对原始proc进行了dbcc freeproccache,然后重新运行以查看改进的结果是否相同。但是,令我们惊讶的是,原始过程仍然运行缓慢。我们再次使用WITH RECOMPILE进行了尝试,但仍然很慢(我们在对proc的调用以及在proc自身内部尝试了重新编译)。我们甚至重新启动了服务器(显然是dev框)。 所以,我的问题是...当我们在空的计划缓存上收到相同的慢查询时,怎么应该怪参数嗅探呢?snif应该没有任何参数? 我们是否会受到与计划缓存无关的表统计信息的影响?如果是这样,为什么将传入参数设置为变量会有所帮助呢? 在进一步的测试中,我们还发现在proc DID的内部插入OPTION(优化未知)会获得预期的改进计划。 因此,你们中有些人比我聪明,您能否提供一些线索,以了解产生这种类型结果的幕后情况? 另一个要注意的是,慢速计划也有理由提前中止,GoodEnoughPlanFound而快速计划在实际计划中没有早期中止原因。 综上所述 从传入参数中创建变量(1秒) 重新编译(30秒以上) dbcc freeproccache(30+秒) 选项(为不知道而优化)(1秒) 更新: 请在此处查看慢速执行计划:https: //www.dropbox.com/s/cmx2lrsea8q8mr6/plan_slow.xml 在此处查看快速执行计划:https : //www.dropbox.com/s/b28x6a01w7dxsed/plan_fast.xml 注意:出于安全原因,表,架构,对象名称已更改。

4
如何在SQL Server 2008中分配整个Active Directory组安全访问权限?
我想在我的内部应用程序中使用集成安全性,这些应用程序都在一个域中。不幸的是,我从来没有能够使它正常工作。我想在SQL Server中为整个Exchange(活动目录)组分配一个角色,以对某些表进行读/写访问。这样,我就不必在雇用某人时就创建一个运算符,也不必在被解雇时就删除一个运算符。这可能吗?我要采取什么步骤?

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.