小编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
查看次数

架构和用户权限

当我们自定义的、自产的 CMS 使用 GUI 创建数据表时,它会根据特定于站点的用户模式(即sitename)而不是模式创建它们dbo

问题是我们的站点特定用户目前没有“看到”这些其他模式,即使他们在db_owner角色中。因此,某处缺少权限设置,这将授予他们对这些表进行读写的能力。 

迁移到新的 SQL 服务器时发生了此问题。从 2005 工作组版到 2008 网络版。

schema sql-server permissions users

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

将十六进制转换为 varchar

我有一列值保存为十六进制。

当我运行此查询时:

select column from  table
where column like '%22639935-KCN%';
Run Code Online (Sandbox Code Playgroud)

这是我得到的输出:

0x24000000008B010000000089FF32323633393933352D4B434E000000
Run Code Online (Sandbox Code Playgroud)

我想将输出转换为 varchar。这应该给我一个类似于 like 语句中的值。

到目前为止,我的尝试是:

SELECT CONVERT(VARCHAR(MAX), 
       0x24000000008B010000000089FF32323633393933352D4B434E000000)


SELECT CONVERT(VARCHAR(MAX), CONVERT(VARBINARY(MAX), 
       '0x24000000008B010000000089FF32323633393933352D4B434E000000', 2))
Run Code Online (Sandbox Code Playgroud)

但是,我得到了这个结果:

$

如何将此十六进制值转换为 varchar?

sql-server-2008 sql-server type-conversion

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

如果数据计数增加,SQL Server DB 表数据大小查询结果不会增加

我有一个查询,它将显示 SQL Server 中数据库表的记录的表名、行数和大小。当我执行查询时,我得到了一个结果显示

TableName            NumberOfRows   SizeinKB
TBL_PROCESS_AUDIT2   1              16
Run Code Online (Sandbox Code Playgroud)

但是当我使用相同的插入查询将更多记录插入同一个表并执行查询时,它显示更多的行数 (50) 但大小相同 (16kb)。

TableName            NumberOfRows   SizeinKB
TBL_PROCESS_AUDIT2   50             16
Run Code Online (Sandbox Code Playgroud)

实际上,当表的行数增加时,它的大小也应该增加。因此,对于 1 条记录,大小为 16KB,因此对于 50 条记录,大小应为 800KB。当我插入像大约 2000 条记录这样的批量记录时,大小会有所不同。

我的查询中的逻辑或问题是什么?我想要一个数据库表的记录的实际大小。

我的查询:

CREATE TABLE #RowCountsAndSizes (TableName NVARCHAR(128),rows CHAR(11),      
       reserved VARCHAR(18),data VARCHAR(18),index_size VARCHAR(18), 
       unused VARCHAR(18))

EXEC       sp_MSForEachTable 'INSERT INTO #RowCountsAndSizes EXEC sp_spaceused ''?'' '

SELECT     TableName,CONVERT(bigint,rows) AS NumberOfRows,
           CONVERT(bigint,left(reserved,len(reserved)-3)) AS SizeinKB
FROM       #RowCountsAndSizes 
ORDER BY   NumberOfRows DESC,SizeinKB DESC,TableName

DROP TABLE #RowCountsAndSizes
Run Code Online (Sandbox Code Playgroud)

sql-server insert database-size sql-server-2014 bulk-insert

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