我们有一个 ETL 过程,它将大量数据插入到表中。该数据库设置为简单恢复模型,并且事务日志增长很多。我在想将这个数据库设置为批量日志恢复模型会有帮助吗?我们每天都会进行完整备份。那么,与简单恢复模型相比,批量日志恢复模型中是否存在一些未记录的操作?
我目前正在研究为相当大(800GB 且不断增长)的 SQL Server 数据库实施分区。表中的所有数据都与日期/时间相关,但是该日期/时间通常在另一个表中引用。例如,我有:
*Instances*
Timestamp (partition key!)
LocationID
...
*Events*
InstanceID
...
*Location*
ID
...
Run Code Online (Sandbox Code Playgroud)
这里,实例包含分区键。这引用了一个位置(LocationID > Location.ID)。此外,还有引用实例的事件表(InstanceID > Instance.ID)。
有什么方法可以将分区应用于此结构,而不必对表进行非规范化并将“时间戳”列复制到各处?
我正在使用 SQL Server 2008 R2。提前致谢。
我有一个用户需要对我管理的 SQL Server 2008 数据库进行查询。他们有权编辑数据,但我希望他们不能直接针对表格进行编辑(即,我希望他们使用为其提供的应用程序)。
我想做的是给他们一个只读 ODBC 连接,并在其上挂一个 MS Access MDB/ACCDB,让他们查询自己想要的内容,而不会意外地“更新”数据。
有没有办法做到这一点,或者我必须创建一个 RO 用户供他们使用,然后威胁他们,如果他们使用常规 RW 帐户连接,会带来很大的痛苦?在这种情况下,为什么不让他们在应用程序之外编辑数据时承受很大的痛苦呢?
我使用的是 SQL Server 2008,有一个用于报告目的的表,其中包含 500,000 条记录,这些记录很容易达到数百万条。该表将采用全文索引来快速搜索少数列。
由于这是报告表而不是源事务表,因此有时会添加新记录,而有时由于源表中发生的更改而必须删除现有记录。
我的问题是关于构建(正在进行的)报告表并维护该表的全文索引的最佳方法。
添加全文索引后,我应该:
到目前为止,我在研究时已经看到了这些文章,但这种情况的最佳实践并不明显。
我在五个不同的地理位置有五个具有相同架构的 SQL Server 数据库。这些位置定期向中央服务器发送备份,我在五个各自的数据库中恢复这些备份。
现在的要求是,这五个数据库的数据必须合并到一个数据库中进行整合。
任何有关解决方案的建议都是非常受欢迎的。
如何在消息窗格上打印每个查询的执行时间?例如,Select * from tbl1运行 10 分钟,然后Select * from tbl2运行 15 分钟,依此类推。
Select * from tbl1
Go
Select * from tbl2
Go
Select * from tbl3
Go
Run Code Online (Sandbox Code Playgroud) 我正在将数据库从实时环境复制到测试环境。我已经从实时数据库创建了一个 .bak 文件并将该文件复制到测试服务器。
问题是,我应该使用“恢复数据库”将其添加到测试服务器还是“恢复文件和文件组”?
(有时数据库已经存在,有时则不存在。在任何一种情况下,我只想拥有原始数据库的克隆,而不关心覆盖)
经过一番尝试后,它似乎都达到了我想要的效果 - 那么真正的区别是什么,我针对我的情况使用哪种方法重要吗?
我必须处理以下情况:
目前我们有
正在使用。所有服务器都是在VMWare 中运行的虚拟服务器。
我们想要设置一个新的集群(SQL Server 2014 Enterprise)。第一步,将迁移 2008 Enterprise 集群中的 1 个实例和 2104 Standard 集群中的 1 个实例。
于是,老板问了我两个问题:
我的回答是:“这取决于......”现在我必须通过监控接下来的几周来提供确凿的事实。伟大的!(小心讽刺)
我对第一个问题的处理方法:
我计划使用 perfmon.exe 进行监控
问题是,这些数据从哪里获取呢?从节点?来自 SQL Server?
在第一种情况下,它应该很简单:第一个实例 -为了简单起见vsql2008ent-1\instanceX - 当前正在节点上运行,我们将其命名为节点sql2008NodeA。正常情况下,该节点上不应运行任何其他实例或服务器。所以我从哪里获取数据并不重要,不是吗?如果发生灾难,其他实例也将在此节点上运行。但我们希望有一个正常运行的基线。
第二个实例 - vsql2014stan-1\instanceY - 与其他 2 个实例共享其节点 - sql2014NodeA。在这种情况下,我永远无法确定实例真正需要多少核心才能平稳运行,对吧?这样我就可以监控实例了。但结果意味着什么呢?它仅显示该实例实际使用的CPU资源。但如果有可用的内核,是否会使用更多内核?那么上述问题的答案是什么呢?
内存是另一个问题。由于过去发生过几次灾难,当所有实例都落在同一节点上时,我为每个实例设置了最大服务器内存的上限。此限制取决于节点的可用内存(当前分别为 100GB 或 120GB)。那么如何监控呢?如果所有内存都用完,一切似乎都清楚了:内存不足。如果一切都变慢:内存不足。但我真正需要多少内存?
我尝试总结一下我的问题:
我正在尝试使用 Solomon Rutzky 在其后程序集部署中提供的指导来添加“System.Messaging.dll”,并使用非对称密钥使用 UNSAFE 或 EXTERNAL_ACCESS 权限,但我在第一个障碍上失败了。
脚本的第一部分是从程序集创建证书;
CREATE CERTIFICATE [MS.NETcer] FROM EXECUTABLE FILE = 'C:\Windows\Microsoft.NET\Framework\v2.0.50727\System.Messaging.dll';
GO
Run Code Online (Sandbox Code Playgroud)
但是,当我执行此操作时,我收到错误;
Msg 15208, Level 16, State 1, Line 1
The certificate, asymmetric key, or private key file does not exist or has invalid format.
Run Code Online (Sandbox Code Playgroud)
我用来执行命令的帐户具有“sysadmin”服务器角色。这是在 SQL Server 2008 实例上。
请问有人对为什么失败有任何想法吗?
---------- 更新 1 -----------
我采纳了所罗门的建议并修改了我的脚本,使其看起来像这样;
CREATE ASYMMETRIC KEY [Key.System.Messaging] FROM EXECUTABLE FILE = 'C:\Windows\Microsoft.NET\Framework\v2.0.50727\System.Messaging.dll';
GO
CREATE LOGIN [CLR.Login.System.Messaging] FROM ASYMMETRIC KEY [Key.System.Messaging];
GO
GRANT UNSAFE ASSEMBLY TO [CLR.Login.System.Messaging];
GO
Run Code Online (Sandbox Code Playgroud)
到目前为止一切都很好。我现在运行 …
我有一个dbo.Groups定义如下的表:
CREATE TABLE dbo.Groups
(
GroupID int NOT NULL IDENTITY (1,1) PRIMARY KEY
);
Run Code Online (Sandbox Code Playgroud)
该表实际上只包含一IDENTITY列。
有时我想一次插入多行并获取生成的 ID。(我已经有一个预定义的表变量,@output其中包含ID要在OUTPUT子句中使用的单个列。)
现在我知道如果它是单行我将如何进行:
INSERT INTO
dbo.GroupID
OUTPUT
inserted.GroupID INTO @output (ID)
DEFAULT VALUES
;
Run Code Online (Sandbox Code Playgroud)
但我希望能够一次性插入两个或更多。实际数量由此查询返回的行数决定:
SELECT
*
FROM
dbo.MySource
;
Run Code Online (Sandbox Code Playgroud)
因此,如果查询返回一行,我想插入一行dbo.Groups并返回生成的GroupID. 如果它是一百行,那么我希望插入一百行并同时生成和返回一百个 ID。
一种明显的方法是在循环中一次插入一行。我想避免这种情况,而是使用基于集合的方法,类似于
INSERT INTO
dbo.GroupID
OUTPUT
inserted.GroupID INTO @output (ID)
SELECT
... -- what?
FROM
dbo.MySource
;
Run Code Online (Sandbox Code Playgroud)
有没有办法IDENTITY在(最好)单个语句中只用一列将多行插入到表中?
sql-server-2008 ×10
sql-server ×8
backup ×1
etl ×1
identity ×1
insert ×1
monitoring ×1
odbc ×1
partitioning ×1
recovery ×1
signature ×1
sql-clr ×1
windows ×1