我正在测试不同场景中的最少日志记录插入,并且从我读到的 INSERT INTO SELECT 到带有非聚集索引的堆中,使用 TABLOCK 和 SQL Server 2016+ 应该最少记录,但是在我的情况下,这样做时我得到完整记录。我的数据库处于简单恢复模型中,我成功地在没有索引和 TABLOCK 的堆上获得了最少记录的插入。
我正在使用 Stack Overflow 数据库的旧备份进行测试,并使用以下架构创建了 Posts 表的副本...
CREATE TABLE [dbo].[PostsDestination](
[Id] [int] NOT NULL,
[AcceptedAnswerId] [int] NULL,
[AnswerCount] [int] NULL,
[Body] [nvarchar](max) NOT NULL,
[ClosedDate] [datetime] NULL,
[CommentCount] [int] NULL,
[CommunityOwnedDate] [datetime] NULL,
[CreationDate] [datetime] NOT NULL,
[FavoriteCount] [int] NULL,
[LastActivityDate] [datetime] NOT NULL,
[LastEditDate] [datetime] NULL,
[LastEditorDisplayName] [nvarchar](40) NULL,
[LastEditorUserId] [int] NULL,
[OwnerUserId] [int] NULL,
[ParentId] [int] NULL,
[PostTypeId] [int] NOT NULL,
[Score] [int] NOT NULL,
[Tags] …Run Code Online (Sandbox Code Playgroud) 我正在考虑使用 SQL Server 2012 中的 SQL Server 可用性组将我们主数据库上的报告卸载到第二个只读服务器,该服务器通过可用性组保持同步。
我的问题是,当我在只读服务器上运行大型报告时,如果在读/写版本上运行通常会产生大量阻塞,锁是否会从只读服务器传播回读/写服务器?还是锁只保留在只读服务器上,只会导致等待同步的数据阻塞?
尝试查看拥有只读服务器是否可以解决我遇到的一些问题。
我正在尝试在 VM 环境中配置可用性组,以便可以运行一些测试。
我想我已经正确创建了组,我可以在两台服务器上看到 Always on 组。但是,当我查看该组的仪表板时,它出现以下错误
可用性副本已断开连接
此次要副本未连接到主要副本。连接状态为 DISCONNECTED。
我已经检查了两台服务器上的端点,它们看起来是正确的。没有防火墙在运行,两台服务器都可以看到对方。调试此类错误的最佳方法是什么?
下面是我用来设置所有这些的 TSQL
主服务器
CREATE ENDPOINT dbm_endpoint
STATE=STARTED
AS TCP (LISTENER_PORT=7022)
FOR DATABASE_MIRRORING (ROLE=ALL)
GO
Run Code Online (Sandbox Code Playgroud)
辅助服务器
CREATE ENDPOINT dbm_endpoint
STATE=STARTED
AS TCP (LISTENER_PORT=5022)
FOR DATABASE_MIRRORING (ROLE=ALL)
GO
Run Code Online (Sandbox Code Playgroud)
主服务器
CREATE AVAILABILITY GROUP AG1
FOR
DATABASE TestDb
REPLICA ON
'SQL1' WITH
(
ENDPOINT_URL = 'TCP://sql1.sql.sandbox.net:7022',
PRIMARY_ROLE ( ALLOW_CONNECTIONS = READ_WRITE),
SECONDARY_ROLE (ALLOW_CONNECTIONS=READ_ONLY),
AVAILABILITY_MODE = ASYNCHRONOUS_COMMIT,
FAILOVER_MODE = MANUAL
),
'SQL2' WITH
(
ENDPOINT_URL = 'TCP://sql2.sql.sandbox.net:5022',
PRIMARY_ROLE ( ALLOW_CONNECTIONS = READ_WRITE),
SECONDARY_ROLE (ALLOW_CONNECTIONS=READ_ONLY), …Run Code Online (Sandbox Code Playgroud) 我有一个 2 节点 Windows 故障转移集群(Windows Server 2016、SQL Server 2017),在光纤连接的共享存储上有一个仲裁磁盘见证。
通过此 Quorum 设置,心跳在自己的网络上有多重要,为什么?
我是否正确地认为,如果网络出现故障,Quorum Disk Witness 将停止尝试故障转移的节点,因为它仍然会投票认为两个节点都在线,即使节点本身说另一个离线?
在这种情况下,我看不出在自己的网络上拥有心跳有什么好处。我完全明白将两个 NIC 组合在一起可以提供弹性,但是分离心跳(据我所知)并没有为这种法定人数设置提供多少。
我在同一台机器上有两个 SQL Server 实例,一个是 2008 年,一个是 2016 年。两个实例都有一个链接服务器连接到同一个 Oracle 12 服务器。
如果我运行以下查询,2008 年将 1.23 作为 VARCHAR 返回,但 2016 年将其作为浮点数返回
SELECT * INTO #tst FROM OPENQUERY(JOHPROD,'SELECT 1.23 FROM dual')
SELECT t.Name,* FROM tempdb.sys.columns c
INNER JOIN sys.types t ON t.system_type_id = c.system_type_id
WHERE [object_id] = OBJECT_ID(N'tempdb..#tst');
Run Code Online (Sandbox Code Playgroud)
两个实例都指向同一个 Oracle 服务器,并且都使用同一个 Oracle ODBC 驱动程序。
两个链接服务器都具有相同的定义...
EXEC master.dbo.sp_addlinkedserver @server = N'ORAPROD', @srvproduct=N'Oracle', @provider=N'OraOLEDB.Oracle', @datasrc=N'ORAPROD'
EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname=N'ORAPROD',@useself=N'False',@locallogin=NULL,@rmtuser=N'ORAUSER',@rmtpassword='########'
GO
EXEC master.dbo.sp_serveroption @server=N'ORAPROD', @optname=N'collation compatible', @optvalue=N'false'
GO
EXEC master.dbo.sp_serveroption @server=N'ORAPROD', @optname=N'data access', @optvalue=N'true'
GO
EXEC master.dbo.sp_serveroption …Run Code Online (Sandbox Code Playgroud)