问题陈述: 我们的支持工程师需要从客户那里获取数据库备份。目前,我们的数据库包含在一个 Primary/.mdf 文件组/文件中。这些数据库多年来一直在收集历史数据,并且越来越大。我们的工程师需要几天时间才能将备份复制到我们的办公室。
似乎没有任何规定/想法来管理数据库的增长。
最“有价值”的数据是我们系统的“配置”。它包含在大约 50 个表中,我们正在考虑将这些表移至与历史数据(将放置在数据文件组中)分开的新配置文件组,以尝试为部分或文件备份设置阶段。
但我不确定我需要哪种备份/恢复策略来完成这个 - 部分备份或文件备份?
出于研发目的,我有一个名为FilegroupDemo使用SIMPLE恢复模型的数据库。FilegroupDemo包含 3 个文件组:
配置文件组中的数据不会经常更改,并且可能会被标记为只读(如果有帮助),而数据文件组中的数据每分钟更改一次。
我希望能够灵活地仅备份/恢复主文件组和配置文件组/文件。
在SQL Server Partial Backups的 BOL 文章中,它指出:
部分备份类似于完整数据库备份,但部分备份不包含所有文件组。相反,对于读写数据库,部分备份包含主文件组、每个读写文件组以及一个或多个只读文件(可选)中的数据。
这种读取方式让我认为部分备份旨在省略只读文件组,最有可能用于不会更改并标记为只读的大量数据。这些不需要每次都备份。
1. 我说存在部分备份是为了备份所有文件组(除了标记为只读的文件组)是否正确?换句话说,如果我不使用只读文件组,那么使用部分备份就没有意义了——对吗?而且我认为我不能使用部分备份来备份只读文件组?
因此,我不认为部分备份是我所需要的。我相当天真地尝试了文件备份/恢复。我将数据库切换到FULL恢复模式并运行:
BACKUP DATABASE FilegroupDemo FILEGROUP = N'PRIMARY'
TO DISK = N'C:\Backups\FilegroupDemo_FG_Primary.bak'
WITH INIT
GO
BACKUP DATABASE FilegroupDemo FILEGROUP = N'Configuration'
TO DISK = N'C:\Backups\FilegroupDemo_FG_Configuration.bak'
WITH INIT
GO
BACKUP DATABASE FilegroupDemo FILEGROUP …Run Code Online (Sandbox Code Playgroud) 我正在使用 C#,实体框架。用于开发 SQL Server。我有一个方法,它有两个参数 ( int ID, List<String> _listobj)。对于每个 ID,都有一个 obj 列表。所有这些 ID 和列表都将插入到数据库中的不同表中。所以问题是:最好的做法是什么?我有几个选择:
在 C# 中,拆分list<obj>为单个值,然后创建一个带有两个参数 ( ID, str)的存储过程,然后 C# 将根据列表的大小多次调用存储过程
将ID和list<obj>作为两个参数传递给存储过程,并让存储过程拆分list<obj>. 这样C#只会调用一次存储过程
第二种策略可行吗?如果是,哪个在性能方面更好?
sql-server-2008 sql-server stored-procedures entity-framework c#
在 Windows 7 中,"English_United States.1252"当我在安装程序中选择“英语,美国”区域设置时,排序规则设置为。在 Linux 中,排序规则"en_US.UTF-8"默认设置为。
我还没有找到任何方法在 Windows 中将排序规则的代码集设置为 UTF-8,所以我只是想知道在这些示例情况下数据库的行为是否会有所不同?或者一般来说,排序规则的代码集部分的影响是什么?
我在两个数据库中都将编码设置为 UTF-8,问题是排序规则代码集的差异是否会导致行为差异。
我有一种情况,虽然我能够解决它(如重现所示),但我不明白。以下是重点
EXEC(@sql)访问 ChainingDestination 中的表execute as子句定义的execute as条款,我会得到同样的错误。execute as条款,一切都很好。这是我感到困惑的倒数第二点。或者,具体地,为什么一个不工作,最后一个呢。
/******************************
Setup
******************************/
USE [master];
go
IF EXISTS (SELECT 1 FROM [sys].[databases] WHERE [name] = 'ChainingSource')
BEGIN
ALTER DATABASE [ChainingSource] SET OFFLINE WITH ROLLBACK IMMEDIATE;
ALTER DATABASE [ChainingSource] SET ONLINE;
DROP DATABASE [ChainingSource];
END
IF EXISTS (SELECT 1 FROM [sys].[databases] WHERE [name] = 'ChainingDestination')
BEGIN
ALTER DATABASE [ChainingDestination] SET OFFLINE WITH …Run Code Online (Sandbox Code Playgroud) 如果我在 SQL Server 中有一个证书,用于备份:
让这些证书过期有什么意义?(除了让我暴露于由于过期的证书而导致备份失败......)
我一直在四处挖掘,但没有任何运气。
SQL Server 2008:是否可以在不重建整个表的情况下调整特定聚集索引/表的填充因子?
例如,如果它有 4 亿条记录,我们是否可以调整填充因子并让 SQL Server 在所有尚未超过该限制的页面(以及新拆分)上使用新的填充因子,然后调整已超出该限制的页面?索引维护期间超限?
是否可以预先定义在下一次索引维护期间应该构建索引的填充因子?
sql-server-2008 sql-server clustered-index fill-factor index-maintenance
在我的项目中,我们SQL_1xCompat_CP850_CI_AS用作 SQL Server 实例和应用程序数据库的排序规则设置。据我所知,这是出于向后兼容性目的仍然支持的非常旧的排序规则之一。我想知道使用这种“旧”归类类型是否会影响 SQL Server 的整体性能?
另外,SQL_1xCompat_CP850_CI_AS和SQL_Latin1_General_Pref_Cp850_CI_AS整理有什么区别吗?MSDN 上的描述看起来非常相似:
两者都CI_AS_KI_WI使用代码页 850,并且具有相同的排序顺序名称nocase34.850。如果我们将整理设置更改为 ,我们会有什么好处SQL_Latin1_General_Pref_Cp850_CI_AS吗?
我正在尝试使用 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)
到目前为止一切都很好。我现在运行 …
考虑这个表:
create table Books
(
Id bigint not null primary key identity(1, 1),
UniqueToken varchar(100) not null,
[Text] nvarchar(max) not null
)
Run Code Online (Sandbox Code Playgroud)
假设这张表中有超过 100,000 本书。
现在我们有 10,000 本书数据要插入到这个表中,其中一些是重复的。所以我们需要先过滤重复,然后再插入新书。
检查重复项的一种方法是这样的:
select UniqueToken
from Books
where UniqueToken in
(
'first unique token',
'second unique token'
-- 10,000 items here
)
Run Code Online (Sandbox Code Playgroud)
Text列的存在是否会影响此查询的性能?如果是这样,我们如何优化它?
PS 我有相同的结构,对于其他一些数据。而且它的表现并不好。一个朋友告诉我,我应该把我的桌子分成两张桌子,如下所示:
create table BookUniqueTokens
(
Id bigint not null primary key identity(1, 1),
UniqueToken varchar(100)
)
create table Books
(
Id bigint not null primary key,
[Text] nvarchar(max)
) …Run Code Online (Sandbox Code Playgroud) 我们的 SQL Server 的排序规则设置为SQL_Latin1_General_CP1_CI_AS
我有一个要求,即我们在不同的情况下具有相同的值,但 SQL Server 会以相同的方式对待它们,因为我们的排序规则在服务器级别设置为不区分大小写。我的要求是,我需要根据一个特定查询的大小写敏感性将每个值视为不同的。我COLLATE SQL_Latin1_General_CP1_CS_AS在WHERE子句中使用来强制区分大小写。我的问题是:此排序规则是否仅应用于此查询,还是最终会在列或表级别为使用此列的所有查询更改此设置?
Create Table #tmpTest
(
id int primary key identity(1,1),
name varchar(100)
)
Insert Into #tmpTest values ('TestQuery'),('TESTQUERY'),('TEstquerY')
Select * from #tmpTest
Where name = 'TestQuery'
Select * from #tmpTest
Where name = 'TestQuery'
Collate SQL_Latin1_General_CP1_CS_AS
Run Code Online (Sandbox Code Playgroud) sql-server ×9
collation ×3
backup ×2
certificate ×2
performance ×2
signature ×2
t-sql ×2
c# ×1
datatypes ×1
etl ×1
fill-factor ×1
postgresql ×1
query ×1
restore ×1
security ×1
sql-clr ×1