Questions tagged «sql-server-2008-r2»

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

2
压缩和存储SQL Server备份的最有效方法是什么?[关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使它成为数据库管理员Stack Exchange 的主题。 6年前关闭。 我一直在进行各种用于压缩和存储SQL Server备份的方法的测试(使用SQL Server 2008 R2 Enterprise版),我想知道在SQL以外的长期存储这些备份的最有效的压缩算法是什么。内部压缩算法。 我不担心物理存储或磁带驱动器或其他任何东西,只想将我们的3TB数据和日志文件转换为我能最小的单个文件。 因此,例如,.zip还是.7z?还是我的数据库中有太多变量无法准确估计什么是最有效的变量,而我只需要做一些测试?还是我将获得最好的SQL Server内部压缩?

2
默认跟踪已启用但未激活
当我查询默认跟踪的配置时,它显示已启用: exec sp_configure 'default trace enabled'; --> name minimum maximum config_value run_value default trace enabled 0 1 1 1 但是当我查询sys.traces路径时,它返回一个空行集: select * from sys.traces; 有什么可以解释缺少启用的跟踪的原因?

3
处理身份范围以进行事务复制
我注意到,当您设置事务复制时,SQL Server会将身份范围管理设置为手动。这意味着在我的订阅数据库中,当我尝试将新记录插入到其PK为标识列的表中时,它将给我一个错误,并说它试图插入PK为“ 1”,“ 2” ”,“ 3”等。这是因为订阅服务器上所有标识列的当前标识值都重置为种子值(通常为1),而不是停留在发布者上的原始值上。 我了解为什么SQL Server会这样做-您应该将订户表保留为只读状态。但是,我的情况有点不合常规-我不时通过复制更新订户,立即备份该数据库,然后我想对订户进行一些更新,以免将其推回发布者,然后当我再次更新订户时,我从较早的备份中还原了它的数据库并提取了最新的更新。因为我想在这些更新之间进行订阅服务器的更新(如果需要,可以使用“临时增量”),因此我需要Identity列起作用,并且复制时不要重置为1。 我尝试在设置发布时打开自动标识范围管理,但是当我尝试向发布中添加表时,这只会给我以下错误: 消息21231,级别16,状态1,过程sp_MSrepl_addarticle,第2243行 自动标识范围支持仅对允许更新订户的发布有用。 有什么办法可以解决这个问题?我确实想将此复制呈现给SQL Server,就好像它在订阅服务器端是只读的,因为我不打算进行将被推回发布服务器的更新,但是我确实想进行临时更新在下一次复制之前将被删除。 对于我的使用模式,我还认为快照复制可能比事务复制更合适,但是麻烦在于快照复制需要每个更新发送整个darn数据库。因为我打算在最新复制后立即备份数据库,所以我不需要每次都进行整个传输。只是自上次以来的变化。

2
函数使用空大小写操作挂起
我创建了一个接受开始和结束日期的函数,结束日期是可选的。然后CASE,如果未传递结束日期,则在过滤器中写入a 以使用开始日期。 CASE WHEN @dateEnd IS NULL THEN @dateStart ELSE @dateEnd END 当我为最近一个月的数据调用该函数时: SELECT * FROM theFunction ('2013-06-01', NULL) ...查询挂起。如果我指定结束日期: SELECT * FROM theFunction ('2013-06-01', '2013-06-01') ...结果正常返回。我从函数中取出代码,并在查询窗口中运行良好。我也不能重复提琴的问题。查询如下: SELECT * FROM theFunction ('2013-04-01', '2013-06-01') ...也很好。 查询中(下)中是否有任何内容可能导致NULL在结束日期传递a时函数挂起? SQL小提琴 执行计划的SELECT * FROM theFunction ('2013-06-01', '2013-06-01') 预计计划的SELECT * FROM theFunction ('2013-06-01', NULL)

2
增加的RAM,性能更差
设定: Windows Server 2008 R2 SQL Server 2008 R2 SP1 240GB RAM TempDB是8x16GB数据文件,没有自动增长(总共128GB) 物理/独立服务器 该服务器用于ETL处理。我们刚刚在此服务器上安装了更多RAM,总共有240GB RAM。SQL Server服务是唯一可运行的东西。 内存在BIOS,OpenManage和Windows中显示正常。 如果我将SQL Server配置为使用最小/最大70 / 100GB内存,则没有问题。但是,一旦将其增加到120 / 150GB,则在运行我们的ETL进程之一时会出现以下错误: 无法为数据库“ tempdb”中的对象“ <临时系统对象:422234507706368>”分配空间,因为“ PRIMARY”文件组已满。通过删除不需要的文件,在文件组中删除对象,向文件组添加其他文件或为文件组中的现有文件设置自动增长来创建磁盘空间。(消息1105,状态2,过程未知,第1行) 在更改内存配置之前,我们从未遇到过此问题。重新配置回原始的70 / 100GB后,我们不会收到此错误。 我尝试过的事情: 将TempDB数据文件设置为自动增长。这只会导致文件自动增长,直到达到磁盘容量,然后失败。 添加更多的TempDB数据文件。与显示的错误相同。 将TempDB的大小增加到8x32GB(总共256GB) 我对可能导致此问题的原因不知所措。

2
SQL Server作业中的事务和try-catch
在SQL Server作业的每个步骤中,我们都有DML操作。为了确保更新/插入的情况下将回滚不顺心的事,我已经包裹的数据修改的每一步中TRY CATCH和TRANSACTION块: BEGIN TRY BEGIN TRANSACTION [[INSERT/update statements]] ... IF @@TRANCOUNT > 0 BEGIN COMMIT TRANSACTION PRINT 'Successful.' END END TRY BEGIN CATCH SELECT ERROR_NUMBER() AS ErrorNumber, ERROR_SEVERITY() AS ErrorSeverity, ERROR_STATE() AS ErrorState, ERROR_PROCEDURE() AS ErrorProcedure, ERROR_LINE() AS ErrorLine, ERROR_MESSAGE() AS ErrorMessage IF @@TRANCOUNT > 0 BEGIN ROLLBACK TRANSACTION …

1
SQL Server 2008 R2安装程序客户端工具连接
在SQL Server 2008 R2安装过程中,我看到“客户端工具连接”和“客户端工具向后兼容性”安装选项的复选框。它说这些是客户端服务器通信的组件。谁能解释这些成分是什么?选择这些组件后,服务器上实际安装的是什么。

2
SQL Server如何为外键引用选择索引键?
我正在使用从MS Access导入的旧数据库。在MS Access> SQL Server升级期间创建了大约二十个带有非集群唯一主键的表。 这些表中的许多表还具有唯一的非聚集索引,这些索引与主键重复。 我正在尝试清理。 但是我发现的是,在将主键重新创建为聚簇索引之后,然后尝试重建外键,该外键引用了旧的重复索引(这是唯一的)。 我知道这是因为它不会让我删除重复的索引。 我认为如果存在,SQL Server总是会选择一个主键。SQL Server是否具有在唯一索引和主键之间进行选择的方法? 要复制该问题(在SQL Server 2008 R2上): IF EXISTS (SELECT * FROM sys.tables WHERE name = 'Child') DROP TABLE Child GO IF EXISTS (SELECT * FROM sys.tables WHERE name = 'Parent') DROP TABLE Parent GO -- Create the parent table CREATE …



5
发生任何RESTORE DATABASE事件后自动执行存储过程
是否有可能让SQL Server 2008 R2 Standard在还原或附加到实例的任何给定数据库中自动执行存储过程? 我已经通过创建服务器级触发器来解决一个问题,该触发器将在DDL事件发生CREATE_DATABASE或ALTER_DATABASE触发后在给定的数据库中执行存储过程。不幸的是,这不适用于数据备份备份还原。 详细地说,我们在还原的每个数据库中都有一个“清理”存储过程,我正在寻找一种方法,可以在将备份还原到实例时自动执行该过程。 Googling向我指出了要在SQL Server中配置“ 审计”或“ 策略”以获得此功能,但是乍一看,这些功能非常强大,因此我无法确定审计还是“警察”是开始调查的途径。

3
如何识别表格中的列顺序
我需要按表定义顺序列出表中的列: select * from syscolumns where id = object_id('MyTable') --order by colid 通过检查syscolumns表格,两列看起来很相关:colid和colorder。关于syscolumns的MSDN文章说: colid | smallint | Column or parameter ID. colorder | smallint | Identified for informational purposes only. | Not supported. Future compatibility is not guaranteed. 我试着跑 select * from syscolumns where colorder <> colid 它不产生任何行,这使我认为大多数时间这些列具有相同的值。 看起来最安全的选择是使用colid。但是,我很想知道:这两列之间是否有区别,如果有区别,那有什么区别? 同样,MSDN文章(未确认)colid反映了表定义的顺序。尽管可以合理地假设情况确实如此,但如果您确定情况确实如此,您能告诉我吗?

2
SQL Server事务超时
SQL Server 2008 R2中是否有办法导致涉及事务的数据库修改超时?在一种情况下,我们的应用程序代码会挂起或引发异常,并且无法执行回滚或提交。然后,这导致其他会话挂起,等待事务完成。

4
Windows用户创建表时,SQL 2008 R2创建用户/架构
我们添加了服务器登录名和数据库用户,该用户使用以下脚本将Windows组映射到SQL 2008 R2实例,并更改了名称以实现匿名: USE master go CREATE LOGIN [DOMAIN\AppUsers] FROM WINDOWS WITH DEFAULT_DATABASE=[master], DEFAULT_LANGUAGE=[us_english] go USE AppDb go CREATE USER [DOMAIN\AppUsers] FOR LOGIN [DOMAIN\AppUsers] go EXEC sp_addrolemember N'db_owner', N'DOMAIN\AppUsers' go 当DOMAIN \ User1帐户登录到应用程序时,User1可以在dbo模式中查询表,因为User1是DOMAIN \ AppUsers的成员,但是此应用程序也允许用户创建表。在不指定架构的情况下创建这些表时,SQL Server会执行以下操作: 在AppDb中创建一个“ DOMAIN \ User1”用户,该用户使用该实例的SSMS \ Security \ Logins中未列出的“ DOMAIN \ User1”登录名。 在AppDb中创建一个“ DOMAIN \ …

3
触发更改创建时的数据库排序规则
我正在尝试创建一个触发器,以更改数据库创建时的排序规则,但是如何捕获触发器中要使用的数据库名称? USE master GO CREATE TRIGGER trg_DDL_ChangeCOllationDatabase ON ALL SERVER FOR CREATE_DATABASE AS declare @databasename varchar(200) set @databasename =db_name() ALTER DATABASE @databasename COLLATE xxxxxxxxxxxxxxxxxxx GO 显然,这是行不通的。

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.