我的客户不小心从测试数据库中删除了一个表的所有记录。此测试数据库位于 SQL Server 2005 Express 中,我们没有备份。
是否可以从事务日志 (.ldf) 文件中恢复已删除的行?如果是,如何?
在 MS SQL Server 2005 中,如何提取给定列的 NULL 分数(或 NULL 计数)的统计信息?
Oracle 和 PostgreSQL 中也有同样的信息,听说 MS SQL 也有统计数据,但不知道在哪里可以找到。谷歌没有多大帮助。
我希望我会听到类似的话
SELECT null_frac FROM pg_stats WHERE tablename='mytab' and attname='mycol';
/* PostgreSQL, stats gathered by ANALYZE */
Run Code Online (Sandbox Code Playgroud)
或者
SELECT nullcnt FROM custom_stats_table WHERE tabname='MYTAB' and colname='MYCOL';
/* Oracle, stats gathered by dbms_stats.get_column_stats */
Run Code Online (Sandbox Code Playgroud)
我不是在问如何自己计算这些值——我知道该怎么做。我需要数千列的这些统计信息,并且在我正在处理的数据库上计算这将花费很长时间。我需要近似值,它们应该在服务器中的某个地方 - 基于成本的优化器无论如何都需要它们。
就像我在下面的评论中所说的那样,我不是 DBA,我仍处于学习过程中。
这是我的场景:
我有一个运行几个模式的 Oracle 服务器(我们称之为源)。我想要做的是将每个对象的 1:1 副本发送到另一个 Oracle 服务器(我们称之为 Target),那里已经有一些我需要保留的对象。
理想情况下,我不想关闭源服务器。
此外,我需要保留目标服务器的现有架构。因此,来自 Source 的新对象需要与现有对象共存于 Target 服务器上。也许通过使用可以完成的 2 个实例?我不知道,我只是建议。
实现这一目标的解决方案是什么?
在表上创建空间索引所需的权限,对于这个BOL 说:
需要对表或视图具有 ALTER 权限。用户必须是 sysadmin 固定服务器角色或 db_ddladmin 和 db_owner 固定数据库角色的成员。
但是,我发现单独的Alter 权限足以在表上创建空间索引。(没有服务器系统管理员权限)
我在下面创建的测试:(运行每个批次以了解发生了什么)
USE adventureworks;
GO
/* Start these scripts with a priveledged account */
CREATE TABLE employees
(employeedid INT PRIMARY KEY IDENTITY(1,1),
empaddress GEOGRAPHY
)
INSERT INTO employees VALUES(geography::STGeomFromText('LINESTRING(47.656 -12.360, 47.656 -12.343)', 4326))
GO
/* Create our test SQL account with limited access = no securables yet */
CREATE LOGIN LimitedPerms WITH Password = 'pass';
CREATE USER LimitedPerms FOR LOGIN LimitedPerms;
GO
EXEC AS …Run Code Online (Sandbox Code Playgroud) 我将 SQL Server 2008 R2 用于实时位置感知服务。该服务主要从用户接收位置数据(纬度/经度)并返回用户周围的位置。
每个用户每秒发送一次数据。对于报告的每个位置,都有一个查询来检查该用户周围的其他用户并返回有关他们的数据。
我使用 Lat/Lon 作为浮点字段并运行标量函数来查找最近的用户。
我想这种方法不是最好的。我知道 SQL Server 中有空间数据结构,但不知道它们是否好。我应该使用它们吗?如果是这样,最好的方法是什么?
我应该采取什么方法来使此操作尽可能快速和可扩展?
也许 NoSQL 更适合空间数据?
PS - 我说的是在任何给定时间都有成千上万的用户。
我必须编写一个程序来检测损坏的表并尝试修复它们。为此,我需要定期损坏表。
无论如何手动损坏表?
在我们的开发设备上,我们的数据库完全位于 PRIMARY 文件组中,并且一切正常。
在我们最近从 2005 年升级到 2008 年的其中一台生产服务器上,我们注意到它的性能比预期的要慢。在这台机器上,有两个文件组 - PRIMARY 和 INDEXES。两个文件组每个逻辑卷包含 1 个文件,每个 CPU 包含一个逻辑卷。文件组共享逻辑卷(它们都分布在所有磁盘上)。
我们隔离了一些在开发机器上执行速度快而在生产机器上执行速度慢(最多慢 40 倍)的查询。原来这些查询使用的是驻留在 INDEXES 文件组中的非聚集索引。将某些查询调整为仅使用位于 PRIMARY 文件组中的聚集索引,从而使它们的时间恢复正常。
作为最后的确认,我们在同一台机器上重新部署了同一个数据库,让一切都在 PRIMARY 中,一切又恢复正常!
这是在相关机器上运行的其中一个查询的统计输出(表名已更改以保护无辜者):
快速(主文件组中的所有内容):
(3 row(s) affected)
Table '0'. Scan count 2, logical reads 14, ...
Table '1'. Scan count 0, logical reads 0, ...
Table '1'. Scan count 0, logical reads 0, ...
Table '2'. Scan count 2, logical reads 7, ...
Table '3'. Scan count 2, logical reads 1012, ...
Table '4'. Scan count …Run Code Online (Sandbox Code Playgroud) 我正在将一个约 15GB 的数据库从 SQL Server 2005 迁移到运行 SQL Server 2008 的新服务器,同时我需要创建所有新的维护计划。我可以处理所有备份的东西,但表维护让我有些困惑。有没有人对我应该多久(或者你多久做一次就足够了)以下任务有任何意见?
我错过了什么吗?再说一次,如果您能分享您执行这些任务的频率,那就太好了……和/或分享有关您的表格维护方法的任何一般信息,这将很有帮助。最后,我以什么顺序运行这些任务(在设置作业时)是否重要?
哦,我愿意接受任何可能有帮助的链接!
raid 5 适合安装 mysql 吗?
让我进一步解释我的应用程序。我的应用程序是一个套接字编程,它将与 gps 设备连接以接收 gps 字符串,然后进行进一步处理。套接字编程将在另一台服务器中,而 db 将在另一台服务器中。因此,在进一步处理期间,它将从数据库查询。所以在这里我猜会有很多 i/o 仪式。在进一步的处理过程中,最少有 5 个选择,插入最少 1 个,但有时它甚至可能最少 4 个或更多,还有一些更新。希望我现在更清楚了。
我在一台机器上安装了一个 Oracle 数据库,我正在尝试从另一台机器访问该数据库。
我尝试通过 Oracle SQL Developer Eclipse,甚至通过 JDBC 程序,但没有任何效果。我不确定这是否是防火墙问题(我已经排除了这个问题,因为两台机器都在同一个域中)或者与 Oracle 数据库设置有关。我知道在 MySQL 中你需要授予远程连接数据库的权限。我们是否也需要在 oracle SID 上设置类似的东西?
我收到的错误消息:
Io 异常:网络适配器无法建立连接
sql-server ×5
spatial ×2
corruption ×1
index ×1
maintenance ×1
mysql ×1
oracle ×1
performance ×1
recovery ×1
replication ×1
statistics ×1
storage ×1