如何确定 SQL Server 2008 中的 SQL Server 数据库中是否存在表?
我有一个查询,我希望随机排序结果记录。它使用聚集索引,所以如果我不包括order by它,它可能会按照该索引的顺序返回记录。如何确保随机行顺序?
我知道它可能不是“真正的”随机,伪随机足以满足我的需要。
像许多其他人一样,我们将 MySQL 实例从 5.0.* 升级到 5.1.49。从那以后,我们遇到了一个错误,当我们执行某些操作时它会重复:
SELECT LENGHT(description), id FROM table(拼写错误......LENGTH拼写正确时,错误未显示)有问题的错误:
mysql.proc 的列数错误。预期为 20,发现为 16。该表可能已损坏。
这已被报告为错误(基本上,缺乏向后兼容性),但似乎对如何解决此问题有些困惑:
mysql_upgrade作为可能的解决方案(尽管有一些有关警告)。然而,据其他地方报道,这种解决方案并不总是有效。不幸的是,我没有一个测试盒来测试可能的解决方案,因为我们的开发盒正在等待操作系统升级,以允许我们安装我们想要安装的 MySQL 版本。我不愿意在我们的生产环境中尝试任何解决方案,除非遇到这个问题的人已经验证它可以工作。
除了等待 MySQL 的官方补丁或解决方案之外,解决此问题的正确方法是什么?
虽然丢失我们的存储过程并不理想,但它也是我们愿意采取的解决问题的途径,前提是没有更好的替代方案并且可以干净利落地解决问题。
我最近发现 SQL Server 2005 不允许newid()在用户定义的函数中使用。为什么是这样?
我有一个适合我需求的替代解决方案,所以我不是在寻找解决这个问题的方法。我很好奇为什么设计师会做出这个决定。
随着内部应用程序经过多年的发展,您偶尔会发现有许多人们认为不再相关并想要剔除的表。在 SQL 环境中识别数据库依赖项的实用方法是什么?
我工作过的地方采取了相当残酷的选择,例如:
我很欣赏 SQL Server 带有用于跟踪该实例中的依赖项的工具,但是如果您在不同的实例上拥有数据库,这些工具似乎很困难。是否有可以更轻松地查询依赖项的选项,也许可以回答诸如“此列在哪里使用?”之类的问题。答案是“在此存储过程中的另一台服务器上结束”或“在此 SSIS 包中结束”?
我是 Oracle 数据库的新手,想为我们现有的数据库开发数据字典和 ER 图。您有任何提示、脚本和工具吗?
在我看来,应该可以用包sys.diana和解析现有的 PL/SQL sys.pidl,但我在互联网上没有找到任何东西,除了一些似乎解开包装包的脚本(这对我的目的来说是无用的) )。
那么,有没有人知道指向正确方向的指针?
在任何以唯一自动增量字段形式保存用户记录的给定数据库中(例如,用户间消息)......当时间到来并且接近最大有符号或无符号数时该怎么办当前数据类型?(一个 32 位的 INT)?我猜测数据库服务器在尝试将 (2?32)-1 数字分配给下一个条目时会溢出,因此,如何避免这种情况发生(为了问题而无需更改数据类型)和继续添加记录?你会怎么办?
为什么我要使用 INT 而不是,例如,VARCHARS?
自从我问自己这个假设性问题以来已经好几天了,我想知道专业人士会做什么。
我客户的 SQL 服务器上有很多数据库。这些数据库正在开发中,因此开发人员可以进行设计、重构、数据修改等。有一些数据库很少更改。我的客户必须确保所有这些都安全(备份)并花一些时间管理环境。(公司没有DB管理员职位。)经过长时间的讨论,客户决定使用每日完整备份策略,因为恢复容易。
所以这里是情况的总结:
主要问题:如何检测数据库已更改。问题的第一部分(DDL 更改)可以通过使用DDL 触发器来解决。但是数据更改(DML 更改)是一个问题。不可能将 DML 触发器应用于所有数据库的所有表以跟踪更改(性能、扩展对象的管理......)。备份引擎必须跟踪所有更改以将每个数据库标记为准备备份。
Change Data Capture是一个解决方案,但它似乎太重了(它还需要 SQL Server 企业版)。
另一种方法是跟踪数据库文件更改(大小或上次更改时间),但它无法正常工作:当数据库超过所有保留的可用空间时,它可以更改其大小,而sp_spaceused不是解决方案。
跟踪是一种解决方案,但它会导致性能问题并需要额外的管理。
是否有任何解决方案可以在不影响其他数据库管理对象(如统计信息..)的情况下计算实际数据库使用大小?当然,对不改变表大小的表数据的更改不会触发(我认为),但总比没有好。我真的在寻找 SQL Server 2008 的直接或间接解决方案。
感谢您的任何评论、解决方案和想法。
添加:
这是解决方案(感谢玛丽安):
Select
NextLSN = MAX(fn.[Current LSN])
,Databasename = DB_NAME()
from fn_dblog(NULL, NULL) fn
LEFT JOIN sys.allocation_units au
ON fn.AllocUnitId = au.allocation_unit_id
LEFT JOIN sys.partitions p
ON p.partition_id = au.container_id
LEFT JOIN sys.objects so
ON so.object_id = p.object_id
WHERE
(
(Operation …Run Code Online (Sandbox Code Playgroud) 我错误地从远程 SQL Server 2008 表中删除了大约 2,000,000 条记录。服务器未授予我访问服务器端备份文件的权限。
有什么办法可以找回这些记录吗?
sql-server ×3
mysql ×2
oracle ×2
backup ×1
management ×1
mysql-5 ×1
parse ×1
plsql ×1
recovery ×1
trigger ×1