最近我们正在做一个 POC 来实现 Always on work 并且碰巧在 BOL 中看到了这篇文章
http://technet.microsoft.com/en-us/library/ms366279.aspx
这篇文章表明,我们在处理同步模式时也会存在逻辑上的不一致,但事实真的会如此吗?
例如,考虑事务正在运行的数据库 A 和 B,A 处于高安全模式并且 B 没有镜像。A 的日志必须转到镜像数据库,然后主数据库提交最终两阶段提交(B 上的事务)成功,但文章建议首先不会传输日志并导致 B 上的提交,这是矛盾的。请帮助我理解上述文章中建议的陈述是否属实。如果是的话怎么可能:)。
PS:如果我需要提供有关此的更多信息,请告诉我。
假设我有一个由以下 SQL 定义的视图:
SELECT t1.id, t2.name, t3.address
FROM Table1 as t1
INNER JOIN Table2 t2
ON t1.id = t2.tID
INNER JOIN Table3 t3
ON t1.id = t3.tID
Run Code Online (Sandbox Code Playgroud)
据我所知,如果我在这个视图上创建一个索引,那么数据将被持久化,但我不清楚究竟是什么被持久化了。假设我在 t1.id 上创建了一个唯一的聚集索引,是否将所有三列都保存到磁盘中,或者是否仍会在运行时计算从 table2 和 table3 中提取的值?
如果其中任何一个没有意义,或者我是否遗漏了任何重要内容,请告诉我。
我在 sqlskills.com 上使用此博客作为练习在事务日志备份中查找相关 LSN 以进行时间点恢复的指南。
备份事务日志后,我尝试使用以下命令读取它:
SELECT COUNT(*) FROM fn_dump_dblog (
NULL, NULL, 'DISK', 1, 'D:\TEMP\test_tlog2.bak',
DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT,
DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT,
DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT,
DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT,
DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT,
DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT,
DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT,
DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT,
DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, …Run Code Online (Sandbox Code Playgroud) sql-server-2008 sql-server sql-server-2008-r2 restore transaction-log
我需要对 AlwaysOn 进行一些基准测试,无论是否启用 TDE。我看到的所有说明都涉及将加密数据库添加到可用性组,但我没有提到为 AG 中已有的数据库启用加密。
我可以将服务器证书恢复到所有节点,然后从主节点启用 TDE 吗?我希望我不需要从 AG 中删除数据库,对其进行加密,然后重新初始化所有节点,因为数据库大约为 100 GB。如果需要,我们可以这样做,但这肯定会减慢我们的测试速度。
更新
我只是在一些实验室虚拟机上尝试过这个。我能够在主节点上创建一个证书,在所有辅助节点上恢复它,然后使用这个证书在主节点上创建一个数据库加密密钥。之后我所要做的就是ALTER DATABASE AdventureWorks SET ENCRYPTION ON在主服务器上,一两分钟后,sys.dm_database_encryption_keys 在所有节点上都显示了 encryption_state = 3。
那么,后续问题:是否有任何理由认为我不应该使用此程序?SQL Server 似乎对结果很满意,但我还没有看到任何地方讨论过这种方法。在处理加密和高可用性问题时,我不想让事情碰运气。
sql-server sql-server-2012 availability-groups transparent-data-encryption
我只是想从“优化 MERGE 语句性能”页面。
我正在使用一个数据仓库,它从许多不同的数据库中获取记录并存储数据。我的仓库数据库中的所有表基本上都遵循相同的模式:
CREATE TABLE Foo (
database_guid UNIQUEIDENTIFIER
,FooPk BIGINT
,Bar NVARCHAR(20)
,Qix NCHAR(10)
,CONSTRAINT [PK_Foo] PRIMARY KEY CLUSTERED (
database_guid ASC
,FooPk ASC
)
)
GO
CREATE PROCEDURE [iv].[LoadSomeTable]
@databaseGUID UNIQUEIDENTIFIER
AS
BEGIN
SET NOCOUNT ON
MERGE Foo
USING #FooStaging AS Source
ON Foo.FooPk = Source.FooPk AND Foo.database_guid = @databaseGUID
WHEN MATCHED THEN
UPDATE SET Bar = Source.Bar
,Qix = Source.Qix
WHEN NOT MATCHED THEN
INSERT (database_guid, FooPk, Bar, Qix)
VALUES (@databaseGUID, FooPk, Bar, Qix); …Run Code Online (Sandbox Code Playgroud) 如何更改 sql server 2008 R2 中的列顺序?
例如:我的餐桌顺序是开斋节------Ename-----Esalary
知道我想要这种格式,例如 Eid---Salary----Ename
谢谢。
database-design sql-server sql-server-2008-r2 alter-table ddl
我有一个使用以下 T-SQL 创建的表:
CREATE TABLE [dbo].[TableName](
[id] [int] IDENTITY(1,1) NOT NULL
PRIMARY KEY CLUSTERED
(
[id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
Run Code Online (Sandbox Code Playgroud)
我今天查看了这张表,注意到 id 列正在跳过值:
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26、27、1027、1028、1029、1030、1031、1032、1033、1034、1035、2034、2035、3034
我不担心这个或任何事情(我的应用程序不关心主键是什么),我只是想知道可能导致这种情况发生的原因。似乎确实有一种模式,每次“跳跃”发生时跳跃 1000。
我的应用程序使用实体框架插入这些行,如果这有什么不同的话。
sql-server entity-framework auto-increment identity sql-server-2012
所以我和几个人就一个给定的数据库应该拥有的事务日志文件的数量进行了争论。我看过几篇帖子说每个数据库应该只有 1 个事务日志文件,但在任何 Microsoft 白皮书中都没有。然而,在许多情况下,我已经看到增加给定数据库的事务日志文件的数量实际上会提高对数据库的写入性能。我应该注意到,所有这些数据库都处于完全恢复模式,并且为 I/O 子系统使用了大型 SAN 框架。如果很多帖子都说事务写入都是串行发生在一个文件中,直到到达文件末尾,那么写入会转移到后续的日志文件中,为什么增加日志文件的数量最终会对磁盘写入速度有非常明显的提高?在最近的案例中,通过将日志文件的数量从 1 增加到 8,我们看到 IO 从 700 Kb/s 跃升至超过 60 Mb/s。任何输入都将不胜感激。
我有一个关于将DATEADD()函数用于标识为的列的问题CHAR (6)
该time_stamp列包含类似131329as 的值hhmmss。每当我尝试创建一个新列来保存列的值time_stamp+ 5 分钟时,我都会收到错误消息。
消息 242,级别 16,状态 3,第 1 行
字符数据类型到日期时间数据类型的转换导致日期时间值超出范围。`
我想要做的是创建一个新列,它比time_stamp. 我现在正在处理一份显示“已完成订单”的报告,但我需要该报告将订单显示为“未完成”至少 5 分钟,然后才能在报告中显示为“已完成”。
sql-server ×9
t-sql ×2
alter-table ×1
datetime ×1
ddl ×1
identity ×1
index ×1
merge ×1
msdtc ×1
performance ×1
restore ×1
ssms ×1