Questions tagged «sql-server-2005»

SQL Server 2005(主要版本9.00.xxxx)。还请标记sql-server。

2
如何有效地实现分页?
我有一个数据库查询,可能会导致结果集很大。显示数据的客户端通过网络接收数据,因此,其想法是通过仅从数据库中检索前50个结果并将其发送给客户端,以最大程度地减少传输的数据量。然后,我将提供一个可能性,跳到第二页以检索下一个50个结果,等等(类似于Google提供的内容) 问题是实现分页的有效方法是什么。我想确保mssql尽可能多地使用缓存,并且每次更改分页时都不会再次执行该缓存。 同时有更多客户端正在查询数据库。使用的SQL引擎:MS SQL 2005 我的想法是: 使用准备好的sql statemenst以确保执行计划共享 使用ROW_COUNT变量仅检索所需的行 但这真的是最有效的方法吗?还是您认为最好检索整个结果集并在将数据发送到客户端的代码中实现分页? 谢谢您的提示! 问候,托马斯

2
如何使用临时表或表变量将SQL Server存储过程迁移到Oracle?
受管理层鼓励的C#开发人员编写SQL Server存储过程时,通常会产生这样的过程 create table #t1 (...); insert into #t1 Select ... from table_a where ...; insert into #t1 Select ... from table_b where ...; update #t1 Set ... = ... where ... Select * from #t1; 单个语句非常简单,这种方法使它们产生正确的结果。 通常,我的任务是将此类过程迁移到Oracle。 让我们面对以下事实。 SQL Server中的不同临时表是完全独立的,可以具有任何临时结构。 Oracle全局公用表是全局对象,并且所有共享表都使用相同的表结构。修改此结构是不可能的,尽管它可以在任何地方使用。 我从Oracle dba中学到的一件事是避免在可能的情况下使用临时表。这样的修改甚至可以提高SQL Server的性能。 用活接头替换单个插件 在最简单的情况下,以上内容可以转换为 select case when …

2
可以同时在不同的表上运行两个DBCC INDEXDEFRAG命令吗?
我当前正在运行一个脚本,该脚本在SQL Server 2005数据库中的每个表上一次执行一个DBCC INDEXDEFRAG。由于空间限制和正常运行时间的要求,不能选择使用DBCC DBREINDEX而不是INDEXDEFRAG。 我注意到,某些表需要很长时间才能进行碎片整理。例如,如果我检查“ sys.dm_exec_requests”动态管理视图,则可以看到以下INDEXDEFRAG当前正在删除table_id为829610394的表的聚集索引: DBCC索引(0,829610394,1) 我知道碎片整理过程需要很长时间才能完成。撇开当前正在运行的脚本最终会对所有表进行碎片整理这一事实,在执行当前命令时在另一个表的聚集索引上手动运行另一个DBCC INDEXDEFRAG是否对我有什么危害?如果执行此操作,实际上是否会同时对两个表进行碎片整理?


1
显示备份信息(成功和失败)的查询SQL Server
我有两个备份两个不同数据库的作业。 作业1备份DB1 作业2备份DB2 由于驱动器1上的空间不足而导致作业1失败,因此DB1 备份失败。要解决该问题,我只需要添加空间。没关系 今天,当这个问题已经发生了一个月时,我被告知这一点。是的,我知道这很疯狂,但这是开发人员 我想要获得DB1的完整备份历史记录。我知道我可以从msdb.dbo.backupset表中检索成功的备份信息,但是我想知道是否存在一个查询,该查询显示数据库的备份失败。 我的下面查询显示了12/31 / 13-1 / 27/14中特定数据库的备份历史记录。信息包括服务器,数据库名称,备份开始和结束时间,备份数据库所需的总时间,数据库大小和备份集名称。 SELECT distinct CONVERT(CHAR(100), SERVERPROPERTY('Servername')) AS Server, msdb.dbo.backupset.database_name, msdb.dbo.backupset.backup_start_date, msdb.dbo.backupset.backup_finish_date, CAST((DATEDIFF(second, msdb.dbo.backupset.backup_start_date,msdb.dbo.backupset.backup_finish_date)) AS varchar)+ ' secs ' AS [Total Time] , Cast(msdb.dbo.backupset.backup_size/1024/1024 AS numeric(10,2)) AS 'Backup Size(MB)', msdb.dbo.backupset.name AS backupset_name FROM msdb.dbo.backupmediafamily INNER JOIN msdb.dbo.backupset ON msdb.dbo.backupmediafamily.media_set_id = msdb.dbo.backupset.media_set_id …

3
SQL Server Express可以拥有的最大连接数?
我在一台客户端计算机上安装了SQL Server 2005 Express版,并且许多其他用户也通过C#应用程序连接到了该SQL Server,我已经将它们作为接口提供了。 有时一台PC连接到SQL Server,有时仅抛出异常 找不到SQL Server。... 我相信Express版本达到了它的最大连接限制,然后给出了错误。 请指导我如何解决此问题。 任何可以帮助我了解哪个版本的并行连接数量的白皮书, 我愿意升级到SQL Server 2008或SQL Server 2012,但更喜欢Express版本。如果他们真的在这种情况下还给我,我也可以选择其他版本,否则Express版本表现不错。

3
内联TVF的效果与观看次数
我有一个数据库,我在其中使用嵌入式TVF(表值函数)而不是视图。例如,我可能在TVF [fnCarBrands]内将两个称为[汽车模型]和[汽车制造商]的表连接在一起。 然后,其他TVF会调用这些TVF进行进一步的处理和报告。因此,我可以使用函数[fnCarBrands]并连接到表[购买年份]以形成函数[fnCarBrandHistory]。以此类推,用于多层TVF。 我可以使用视图获得相同的功能,因为我的内联TVF实际上只是表和其他TVF的连接。 用这种方式编写的嵌入式TVF的性能与视图相比如何?

1
如何从LDF文件恢复数据?
我们正在使用SQL 2005 Express Edition。我们想从LDF文件中读取数据,以恢复一些已删除的记录。 我们尝试使用ApexSQL的试用版,这对我们有很大帮助。而不是寻求第三方软件,我们试图找出如何自己读取日志文件的方法。 我们如何从LDF文件读取和恢复数据?

5
SQL Select花费太多时间执行
这是从临时表中进行的简单选择,左键将现有表保留在其主键上,其中两个子选择使用前1个引用联接表。 在代码中: SELECT TempTable.Col1, TempTable.Col2, TempTable.Col3, JoinedTable.Col1, JoinedTable.Col2, ( SELECT TOP 1 ThirdTable.Col1 -- Which is ThirdTable's Primary Key FROM ThirdTable WHERE ThirdTable.SomeColumn = JoinedTable.SomeColumn ) as ThirdTableColumn1, ( SELECT TOP 1 ThirdTable.Col1 -- Which is also ThirdTable's Primary Key FROM ThirdTable WHERE ThirdTable.SomeOtherColumn = JoinedTable.SomeColumn ) as ThirdTableColumn2, FROM …

3
升级到SQL Server 2008 R2涉及的风险
我们有许多SQL Server需要从版本2005升级到2008 R2。微软计划在今年年中之前停止工作,因为微软将停止对此提供的支持。 2005 SQL Server都是SP3和SP4,都在Windows Server 2003上运行(其支持已经终止,但是我们不能再延长一年),但是如果需要,我们可能还会对服务器操作系统进行升级。 这些服务器包括复制(事务),日志传送,报告服务以及运行SSIS包的集成服务器。 我的问题不是在这里,而是想知道在计划升级之前会涉及的风险或可以进行的任何预检查? 另外,就迁移/升级而言,就地升级是否比并行解决方案更好?

1
带有条件的唯一标识符字段
我有一个不在生产中的数据库,所以主表是CustodyDetails,此表有一个ID int IDENTITY(1,1) PRIMARY KEY列,我正在寻找一种添加另一个在其他任何表中都未引用的唯一标识符的方法。帐户列的内容将不完全是一个身份密钥。 这个新的身份列中有一些具体细节,这就是我的问题所在。格式如下:XX/YY其中XX是一个自动递增的值,它将在每个新年度重置/重新启动,而YY是本年度的后两位SELECT RIGHT(YEAR(GETDATE()), 2)。 因此,例如,让我们假设从2015年12月28 日至03/01/2016结束的一天添加了一条记录,该列将如下所示: ID ID2 DATE_ADDED 1 1/15 2015-12-28 2 2/15 2015-12-29 3 3/15 2015-12-30 4 4/15 2015-12-31 5 1/16 2016-01-01 6 2/16 2016-01-02 7 3/16 2016-01-03 我想到了使用前端来解析组合ID(示例中为ID2)以获取最后2位数字并与当年的最后2位数字进行比较,然后决定是否启动新的相关项。当然,能够在数据库端完成所有操作将是宏伟的。 编辑1:顺便说一句,我也看到人们使用单独的表只是为了存储并行的身份密钥,所以一个表的身份密钥成为第二个表的辅助密钥,这听起来有点狡猾,但也许是这样的实现到位的情况? 编辑2:此额外的 ID是旧文档参考,标记每个文件/记录。我猜想它可能是主ID的特殊别名。 在过去的20年中,该数据库每年处理的记录数没有超过100,并且极有可能(确实非常高),当然,如果超过99,该字段将能够继续使用多余的数字,前端/过程将能够超过99,因此它不会改变它。 当然,我一开始没有提到这些细节,因为它们只会缩小解决方案的可能性,以满足我的特定需求,并试图将问题范围扩大。

2
将数据库移至新数据中心
我的公司正在将基础架构移至新的数据中心,我正在尝试找出使新服务器上的数据库与当前生产数据库保持同步的最佳方法,直到新环境准备就绪。我不是一名全职的DBA,而是进行了一些研究,从阅读的内容来看,跨国复制设置似乎可以最好地满足我们的需求。 一些细节:生产数据库的大小约为90 GB,使用Robocopy大约需要9个小时才能将其副本移至新服务器中。当前的生产数据库将需要保持联机状态,并且在整个迁移过程中都可以访问。它的恢复很简单,因此数据库镜像不可用。 事务复制是保持数据库同步的最佳方法吗? 我的计划: (完成)传输当前数据库并登录到新服务器,并将其附加到SQL Server的新实例 在我们的开发数据库计算机上设置分发服务器,然后从生产数据库中发布该分发服务器 在新的数据库计算机上创建一个订户,该订户将每晚每晚接受一次从分发服务器推出的更新 我有两件事。事务复制要求每个发布的表都有一个主键,生产数据库中的许多表都没有定义主键。我认为这不会成为太大的问题,因为我主要关心的只是同步数据库。我们将在以后的数据中测试使用数据库的不同应用程序,但我想确保它不是一个严重的问题。其次,是否还需要从原始实例(例如master)中移出任何关联的系统DB?我们将在新环境中迁移到Active Directory设置,因此我不在乎用户等,但是我不确定系统DB的必要性。 总体而言,我是否正确理解了这些概念?

2
默认情况下关闭CHECK_POLICY
我们从SQL Server 2000迁移到SQL Server2005。我无法更改的客户端软件创建了一个没有选项的用户 CHECK_POLICY = OFF; 创建用户后,我必须运行命令 ALTER LOGIN username WITH CHECK_POLICY = OFF; 按照建议禁用该策略,我不能。 是否可以禁用CHECK_POLICY没有CREATE LOGIN用户创建的默认设置CHECK_POLICY = OFF?

2
当物理事务日志文件是镜像中的主体时,如何缩小物理事务日志文件?
我们在周末设置数据库镜像,但是忘记重新启用备份事务日志的作业。今天早上我来的时候,事务日志已经膨胀到58GB,并占用了大部分驱动器空间。 我将事务日志手动备份到磁盘以使数据库再次运行,但是运行DBCC SHRINKFILE似乎并没有减小事务日志文件的物理大小。 DBCC SHRINKFILE (N'MyDatabaseName_Log', 1000) 如果我使用以下命令查看日志使用情况 DBCC SQLPERF(LOGSPACE) 我可以看到仅使用了当前日志的22% 数据库名称日志大小(MB)使用的日志空间(%)状态 MyDatabaseName 55440.87 22.38189 0 如果我log_reuse_wait_desc在sys.databses中签出,则看到的唯一记录是DATABASE_MIRRORING,因此我猜测镜像在为什么日志文件的物理大小不会缩小的过程中发挥了作用? SELECT log_reuse_wait_desc FROM sys.databases WHERE name = N'MyDatabaseName'; 我还注意到我的主要数据库镜像状态为Suspended,并且尝试立即恢复它失败,并出现以下错误: 数据库'MyDatabaseName'的远程镜像伙伴遇到错误5149,状态1,严重性25。数据库镜像已被挂起。解决远程服务器上的错误并恢复镜像,或者删除镜像并重新建立镜像服务器实例。 镜像服务器上的错误日志也包含此错误,但是还包含有关日志文件驱动器已满的错误 尝试扩展物理文件时,“修改文件”遇到操作系统错误112(磁盘上没有足够的空间。)。 和 F:\ Databaselogs \ MyDatabaseName_1.ldf:遇到操作系统错误112(磁盘上没有足够的空间。)。 主体服务器在日志文件驱动器上有60GB(此处托管了其他数据库),而镜像服务器只有45GB。 备份日志文件使数据库再次可用,但是我还想减小磁盘上物理日志文件的大小,并恢复镜像。 如何在不损害镜像或备份链的情况下缩小物理事务日志文件的大小? 我正在运行SQL Server 2005

7
从MS Access编程移至SQL Server时的主要注意事项
我是100%自学的MS Access程序员(我的主要工作是编程),我现在正在建立更大的数据库;仍然使用MS Access作为UI,但使用SQL Server存储所有数据并完成更多的“工作”。 本质上,我的问题是;使用Access时,我可能不需要了解或需要了解哪些SQL Server主题? 不想让您告诉我如何做任何事情,更不要说您认为我应该进行研究的最重要的事情-有很多主题,而且涉及很多细节,不想长时间找自己沿着一条不太有价值的路走下去... 脑力激荡: 维护:最重要的是什么(检查数据库,缩减数据库,更新统计信息,重建等) 索引-我不太了解,是否有一本好书/博客等可以教我基础知识? 我错过的任何其他事情(可能很多,正如我所说的,我是SQL Server的新手...) 如果有帮助,我可以为中型零售商工作,而我主要从事的数据库工作包括 报告平台(从主系统汇总销售/收据/库存等,并提供快速报告) 第三方与我们的商店通过寄存器进行存储之间的协调工具(从第三方导入数据并交叉引用交易日志) 存储所有与促销有关的数据;产品,价格,预测,实际结果等

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.