我正在尝试在两个 SQL Server 2008 R2 数据库之间设置事务复制,无论我尝试什么,它似乎都不起作用,而且我不知道去哪里寻找有关可能发生的事情的更多信息错误的。
我已经通过运行两台服务器上的向导创建了发布和订阅,并且一切似乎都已启动并正在运行 - 我在发布服务器上收到成功消息,表明它已创建发布并将文章添加到发布等。我也订阅订阅数据库成功订阅此发布。复制监视器显示一切正常 - 但即使我在发布数据库中手动添加/修改数据,发布和订阅的同步状态也始终显示为“没有可用的复制事务”。
我尝试从两台服务器中删除复制数据,从备份中删除和重新创建数据库,重新初始化订阅数据库等,但都没有任何乐趣。
任何有关在哪里寻找有关可能发生的事情的更多信息的建议将不胜感激。
我将数据库从 SQL Server 2005 移到 SQL Server 2012。有什么办法可以恢复新服务器上的所有登录信息?
我一直在尝试让以前工作的复制开始工作。
我尝试了很多设置,但我似乎无法让它工作。
这是场景。我从目标数据库中删除了所有 FK 约束(称之为 DestDB)。
然后我重新初始化我的复制,当我运行时,我收到这个(去标识化)错误:
ALTER TABLE 语句与 FOREIGN KEY 约束“FK_TableOnlyInDestDB_MyReplicatedTable”冲突。冲突发生在数据库“DestDB”、表“SomeSchema.MyReplicatedTable”、“MyReplicatedTableId”列中。(来源:MSSQLServer,错误号:547)
它让我发疯,因为该数据库中不存在指示的 FK。
现在,我确实从另一个数据库复制了这个数据库(备份和恢复)。所以我唯一能想到的是它以某种方式穿越了溪流。
但这似乎不太可能。
任何想法都会很棒!
注意:这是我运行的查询,以确保我没有 FK(它没有返回任何行):
use DestDB
SELECT f.name AS ForeignKey,
OBJECT_NAME(f.parent_object_id) AS TableName,
COL_NAME(fc.parent_object_id, fc.parent_column_id) AS ColumnName,
OBJECT_NAME (f.referenced_object_id) AS ReferenceTableName,
COL_NAME(fc.referenced_object_id, fc.referenced_column_id) AS ReferenceColumnName
FROM sys.foreign_keys AS f
INNER JOIN sys.foreign_key_columns AS fc ON f.OBJECT_ID = fc.constraint_object_id
Run Code Online (Sandbox Code Playgroud)
我还检查以确保有问题的 FK 不在源表上(在我从中复制的数据库中)。
我也试过: EXEC sp_msforeachtable 'ALTER TABLE ? NOCHECK CONSTRAINT all'
也试过 Dropping MyReplicatedTable。删除就好了,复制重新创建了它。(但仍然给了我错误。)
我尝试创建一个空数据库作为订阅者。效果很好,所以是 DestDB 中的某些东西导致了问题,但 ERROR 中的 FK 不存在。
当我有一个查询来检查uniqueidentifer具有空值的表中是否不存在类型的列时,我不会得到任何结果。如果子查询不返回空值,则它工作正常,并且仅在使用not in.
我知道我可以只not null检查我的子查询,但我很好奇为什么这不起作用。
查询示例:
select a.guid from tableA a where a.guid not in (select b.guid from tableB AS b)
Run Code Online (Sandbox Code Playgroud)
工作测试:
select 1 where newid() not in (select newid())
Run Code Online (Sandbox Code Playgroud)
破碎测试:
select 1 where newid() not in (select null)
Run Code Online (Sandbox Code Playgroud) 我一直用这个名字FK_CurrentTableName_ReferencedTableName。我只是碰到了在那里我有一个表的情况CreatedById,并ModifiedById都指向同一个(用户)表,所以这个命名约定将无法正常工作。
将我所有的参考约束更改为实际上更好FK_CurrentTableName_CurrentColumnName吗?或者我应该保持不变,除非有冲突然后做FK_CurrentTableName_CurrentColumnName_ReferencedTableName或FK_CurrentTableName_ReferencedTableName_CurrentColumnName?
我搜索并阅读了相互矛盾的意见。对于 SQL Server,有标准吗?
TechNet 文章“优化链接到 SQL Server 的 Microsoft Office Access 应用程序”建议向从 MS Access 链接的 SQL Server 表添加rowversion列。从支持并发检查部分:
Office Access 会自动检测表何时包含此类列,并在影响该表的所有 UPDATE 和 DELETE 语句的 WHERE 子句中使用它。这比验证所有其他列仍然具有与上次刷新动态集时相同的值更有效。
好消息是每个 UPDATE/DELETE 语句和绑定表单都将从这个添加中受益,而无需在 MS Access 中进行任何更改(除了重新链接表)。
直到最近我才知道这个功能。我正在考虑向我从 MS Access 链接到的 SQL Server 中的每个表添加一个命名的rowversion列。 在我这样做之前,我应该注意哪些缺点?
显然会有存储要求和性能影响,但我认为这些可以忽略不计。此外,其中一些表是合并复制场景中的项目;这有什么区别吗?
ms-access sql-server concurrency alter-table merge-replication
当我尝试在 SQL Server 2016 中创建 SOAP 端点时:
CREATE ENDPOINT Weather_CurConditions
STATE = Started
AS HTTP
(
PATH = '/CurrentConditions',
AUTHENTICATION = (INTEGRATED),
PORTS = (CLEAR), CLEAR_PORT = 8080,
SITE = '*'
)
FOR SOAP
(
WEBMETHOD 'GetWeather'(NAME = 'Weather.dbo.usp_GetWeather'),
WSDL = DEFAULT,
DATABASE = 'Weather',
NAMESPACE = DEFAULT
);
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
消息 7878,级别 16,状态 1,第 1 行
此版本的 SQL Server 不支持此“CREATE ENDPOINT”语句。
这是输出SELECT @@VERSION:
Microsoft SQL Server 2016 (RTM) - 13.0.1601.5 (X64)
2016 年 4 月 29 日 23:23:58 …
我想恢复数据库,这需要几分钟的时间。
我使用的是具有 4 个 CPU 和 16GB 内存的虚拟机,我想知道 CPU/内存与恢复数据库进程之间是否有任何关系?
例如:如果我将CPU增加到16个,内存增加到48GB,是不是会更快?
然而:
以 SQL Server 2008 开头的日期字段类型
给定一个表:
CREATE TABLE dbo.MyTable
(
Code int NOT NULL,
DateCode datetime NOT NULL
)
CONSTRAINT [PK_MyTable] PRIMARY KEY CLUSTERED
(
[Code] ASC, [DateCode] DESC
);
Run Code Online (Sandbox Code Playgroud)
约束 DateCode 只是一个日期的最佳方法是什么?
它必须允许没有时间部分的日期。
2017-01-02
2017-01-02 00:00:00.000
20170102
Run Code Online (Sandbox Code Playgroud)
现在我正在使用:
ALTER TABLE dbo.MyTable ADD CONSTRAINT [CHK_MyTable_DateCode]
CHECK ([DateCode] = DATEADD(DAY, 0, DATEDIFF(DAY, 0, [DateCode])));
Run Code Online (Sandbox Code Playgroud)
但是,我想知道是否有最好的/简短的方法来完成它。
sql-server ×9
foreign-key ×2
replication ×2
alter-table ×1
concurrency ×1
constraint ×1
datetime ×1
ms-access ×1
null ×1
restore ×1
subquery ×1