数据库管理员

希望提高数据库技能并向社区中的其他人学习的数据库专业人员的问答

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

1
IO_STALL的问题和理解
我每5分钟从sys.dm_io_virtual_file_stats中收集IO_STALLS,然后做一个增量查看哪些文件受IO影响最大。 在5分钟内,我得到了5826331毫秒的增量,即97分钟。 我对此有些困惑,这是说一次操作开始于97分钟之前才刚刚完成,因此记录了等待时间吗? 谢谢 根据要求添加了代码: /* USE [SysDBA] GO */ /****** Object: Table [dbo].[DISKIOPS] Script Date: 04/07/2013 11:40:15 ******/ /* DROP TABLE [dbo].[DISKIOPS] GO */ --Create the table /****** Object: Table [dbo].[DISKIOPS] Script Date: 04/07/2013 11:40:15 ******/ /* SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO SET ANSI_PADDING ON GO …

1
SqlPackage不从配置文件中提取变量
我想使用.dacpac和sqlpackage.exe升级数据库 这是我运行sqlpackage的方法: SqlPackage.exe /Action:Publish /SourceFile:"my.dacpac" /Profile:"myprofile.publish.xml" 我得到的错误是: *在目标脚本中未定义以下SqlCmd变量:foo。 我已验证myprofile.publish.xml文件确实包含该var: <ItemGroup> <SqlCmdVariable Include="foo"> <Value>bc\local</Value> </SqlCmdVariable> 我还验证了创建dacpac的项目确实可以使用Visual Studio在Visual Studio中成功发布 myprofile.publish.xml 我还能缺少什么? (我正在使用SQL Server 2012)

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
MySQL复制:“ PRIMARY键的重复条目”
您能否帮助我了解为什么在完全重新同步后,在从属服务器上收到“ PRIMARY键的重复项”。 基本上,“ mysqldump”几乎整个晚上都在运行,然后还原过程花费了几个小时,所以当我启动从站时,它比主站晚了约63874秒。 从属服务器是只读的(read_only),并且在重新同步过程中没有任何写操作,因此我不明白为什么会有重复的键。 二进制日志格式在主数据库上设置为MIXED。 用于备份数据库的命令: mysqldump --opt --single-transaction -Q --master-data=2 db | bzip2 -cz > db.sql.bz2 从属服务器仅使用以下选项从主控服务器(db-> db_backup)复制一个数据库: replicate-wild-do-table = db_backup.% replicate-rewrite-db = db->db_backup

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)

3
切换到简单恢复时的事务日志维护
背景: 我最近继承了450多个数据库中的50多个SQL Server。每晚备份大约为8TB,不用说,我们使用的磁盘空间比我们想要的要多。所有数据库均设置为“完全恢复”,并且从未备份过事务日志。我已经遍历了所有SQL Server,并确定了低优先级的服务器,这些服务器仅需要每晚进行备份并且可以接受一天的数据丢失。 题: 我将许多低优先级数据库SIMPLE从切换到恢复模式FULL。现有事务日志会被截断吗(创建检查点时)?一些现有的事务日志为50-100GB;为了继续前进,确定我应该缩小到什么范围的最佳方法是什么?我显然不想让它们那么大。还是随着时间的推移它们会自行收缩(我不认为会收缩)?


3
PK作为ROWGUIDCOL还是使用单独的rowguid列?
这里正在进行一场激烈的辩论,所以我想听听其他意见。 我有很多带有uniqueidentifier集群PK的表。这是否是一个好主意在这里超出了范围(并且不会很快改变)。 现在,必须合并发布数据库,并且DEV提倡使用单独的rowguid列,而不是将现有PK标记为ROWGUIDCOL。 基本上,他们说应用程序永远不应将仅用于复制的内容带入其域(对于他们来说,这只是“ DBA内容”)。 从性能的角度来看,我没有理由为什么要添加一个新列来执行现有列可以做的事情。而且,由于它只是“ DBA的东西”,为什么不让DBA选择? 我有点理解DEV的观点,但是我仍然不同意。 有什么想法吗? 编辑:我只是想补充一点,在这场辩论中我是少数派,而质疑我立场的DEV是我尊敬和信任的人。这就是我诉诸意见的原因。 我可能还缺少一些东西,可能会误解了他们的观点。

1
行为异常DBCC Shrinkfile
我正在尝试对其中95%的数据已被存档和删除的数据库运行1GB的dbcc收缩文件。我用的是235GB的文件,其中9GB是数据/索引。我想缩小到50GB。我知道收缩数据库文件是不好的,它会导致碎片等。作为数据清除/收缩的一部分,我们还有一个重建idnex脚本。 当我在自己的工作站(四核,12GB RAM,2个SATA驱动器)上对数据库运行dbcc收缩文件脚本时,收缩过程大约需要8-10分钟。 当在数据库发布后数据清除的相同副本上运行相同的代码时,在我们的测试环境(80多个核,128GB RAM,SSD SAN)中,需要70分钟。请注意,运行收缩文件时,此服务器上几乎没有活动。它已运行4次,结果相同。 然后,我采取了另一种方法,将剩余的9GB移动到另一个文件组和物理文件。在空的230GB文件上运行dbcc收缩文件以将其缩减到50GB,在我自己的工作站上花费的时间不到1分钟。 使用相同的方法,在测试环境上,又需要70分钟以上的时间。 在测试环境运行70分钟的过程中,按照布伦特·奥扎尔(Brent Ozar)的脚本操作前后,我已经对waitstats进行了快照,并且返回的waittypes值得关注。下面的前3行: 秒采样时间采样持续时间(以秒为单位)wait_type等待时间(秒)等待次数平均每次等待的毫秒数 2013-05-28 11:24:22.893 3600 WRITELOG 160.8 143066 1.1 2013-05-28 11:24:22.893 3600 CXPACKET 20.9 13915 1.5 2013-05-28 11:24:22.893 3600 PAGELATCH_EX 11.1 443038 0.0 Windows事件日志显示没有异常。在这一点上,我要抓挠,为什么与独立工作站相比,忍者硬件要花这么长时间。

3
如何快速启动/关闭Oracle 11?
我想知道正确启动/关闭Oracle DB守护程序(安装在测试计算机上的Oracle 11.2)的最快方法是什么。 对于使用OCI / Pro * C API的C / C ++程序,我需要它。 我想要这个,是因为我习惯了PostgreSQL的启动速度,并且因为该守护程序在仅针对测试用例启动(按需)的虚拟机中运行。 目前,我这样编写脚本-启动: sqlplus /nolog <<EOF connect / as sysdba startup quit EOF lsnrctl start emctl start dbconsole 并关机: emctl stop dbconsole lsnrctl stop sqlplus /nolog <<EOF connect / as sysdba shutdown quit EOF 这可以工作-程序可以按预期工作-但此过程很慢。 Oracle DB在CentOS 6.3上运行,它是免费的(按啤酒形式)可用的“标准版本”。


2
查找具有相同的子行集的父行
假设我有一个这样的结构: 食谱表 RecipeID Name Description RecipeIngredients表 RecipeID IngredientID Quantity UOM 关键RecipeIngredients是(RecipeID, IngredientID)。 查找重复食谱的一些好方法是什么?重复配方定义为具有完全相同的一组配料以及每种配料的数量。 我曾经考虑过使用FOR XML PATH将成分合并到一个单独的列中。我尚未对此进行全面探讨,但是如果我确保成分/ UOM /数量按相同顺序排序并具有适当的分隔符,那么它应该可以工作。有更好的方法吗? 有48K食谱和200K成分行。

3
将非Unicode字符串转换为Unicode字符串SSIS
我正在创建一个程序包,将从数据库中将数据导出到一个空的excel文件中。当我仅添加源组件和目标组件并运行程序包时,出现转换错误,指出“输出”列和“ A”列无法在Unicode和非Unicode字符串数据类型之间进行转换。 为了解决这个问题,我添加了一个数据转换组件并将所有列转换为 “ Unicode字符串[DT_WSTR]” 而且我不再收到该错误。唯一的问题是,我有大约50列,其中我必须一比一地从下拉列表中选择“ Unicode字符串[DT_WSTR]”。然后,我不得不进入目标组件并将新转换的列映射到我的excel文件。 我的问题是,如果还有其他人遇到过这种情况,是否有更好的更有效的方法来解决必须进行所有手动数据类型转换的问题?必须逐一转换和映射所有列似乎不切实际,尤其是在您有大量行的情况下。 我了解excel文件不是导入和导出数据的最佳方法,但这是在特定情况下所需要的。 我可能会寻找一种只导出到纯文本文件,然后尝试转换为excel的方法,这是该程序包的最后一步。我希望这不会触发相同的unicode / nonunicode转换错误。

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.