我在做一个产品的系统测试,有几个测试严重改变了一个演示数据库的数据。
创建查询的数据非常复杂,这些查询将撤消测试所做的更改;此外,这些测试可能会发生变化。
使用备份/恢复不是一种选择,因为恢复数据库需要 30 秒,这在自动化测试的上下文中太长了。
使用也insert into select很复杂:同样,测试可能会发生变化,并且可能会影响他们现在不影响的表;出于性能原因,以这种方式复制整个数据库也不是一种选择。
Microsoft SQL Server 具有快照功能,但鉴于我在本地主机上没有企业版,我无法使用它。我也不能使用事务,因为系统测试涉及两个应用程序,它们之间有复杂的交互。当然,它们不共享相同的连接。
可以做些什么来快速撤消数据库的最后更改?
为了使问题更容易,
数据库处于受控环境中:
它在本地主机上,所以我是唯一可以访问它的人,
唯一的变化来自系统测试。所有更改都可能(并且预计会)丢失。
可以选择任何恢复模式。
准备(例如某种备份)可能需要很长时间,甚至是一项手动任务,因为它很少执行。重要的是从这一点开始撤销更改的速度,因为它是在每次影响数据库的测试之后完成的。
我使用下面的查询来获取 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 中我会得到物理名称,或者请帮助我用另一种方法来做到这一点。
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) 我正在尝试编写一个查询来获取表中状态的持续时间。此查询需要在 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) 我有 2 列Name,Passport 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)
用数据库中的下一个字符更新当前字符。我不想从表中选择任何东西,我想更新表。
请不要问我为什么。
在最近的一个问题中,服务主密钥保护什么?,建议服务主密钥保护由 加密的数据等ENCRYPTPASSPHRASE()。这是真的?
我有一张名为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 索引而不是其他索引?
我需要一些帮助来创建触发器以在创建 qf.table 时运行 qf.stored_procedure。目前,我有一项工作是每 15 分钟运行一次存储过程,但不能进行更改。
这个想法是让触发器在表更新时运行存储过程,而不管它是单行还是全部。以及不确定是否在表下的触发器或数据库触发器中创建它?。我希望脚本检查触发器是否存在,如果不存在则创建它。
表名:qf.customer_working_hours
列:WHours_id,DayOFW
存储过程: qf.ServiveRefreshCustomer_WH
我是 SQL 脚本和 SQL 触发器的新手,任何帮助将不胜感激
我已经下载了 Ola Hallengren 的脚本并部署到主数据库。我使用下面的运行它...
EXECUTE dbo.IndexOptimize
@Databases = 'USER_DATABASES',
@FragmentationLow = NULL,
@FragmentationMedium = 'INDEX_REORGANIZE,INDEX_REBUILD_ONLINE,INDEX_REBUILD_OFFLINE',
@FragmentationHigh = 'INDEX_REBUILD_ONLINE,INDEX_REBUILD_OFFLINE',
@FragmentationLevel1 = 5,
@FragmentationLevel2 = 30
Run Code Online (Sandbox Code Playgroud)
我在 SSMS 中得到了这个输出,但索引没有被重建。碎片化程度还是很高的。我错过了什么吗?
Date and time: 2015-03-01 14:07:24
Server: TestSvr
Version: 10.50.2500.0
Edition: Standard Edition (64-bit)
Procedure: [master].[dbo].[IndexOptimize]
Parameters: @Databases = 'USER_DATABASES',
@FragmentationLow = NULL,
@FragmentationMedium = 'INDEX_REORGANIZE,INDEX_REBUILD_ONLINE,INDEX_REBUILD_OFFLINE',
@FragmentationHigh = 'INDEX_REBUILD_ONLINE,INDEX_REBUILD_OFFLINE',
@FragmentationLevel1 = 5,
@FragmentationLevel2 = 30,
@PageCountLevel = 1000, @SortInTempdb = 'N',
@MaxDOP = NULL, @FillFactor = NULL, @PadIndex = NULL,
@LOBCompaction = 'Y', @UpdateStatistics …Run Code Online (Sandbox Code Playgroud) 我创建了一个默认数据库并在该数据库中创建了一些模式。为每个架构创建了用户,现在我只想为架构中的每个用户授予完全权限,我该怎么办?
sql-server ×9
index ×2
constraint ×1
encryption ×1
index-tuning ×1
innodb ×1
maintenance ×1
mysql ×1
permissions ×1
primary-key ×1
restore ×1
schema ×1
security ×1
snapshot ×1
t-sql ×1
trace ×1
trigger ×1