在我们当前的设置中,我们在远程托管的 Web 服务器上有一个 SQL Server 2005 实例。我们还有另一个(非 MSSQL)数据库用于我们的 POS 系统,当事情(例如产品信息)发生变化时,它会自动更新 Web 服务器。这有两个问题:
我正在努力的解决方案是在公司总部本地设置第二个 SQL Server 实例(2005 或 2008),将 POS 系统指向它,并使用某种形式的复制来同步它们之间的更改。但是,我不知道我们应该使用合并复制还是事务性的。
合并或事务复制会更好地为我们服务吗?
我们的要求是:
哪一种更符合我们的要求?
replication sql-server-2005 sql-server merge-replication transactional-replication
由于这件事的进展在第一次显然有些难以理解:
我使用带有分离/重新连接方法的复制数据库向导尝试了一个完全无聊的、已经完成了数千次的数据库复制。
复制失败。日志表明它无法对CREATE VIEW特定视图执行操作,因为该视图的数据源不存在。这本身就很有趣,因为源肯定存在,并且有问题的视图在源数据库中完全可用。我还不太清楚这有多重要,因为我还没有弄清楚为什么会产生错误。
这导致从源数据库中删除所有非系统用户关联,留下用户 dbo、information_schema、sys 和 guest。非系统角色也被删除。架构不受影响。
我已经从备份中恢复了损坏的数据库。然而,在学术上,我想知道以下几点:
这是完全可重复的。为了试验这个特定问题,我制作了一些副本(手动),在每种情况下,失败的复制作业都会从源数据库中删除用户和角色。
删除产生错误的视图允许复制完成,并且正如人们所期望的那样,除了保持源数据库不变之外,还生成具有相同数据、用户等的副本。
如果这很重要,我已经尝试重建系统数据库的索引以及损坏的数据库,但没有明显效果。
产生的错误:
1:00:25 PM,5/28/2013 1:00:25 PM,0,0x,ERROR : errorCode=-1073548784 description=Executing the query "CREATE VIEW [Sourcing].[PermittedArrProducts]
AS
SELECT dbo.tblArrProducts.ArrProductID, dbo.tblArrProducts.ArrangementID, dbo.tblArrProducts.ContainerTypeID, dbo.tblArrProducts.Quantity
FROM Sourcing.PermittedArrangements INNER JOIN
dbo.tblArrProducts ON Sourcing.PermittedArrangements.ArrangementID = dbo.tblArrProducts.ArrangementID
" failed with the following error: "Invalid object name 'Sourcing.PermittedArrangements'.". Possible failure reasons: Problems with the query, "ResultSet" property not set correctly, parameters …Run Code Online (Sandbox Code Playgroud) 我有一个 tempdb 增长问题。让我通过提供我的 tempdb 设置来开始一切。

即使没有在数据库/服务器上运行查询,tempdb 的大小也会不断增加,开始迅速,然后缓慢而没有停止。我运行了许多查询来找出正在运行的内容,下面是查询的结果,它实际上给了我可以使用的结果。

可以看出,它们都是内部 spid 的,有什么方法可以找出 tempdb 继续失控的原因以及如何缓解它?对这个问题的任何帮助将不胜感激。
--Query that returned the result set
SELECT session_id,
SUM(internal_objects_alloc_page_count) AS task_internal_objects_alloc_page_count,
SUM(internal_objects_dealloc_page_count) AS task_internal_objects_dealloc_page_count
FROM sys.dm_db_task_space_usage
GROUP BY session_id
HAVING SUM(internal_objects_alloc_page_count) > 0
Run Code Online (Sandbox Code Playgroud) 我有一个场景,由于 8060 的最大行大小限制,某些插入/更新失败。对于具有大量 varchar 250 到 500、数字和日期时间列的表,会发生这种情况。我试图在我的测试环境中重现同样的场景,但无法这样做。
你们知道如何在测试环境中重现它吗?任何示例都非常适合解释。
我的环境是SQL server 2005 Ent。版。我的表有 ~470 列。我知道这是一个糟糕的设计,但它不在我的控制范围内。
我在下面尝试过,但它不起作用:
create table test (col1 varchar(5000), col2 varchar(5000))
insert into test values (replicate('A', 5000), replicate('B', 5000))
Run Code Online (Sandbox Code Playgroud)
即使记录长度大于 8060,它也能成功插入。
SQL Server 2005
我运行了“dbcc SQLPerf(logspace)”,然后进行了两次日志备份,然后再次运行“dbcc SQLPerf(logspace)”。尽管“dbcc opentran (foo)”表示没有活动的打开事务,但与使用的 48.55% 相比没有变化。
这是否意味着存在阻止日志可用空间在备份后更改的非活动打开事务?
谢谢。
长话短说,我们这里有一个数据库,用于管理一些员工数据,例如电子邮件、名字、姓氏等。我们公司购买了这个基于 SAP 的费用报告系统:| 这需要以非常奇怪的格式导出基于员工的数据。在不涉及太多细节的情况下,此数据的导出总共需要 137 列,其中许多列具有空值。
简单 我整理了一个查询,该查询基本上从我们的数据库中提取了这些信息,并设置了一些需要的常量。这个查询在这个问题中是什么并不相关,它只是一个SELECT提取一些数据的语句。
然后,我需要每天使用特定的文件名和管道分隔格式将其导出,效果如下:
--employee export
DECLARE @FileName varchar(500)
SET @FileName = (SELECT '\\someFileServer\Public\someFolder\employee_p06010603ace_305_202105_' + REPLACE(REPLACE(REPLACE(CONVERT(VARCHAR(19), CONVERT(DATETIME, getdate(), 112), 126), '-', ''), 'T', ''), ':', '') + '.txt')
DECLARE @sql varchar(8000)
DECLARE @header varchar(8000)
SET @sql= 'bcp "exec [MyDBServer].[MyDbName].dbo.ConcurEmployeeExport" queryout ' + @FileName + ' -c -T -t "|"'
Exec master..xp_cmdshell @sql
Run Code Online (Sandbox Code Playgroud)
完美,我得到这样的行:
305|Jon| |Doe|10217487|10217487@t|
305|Steve| |Smith|10217522|10217522@t|
Run Code Online (Sandbox Code Playgroud)
大约有 130 多列,不想显示所有这些,因为它无关紧要。我以为我已经完成了,直到实现协调员说 yes 看起来不错,但第一行需要从这个奇怪的行开始并带有一些值。
这意味着我拥有的结果查询应该有一个额外的行,其中包含一些值......简单我以为我会联合他们想要的......所以我做到了。
除了UNION ALL我必须输入一些额外的空值来匹配我的查询中的列数。问题是当我运行导出时,我最终得到了一堆用管道分隔的空列,我最终得到了这个:
100|0|SSO|UPDATE|EN|N|N| | | | | | …Run Code Online (Sandbox Code Playgroud) 由于 MSDN 没有说太多,如果我执行以下查询会发生什么?
update claims set status='Awaiting Auth.'
where status = 'Approved'
Run Code Online (Sandbox Code Playgroud)
我可以使用ClaimStatusName链接表的列dimClaimStatus来更新通过外键引用的主表吗?
视图本身查询多个表,主表是tabData,我也想用上面的查询更新。我想改变fiClaimStatus在tabData从FK该手段 Approved在引用表dimClaimStatus来Awaiting Auth.。它是这样工作的吗?
tabData 中的每一行只能有一个视图行。
这是视图:
CREATE VIEW [dbo].[Claims]
AS
SELECT mu.MarketUnitName AS MarketUnit,
c.CountryName AS Country,
gsp.GSPName AS GSP,
gsp.WCMSKeyNumber AS GspNumber,
sl.SLName AS SL,
sl.WCMSKeyNumber AS SlNumber,
m.ModelName AS Model,
m.SalesName AS [Model-Salesname],
s.ClaimStatusName AS [Status],
d.Work_Order AS [Work Order],
d.SSN_Number AS IMEI,
.... more columns ....
idData, -- …Run Code Online (Sandbox Code Playgroud) 我有一个特定的表,列数据类型为 float(53),非空。根据Microsoft 文档,可以存储在此数据类型中的 0 以上的最小值是 2.23E-308。但是,我能够存储一个小得多的值,小到 4.94065645841247E-324。请参阅下图,证明 SQL Server 可以存储和检索文档中指定范围之外的值:
当我运行如下查询时:
select 4.7E-309
Run Code Online (Sandbox Code Playgroud)
SQL Server 说: Warning: the floating point value '4.7E-309' is too small. It will be interpreted as 0.
截图中插入的值是通过 C++ ADO 接口使用记录绑定插入的。
我有几个问题:
为什么 SQL Server 处理文档中指定范围之外的值?同样,当查询中存在“超出范围”值时,为什么 SQL Server 会发出警告,而数据库显然可以存储超出该范围的值?
浮点数是如何存储在 SQL 数据库表上的,是否有任何 SQL 服务器设置会严格执行一个 SQL 服务器而不是另一个 SQL 服务器上的范围?
我正在尝试解决 ADO 记录绑定(可能)由于值超出范围而被拒绝的问题,但是我所有重现该问题的测试(在不同的 SQL 服务器实例上)表明 SQL 接受的值远远超出文档中指定的限制。任何有关如何在 SQL 中存储和处理浮点的信息(特别是与 .NET 或 C++ 之类的东西有关)将不胜感激。
我已经使用 SQL Server 2005 和 2008 对此进行了测试,结果相同。
我最近停止接收 sql 代理作业失败通知。经过调查,报告的错误是:
The mail could not be sent to the recipients because of the mail server failure. (Sending Mail using Account 1 (2017-08-16T02:40:14). Exception Message: Could not connect to mail server. (No such host is known).
邮件帐户设置没有改变,我确认它看起来是正确的。此外,我可以使用SSMS 中的“发送测试电子邮件...”功能成功发送和接收电子邮件。那么为什么工作不能发送电子邮件呢?
由于“发送测试电子邮件...”功能将电子邮件排队,因此以这种方式发送它与发送它的作业相比似乎没有权限问题。此外,这表明这不是防火墙问题。所以唯一的区别是一天中的时间......作业在半夜运行......但我想不出任何系统配置会在那时发生变化。
有什么其他想法要检查吗?
我试图更好地理解 SQL 中的数字类型,并且读到十进制类型总是需要 17 个字节。但是,MS Docs列出了一个表格,指示使用的空间量取决于小数的精度。所以我尝试使用该datalength功能对其进行测试。
create table tbl_TestDec(dec1 decimal(19,4), dec2 decimal(20,4), dec3 decimal(9,4))
insert into tbl_TestDec
select 1, 1, 1
select datalength(dec1), datalength(dec2), datalength(dec3) from tbl_TestDec
Run Code Online (Sandbox Code Playgroud)
这输出:
5 5 5
Run Code Online (Sandbox Code Playgroud)
我期待9 13 5或17 17 17。我正在使用 SQL Server 2005。所有小数都是 vardecimal 还是我误解了 datalength 函数?
sql-server-2005 ×10
sql-server ×9
auto-growth ×1
bcp ×1
datatypes ×1
decimal ×1
disk-space ×1
format ×1
replication ×1
t-sql ×1
tempdb ×1
update ×1
view ×1