我需要为我投入生产的系统设置一个好的数据库集群解决方案。我希望从专家那里得到一些建议,因为我主要是一名开发人员而不是数据库管理员。
背景
我和我的团队正在用基于 .NET 的系统替换旧系统。目前,我们正在做并行测试,并在慢慢将用户迁移到新系统;然而,令我震惊的是,一旦 thigs 真正开始运行,我们当前的数据库解决方案不足以处理负载。现在,我在一台运行 SQL Server 2008 R2 的 Dell PowerEdge 服务器上拥有我们的整个数据库。它适用于开发和基本测试,但是当我们决定拔掉旧系统的插头并完全使用新系统时,我们将需要诸如故障转移、负载平衡、冗余等之类的东西。我从来没有实施过集群之前,因为我工作的任何地方都已经实施了,而不是我的责任来维护。由于我们正在从头开始实施基于 PC 的系统,因此我正在寻找一个起点。
建议
您对我目前的情况有什么建议:我们有大约 50 个内部用户,他们将负责从数据输入、索赔处理等方面的工作,并且可能有大约 1500-2000 个来自外部的并发连接。进行虚拟设置还是物理设置更好?光纤通道还是SATA?
我需要将 1.5 亿行只有 int/bigint 列从一个 SQL 实例导出到另一个。我使用 BCP queryout 导出行和 BULK INSERT 将行导入另一个表。
我将 1.5 亿行拆分为 3 个 BCP 导出文件,每个文件有 5000 万行和 3 个 BULK INSERTS。它有效(15 分钟 BCP 输出/40 分钟批量插入),但我宁愿只导出一个文件并导入一个文件。
这在技术上是可行的,还是我可能会遇到大量行的问题?我从未从 BCP 文件中导入超过 5000 万行,我不确定这如何解决。BCP 导出或导入有限制吗?
谢谢,
假设我有这个假设的模式:
源 (OLTP) 数据库:
Table Orders
------------
OrderID int IDENTITY (PK),
CustomerID int NOT NULL,
OrderAmount decimal NOT NULL
Run Code Online (Sandbox Code Playgroud)
目的地 (DSS) 数据库:
Table Activity
--------------
ActivityID int IDENTITY (PK),
PersonID int NOT NULL,
Amount decimal NOT NULL
Table ActivityOrderImport
--------------------
ActivityID int NOT NULL,
SourceOrderID int NOT NULL
Table CustomerMapping
---------------------
CustomerID int NOT NULL,
PersonID int NOT NULL
Run Code Online (Sandbox Code Playgroud)
显然,随着更多的转换,真正的交易要复杂得多。但暂时假设 ETL 所做的只是将来自外部实体的特定事务(“订单”)合并到跟踪通用“活动”的 DSS 中。外部客户和 DSS 人员之间的链接位于 CustomerMapping 表中。
“导入”表的想法是在出现问题时提供某种审计跟踪。我们对源系统没有太多控制权,并且知道它有点不稳定。因此,能够了解任何给定活动的起源对我们来说非常重要。
现在,有一个使用 DDL 执行此操作的脚本,如下所示:
ALTER TABLE Activity
ADD OrderID int NULL
MERGE …Run Code Online (Sandbox Code Playgroud) 我在我的 Web 应用程序后端使用 SQL Server 2008。显然,每当有多个插入场景时,我都会遍历 C# 代码中的所有记录。我从未尝试过使用 XML 进行多次插入。我认为在阅读了许多关于使用 SQL Server 2008 进行 XML 操作的博客之后,这个过程非常繁琐..所以我的问题是..
我熟悉 bcp 实用程序,我有一个包含日期时间数据的大表,我以多种方式 bcp 输出它:本机、字符、分隔。
然后我 bcp 到一个与原始表具有相同列/格式的截断表中,但是,我得到如下错误:
----------------
Starting copy...
SQLState = 22008, NativeError = 0
Error = [Microsoft][SQL Server Native Client 10.0]Invalid time format
SQLState = 22008, NativeError = 0
Error = [Microsoft][SQL Server Native Client 10.0]Invalid time format
SQLState = 22008, NativeError = 0
Error = [Microsoft][SQL Server Native Client 10.0]Invalid time format
SQLState = 22008, NativeError = 0
Error = [Microsoft][SQL Server Native Client 10.0]Invalid date format
SQLState = 22008, NativeError = 0
Error = [Microsoft][SQL …Run Code Online (Sandbox Code Playgroud) 从的TechNet给我的感觉,我要么必须明确地设置想要的填充因子或当我不指定它,默认的填充因子0 choosen。
对于我知道添加行的表,填充因子 0 不是一个好的选择。有没有办法重建索引,以便使用最后一个显式索引?
BTW:我认为这应该是默认设置。
我有几十个表,其中有数据,包括核心数据集,然后是公司特定数据。
我永远无法删除核心数据集,这对所有公司都是全球性的。
但我希望能够帮助识别孤儿数据。
处于非活动状态但尚未删除的数据。
我不需要查询,我可以自己弄清楚。
只是关于最佳实践的一些想法,以帮助识别然后摆脱孤立数据,这有望减少数据库大小。
谢谢
我有一个在字段中存储 XML 值的表:OtherData。
来自一行的 XML 值:
< file path="C:\WINDOWS\system32\svchost.exe" />
Run Code Online (Sandbox Code Playgroud)
我想选择所有具有像“%svchost%”这样的属性路径的行
执行此操作的正确 SQL 查询是什么?
我正在寻求帮助来编写此查询。我在下面包含了一些示例数据。我最初的前提是从第 13 行开始的所有值都是动态值,前 12 行是静态值。我知道我想用来计算每一行值的公式。
以下是我认为的 DDL
CREATE VIEW [v_AMP_C] AS
SELECT in.I_Date ,--Date
in.I_O_P ,--Money
in.I_O_H ,--Money
in.I_O_L ,--Money
in.I_C_O ,--Money
c.AMPS12_C --Money
FROM dbo.IC_Raw_In in
INNER JOIN dbo.AMPS12_C c ON in.I_Serial = c.i_serial
Run Code Online (Sandbox Code Playgroud)
并且通过dbo.IC_Raw_In在除 I_Date 之外的所有列上使用数据类型为 Money的大容量插入将数据导入到此表中。
然后当我运行这个查询时,SELECT * FROM v_AMP_C我得到了下面的输出
I_Date I_O_P I_O_H I_O_L I_C_O AMPS12_C
01/10/11 509.75 515 508 512.45 512.45
01/10/11 511.7 511.7 506.1499 506.5499 509.4999
01/10/11 507.1499 510.25 507.1499 510.25 509.7499
01/10/11 510 512.3499 509.2999 512.3499 510.3999
01/10/11 512.5 512.5 …Run Code Online (Sandbox Code Playgroud) 我们计划为 SQL Server 2005/2008 故障转移群集设置静态端口。关于为每个集群的 4 个节点选择/选择什么端口的任何指南?(主动/主动)我还认为一些应用程序需要了解静态端口。了解哪个应用程序设置为使用来自 SQL 实例的默认端口的最佳方法是什么?一般来说,在 sql server 故障转移群集上实现端口号更改的最佳方法是什么?
sql-server-2008 ×10
sql-server ×4
bcp ×2
clustering ×2
xml ×2
bulk ×1
etl ×1
index ×1
insert ×1