我有一个 Oracle 数据库,我想在 Visio 2007 Pro 中创建一个 ERD。
到目前为止,我已经查看了 DBMS_METADATA.GET_DDL 命令来生成 DDL。我知道我可以将 Access DB 导入 Visio,但似乎 Access 理解与 Oracle 不同的 SQL 方言,因此我需要调整每个 Create Table 命令以更改数据类型。
有没有一种在 Visio Pro 2007 中使用 DDL 创建 ERD 的简单方法?
我计划对我的数据库(数据仓库)中的一些大表应用 PAGE 压缩。这些表相当大,有超过 150 亿行。
当我在测试环境中应用压缩时,整个过程大约需要 22 个小时。这些表每天都会通过运行很长时间的查询进行访问。
在解决将断开连接的设备与中央数据库服务器同步的问题时,我们在服务器上升级到 SQL Server 2012 后遇到了问题。看起来 CHANGE_TRACKING_MIN_VALID_VERSION 返回的值比它应有的值高 1(或至少比升级前的值高)。
我一直在研究如何设置简单示例的Arshad Ali 的精彩示例。
我已经运行了从 #1 到 #5 的脚本,以在 SQL Server 2008 和 2012 环境中的 Employee 表中插入、删除和更新一行。
在 2008 年,以下语句返回 0:
SELECT CHANGE_TRACKING_MIN_VALID_VERSION(OBJECT_ID('Employee'))
Run Code Online (Sandbox Code Playgroud)
在 2012 年,它返回 1。
在测试中通过更多脚本 (6-8) 工作时,我将保留期设置为 1 分钟,以期强制执行清理操作。我离开了一天,显然它运行了一夜。
在 2008 年的实例中,CHANGE_TRACKING_CURRENT_VERSION 和 CHANGE_TRACKING_MIN_VALID_VERSION 是相等的 (11)。在 2012 年的实例中,CHANGE_TRACKING_MIN_VALID_VERSION 比 CHANGE_TRACKING_CURRENT_VERSION (11) 高一 (12)。当数据库长时间空闲时,这可能会对同步过程产生影响。我们发现进程可能会陷入循环,尤其是在执行以下测试以确定是否需要重新初始化而不是同步时:
IF CHANGE_TRACKING_MIN_VALID_VERSION(object_id(N'dbo.Employee')) > @sync_last_received_anchor
RAISERROR (N'SQL Server Change Tracking has cleaned up tracking information for table ''%s''...
Run Code Online (Sandbox Code Playgroud)
有没有其他人经历过这种行为变化?有人有解释吗?
我错误地创建了一个索引,现在我试图删除该索引。由于表很大,删除索引需要很多时间。有没有其他方法可以快速删除索引?
我想提出一些维护我们的 MySQL 数据库、版本 5.5/6 和使用 InnoDB 的最佳实践。
我遇到了这篇文章,它基本上是在说优化表:
我的问题是:
这听起来像是一个过于简单的问题,但我发现找到正确的答案并不容易。
关于“什么是 sql 子句?”的问题 互联网上的大多数资源只是提供了一个条款列表并解释了它们的作用。
但我试图抽象地理解它是如何定义的。就像一个通用符号,它捕获了可以编写的所有类型的查询以及子句在其中的适应方式。
是否存在所有子句共有的属性?为什么 UNION 被称为运算符而 HAVING 是一个子句?
连接到本地系统数据库时,我遇到了这个问题,但是当我连接任何服务器时,它都会连接。
Login failed for user 'domain\username'. (Microsoft SQL Server, Error: 18456)
For help, click: http://go.microsoft.com/fwlink?ProdName=Microsoft+SQL+Server&EvtSrc=MSSQLServer&EvtID=18456&LinkId=20476
Run Code Online (Sandbox Code Playgroud) 对于糟糕的列/表名称感到抱歉,但由于这是一个工作项目,我想确保可以询问。我只是希望至少了解为什么我没有看到我的功能索引被使用,所以我觉得在生产环境中添加这些索引更好。
该查询使用我创建的视图,该视图具有许多不同的列,其中包含执行以下操作的 where 子句:
....
AND e.sysid = NVL(wi.ALPHAid, -999)
AND NVL(wi.ALPHAid, -999) <> -999
AND NVL(wi.BRAVOid, -999) = -999
AND NVL(wi.CHARLIEid, -999) = -999
...
Run Code Online (Sandbox Code Playgroud)
我的理解是,如果您通过函数传递列,则 Oracle 不能使用索引,而您需要创建基于函数的索引。因此,在创建索引之前,我在解释计划中获得了以下成本:
计划哈希值:1233409744
-------------------------------------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
-------------------------------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 223 | 56 (6)| 00:00:01 |
| 1 | SORT ORDER BY | | 1 | 223 | 56 (6)| 00:00:01 |
| 2 …Run Code Online (Sandbox Code Playgroud) 我有一个复杂的子查询,它返回一个订单 ID 列表。我需要得到一份有这些订单的客户名单。问题是有两种方法可以将客户分配给订单(两个字段之一)。我可以做这样的事情:
select *
from Customers
where orderId in (select...)
or secondaryOrderId in (select ...)
Run Code Online (Sandbox Code Playgroud)
问题是子查询是巨大的,无论是执行时间还是屏幕空间。有没有办法检查其中一个字段是否包含所需的结果之一?
它没有发生在我身上。但我正在考虑这个问题。
我在弄乱我的训练环境,误点了数据库名称,然后我触摸了字母A。

假设我按下了回车键。现在数据库叫A,不记得原来的名字了。CTRL + Z 不起作用。

在这样的情况下,在生产环境中该怎么办?
我知道这不可能发生,因为数据库没有设置为 SINGLE USER。但如果发生了。该怎么办?为了论证起见,假设它是一个现在没有人使用的数据库。
sql-server ×4
index ×2
oracle ×2
compression ×1
concurrency ×1
cte ×1
ddl ×1
erd ×1
explain ×1
import ×1
innodb ×1
maintenance ×1
mysql ×1
optimization ×1
postgresql ×1
sql-standard ×1
subquery ×1
visio ×1