我计划将 SQL Server 2008 标准版迁移到 Linux 服务器实例。我对这个实例有两个问题:
我试图查看我的所有备份是否已压缩。我运行下面的查询来检查但没有得到好的结果:
select top(10) database_name,
case when backup_size = compressed_backup_size then 'Compressed'
else 'Not compressed'
end as Compression,
backup_finish_date
from msdb.dbo.backupset
where database_name ='MyDAtabase'
order by backup_start_date desc
Run Code Online (Sandbox Code Playgroud)
我在用:
Microsoft SQL Server 2008 R2 (SP2) - 10.50.4000.0 (X64)
2012 年 6 月 28 日 08:36:30 版权所有 (c)
Windows NT 6.1(内部版本 7601:Service Pack 1)上的Microsoft Corporation标准版(64 位)
默认情况下,我们设置了压缩,但是一旦我运行该查询,我得到的结果数据库没有被压缩。
我对数据库问题没有太多经验,所以请原谅文字墙,我相信上下文对于理解问题和目标很重要。
我每天都会从另一个系统收到一个 CSV 文件,我希望将其保留在 Microsoft SQL Server 上运行的数据库中。为了实现这一点,我每天安排一个 PowerShell 脚本,它使用 bcp 实用程序将 CSV ( accounts.csv ) “加载”到accounts_stage具有 CSV 文件“精确”布局的表 ( ) 中。此外,我将时间戳“写入”到另一个表 ( import_stage) 中。该accounts_stage表具有触发器集,并且 bcp 配置为触发该触发器。
导入完成后,我想“规范化”数据。对于一个基本示例,假设这仅涉及合同编号(在 CSV 文件中名为“Vnr”的字段),它是一个字符串。我有另一个表 ( contracts),它被触发器填充:
INSERT INTO dzp.contractid(vnr)
SELECT DISTINCT
a.Vnr
FROM dzp.accounts_stage a
WHERE NOT EXISTS(
SELECT id.vnr
FROM dzp.contractid id
)
Run Code Online (Sandbox Code Playgroud)
这应该并且似乎完成了将所有导入到表中的合同编号contractids。contractids.contractId是 BIGINT PRIMARY KEY、IDENTITY 和自动增量。
我将导入元数据添加到我的表中,如下所示:
CREATE TABLE #IMPORTMETADATA
([importid] bigint
,[generated_timestamp] datetime …Run Code Online (Sandbox Code Playgroud) 我需要一些帮助来弄清楚如何将表连接到我的查询中。表名每天都在更改,因为表名中使用了日期,而旧表因不再需要而被删除。
我的查询查找在数据库中有数据并且正在处理的“扫描”(因为缺少更好的词)。
我目前的查询是:
USE RetinaCSDatabase
SELECT S.ScanID [Scan ID], S.PolicyName [Scan], DATEADD(hh, +2, S.StartTime) [Scan Start], A.AssetName [Scanner], COUNT(AIPS.AssetIPID) [Hosts], S.TransactionGroup [Transaction Group ID]
FROM Scan S (NOLOCK)
LEFT JOIN Scanner SC (NOLOCK) ON S.ScannerID = SC.ScannerID
LEFT JOIN Asset A (NOLOCK) ON SC.AssetID = A.AssetID
LEFT JOIN Asset_IP_Scan AIPS (NOLOCK) ON S.ScanID = AIPS.ScanID
WHERE S.ProcessStatus < 2
GROUP BY S.ScanID, S.PolicyName, S.StartTime, A.AssetName, S.TransactionGroup
ORDER BY S.StartTime ASC, S.PolicyName ASC, A.AssetName ASC
Run Code Online (Sandbox Code Playgroud)
我需要加入的是包含仍需要处理的数据的表。这些表以名称“evt_scan_”开头,然后是日期。因此,例如,完整的表名将是“evt_scan_20171222”。2017 年 12 月 22 日执行的扫描数据将在表“evt_scan_20171222”中包含数据,并且可能在接下来的几天表“evt_scan_20171223”中包含数据。所以,我首先需要我的查询来检查表是否存在,然后加入它进行计数并检查接下来的天表是否存在,加入它进行另一个计数并将 …
我有以下存储过程需要将近一个小时才能完成。结果集大约有 20 万台机器。
我所做的只是从链接服务器中提取一组 id,在本地服务器中删除这些 id,然后从远程服务器中提取这些 id 的所有详细信息并插入它们。INSERT 占 90%,DELETE 表占 9%,SELECT INTO 占 1%。
id 是主键/聚集索引。
DECLARE @ProcessDate DATETIME
SET @ProcessDate = CONVERT(VARCHAR(10), DATEADD(DAY, -3,
GETDATE()), 111)
SELECT DISTINCT id
INTO #temp_machines
FROM remote_server.db.dbo.table1
WHERE dt_modify >= @ProcessDate
DELETE FROM local_server.db.dbo.table2
WHERE id IN ( SELECT id FROM #temp_machines )
INSERT INTO local_server.db.dbo.table2
SELECT *
FROM remote_server.db.dbo.table1
WHERE id IN ( SELECT id FROM #temp_machines )
Run Code Online (Sandbox Code Playgroud)
有什么关于提高性能的建议吗?
performance sql-server-2008 sql-server linked-server query-performance
我没有构建它,但我们有一个 32 位的 Windows Server 2008,带有 SQL Server 2008 和 4GB 的 RAM。
我需要将它升级到 SQL Server 2016,以便将日志传送到新服务器,这样我们就可以摆脱困境。
问题 - 看起来 SQL Server 2016 至少需要 Windows Server 2012,它只有 64 位。
问题:如何将数据迁移到 SQL 2016 服务器,停机时间小于 1 天?
有没有办法通过兼容性级别来解决它?
是否有人遇到过在运行 SQL Server 2014 的服务器上卸载使用 SQL Server Express 2008 的应用程序 (arcserv) 的问题?卸载 arcserv 时,它或用户删除了 SQL Server 代理。什么是/是代理恢复过程,
我们的修复工作遇到了多个问题,包括由于缺少权限而无法访问的注册表组件键。
我们的数据库中有两个名为“ClientIncome”和“PartnerIncome”的现有列。我们想添加一个名为“HouseholdIncome”的新列
我们想将“ClientIncome”和“PartnerIncome”中的值添加到新的“HouseholdIncome”列中?
这是我们数据库的一个小例子。
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[Incomes](
[Id] [int] IDENTITY(1,1) NOT NULL,
[ClientIncome] [float] NOT NULL,
[PartnerIncome] [float] NULL,
[HouseholdIncome] [float] NULL
) ON [PRIMARY]
GO
SET IDENTITY_INSERT [dbo].[Incomes] ON
GO
INSERT [dbo].[Incomes] ([Id], [ClientIncome], [PartnerIncome], [HouseholdIncome]) VALUES (1, 130.77, NULL, NULL)
GO
INSERT [dbo].[Incomes] ([Id], [ClientIncome], [PartnerIncome], [HouseholdIncome]) VALUES (2, 294.82, 339.28, NULL)
GO
INSERT [dbo].[Incomes] ([Id], [ClientIncome], [PartnerIncome], [HouseholdIncome]) VALUES (3, 0, NULL, NULL)
GO
INSERT [dbo].[Incomes] ([Id], [ClientIncome], [PartnerIncome], [HouseholdIncome]) …Run Code Online (Sandbox Code Playgroud) 我正在使用 MSSQL 2008。
我的 INSERT 语句如下:
INSERT INTO [DB1].[dbo].[SpotArtSong](ID)
SELECT SNG.S_ID
FROM [DB1].[dbo].[SpotArtSong] SPOT
INNER JOIN [DB2].[dbo].[nt-art] ART
ON ART.Artist_Name LIKE SPOT.[Artist]+'%'
INNER JOIN [DB2].[dbo].[nt-sng] SNG
ON ART.Artist_ID = SNG.Artist_ID
AND left(SNG.SONG_TITLE,10) = left(SPOT.[Song],10)
WHERE spot.BDSID is NULL
Run Code Online (Sandbox Code Playgroud)
[DB1].[dbo].[SpotArtSong] 上的 [ID] 列有一些我试图替换的空值。我找到了替换项,在查看完整的列结果时,我对从 SNG.S_ID 返回的搜索结果感到满意。我正在尝试将该一列插入到 [DB1].[dbo].[SpotArtSong] 上的一列中。
本质上,我将一些数据报废到 [DB1].[dbo].[SpotArtSong] 中,并将其与 [DB2].[dbo].[nt-art] (ART) 和 [DB2] 之间的一些现有生产数据进行匹配.[dbo].[nt-sng] (SNG)。我知道 ART 和 SNG 中的数据是正确的,我正在将其与 SPOT 中报废的数据相关联
失败声明说:
Cannot insert the value NULL into column 'Artist', table
'DB1.dbo.SpotArtSong'; column does not allow nulls. INSERT
fails.
The …Run Code Online (Sandbox Code Playgroud) 我想删除我在 SQL Server 2008 的脚本中使用的临时表。如果不编写几行代码,我找不到删除它的方法。我一直无法找到正常工作的代码。有没有什么办法不用编写代码就可以做到这一点?如果没有,我的方法应该是什么?在新脚本中复制我的代码然后创建同名临时表会有帮助吗?
非常感谢任何帮助/建议/建议。
sql-server ×10
sql-server-2008 ×10
backup ×1
compression ×1
csv ×1
import ×1
linux ×1
performance ×1
t-sql ×1
trigger ×1