小编Aar*_*and的帖子

如何撤消在受控环境中对数据库所做的每项更改?

我在做一个产品的系统测试,有几个测试严重改变了一个演示数据库的数据。

创建查询的数据非常复杂,这些查询将撤消测试所做的更改;此外,这些测试可能会发生变化。

使用备份/恢复不是一种选择,因为恢复数据库需要 30 秒,这在自动化测试的上下文中太长了。

使用也insert into select很复杂:同样,测试可能会发生变化,并且可能会影响他们现在不影响的表;出于性能原因,以这种方式复制整个数据库也不是一种选择。

Microsoft SQL Server 具有快照功能,但鉴于我在本地主机上没有企业版,我无法使用它。我也不能使用事务,因为系统测试涉及两个应用程序,它们之间有复杂的交互。当然,它们不共享相同的连接。

可以做些什么来快速撤消数据库的最后更改?

为了使问题更容易,

  1. 数据库处于受控环境中:

    • 它在本地主机上,所以我是唯一可以访问它的人,

    • 唯一的变化来自系统测试。所有更改都可能(并且预计会)丢失。

    • 可以选择任何恢复模式。

  2. 准备(例如某种备份)可能需要很长时间,甚至是一项手动任务,因为它很少执行。重要的是从这一点开始撤销更改的速度,因为它是在每次影响数据库的测试之后完成的。

sql-server sql-server-2008-r2 snapshot restore

4
推荐指数
2
解决办法
6008
查看次数

从默认跟踪中按文件名提取自动增长事件

我使用下面的查询来获取 sql server 中数据库发生的自动增长事件。

DECLARE @trcfilename VARCHAR(1000);
SELECT @trcfilename = path FROM sys.traces WHERE is_default = 1
SELECT COUNT(*)as no_of_autogrowths,
sum(duration/(1000*60)) as time_in_min,
Filename
FROM ::fn_trace_gettable(@trcfilename, default)
WHERE (EventClass = 92 OR EventClass = 93)
GROUP BY  Filename
Run Code Online (Sandbox Code Playgroud)

它输出自动增长的数量、自动增长所用的时间和文件的逻辑名称。但我想要文件的物理名称(mdf 和 ldf 文件名)而不是逻辑名称。我不知道是否从 sys.traces 中我会得到物理名称,或者请帮助我用另一种方法来做到这一点。

sql-server sql-server-2008-r2 trace

4
推荐指数
1
解决办法
2104
查看次数

DROP DATABASE 上的事务回滚

MySQL是否使用事务forDROP DATABASE...语句(所有表都使用InnoDB引擎)?

基本上我想知道如果我DROP DATABASE...在查询运行时终止查询是否会丢失任何数据?

我已经用表对此进行了测试并且它有效,但我没有足够大的数据库来测试它:

mysql> SELECT COUNT(*) FROM t1;
+----------+
| COUNT(*) |
+----------+
| 10000000 |
+----------+
1 row in set (8.57 sec)

mysql> DELETE FROM t1;
Run Code Online (Sandbox Code Playgroud)

另一个 MySQL 会话:

mysql> SHOW PROCESSLIST;
+-----+------+-----------+------+---------+------+----------+-------------------+-----------+---------------+
| Id  | User | Host      | db   | Command | Time | State    | Info              | Rows_sent | Rows_examined |
+-----+------+-----------+------+---------+------+----------+-------------------+-----------+---------------+
| 211 | root | localhost | test | Query   |    0 | init     | SHOW PROCESSLIST  | …
Run Code Online (Sandbox Code Playgroud)

mysql innodb

4
推荐指数
1
解决办法
2万
查看次数

数据值变化的查询(持续时间)不同

我正在尝试编写一个查询来获取表中状态的持续时间。此查询需要在 SQL Server 2008 中工作。

假设我有下表:

Key Value   RecordDate
1   1   2012-01-01
2   1   2012-01-02
3   1   2012-01-03
4   5   2012-01-05
5   5   2012-01-05 12:00:00
6   12  2012-01-06
7   1   2012-01-07
8   1   2012-01-08
Run Code Online (Sandbox Code Playgroud)

我想得到以下结果

Value StartDate   EndDate     Duration
1     2012-01-01  2012-01-05  4 days
5     2012-01-05  2012-01-06  1 days
12    2012-01-06  2012-01-07  1 days
1     2012-01-07  NULL        NULL
Run Code Online (Sandbox Code Playgroud)

基本上我想在它改变之前获取值的持续时间。

我正在接近某个地方,但仍然无法弄清楚:

SELECT [Key], [Value],  
       MIN(RecordDate) OVER(PARTITION BY [Value]) as 'StarDate',
       MAX(RecordDate) OVER(PARTITION BY [Value]) as 'EndDate',
       DATEDIFF(day, (MIN(RecordDate) OVER(PARTITION BY [Value])), …
Run Code Online (Sandbox Code Playgroud)

sql-server-2008 sql-server

4
推荐指数
1
解决办法
2万
查看次数

需要将字母数字字符更改为下一个字符

我有 2 列NamePassport No.在一个超过 100k 行的表中。

Name   Passport No.
KOP    A245
COS    C990
Run Code Online (Sandbox Code Playgroud)

更新后应该是这个样子。

Name   Passport No.
LPQ    B356
DPT    D001
Run Code Online (Sandbox Code Playgroud)

用数据库中的下一个字符更新当前字符。我不想从表中选择任何东西,我想更新表。

请不要问我为什么。

sql-server

4
推荐指数
1
解决办法
1291
查看次数

由 ENCRYPTBYPASSPHRASE() 加密的数据是否受服务主密钥保护?

在最近的一个问题中,服务主密钥保护什么?,建议服务主密钥保护由 加密的数据等ENCRYPTPASSPHRASE()。这是真的?

sql-server encryption

4
推荐指数
1
解决办法
7043
查看次数

无法删除非 PK 索引,因为它在外键约束中被引用

我有一张名为MyTable. 主键是一个名为 的标识 int 列MyTableID。在MyTableID名为的 PK 列上有一个唯一的聚集索引PK_MyTable

我注意到IX_MyTable_MytableID该表上有一个额外的非聚集唯一索引,只有一个 column MyTableID,没有其他包含的列。这个索引显然是多余的,但是当我尝试删除它时,我收到一条错误消息:

The constraint 'IX_MyTable_MyTableID' is being referenced by table 'OtherTable', 
foreign key constraint 'FK__OtherTable__MyTableID__369C23FC'.
Run Code Online (Sandbox Code Playgroud)

为什么 FK 约束依赖于非聚集唯一索引而不是主键约束?如何更新 FK 以使用聚集 PK 索引而不是其他索引?

index sql-server constraint primary-key sql-server-2008-r2

4
推荐指数
1
解决办法
6609
查看次数

如何识别调用存储过程的程序?

作为应用程序数据库设计规范的一部分,我们被要求阻止执行一组直接从 SSMS/osql/sqlcmd 等触发的存储过程;也就是说,它们必须只被允许在应用程序本身内运行。

当我们的团队质疑这是否可行时,我们看到了一个演示,该演示将查询限制在特定系统(实际上它让查询运行,但记录到运行它的表中)。然而,这样做的过程是加密的,所以我们无法知道它是如何完成的。

我们如何做到这一点?

security sql-server stored-procedures sql-server-2014

4
推荐指数
1
解决办法
7285
查看次数

辅助副本索引

我有一个问题,关于一个问题,它是 70-462 Microsoft 考试的一部分。

我今天有这个问题,我不完全确定正确答案。虽然我确实通过了考试,但我想了解这种情况下的正确解决方案。

如果我没记错问题,您管理的是 2012 SQL Server,要求是将 OLTP 数据库的分钟报告卸载到另一台服务器,并且还能够向辅助数据库添加索引。

问题的答案大致如下:

  1. 两台服务器,不同的数据中心。具有同步提交的 AG 组。主动次要。
  2. 两台服务器,同一个子网。具有同步提交的 AG 组。
  3. 两台服务器,每 10 分钟发送一次日志。
  4. a-synch 提交有几个不同的答案。
  5. 包含配置为执行事务复制的应用程序数据库的 SQL Server。
  6. 包含配置为执行快照复制的应用程序数据库的 SQL Server。
  7. Windows 故障转移群集中的两台服务器。SQL Server 配置为群集实例。

最初我排除了异步提交选项(延迟)、不同数据中心的同步提交 AG 组(延迟?)、日志传送(延迟)和快照复制选项。

这给我留下了同一个子网上的同步提交 AG 组,或具有事务复制的 SQL 服务器。

基于https://msdn.microsoft.com/en-us/library/ff878253.aspx,我读到如果你想在你的活动辅助节点上建立索引,你必须在你的主要节点中创建它们。我将这个问题解释为要求能够在主服务器上创建索引,而这些索引在主服务器上不存在(包括用于报告的索引,或者其他什么不存在)。

另一个答案,单独指的是 SQL Server,这听起来不像我们要添加“另一台服务器”来卸载工作。

我是否误解了问题/要求?正确答案/解决方案应该是什么?

replication sql-server sql-server-2012 availability-groups

4
推荐指数
1
解决办法
2486
查看次数

我应该使用哪种数据类型来存储 11 位数字

我应该使用哪种数据类型来存储 11 位数字?它必须存储“0”作为第一个数字。

例如,如果我存储02421402015,它必须显示02421402015。我尝试使用varchar,它显示2421402015.

sql-server-2008 sql-server datatypes

4
推荐指数
2
解决办法
1万
查看次数