我正在600G数据文件上运行SHRINK文件。 目前,状态报告为“挂起”,而对于DbccFilesCompact命令, sys.dm_exec_requests.percent_complete报告它正在运行(但速度非常慢) 有没有办法来检查为什么它被暂停,以及如何使其运行更平滑? FYI – 用于检查状态的SQL查询 select T.text, R.Status, R.Command, DatabaseName = db_name(R.database_id) , R.cpu_time, R.total_elapsed_time, R.percent_complete from sys.dm_exec_requests R cross apply sys.dm_exec_sql_text(R.sql_handle) T order by Command
我在世界各地部署了不less服务器。 他们正在运行带有6 GB RAM的SQL Server 2005 x64的Windows 2003 x64。 这些盒子没有最好的(甚至是可以接受的)configuration,因为多年前订购的那个人并不知道自己在做什么。 这些盒子一直运行内存不足,最终使用分页文件,一切都变慢了。 通常情况下,提交费用是5.8GB,然后当有人需要做一些密集的工作时(例如运行一个报告),这个数字就会越过顶点。 我一直在试图获得更多记忆的力量,但是我却遭到了巨大的反对(例如,使软件性能更高,所有这些服务器花费太多,或者certificate盒子没有足够的内存等等。 ..)。 是否有一个指导方针(或一个公式)可以给非技术人员提供一个盒子需要多less内存,这样我们才能最终订购更多的内存?
最近,我在我们的一个数据库服务器上进行了操作系统升级,从Server 2003迁移到了Server 2008.DBMS是SQL Server 2005.在新的Windows安装中重新安装SQL时,我去了另外一个数据库服务器来validation一对的设置。 现在,我一直认为这第二台服务器是Server 2003 x64 + SQL 2005 x64(从我被告知),但我现在有我的怀疑。 我现在怀疑它实际上只有32位的SQL,但我想validation这一点。 这里有一些细节: 操作系统肯定是64位。 xp_msver Platform显示为NT INTEL X86 SELECT @@VERSION显示Microsoft SQL Server 2005 – 9.00.4035.00 (Intel X86)… 但是,sqlservr.exe不显示'* 32'在taskmgr,有没有人知道这是为什么,如果它实际上是32位声称? 尽pipe如此,它似乎用尽了x86程序文件文件夹。 如果我对已确认的64位安装执行相同的检查,则会返回预期的64位读数,这只能certificate所讨论的服务器仅以32位运行。 现在,情况就是如此,这个'32位'安装可以使用多less内存的问题。 任务pipe理器为sqlservr.exe报告大约3.5GB内存使用情况(服务器有16GB物理)。 我怀疑AWE还没有configuration完毕,因此如果SQL只是使用32位地址空间,服务器将会被大大利用(记住OS是64位)。 这个假设是否正确? 我觉得服务器应该把SQL重新安装为64位,以便充分利用硬件平台,但目前它正在大量生产; 这将是不容易的任务。 我怀疑我们可能只需要正确地configurationAWE,并暂时让它(除非这是一个坏主意?)。 我很抱歉,这个问题有点模糊/丢失。 我不是SQL专家,只是试图处理这里发生的事情。
如何将SQL Server 2005数据库迁移到SQL Server 2008? 是否像备份2005数据库一样容易,并在2008年简单恢复? 有没有兼容性问题? SQL Server报告服务是否改变? 你将如何去升级SQL服务器?
我是一名开发人员 – 但时不时的,一个客户没有一个像样的DBA来处理这些问题,所以我打电话来决定…. 当处理合理大小的SQL Server数据库(比Northwind或AdventureWorks大的东西,大约2-4GB的数据加上索引等等)时,您的策略/最佳实践是什么? – 您是否使用多个文件/文件组? 如果是这样:多less? 为什么? 什么是你的标准来决定什么时候离开“一个文件组”的方法: * database size? * database complexity? * availability / reliability requirements? * what else? 如果您使用多个文件组,则使用多less个? 一个是数据,一个是索引,一个是日志? 几个(多less)的数据? 什么是你select的理由 – 为什么你使用确切数量的文件组:-) 感谢任何提示,指针,想法! 干杯,马克
我有一个开发数据库(Windows Server 2008上的SQL Server 2005),我需要移动prod(Windows Server 2003上的SQL Server 2000)。 我的过程如下: login到开发,打开SQL Server Management Studio 右键单击数据库| 任务| 备份。 保留所有默认选项(完整备份等) 将.bak文件本地移动到prod(无networking驱动器),login到prod,打开SQL Server企业pipe理器。 右键单击数据库节点| 所有任务| 还原数据库。 将还原更改为数据库以反映相同的数据库名称。 点击单选button“从设备”。 点击“select设备” 单击还原从:添加…,浏览到.bak文件(小 – 仅6mb) 现在我准备好恢复数据库了,所以我点击确定,出现以下错误: “设备上的媒体系列'E:… bak'不正确,SQL Server无法处理这个媒体系列,RESTORE DATABASE正在终止exception。 这个错误是直接的。 我已经尝试了一些不同的变化 – 将数据库恢复到具有不同数据库名称和日志文件名称(源自它的位置)的开发机器,创build一个空的数据库,使用与之前文件相同的物理path,并尝试还原到该数据库,制作几个不同的.bak文件,并确保在将其上传到产品之前进行validation。 我知道一个事实,.mdf和.ldf文件的目录存在于prod上,尽pipe文件本身不存在。 如果之前,我单击确定进行还原,转到选项选项卡,而是我得到以下错误: 错误3241:设备'E:… bak'上的媒体系列不正确。 SQL Server不能处理这个媒体家族。 RESTORE FILELIST正在exception终止。 任何人有任何明智的想法?
我的一个朋友今天问我(试图冷静他的一个激动的客户)如何在SQL Server 2005中找出哪个数据库在任何给定时间使用了多less内存(在服务器的RAM中)。 这是可能的吗? 如果是这样 – 如何? 你可以用内置的SQL Server工具来做到这一点,还是需要额外的第三方选项? 他的客户都惊慌失措,因为他专用的SQL Server机器突然使用了4GB内存的200KB。 我不认为这是一个问题,真的 – 但是因为这个家伙声称它发生了或多或less的一夜,他想知道是什么造成这种内存使用增加….. 渣子
我们有一台运行SQL Server 2005 64位的强大的Windows 2008 x64服务器(4 x 4核心CPU,32GB RAM)。 我们有一个小的(6GB)但非常重要的数据库,访问起来有点慢,直到页面被caching到内存中(这个用法是非常随机的I / O,所以给定的页面在内存中的可能性非常低,最终用户抱怨最初的缓慢)。 磁盘速度够快(本地15K SAS),但我猜应用程序有点笨拙(这是一个COTS解决scheme),所以我想知道是否有一种方法来强制在SQL Server 2005中的内存中的数据库(2008年不支持由供应商,所以我们不应该升级到这一点),以帮助避免初始caching填充布鲁斯? 我目前的方法是,我从脚本中的每个表运行一个SELECT *来获取内存中的数据页,但是一些对象(索引,全文search等)没有被这个方法caching(并修改脚本来查询索引和编写适当的WHERE子句来caching是熬海复杂的)。
我想使用SSMS将列添加到SQL Server 2005中有大量数据的表中。 所以我浏览到表格,select修改,并添加新的列。 然后,当我按下保存,我得到以下警告: 保存定义对具有大量数据的表进行更改可能需要相当长的时间。 在更改正在保存时,表格数据将无法访问 我很好,数据库是离线的,我在世界上所有的时间,所以我按是。 但是,该操作随后会在约30秒后用此消息继续超时: 无法修改表格。 超时过期。 操作完成之前超时的时间或服务器没有响应。 然后,当我按OK: 用户取消保存对话框(MS Visual Database Tools) 我不明白 我已经在SSMS连接对话框和工具 – >选项 – >查询执行 – > SQL Server下将执行超时设置为0(无限)。 如果忽略它,设置执行超时的意义何在? 有谁知道在这里使用什么超时值,以及如何设置它?
我试图在单个归类中标准化所有数据库 – Latin1_General_CI_AS(标准归类)。 我有一些数据库在SQL_Latin1_General_CP1_CI_AS。 我知道我可以使用ALTER DATABASE来更改数据库sorting规则,但只影响新的对象。 我的理解是,改变现有列的唯一方法是在每个表中的每一列上执行ALTER COLUMN – 我需要删除并重新创build所有索引。 我想它会看起来像这样: DROP INDEX indexname ON tablename GO ALTER TABLE tablename ALTER COLUMN columname varchar(50) COLLATE Latin1_General_CI_AS NULL GO CREATE CLUSTERED INDEX indexname ON tablename (columname ASC) 并重复整个数据库中的每个varchar,char,text,nvarchar,nchar和ntext列。 这将是一个巨大的 SQL脚本。 有没有更简单的方法来做到这一点,或者任何人都可以build议一种方法来自动创build一个SQL脚本来做到这一点?