小编Aar*_*and的帖子

复制不是复制

我正在尝试在两个 SQL Server 2008 R2 数据库之间设置事务复制,无论我尝试什么,它似乎都不起作用,而且我不知道去哪里寻找有关可能发生的事情的更多信息错误的。

我已经通过运行两台服务器上的向导创建了发布和订阅,并且一切似乎都已启动并正在运行 - 我在发布服务器上收到成功消息,表明它已创建发布并将文章添加到发布等。我也订阅订阅数据库成功订阅此发布。复制监视器显示一切正常 - 但即使我在发布数据库中手动添加/修改数据,发布和订阅的同步状态也始终显示为“没有可用的复制事务”。

我尝试从两台服务器中删除复制数据,从备份中删除和重新创建数据库,重新初始化订阅数据库等,但都没有任何乐趣。

任何有关在哪里寻找有关可能发生的事情的更多信息的建议将不胜感激。

replication sql-server sql-server-2008-r2

5
推荐指数
1
解决办法
9113
查看次数

将登录名转移到另一台服务器

我将数据库从 SQL Server 2005 移到 SQL Server 2012。有什么办法可以恢复新服务器上的所有登录信息?

sql-server-2005 sql-server sql-server-2012

5
推荐指数
1
解决办法
509
查看次数

由于外键不存在,复制失败

我一直在尝试让以前工作的复制开始工作。

我尝试了很多设置,但我似乎无法让它工作。

这是场景。我从目标数据库中删除了所有 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 不存在。

replication foreign-key sql-server sql-server-2012

5
推荐指数
1
解决办法
5241
查看次数

我的日志文件很大,我该怎么办?

我的事务日志比我希望的要大,我想知道如何解决这个问题。

sql-server transaction-log

5
推荐指数
0
解决办法
333
查看次数

查找包含子查询的 GUID 的“不在”空值的查询不返回任何结果

当我有一个查询来检查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)

null sql-server uniqueidentifier subquery

5
推荐指数
3
解决办法
5262
查看次数

为什么我无法查看 Web 应用程序创建的 SQL Server 数据库?

我有一个 ASP.NET MVC Web 应用程序部署到 Windows Server 2012 机器上的 IIS。当应用程序第一次启动时,它会在必要时通过实体框架创建它需要的数据库和表。这一切正常,现在我想通过 SQL Server Management Studio 对数据库进行一些管理。但是,当我打开该工具时,我只能看到系统数据库。如果我从连接字符串中删除“User Instance=true”并让应用程序再次创建数据库,我就可以看到数据库。

当User Instance=true 在连接字符串中时,为什么我无法查看Web 应用程序创建的数据库? 如果我使用具有所有角色的帐户通过 Management Studio 查看服务器实例,我希望它能够查看任何和所有数据库。

一些可能有帮助的细节:

该应用程序在 Web.config 中使用以下连接字符串:

<add name="DefaultConnection" connectionString="Data Source=.\SqlExpress; 
  Initial Catalog=Foo.Dashboard;  Integrated Security=SSPI;User Instance=true" 
  providerName="System.Data.SqlClient" />
Run Code Online (Sandbox Code Playgroud)

在IIS中,应用程序池设置为与身份运行LocalServiceLoad User Profile设置True。在 SQL Server Express 上,我们为该Local Service帐户添加了一个登录名并为其分配了dbcreator角色。当应用程序启动时,它就能够创建数据库和表,一切似乎都在运行。

然后我使用远程桌面连接到服务器并打开 SQL Server Management Studio。要连接到数据库,我输入.\SQLEXPRESS服务器名称并使用Windows Authentication. 然后我连接并且只看到系统数据库。我已将所有可能的数据库角色添加到我的登录名中,并且我看到我VIEW ANY DATABASE在有效选项卡中拥有权限。

sql-server ssms entity-framework t-sql sql-server-express

5
推荐指数
1
解决办法
2836
查看次数

减少数据库大小以还原到 SQL Server Express

我有一个 SQL Server 2008 R2 数据库,大约 15 GB。

我想为使用 SQL Server 2008 R2 Express 的合作伙伴复制它。

我删除了很多表和行,现在我确定数据小于2 GB。

我做了一个备份,发送给合作伙伴,他试图恢复它,但他收到一个错误:

CREATE DATABASE 或 ALTER DATABASE 失败,因为由此产生的累积数据库大小将超过每个数据库 10240 MB 的许可限制

我做错了什么?

sql-server sql-server-2008-r2

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

高效删除表中 90% 的数据

我正在研究一个删除 90% 表数据的过程,因为测试只需要 10%。

我发现的最好方法包括将表的 10% 的行存储到临时表中。

当前方法

SELECT TOP 10 PERCENT *
INTO #temp_some_table
FROM some_table (nolock)
ORDER BY some_column DESC

TRUNCATE TABLE some_table 

INSERT INTO some_table 
SELECT *
FROM #temp_some_table 

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

此方法会填满 tempdb 并导致磁盘也填满。

问题

有没有更有效的方法来删除表中 90% 的数据 ex ( DELETE TOP 90 PERCENT FROM sometable)

或者

有没有办法使用批处理将 10% 的 some_table 数据插入到临时表中?像这样的东西:

DECLARE @r INT;

WHILE @r > 0
BEGIN

BEGIN TRANSACTION;

INSERT INTO [dbo].[##temp_cds_Basket]
SELECT TOP 10 PERCENT *
FROM [dbo].[cds_basket] s

SET @r …
Run Code Online (Sandbox Code Playgroud)

performance sql-server delete sql-server-2008-r2

5
推荐指数
1
解决办法
1450
查看次数

查询真实的物理数据库文件大小

关于查询数据库文件大小...

1) 大多数(如果不是全部)这些答案并不总是与文件资源管理器中显示的物理文件大小匹配:

/sf/ask/416175231/

接受的答案报告:      从接受的答案

对比

2)这篇文章似乎与文件资源管理器中显示的物理文件大小相符:

    在此处输入图片说明

是否有一个查询可以在不依赖 dm_os_performance_counters 的情况下报告物理大小?第一组查询是否忽略了可用空间?

文件资源管理器报告的实际大小:

    在此处输入图片说明

为什么 Tempdb 显示的数据和日志文件大小都存在差异,如图所示?

Microsoft SQL Server 2012 (SP3) (KB3072779) - 11.0.6020.0 (X64)

sql-server database-size

5
推荐指数
1
解决办法
8794
查看次数

如何在 SQL Server 2016 中创建 SOAP 端点?

当我尝试在 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 …

sql-server

5
推荐指数
1
解决办法
8906
查看次数